What we shipped
Every meaningful change, dated and attributable. No marketing theatre.
Portfolio KPIs live — RevPAR, occupancy, ADR vs market
Properties view now shows trailing-30-day RevPAR, occupancy, and how each listing's ADR sits vs the local market median. Numbers compute live from your synced bookings and a refreshed 6-hour market data cache.
ADR vs Market P50 surfaces as a signed delta — "+12% above" or "−8% below" — so you can see which listings are pulling weight versus leaving money on the table.
Portfolio KPI band now renders real values instead of placeholders for every host with at least one synced PMS connection.
PMS connect — inline credential validation before submit
When you paste credentials on the connect screen, we now validate them live against your PMS within ~600ms — you see "✓ Connected · 4 listings found" with the first three names BEFORE you click Connect.
Added a direct deep-link button to your PMS's API settings page so you don't have to alt-tab and hunt through bookmarks.
Submit now shows multi-step progress (Verifying credentials → Registering webhooks → Done) instead of a single opaque spinner.
Activation funnel end-to-end — signup to first audit in minutes
New customer flow runs without founder hand-holding: pick a tier → Stripe checkout → connect PMS → first audit fires within seconds of the connection landing.
No card required upfront — every paid tier ships with a 14-day free trial. Cancel anytime during the trial without a charge.
Welcome email confirms your tier + tour link. Re-engagement nudge fires once if you haven't opened the dashboard in 7 days.
Onboarding tour + connect-time property picker
First-time hosts see a guided 5-step tour: pick PMS → connect → walk through the dashboard zones. Skip, defer, or replay anytime from the topbar.
When you connect a PMS that has more listings than your tier covers, a property picker lets you pick which to monitor — no silent overage, no auto-billing surprise.
Dashboard density redesign + 7 new market intelligence cards
Home, Properties, and Queue collapsed from 8–10 stacked sections into 2–3 focused zones with breathing room. Sidebar flattened to a 4-item primary nav.
Four new cards available on every paid tier: Booking lead-time trend, Supply pressure, Revenue percentile, Year-over-year performance.
Three additional cards shipping behind Pro tier: demand-event surge alerts, flight-disruption signals, severe-weather displacement.
Admin / host workspace separation
Admin tools moved to a dedicated workspace shell with distinct visual treatment. Hosts no longer see admin links anywhere in their nav.
Cost dashboards added for internal observability — daily LLM spend, market-data spend, retention cohort grids, weekly cron throughput.
Pricing rebuild — flat-by-tier, 14-day free trial
Solo ($79/mo for 1–3 properties), Host ($249/mo for 4–10), Pro ($549/mo for 11–30). Dropped per-listing pricing in favor of flat-by-tier structure matched to portfolio size.
Free trial (14 days, no card upfront) available on all paid tiers.
Free Audit remains available for one-off listing inspections; all pricing tiers lock founding-customer discount for year one.
Pricing honesty pass: dropped aspirational features (Custom rules, White-label, API access, Priority support tiers). Only features shipping or under active development are listed.
Custom sign-in surface — Google-only, zero vendor chrome
Rebuilt /login and /signup from scratch. No third-party widget, no appearance overrides — just the Restay auth shell, one Google button, one redirect.
Google sign-in uses the official four-color G mark on a white button; the rest of the surface keeps the cream-and-gold editorial treatment from the landing page.
Inline spinner sits where the G logo was, so the button width stays stable during the OAuth hop — no layout jump.
Removed the Docs link from the site nav until real documentation exists; FAQ now sits in its place.
Landing redesign · honest tier posture · legal surface complete
New landing page live with the split-funnel rate-gap preview. Pure market-data math, no LLM, four-second response.
Early tier models (Operator, Observer, Orchestrator) evaluated; later replaced with flat-by-tier pricing aligned to portfolio size.
Added /security, /changelog, /contact, /manifesto, /about. Terms, Privacy, and Acceptable Use updated to match current capabilities — no overclaims.
Re-themed every inner page to match the new cream/editorial system; single shared SiteShell for nav, footer, and prose.
Database RLS initplan performance fix
Migration 003 applied — rewrote row-level security policies to reference auth.uid() inside SELECT subqueries, eliminating per-row re-evaluation.
All 12 production tables now pass the performance advisor with zero WARN-level lints.
Eighteen INFO-level lints (unindexed FKs, unused indexes) tracked for a post-launch indexing pass.
Audit persistence + resume-on-refresh
Audit runs now persist to our database via audit_store.py. Close the tab, come back, pick up where you left off.
In-memory hot cache for active audits; durable database layer for everything else.
Audit progress UI rebuilt with a six-step 3D capsule loader that mirrors backend state.
Row-level security enabled across all tables
Migration 002 — RLS enabled on all 12 application tables. The public anon key has zero access to user data.
Backend service-role usage audited; every read and write is now user-scoped.
Free audit pipeline — pricing, photos, reviews, demand
End-to-end free audit: paste an Airbnb URL, receive a named-reasoning report covering rate gap vs comps, photo scoring, review signal, and demand curve.
Live market-data integration; average cold audit cost ~$0.54, cached ~$0.04.
Auth + billing skeleton
Sign-in, sign-up, and SSO callback wired through our managed identity provider. Middleware protects /dashboard and /audit.
Stripe checkout session creation + webhook listener. Price IDs configurable via environment variables.