openscribe/site/README.md
Laurence 8fd9b694f8
Some checks failed
ci / firmware (pull_request) Failing after 31s
ci / openapi (pull_request) Failing after 33s
ci / emulator (pull_request) Failing after 24s
ci / server (pull_request) Failing after 37s
docs+site: Nightjar brand, hosted service, infrastructure plan, saved site
Persists the branding/commercial/infrastructure work (previously only in chat and
on the live site) into version control.

What changed:
- docs/naming.md: due-diligence and the decision to brand the product Nightjar
  (OpenScribe domain/GitHub/trademark collisions; alternatives screened; why Nightjar).
- docs/hosted-service.md: the commercial model - plan tiers (Self-host / Cloud
  Starter / Cloud Pro / Private), indicative pricing, backend mapping, and the
  build-to-sell roadmap (metering, billing, provisioning, DPA).
- docs/infrastructure.md: backend infra plan. Primary option = self-host on the
  3x Minisforum MS-02 cluster (one with an RTX 3050 6GB) fronted by a Cloudflare
  Tunnel, with node roles, the 3050 capacity reality, caveats, and a Hetzner cloud
  fallback. Provision-later.
- site/: reproducible marketing-site source - block content for all 11 pages
  (rebranded to Nightjar), the navigation, the Contact Form 7 config (honeypot),
  the ApisCP SOAP helper (tools/apiscp.php, no secret), and a README on how the
  WordPress site is built and managed via the API.
- state/: DECISIONS (Nightjar rebrand, hosted service, MS-02 backend), PROJECT
  (brand + commercial section), TODO (rename decision, trademark, mailbox, pricing,
  hosted-service build, infra provisioning).

Why:
- User asked to save everything to the repo. Captures the product rebrand, the
  commercialisation plan, and the infrastructure decision so a cold session has the
  full picture.

Notes:
- The repo is still named `openscribe`; the product/brand is Nightjar. A full
  codebase rename is deferred (tracked in TODO + docs/naming.md).
- No secrets committed: the ApisCP API key is read from a local scratch file, never
  the repo.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-05 22:24:24 +01:00

2.7 KiB

Nightjar marketing site

The content and tooling for the public marketing site at https://nightjar.12hobbies.studio (the commercial front for the project; see ../docs/hosted-service.md).

The live site is WordPress on ApisCP (howler.qsplace.co.uk, EU/Hetzner), on the 12hobbies account as a subdomain. This directory is the reproducible source: the page content, navigation, contact-form config, and the tooling used to push it all through the ApisCP API.

Layout

pages/                Block-editor content for each page (one file per page)
  home.html             front page (landing)
  how-it-works.html     workflow + architecture diagrams (inline SVG) + detailed steps
  bring-your-own-ai.html
  guides.html           hub linking the three tutorials
  connect-your-ai.html  tutorial: per-provider .env config
  self-host-the-server.html  tutorial: install -> configure -> run
  build-the-device.html tutorial: parts, flashing, case (+ device illustration)
  open-source.html  hosted-plans.html  about.html  contact.html
  _navigation.html      the header navigation (wp_navigation block content)
cf7-form-config.php   Contact Form 7 form template + mail config (honeypot spam protection)
tools/apiscp.php      SOAP helper that drives ApisCP / wp-cli remotely (see below)

Images are inline SVG inside Custom HTML blocks (no uploads, no SVG-upload security concerns; the device illustration has an animated status light).

How the site is managed

WordPress is driven remotely through the ApisCP SOAP API via tools/apiscp.php, which exposes wordpress_cli (wp-cli) and file operations. Page content is pushed to a temp file on the server and applied with wp post update <id> <file> (avoids command-length and quoting limits). Example:

php -d extension=openssl -d extension=soap tools/apiscp.php \
  file_put_file_contents /var/www/<docroot>/.tmp.html '@@pages/home.html' true false
php -d extension=openssl -d extension=soap tools/apiscp.php \
  wordpress_cli 'post update <id> /var/www/<docroot>/.tmp.html' '[]' nightjar.12hobbies.studio ''

Secrets

tools/apiscp.php reads the ApisCP API key from a local scratch file (C:/temp/claudetemp/apiscp.key) that is never committed. Supply the key out-of-band and keep it out of the repo. The .gitignore already excludes secrets.

Site facts

  • Comments are disabled site-wide (Disable Comments plugin + closed defaults).
  • The contact form is Contact Form 7 with a hidden honeypot field for spam protection; every submission is also stored in the database via Flamingo.
  • TLS is Let's Encrypt (valid cert for nightjar.12hobbies.studio). The old openscribe.12hobbies.studio host redirects here.