openscribe/site/pages/build-the-device.html
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

26 lines
4.4 KiB
HTML

<!-- wp:heading {"level":1} --><h1 class="wp-block-heading">Build the device</h1><!-- /wp:heading --><!-- wp:paragraph {"fontSize":"large"} --><p class="has-large-font-size">The Nightjar recorder is built from off-the-shelf parts and a printed case. No custom circuit board required. Here is what goes into one.</p><!-- /wp:paragraph -->
<!-- wp:html -->
<figure style="margin:0 auto 8px;max-width:280px">
<svg viewBox="0 0 240 300" width="100%" role="img" aria-label="Nightjar recorder illustration" xmlns="http://www.w3.org/2000/svg" style="font-family:ui-monospace,monospace">
<defs>
<linearGradient id="bd" x1="0" y1="0" x2="1" y2="1"><stop offset="0" stop-color="#3f3f46"/><stop offset="1" stop-color="#18181b"/></linearGradient>
<radialGradient id="lg" cx="0.5" cy="0.5" r="0.5"><stop offset="0" stop-color="#5eead4"/><stop offset="1" stop-color="#5eead4" stop-opacity="0"/></radialGradient>
</defs>
<rect x="70" y="30" width="100" height="240" rx="46" fill="url(#bd)" stroke="#52525b" stroke-width="2"/>
<rect x="86" y="48" width="12" height="200" rx="6" fill="#ffffff" opacity="0.06"/>
<g fill="#71717a"><circle cx="108" cy="80" r="3.5"/><circle cx="120" cy="74" r="3.5"/><circle cx="132" cy="80" r="3.5"/><circle cx="108" cy="94" r="3.5"/><circle cx="120" cy="88" r="3.5"/><circle cx="132" cy="94" r="3.5"/></g>
<circle cx="120" cy="130" r="18" fill="url(#lg)"><animate attributeName="opacity" values="0.4;1;0.4" dur="2.6s" repeatCount="indefinite"/></circle>
<circle cx="120" cy="130" r="5" fill="#99f6e4"/>
<text x="120" y="182" text-anchor="middle" font-size="11" letter-spacing="2" fill="#a1a1aa">NIGHTJAR</text>
<circle cx="120" cy="226" r="24" fill="#0c0a09" stroke="#52525b" stroke-width="2"/>
<circle cx="120" cy="226" r="17" fill="#e08a3c"/>
</svg>
</figure>
<!-- /wp:html -->
<!-- wp:heading --><h2 class="wp-block-heading">The parts</h2><!-- /wp:heading --><!-- wp:list --><ul class="wp-block-list"><!-- wp:list-item --><li><strong>An ESP32-S3 board with PSRAM.</strong> This is the brain: it has WiFi, Bluetooth and enough memory to buffer audio. A compact board with an onboard microphone and card slot keeps the whole thing tiny.</li><!-- /wp:list-item --><!-- wp:list-item --><li><strong>A microphone.</strong> A digital I2S MEMS microphone for clean, low-noise audio.</li><!-- /wp:list-item --><!-- wp:list-item --><li><strong>A microSD card.</strong> Where recordings are written. 16 to 32 GB is plenty.</li><!-- /wp:list-item --><!-- wp:list-item --><li><strong>A small LiPo battery</strong> and a charging circuit, so it runs off the mains or on the go.</li><!-- /wp:list-item --><!-- wp:list-item --><li><strong>A button and a status light</strong> for control and feedback.</li><!-- /wp:list-item --></ul><!-- /wp:list --><!-- wp:paragraph --><p>A full bill of materials with exact parts and wiring ships with the project. Indicative cost is under thirty pounds, plus a printed case.</p><!-- /wp:paragraph -->
<!-- wp:heading --><h2 class="wp-block-heading">Step 1: Flash the firmware</h2><!-- /wp:heading --><!-- wp:paragraph --><p>The firmware is built with PlatformIO. Connect the board over USB and flash it.</p><!-- /wp:paragraph --><!-- wp:code --><pre class="wp-block-code"><code>cd nightjar/firmware
pio run -t upload
pio device monitor</code></pre><!-- /wp:code --><!-- wp:paragraph --><p>The serial monitor confirms the board booted, found its microphone and card, and is ready to record.</p><!-- /wp:paragraph -->
<!-- wp:heading --><h2 class="wp-block-heading">Step 2: Print the case</h2><!-- /wp:heading --><!-- wp:paragraph --><p>The enclosure is a parametric model you can print in a couple of hours. Because it is parametric, you can re-tune it to the exact board and battery you chose, then print the two halves and snap them together around the electronics.</p><!-- /wp:paragraph -->
<!-- wp:heading --><h2 class="wp-block-heading">Step 3: Provision and record</h2><!-- /wp:heading --><!-- wp:paragraph --><p>Open the app, connect to the device over Bluetooth, and give it your WiFi details and your server address. Press the button to record. Put it on charge, and it uploads on its own. That is the whole loop.</p><!-- /wp:paragraph -->
<!-- wp:paragraph --><p>Want the software side first? See <a href="/self-host-the-server/">self-host the server</a> and <a href="/connect-your-ai/">connect your AI</a>. Or skip the build entirely with a <a href="/hosted-plans/">hosted plan</a>.</p><!-- /wp:paragraph -->