Case study · 04· Live · Built solo

Tide: dynamic pricing for vacation rentals that earns the right to run on its own

Dynamic pricing for vacation rentals in Cloudbeds: nightly rates set from demand signals, approved in one click or pushed automatically.

Next.js 15TypeScriptSupabaseDrizzleInngestCloudbeds APIAnthropicpnpm workspaces
Open Tide (private dashboard)
Tide's performance dashboard for a Grace Bay unit: RevPAN, ADR, occupancy, index versus sibling units, booking window, length of stay, pickup by week and revenue. Figures altered for privacy.

The performance view in assisted mode. Figures altered for privacy.

The problem

A vacation rental's nightly rate is the biggest lever on its income, and most owners set it once a season and leave it. Off-the-shelf pricing tools help, but they are tuned for big mainland markets. On an island, demand turns on things those tools barely see: how many seats are flying in, a hurricane advisory, a holiday in the countries guests come from.

The other problem is trust. An owner will not hand rate control to software that can't explain a price, and shouldn't.

The approach

Tide is a pnpm monorepo: a Next.js dashboard, a pricing engine with no I/O at all, a typed Cloudbeds client, signal adapters, and Inngest jobs that snapshot, ingest, reprice, publish and reconcile.

A pure engine. Pricing starts from the owner's base rate and applies factors for season, day of week, lead time, booking pace, gaps between stays, comparable listings, events, flight capacity into the island, and market shocks. Because the engine never touches the network, it is covered by property-based tests and a golden-year fixture, and every price comes with a written rationale of which factors moved it.

Signals with weights. Each external signal (airline seat capacity, public holidays, hurricane advisories, weather, exchange rates, and local news read by Claude) has its own adapter. Comparable-listing data is weighted by how credible it is, using realized occupancy rather than asking prices.

A careful Cloudbeds client. Rate limiting, retries, encoding quirks, job polling and webhooks are handled in one typed package, and every push is reconciled against what Cloudbeds actually holds, so a rate that drifted is flagged rather than assumed.

The decision that made it work

Autonomy is a setting, and it is earned. Tide runs in three modes. In shadow it computes prices and touches nothing, which is how every property starts. In assisted mode every change waits in the dashboard for approval, then goes to Cloudbeds. In automatic mode it publishes on its own, but only small moves: anything beyond the daily or weekly limit, any minimum-stay change, and anything close to arrival still queues for a person.

That makes switching it on a low-risk decision instead of a leap of faith: the owner can watch the recommendations, approve them for a while, and turn on automatic mode once the rationale keeps matching their own judgment.

Outcomes

Tide is live in assisted mode on Unit 4303 at Coral Gardens on Grace Bay: it proposes rates every day, the owner approves them, and approved rates are written to Cloudbeds. Automatic mode is built and gated, ready to switch on per property. The design is multi-unit and multi-property from the start, and pushes are limited to units that have opted in.

Who this is for

Owners and managers of vacation rentals and small hotels on Cloudbeds who want pricing that reacts to their market, without giving up control of their rates. It pairs with Revinue, which fills the calendar from past guests, while Tide makes sure each of those nights is priced right.

Want pricing or revenue tooling built around your property? Book a discovery call

Related work

Contact

Let's build something.

Working on a product idea, a CRM mess, or a real-estate / community / reservations problem? Book a 30-minute call — I'll tell you straight if I can help.