- nginx basic auth on /drops/ (page and clips); login file and clips live
on the server only (docker/auth, docker/drops), never in git or the image
- Fails closed: missing login file returns 500; no-store, noindex
- Page reads manifest.json from the server, shows "taken down" when empty
- Player hides download/cast/PiP, blocks right-click, confidential overlay
- DEPLOY.md step 8: how to share a drop and take it down
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- nginx basic auth on /previz/ (login file lives on the server, mounted
from docker/auth/, see DEPLOY.md step 8); private, no-store so
Cloudflare never caches it
- Print styles for previz pages: dark, A4 landscape, one section a page;
videos print as poster frames with a link
- scripts/previz-pdf.mjs (npm run previz:pdf) prints the page to
public/previz/crowd/crowd-previz.pdf via Edge/Chrome DevTools
- "PDF" download link on the page
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Unlinked, noindex page listing marker PNGs from public/set/markers
(discovered at build time; filenames encode device/resolution/orientation)
- Detects the current screen and offers the closest match first
- One-tap full-screen viewer: wake lock, hidden controls, full grid/edges
toggle, fill vs fit by aspect, back button closes, deep links via hash
- Offline service worker + home-screen manifest for iPhone full screen
- Marketing chrome moved into an (site) route group so /set has none
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Matches the vfxreview/xbid setup: runner pulls and runs docker compose;
nginx:alpine serves the static export on the npm_default network behind
Nginx Proxy Manager. DEPLOY.md has the one-time SSH setup steps.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>