# 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 ` (avoids command-length and quoting limits). Example: ``` php -d extension=openssl -d extension=soap tools/apiscp.php \ file_put_file_contents /var/www//.tmp.html '@@pages/home.html' true false php -d extension=openssl -d extension=soap tools/apiscp.php \ wordpress_cli 'post update /var/www//.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.