Ocean Beach Rental — Demo
A from-scratch Airbnb alternative for a single-property host.
A custom short-term rental platform built to demonstrate what’s possible when a small business moves off Airbnb. Calendar, payments through Stripe Connect Standard, a San Diego TOT tax engine that files monthly, and a host dashboard. Built for a single Ocean Beach property as the prototype.
- Astro
- TypeScript
- Tailwind
- Supabase
- Stripe Connect Standard
- Resend
Source: github.com/dcraderdev/ob-rental · private repository
The problem
Airbnb takes a cut, and stands between the host and the guest.
Short-term rental hosts on Airbnb lose roughly 15–25% of every booking to platform fees — and they never actually own the relationship with the guest who stayed in their home.
The guest belongs to the marketplace, not the host. Repeat stays, reviews, email addresses, and the ability to offer a returning guest a better rate all live behind the platform. For a host with one great property, that’s the difference between a transaction and a business.
The solution
A turnkey platform that handles the hard parts.
The whole point is to let a host own the customer experience while the platform quietly handles everything that makes direct booking scary: payments, taxes, calendar conflicts, and dual-listing.
Guests book directly on the host’s own site. Money runs through the host’s Stripe account. The San Diego occupancy tax is calculated, set aside, and summarized for filing automatically. The calendar can’t double-book, and it stays in sync with Airbnb during the transition. The host gets a dashboard; the guest gets a clean, fast checkout — and a reason to come back next year.
How it’s built
The front end is Astro for fast, mostly-static pages, with Supabase as the database and booking source of truth. Payments run on Stripe Connect Standard, and transactional email — confirmations, receipts, host notifications — goes out through Resend. The whole thing deploys to Vercel.
Nothing here is exotic for the sake of it. Each piece was chosen because it pushes a hard responsibility — money movement, tax liability, deliverability — onto a service that does it well, so the host doesn’t have to think about it.
Specific challenges solved
-
A TOT tax engine that files itself
San Diego charges a 12.30% Transient Occupancy Tax on every short-term stay. The platform calculates TOT on each booking, escrows it separately from the host payout, and generates a monthly filing summary — so the host never has to reconcile a spreadsheet at tax time.
-
Race-condition-safe booking
Two guests hitting "Reserve" on the same week is the classic double-booking bug. Holds are written through a database constraint that rejects any overlapping range, so the calendar is the single source of truth and a conflicting request fails cleanly instead of corrupting the calendar.
-
Stripe Connect direct charges
Payments run as direct charges on the host’s own Stripe Connect Standard account. The money — and, critically, the dispute and chargeback liability — sits with the host, not the platform. The platform takes an application fee and never becomes the merchant of record.
-
iCal sync for the transition period
Most hosts can’t go cold-turkey off Airbnb on day one. The platform imports and exports iCal feeds so a host can dual-list during the move, keeping availability in sync across both calendars until they’re ready to go direct-only.
Non-obvious things I learned
-
The 1099-K threshold is $20K, not $600
The widely-reported "$600" reporting threshold kept getting delayed by the IRS. For the realistic single-property host, the practical 1099-K reporting line stays much higher than the headlines suggested — which changes how aggressively the tax tooling needs to nudge the host.
-
Some San Diego ADUs simply can’t be STR’d
Accessory dwelling units permitted after October 2017 are not legally eligible for short-term rental in the City of San Diego. A platform that onboards hosts has to know that rule up front — the wrong property type isn’t a feature gap, it’s a compliance stop.
-
Direct charges move liability, and that’s the point
Choosing Stripe Connect Standard with direct charges (over destination charges) wasn’t a convenience call — it deliberately keeps the host as merchant of record so disputes never land on the platform. The Stripe integration model is a business decision before it’s a code decision.
Screenshots — coming soon
-
Booking calendar — availability and a race-safe reservation hold
-
Checkout — Stripe Connect payment with TOT broken out as a line item
-
Host dashboard — payouts, upcoming stays, and the monthly TOT summary
-
Property page — the guest-facing listing for the Ocean Beach property
Like what you see?
Need something like this for your business?
A custom platform that takes you off the marketplace and puts you back in front of your customers.
This is a demo / portfolio piece, not a live client deployment. Built to show what a custom rental platform looks like end-to-end.