Changelog

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.