festifun/plan/status/deploy.md
m3ultra 931cf81a6c Deploy-ready: path-prefix hosting (digalot.fyi/festifun) + deploy artifacts
Frontend: API_BASE env-driven (VITE_API_BASE, default localhost:8000 so dev is
unchanged); vite.config.js base from FESTIVAL4D_BASE. Prod build
'FESTIVAL4D_BASE=/festifun/ VITE_API_BASE=/festifun' serves same-origin under
the prefix. Validated end-to-end via a local proxy mirroring the nginx config:
app boots, media Range 206, 3D + overlays + timeline render under /festifun.

deploy/: nginx location blocks (prefix strip + Range), systemd unit
(uvicorn 127.0.0.1:8000, no keys on the public box), DEPLOY.md. Labels baked
into the shipped DB locally so detect can't spend credits from an anonymous
public endpoint. Backend suite 103 passed; default build unchanged.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-16 13:20:36 +10:00

39 lines
2.6 KiB
Markdown

# Status — deploy (digalot.fyi/festifun)
## Round 1 — 2026-07-16 — STATUS: app deploy-ready; BLOCKED on server access
**Ask:** host the app live at `digalot.fyi/festifun` on `dealgod@100.94.195.115` (tailscale).
**Owner decision:** fully open (all features public + unauthenticated). Risk flagged + accepted.
### Done — the app is now deployable behind a path prefix
- **Frontend deploy-ready.** `API_BASE` is env-driven (`VITE_API_BASE`, default `localhost:8000`
so dev is unchanged); added `vite.config.js` with `base` from `FESTIVAL4D_BASE`. A prod build
`FESTIVAL4D_BASE=/festifun/ VITE_API_BASE=/festifun npm run build` emits assets under
`/festifun/` with the API base baked as `/festifun` (localhost:8000 absent from the bundle).
- **Validated end-to-end locally.** Built the prod bundle, ran a Python reverse proxy mirroring
the nginx config (static + prefix-stripping `/festifun/api` & `/festifun/media` with Range),
loaded it in a browser: **app boots, manifest/pointcloud proxy OK, media Range = 206, videos
play, 3D scene + overlays + timeline all render under the `/festifun` prefix.**
- **Deploy artifacts written** in `deploy/`: `festifun.nginx.conf` (location blocks, prefix
strip, Range), `festifun-api.service` (uvicorn on 127.0.0.1:8000, localhost-only, no keys),
`DEPLOY.md` (build → rsync → service → nginx, plus Caddy note).
- Default build unchanged (root asset paths); backend suite still **103 passed**.
### Deliberate deploy choice — keys OFF the public box
`POST /api/events/detect` spends real AI credits. Rather than expose that on an unauthenticated
public endpoint, moment labels are baked into the shipped DB by running `events` locally before
deploy; the server carries no `GEMINI_API_KEY`/OpenRouter creds and `detect` degrades to
candidate-only (no spend). Owner can opt into live classification, but that needs nginx
rate-limiting first (documented in DEPLOY.md).
### BLOCKED — cannot finish without server access
- My SSH key is **not authorized** on `dealgod@100.94.195.115` (rejected directly and via the
johnking box — both `Permission denied (publickey)`). Need the key added to that host's
`~/.ssh/authorized_keys`:
`ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPL3EE4wE6nv0V0BNMbJ0Gl+px3wOM8K+V6LvCJZa7PM monsterrobotparty@gmail.com`
- Also need to know the server's web stack (nginx vs caddy, where digalot.fyi's server block
lives). Recon command in the chat; I'll adapt the config once I can see it.
**Next (once access granted):** recon the web stack → adapt `deploy/festifun.nginx.conf` (or write
the Caddy equivalent) → build+rsync+service+reload per DEPLOY.md → verify `https://digalot.fyi/festifun/`.