
Getting a car onto the Orcas Island ferry is a special kind of misery. In summer, every vehicle reservation on the Anacortes ↔ Orcas Island route shows full weeks out, and the only way to get a spot is to catch the exact moment someone cancels. That means refreshing the Washington State Ferries reservation site over and over, hoping to be the one who’s looking when a space opens.
Slack Tide solves that. It watches ferry availability for the route and emails you — and optionally texts you — the instant a full sailing frees up a vehicle reservation. Booking still happens on WSDOT; Slack Tide just tells you when to go book. It’s a friends-only tool, not a public product: access is a simple email allow-list, no passwords, no accounts.
“We’ll tell you the moment the water clears.”
Designed
Slack Tide has a deliberate, cohesive look — a deep-teal-and-cream palette with a Newsreader display serif — carried consistently from the sign-in screen to the sailings list to the link unfurl above. The whole thing started as a design mockup and stayed pixel-close through build.
The front door is intentionally frictionless. No password, no account — you enter your email, and if you’re on the allow-list, you’re in. The promise is stated plainly right on the gate: watch a full sailing and get alerted the instant it opens.

The main screen is the sailings board: pick a direction and a day, and every sailing shows live availability — Open, Low, or Full — with a one-tap bell to start watching a full one. It refreshes on its own so what you’re looking at is always current.

Built
- Stack: FastAPI + SQLite on the backend, a Vite/React SPA on the front. The SPA is built and served by FastAPI, so the whole app ships as a single container.
- Data (hybrid): the free WSDOT reservation API for near-term exact counts, plus a headless Chromium (Playwright) scraper against the WSF Vehicle Reservations System for the rest of the bookable ~90-day horizon.
- Polling: an in-process scheduler samples each sailing on a cadence that tightens as the date nears, and bursts to per-minute during the 7 a.m. Pacific reservation-release windows — the moments spots are most likely to appear.
- Notifications: watch a full sailing and get an email (via Resend) — plus an optional SMS (via Twilio) — on each
full → opentransition, re-armed after the sailing refills so a single watch keeps working.
The whole thing was designed, built, and deployed end-to-end with AI as the primary engineer — from the data-source spike through the pixel-perfect frontend to the production runbook.
Deployed
Slack Tide runs as a single Docker container behind a Cloudflare Tunnel. Shipping a change is one command: git push origin main builds the image on a self-hosted Mac Mini CI runner, pushes it to the registry, ships the compose file to the droplet, and rolls the container with a health check. SQLite lives on a persistent volume, so data survives every deploy.
The friends-only allow-list is managed inside the app itself — an admin adds or removes members from the UI, no SSH and no redeploy — and changes take effect on the next request.
Slack Tide is a private, friends-only tool — there’s no public sign-up. This writeup is here to show how it was designed, built, and deployed.