From 43d98cffd0bb6504fca08b7089aaf67c10c65258 Mon Sep 17 00:00:00 2001 From: Laurence Date: Mon, 6 Jul 2026 11:26:10 +0100 Subject: [PATCH] docs: rendered Nightjar infrastructure & cost report (HTML) Add docs/infrastructure-report.html - a standalone, self-contained HTML render of the infrastructure and cost plan, a presentation-friendly companion to docs/infrastructure.md. Contents: cover + summary, the self-host topology on the MS-02 cluster (Node A GPU AI worker, Node B app/API/Postgres/Redis, Node C MinIO storage/HA) fronted by a Cloudflare Tunnel (no open ports, no static IP), Hetzner cloud fallback, and a cost table (source/CI/docs already hosted at zero marginal cost). Reflects the 2026-07-05 "self-host on the MS-02 cluster" decision (state/DECISIONS.md). Inline CSS only, no external assets, GPL-3.0-only per the code licence. No infrastructure was provisioned; this is a plan/inventory document. --- docs/infrastructure-report.html | 400 ++++++++++++++++++++++++++++++++ 1 file changed, 400 insertions(+) create mode 100644 docs/infrastructure-report.html diff --git a/docs/infrastructure-report.html b/docs/infrastructure-report.html new file mode 100644 index 0000000..f5aabbc --- /dev/null +++ b/docs/infrastructure-report.html @@ -0,0 +1,400 @@ + + + + + + +Nightjar - Infrastructure & Cost Report + + + + +
+ +

12 Hobbies Studio  /  Nightjar

+

Infrastructure & Cost Report

+

Hosting the open-source project and the commercial service. Designed to start + on hardware you already own, at effectively zero cloud spend, and grow only when paying + users justify it.

+
+ PREPARED 2026-07-03 + SCOPE OSS + COMMERCIAL + STATUS PROPOSAL +
+
+ +
+ +
+

Bottom line. You do not need to spend anything on cloud + to launch. Phase 0 runs entirely on your Proxmox / MS-02 cluster - app, + database, object storage and the GPU transcription worker - reachable from the public internet + through a free Cloudflare Tunnel. Your only cost is electricity, roughly + £6-£18/month. Hetzner does not enter the picture until you have real + users and want uptime that does not depend on your home connection - and even then the first + step is about €13 (≈£11)/month.

+
+ +

01The three phases at a glance

+

Start really small. Each phase is a deliberate, reversible step - you only move up when the previous one hurts.

+ +
+
+ Phase 0 - now +

All on your Proxmox

+
£6-18 /mo
+
electricity only
+
    +
  • MS-02 cluster runs everything
  • +
  • Cloudflare Tunnel = free public URL
  • +
  • GPU node does transcription
  • +
  • Great for OSS demo + private beta
  • +
+
+
+ Phase 1 - first users +

Proxmox + durable storage

+
≈£11 /mo
+
+ electricity + AI usage
+
    +
  • Compute stays on Proxmox
  • +
  • Customer audio -> Hetzner Object Storage (off-site backup)
  • +
  • Commercial AI billed per minute
  • +
  • Still no always-on cloud server
  • +
+
+
+ Phase 2 - paying scale +

Hybrid: cloud edge + home GPU

+
≈£22-35 /mo
+
+ AI usage, scales with revenue
+
    +
  • Always-on app node on Hetzner (uptime independent of home)
  • +
  • Private-tier GPU jobs still on MS-02
  • +
  • Object storage + managed backups
  • +
  • Add workers as load grows
  • +
+
+
+ +
+ + + + + + + 0 + Launch + Proxmox only + £6-18/mo + + + + 1 + First users + + off-site storage + ≈£11/mo + + + + 2 + Paying scale + cloud edge + home GPU + ≈£22-35/mo + + grows with revenue → + +

Figure 1 - You are here at Phase 0. Movement rightward is optional and demand-driven.

+
+ +

02Phase 0 - everything on Proxmox (recommended start)

+

One MS-02 node under Proxmox hosts the whole stack. The public reaches it through a Cloudflare +Tunnel, so there are no open ports and no static IP needed. This is enough to run the open-source +demo and onboard your first private beta testers.

+ +
+ + + + + + + + + Users + web app + device + + + + Cloudflare + Tunnel + DNS + TLS + FREE + + + + MS-02 - Proxmox host (your hardware) + at home / office + + + + App VM / LXC + FastAPI + web UI + Postgres + Redis + 2 vCPU / 4 GB + + + + Object storage + MinIO (S3 compatible) + audio + transcripts + on local disk + + + + GPU worker VM — RTX 3050 6GB (passthrough) + faster-whisper transcription · local LLM summaries (Ollama) + this is your "Private tier" - data never leaves your hardware + Hetzner has no GPU - this is why home GPU matters + + + + Optional: commercial AI (Groq / OpenAI / Anthropic) + for the "Cloud" tiers - pay per minute, no local GPU load + + + + + + + +

Figure 2 - Phase 0. One Proxmox host carries the app, database, storage and GPU worker. +Public access is via a free Cloudflare Tunnel - no ports opened, no fixed IP.

+
+ +

What it costs

+ + + + + + + + + + +
ItemDetail£/month
Compute + storage + GPURuns on MS-02 you already own0
Public accessCloudflare Tunnel + DNS + TLS (free tier)0
Source, CI, docsForgejo + marketing site already hosted0
Electricity - light use1 node ≈ 30 W avg @ £0.27/kWh~6
Electricity - GPU busynode + GPU under transcription load~12-18
Totalno cloud spend at all6-18
+

Commercial AI (if you offer the Cloud tiers) is billed per minute of audio and passed +through to the customer - it is a cost of goods, not fixed overhead. Groq transcription, for +example, is a fraction of a penny per minute.

+ +

03Phase 1 - add off-site durability

+

The moment real people trust you with recordings, a single home disk is no longer good +enough. The smallest responsible step is to replicate customer audio to Hetzner Object +Storage (S3-compatible, EU region for UK/GDPR). Everything else stays on Proxmox.

+ + + + + + + + +
ItemDetail€/mo≈£/mo
Hetzner Object StorageS3 bucket, EU, ~250 GB + egress~5~4.30
Compute / GPU / DBstill on Proxmox00
Electricityas Phase 0-6-18
New cloud spendoff-site backup of customer data~5~4-5
+

Cloudflare Tunnel still fronts the app - no always-on cloud server yet. If your home +connection drops, the service is down; that is acceptable for an early beta and is exactly what +Phase 2 fixes.

+ +

04Phase 2 - hybrid, when uptime matters

+

Once people pay, "down because my broadband blipped" is no longer OK. Move only the +always-on, lightweight parts to Hetzner - the app, database and queue - and keep the heavy +GPU work on your MS-02. Hetzner has no GPU, so the home cluster remains the Private-tier engine.

+ +
+ + + + + + + + + Users + + devices + + + + Hetzner Cloud - EU (Germany) + + + App node - cax21 (ARM) + FastAPI + Postgres + Redis + billing + 4 vCPU / 8 GB - always on + €12.59 / mo + + + Object Storage (S3, EU) + customer audio + backups + ~€5 / mo + usage + + + Cloud tiers -> commercial AI API + Groq / OpenAI / Anthropic, per minute + + + + MS-02 - Proxmox (your hardware) + + Private-tier GPU worker + RTX 3050 - whisper + local LLM + self-hosted, private data + owned (electricity only) + joined to app node over + WireGuard / Tailscale mesh + + + + + +

Figure 3 - Phase 2. Cheap always-on ARM app node in Hetzner; heavy GPU work stays +home over an encrypted mesh. Cloud stays small; the expensive silicon is hardware you own.

+
+ + + + + + + + + + +
ItemSpec€/mo≈£/mo
App nodecax21 ARM - 4 vCPU / 8 GB / 80 GB12.59~10.70
Object storageS3, EU, + usage~5~4.30
Mesh to home GPUTailscale free / self-hosted WireGuard00
Electricity (GPU)MS-02 GPU node at home-6-18
Total+ per-minute AI for Cloud tiers~18~22-35
+ +

05Hetzner options, for reference

+

Real pricing pulled from your account catalogue (EU region, gross EUR incl. VAT). You do +not need any of these for Phase 0 - this is the menu for later. ARM (CAX) is the best value +and runs the whole stack.

+ + + + + + + + + + +
TypevCPU / RAM / diskGood for€/mo≈£/mo
cax11 ARM2 / 4 GB / 40 GBOSS demo box7.196.10
cax21 ARM4 / 8 GB / 80 GBapp node (recommended)12.5910.70
cax31 ARM8 / 16 GB / 160 GBapp + workers at scale25.1921.40
cx23 x862 / 4 GB / 40 GBcompatibility fallback6.595.60
cpx31 x864 / 8 GB / 160 GBCPU-bound workers20.9917.85
ccx13 dedicated2 / 8 GBguaranteed CPU51.5943.85
+

Important: Hetzner Cloud has no GPU instances. Any +self-hosted-model (Private tier) work must run on your MS-02, or on Hetzner's separate dedicated +GPU servers (~€200+/mo) - which is exactly why keeping the GPU at home is the smart, cheap play.

+ +

06What you already have

+
+
+

Your Hetzner account

+
    +
  • howler - cx33 (4/8/80): ApisCP host running the Nightjar marketing site. Leave it be.
  • +
  • detritus - cx21 (2/4/40): utility box. Could host the OSS demo if free.
  • +
  • Internal network, 6 spare IPs, firewalls, SSH keys - ready when needed.
  • +
+
+
+

Your hardware

+
    +
  • 3x Minisforum MS-02 under Proxmox - the primary platform for Phases 0-1.
  • +
  • One node has an RTX 3050 6 GB - the Private-tier GPU engine.
  • +
  • Plenty for demo + early beta; the GPU handles self-hosted transcription and summaries.
  • +
+
+
+ +
+

07Recommendation

+

Do nothing in the cloud yet. Stand up Phase 0 on one MS-02 node under Proxmox: + an app VM (FastAPI + Postgres + Redis), a MinIO bucket for audio, and a GPU worker VM with the + RTX 3050 passed through. Publish it through a free Cloudflare Tunnel at + app.nightjar.12hobbies.studio. Total new spend: £0, plus a few + pounds of electricity.

+

Only when you have people relying on it do you add Hetzner Object Storage + (Phase 1, ~£4-5/mo) for off-site durability, and only when uptime becomes a promise do you + add the €12.59/mo ARM app node (Phase 2). The expensive part - the GPU - + never moves to the cloud, because you already own it and Hetzner cannot beat free.

+

Next step I can take: draft the Proxmox build kit - + a docker-compose.yml for the app + MinIO stack, the Cloudflare Tunnel config, and a + short runbook to bring Phase 0 up on one MS-02. Say the word.

+
+ +

Nightjar / 12 Hobbies Studio - infrastructure proposal, 2026-07-03. Figures are +indicative: Hetzner prices are gross EUR from the live catalogue; £ conversions at +≈€1 = £0.85; electricity at £0.27/kWh. Read-only Hetzner token used for +inventory only; no resources were provisioned. Rotate the token when convenient.

+ +
+ + -- 2.49.1