Work/Platforms

Skyburn

Skyburn scores how colorful tonight's sunset or tomorrow's sunrise will be at your exact spot, anywhere on Earth. The score shows up only in the last hour before it happens.

Web buildWeb

A place picked. In the hour before sunrise or sunset, a 0 to 100 colour score appears with a band.
  1. 01A place picked. In the hour before sunrise or sunset, a 0 to 100 colour score appears with a band.
  2. 02Change the place. Search by name. The spot stays on the phone.
  3. 03The factors behind the score: low cloud, high cloud, air clarity, humidity.
  4. 04Which way to face, plus the golden hour and blue hour times.
  5. 05Earlier in the day it shows only the time. No number until an hour before.

What it does

Pick a place, or let the app use where you are, and Skyburn gives the time of the next sunset or sunrise. In the last 60 minutes before the event, a color score appears next to it. Near a Beach Day beach on a US coast, the score can use a live satellite look at the clouds, and the screen says so. Everywhere else it is a forecast, and the screen says that too.

After the show, you rate how it looked. Every night the app checks 30 days of ratings against the scores it showed. It never keeps your exact location, and the iPhone reminder that fires when the window opens carries no number, so nothing spoils the wait.

Hard problem we solved

Keeping the color number hidden until the last hour

The rule is simple to say. No color number until 60 minutes before the event. It is hard to keep, because a number that exists anywhere on the server tends to leak, into a cache, into an agent reply, into a push notice, or into a client that someone pokes at.

So the server decides, not the client. The window rule lives in one function with its own tests, and a pending answer has no score block at all. A pending answer also makes no network call, so the score is never computed, never fetched from Open-Meteo or the GOES feed, and never sits in a cache waiting to be found. The versioned sky route and the llms.txt guide hand agents the same payload with the same blank. The iPhone shell, a Capacitor web view, sets one local reminder when the window opens, and the reminder carries no number.

Testing that was easier than it sounds. Every source fetcher returns a result object instead of throwing, and tests pass in the fetchers and the clock, so the whole suite runs with no network. The sun model files are copies from Beach Day, and a doc lists which files are copies and how to keep them in step.

Phone or browserNext.js screeniPhone shellCapacitor 8WorkerNext.js via OpenNextSun modelshared with Beach DayD1ratings, calibrationNightly jobcalibrationOpen-Meteocloud and air dataGOES feedsatellite cloud read

Where it stands

The web version runs at a test address with no public domain yet, and the iPhone version is built but not yet on TestFlight.

Commonplace

Save a link and it turns into a filed note in a private wiki you can ask questions of.

Next in Platforms