Hosted .tech domain — operator runbook
Judges open a URL only. Developers still may use local Compose.
Production domain: truelockfa.tech / api.truelockfa.tech
(Registrar: Tech Domains — DNS is case-insensitive; use lowercase in URLs.)
1. Domain
- Register or use an existing
*.techname at your registrar. - Keep DNS management at the registrar (or Cloudflare) ready for Vercel + Render records.
2. Backend + Postgres (Render)
Blueprint: render.yaml at repo root.
- Connect the GitHub repo in Render → apply blueprint.
- Set secret env on the API service (Dashboard → Environment):
GEMINI_API_KEYorGEMINI_KEY_A…DFRONTEND_ORIGIN=https://truelockfa.tech(API also allowshttps://www.truelockfa.tech)HARD_BUDGET_STOP_USD(optional)
- Container start runs migrate + seed then uvicorn on
$PORT(scripts/render_start.sh). - Note the onrender.com hostname; you will CNAME
apito it.
3. Frontend (Vercel)
Config: vercel.json.
- Import the repo; set Root Directory to
frontendor use the install/build commands invercel.jsonfrom the monorepo root. - Environment:
NEXT_PUBLIC_API_URL=https://api.truelockfa.techNEXT_PUBLIC_SITE_URL=https://truelockfa.tech
- Build runs
npm run sync-docsviaprebuildso markdown is embedded. - Attach the
.techdomain in Vercel → Domains (apex +www).
4. DNS records
| Name | Type | Value |
|---|---|---|
@ | A / ALIAS | Vercel apex target |
www | CNAME | cname.vercel-dns.com (or Vercel guidance) |
api | CNAME | <service>.onrender.com |
Wait for TLS certificates to become Active.
5. Smoke (from a second device)
https://truelockfa.tech/docs— 5-minute pathhttps://api.truelockfa.tech/healthand/ready- Open auditor
/, start investigation, optional inject-fraud - Confirm CORS: browser console has no blocked origin errors
6. Docs pack refresh
After the hostname is final:
cd frontend && npm run sync-docs
# challenge README / INDEX already point at truelockfa.tech
# regenerate dist/docs-pack zip for offline judges
Never put Gemini keys or production DATABASE_URL in the zip.