forecast_runs was missing, causing all manual/scheduled forecast jobs to
fail on startup. pickup_snapshots and pickup_curves are referenced by the
pickup model but were absent from schema.sql.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Add booking_com_hotels and booking_com_rates (competitor rate scraper tables)
- Fix forecast_snapshots: was using old pivoted schema (snapshot_date,
prophet_value etc.); code expects normalised rows (perception_date, model,
forecast_value, actual_value). Add DO block migration to drop+recreate if
old schema is detected.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Missing from initial schema; used by competitor rates scraper and cleanup_stale_batches on startup.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Python FastAPI ML backend kept intact; auth replaced with central hnf_session cookie verification. Frontend rebuilt on React 18 + TS + Vite with stack design system, Plotly charts retained. Shared Postgres via DATABASE_URL; schema applied on startup.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>