The Problem
Managing one short-term rental is straightforward. Managing 30+ across two markets — Los Angeles and Puerto Rico — is a different category of problem. Listings live on Airbnb, Booking.com, and Expedia. Cleaning crews need coordination across time zones. Guest messages come in at 2am. Pricing decisions that made sense in March stop making sense in July. And underneath all of it, you need a platform that reflects your brand — not just a syndicated Airbnb listing with your name on it.
I was running this operation across spreadsheets, group chats, and manual calendar updates. Every new property we added multiplied the coordination overhead. That wasn’t a sustainable model.
The Approach
The platform needed to do three things well: present the portfolio professionally to drive direct booking traffic, integrate cleanly with the channel managers that feed Airbnb and Booking.com, and give operations staff a real-time view of what’s coming in, what’s checked out, and what needs attention today.
I chose an edge-first architecture from the start. The site needed to be fast globally — guests in Puerto Rico and LA are equally likely to be browsing on a phone with a mediocre signal. Latency had to be someone else’s problem, not mine.
The Build
The platform runs on Astro with Cloudflare Workers and D1 as the backend. Static pages serve from the edge in under 50ms anywhere in the world. Dynamic content — availability, pricing, booking inquiries — hits Workers functions that query D1 directly, no cold starts, no regional latency gaps.
Property listings pull from a structured content layer that lets non-technical staff update descriptions, photos, and amenities without touching code. Automated pricing logic adjusts nightly rates based on occupancy windows, local events, and competitor signal. Guest communication workflows handle the standard check-in sequence — confirmation, pre-arrival instructions, post-stay review request — without anyone having to remember to send them.
For cleaning coordination, I built a job dispatch system that fires automatically on checkout. Cleaners get a task with the property address, checkout time, and next check-in window. No group chat needed.
The Outcome
The portfolio grew from 15 to 30+ properties without a proportional increase in operational headcount. Direct bookings through the platform now account for a meaningful share of revenue — guests who find us through search or referral and book without paying OTA commission. Guest communication response time dropped to under two minutes for the automated touchpoints.
The architecture has also made expansion cheaper. Adding a new property is a content entry and a channel sync, not a week of setup work.
What I’d Do Differently
I’d build the cleaning coordination system first, not last. It was the most operationally painful problem and I treated it like a nice-to-have. By the time I built it, we’d already had missed turnovers because a message fell through the cracks. The other thing: I’d get serious about review request optimization earlier. The automated post-stay message we run now outperforms what I was sending manually, but I didn’t get the copy and timing dialed in until six months in. Reviews compound. Starting that work earlier would have built listing rank faster.