v1.0.0 — MVP: Reconciliation Engine + KPI Dashboard
🏠 StayOps — v1.0.0
Full MVP — property operations dashboard with automated booking reconciliation, CSV/Sheets import, and a live KPI dashboard backed by Supabase Postgres.
What's included
Reconciliation Engine
- Rule-based engine (
lib/reconciliation.ts) detects 4 conflict types: duplicate, double_book, gap, price_mismatch - Idempotent flag creation — SHA-256
flagKey(type, sortedIds)prevents duplicate flags on re-run - Auto-triggers on first visit to
/reconciliationif table is empty
KPI Dashboard (/)
- Occupancy %, Average Daily Rate, Gross Revenue (rolling 30-day window)
- Revenue by property table with nights + ADR breakdown
- Upcoming turnovers (next 7 days) for cleaning schedule
- Open flags card — red/green link to reconciliation page
Booking Import
| Source | Endpoint | Method |
|---|---|---|
| CSV upload | /api/import/csv |
multipart/form-data via papaparse |
| Google Sheets | /api/import/sheets |
service account JSON, A1:Z1000 range |
- Dedup via
source_row_hash(SHA-256 of guest|property|dates|channel) - Reconciliation auto-runs after every import batch
Reports Page (/reports)
- All-time revenue by channel and by property
- ADR per night and revenue share % per segment
Infrastructure
| Item | Detail |
|---|---|
| Database | Supabase Postgres, 7-table Drizzle schema |
| Deploy | Vercel (auto-deploy on push) |
| CI | GitHub Actions — ESLint + TypeScript typecheck (Node 24) |
| Rendering | All data pages force-dynamic — no stale static pre-renders |
Roadmap
v2.0.0— AI agent layer: Claude tool-calling reconciliation, weekly ops report → Slack, turnover auto-generationv3.0.0— Growth surface: direct-booking landing page, PostHog funnel analytics, lead capture