Project
Rental Potential
A private website my household used while we hunted for a rental. We logged each listing, rated it out of five stars, and watched everyone's ratings update live, so our top choices and hard "no"s sorted themselves out.
- My role
- Solo build
- Stack
- astro
- sanity
- typescript
- cloudflare workers
- github actions

Why I built it
We had lived in the same 2 bedroom apartment together for more than 10 years, and it was time for some more space! The rental market is crazy these days and keeping up with new listings daily was a real chore. We tried keeping a shared google doc, texting each other listings, emailing and sharing links with our realtor, etc.
It became way too time consuming trying to wrangle all of us together daily to see how we felt about this one or that one. I also wanted to engage our teenage son a bit more and let’s be honest - docs are boring. So I spun up a site! This way, everyone could add in their 2 cents when it was convenient for them.
How it works
- Anyone in the household adds a listing in Sanity Studio (even from a phone): address, price, bedrooms, bathrooms, square feet, notes, photos and a status like To visit, Viewing booked, Applied or Leased / unavailable.
- The site is built with Astro as plain static pages, grouped into sections like Top choices and Hard no based on everyone's ratings. Booked viewings sort by date.
- Everyone rates each place out of five stars (this started as thumbs up/down). Ratings show up on everyone else's screen live, with no reload.
- A compare page puts every listing in one sortable table.
- The whole site sits behind a simple family PIN login.
Eventually, we found a 5 star property that we all loved. We’ve been here over a month and couldn’t have asked for a better home.
The interesting bits
A static site with live ratings
The listings are baked into HTML at build time, so the page loads instantly. But ratings change all the time, so a few lines of client-side code subscribe to Sanity's realtime listen API and update the stars on everyone's screen as votes come in.
Where did my vote go?
Right after rating a house and reloading, your vote could look lost: the page was baked before you voted, and Sanity's CDN can lag a few seconds behind. The fix: on page load, fetch the latest ratings once from the live (non-CDN) API and patch the page before anything reads it.
Rebuild when a house changes, not when someone votes
New or edited listings need a fresh build, but votes don't (they're already live). A Sanity webhook only fires when a listing's real fields change (address, price, status and so on), then a GitHub Action kicks off a new Cloudflare build. Publishing from a phone is enough to update the site about a minute later.
One small server that holds the keys
A Cloudflare Worker serves the site, checks the PIN cookie, and handles votes. It's the only thing that can write to Sanity, so the write token never reaches the browser.
