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>
2.6 KiB
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_BASEis env-driven (VITE_API_BASE, defaultlocalhost:8000so dev is unchanged); addedvite.config.jswithbasefromFESTIVAL4D_BASE. A prod buildFESTIVAL4D_BASE=/festifun/ VITE_API_BASE=/festifun npm run buildemits 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/mediawith 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/festifunprefix. - 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 — bothPermission 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/.