Work/Apps

Is It Beach Day

Is It Beach Day puts everything a beachgoer checks on one page per beach, boiled down to one score from 0 to 100. If a lifeguard flag or a water-quality advisory says no, the score says no too.

LiveWebiOSwatchOSAndroid

Visit isitbeachday.com

Scores are a guide. Follow lifeguard flags and posted warnings at the beach.

The score. One number from 0 to 100, and a ring that shows what moves it.
  1. 01The score. One number from 0 to 100, and a ring that shows what moves it.
  2. 02Your score. A personal score next to the one everyone sees, tuned for surfing.
  3. 03Safety. Rip current risk by the hour, and the local lifeguard report.
  4. 04Lightning. The nearest strike, and a radar ring for the last 30 minutes.
  5. 05Plan. The best time today and a seven-day outlook, scored by day.
  6. 06Details. Sunset color, water quality, temperatures, humidity, and rain chance.
  7. 07Sand temperature. An estimate for dry sand from ground heat, sun, wind, and rain.
  8. 08Cam reads. Crowd level and water clarity, read from beach camera frames.

Sample data

What it does

Each beach page starts with the score and the reasons behind it. Tides, lifeguard flags, and water quality all count, and a hazard caps the number no matter how nice the sky looks. It also ranks the hours of the day, so you can pick the best window.

Live beach cameras add two things no forecast gives you, how much seaweed is on the sand and how crowded it is. The app also forecasts sunrise and sunset color and sends an alert when a good one is coming. Plus subscribers can look back over the past 30 days and see what a beach looked like on any one of them.

Hard problem we solved

A camera read that might be wrong

Cameras are the only source for seaweed cover and crowd level, and they are also the source most likely to lie. A machine reading a beach still gets it wrong sometimes, and a wrong read on a clear day would drag the whole score down with it.

We checked the hosted vision models against 93 frames a person had labelled by hand. None has yet earned the job of primary reader, so one model works as a fallback, and a cam read enters the score as one sub-score among ten with its own status attached. Every source adapter works the same way. It catches its own errors and returns a status with its data, so a bad frame or a dead feed leaves one gap on the page and the rest still loads.

The reads run on a schedule, on GitHub Actions and Cloudflare cron, and each hour's result is archived to a D1 database with the cam owner's credit stored beside the frame. That archive is what the Plus day view plays back.

Web, app, WatchNext.js, CapacitorEdge WorkerOpenNext on CloudflareAPI and MCPRead-only, publicD1 archiveHourly scores, camreadsR2 framesArchived cam stillsPublic sourcesNOAA, NWS, state dataScheduled jobsGitHub Actions, cronVision modelsCam reads

Where it stands

Live on the web and on the App Store, with scores free to everyone and the Android app in testing on Google Play.

Endeared

Warm notes for your partner, and a little help writing back when they reach out.

Next in Apps