Every external account Immersive depends on, what it costs, and what to watch.
Compiled 2026-07-24 from the codebase, deploy config, and infrastructure work; amounts
marked verify need Sean to confirm against the actual invoices/console. Keep this
current: any PR that adds an external service must add a row here (and the reverse when
one is removed).
Paid — fixed recurring
Service
Purpose
Plan
Est. cost
Notes
Hetzner Cloud
Production VM immersive-prod-01 (app + Postgres + Redis, see ../technical/production/kamal.md)
CPX-class 4 vCPU / 8 GB
~€14/mo (verify)
Snapshots bill extra per GB; check the console for snapshot retention
Namecheap
Domain registration immersive-app.com
—
~$13/yr (verify)
Registrar only since 2026-07-23; DNS lives at Cloudflare
Namecheap Private Email
Human mail + catch-all → bonjour@
paid mailbox
~$15–25/yr (verify)
Independent of the DNS move
Anthropic Claude
Claude Code (dev automation, GitHub Actions via CLAUDE_CODE_OAUTH_TOKEN, cloud sessions)
Pro/Max subscription
per plan (verify)
Deliberately no Anthropic API key (#470 item 2 dropped)
GitHub Copilot
Automated PR review
individual (verify)
~$10/mo (verify)
The Copilot PR reviewer; confirm which plan is active
Apple Developer Program
iOS distribution — TestFlight/App Store (#466)
individual
$99/yr
Enrolled 2026-07 (#470 item 6); app record com.immersiveapp.immersive in App Store Connect
Paid — usage-based (the ones that can surprise)
Service
Purpose
Pricing driver
Recent reference point
Notes
OpenAI
All LLM features via RubyLLM (openai.api_key in credentials)
tokens
KB ingest, coach, corrections, verb generation
Sole LLM backend after the #499 consolidation
AWS – Translate
Reader glosses, frequency-deck imports
per character
15k calls ≈ 150k chars ≈ $2.26 (#489 generation)
Biggest spike risk: new frequency-deck language pairs (~5k calls/pair)
AWS – Polly
All pronunciation/read-aloud audio
per character
generate-on-demand, cached in S3
Neural voices bill higher than standard
AWS – S3
Active Storage (audio, uploads, DB backups)
GB stored + requests
—
Backup retention pruning is automated (backup.rake)
ElevenLabs
Premium TTS (#415/#418 — not yet wired into the app)
characters/mo by tier
—
Action open: dev API key reports free-tier despite the paid-plan tick on old #470 — verify which account the key came from before #415’s premium path ships
Free tier (watch the limits)
Service
Purpose
Free-tier boundary
Notes
Cloudflare
DNS, proxy/CDN, WAF managed rules, Zero Trust Access, Pages (handbook)
Access ≤ 50 users; Pages 500 builds/mo
One account carries the whole edge + the handbook hosting
SMTP creds in credentials; DNS records documented in ../technical/production/dns.md
Upcoming / decided but not yet paid
Service
Trigger
Cost
ElevenLabs paid tier
#415 premium audio path
from ~$5/mo (Starter) — sized after the voice-selection pass
Cost hygiene — one-time actions
Verify the ElevenLabs account/key mismatch (free-tier key vs paid-plan tick)
Confirm GitHub Copilot plan and price
Close the Better Stack account if it still exists (replaced by Sentry during #288)
Close the Langfuse account if one exists (integration removed in PR #526); prune langfuse.* keys at next credentials:edit
Note the Hetzner snapshot retention and its monthly cost
Record actual amounts for every (verify) above after the next billing cycle
Where credentials live
API keys sit in Rails encrypted credentials (bin/rails credentials:edit --environment ...);
deploy-time secrets in GitHub Actions secrets and the local .env (see
../technical/production/kamal.md). No service above bills through anything other than
Sean’s own cards — there is no consolidated billing provider.