wattsbar-publisher GET /cam live camera snapshot (3s freshness, edge-cached) GET /cam-status cam pipeline health (5s freshness) GET /og.jpg OG card image (5min refresh) GET /publish force refresh weather + cam GET /publish-tva force refresh tva.json (gated; inline budget) GET /publish-site-meta re-publish site manifest.json + schema.json (gated) GET /publish-lake-meta re-publish lake manifest + schema + frozen dict + index GET /publish-lake-analytics re-run analytics + re-stamp archive excluded flags GET /health liveness ping JSON feeds live on R2 (data.watts.bar): https://data.watts.bar/weather.json https://data.watts.bar/tva.json https://data.watts.bar/sky-palette.json https://data.watts.bar/cam-status.json