Remove the footer picker, keep the ?holiday= parameter

Fixkamo-marketing
Shipped
September 6, 2026 at 2:52 PM UTC
Author
Kamo
Commit
edb43f9

The dropdown was a temporary control for the initial review of the eighteen scenes and it has served its purpose. The query parameter stays — it is the only way to look at a scene on a day that is not its own, and seventeen of the eighteen are unreachable at any given moment without it. Gone: HolidayPicker.tsx, HolidayPickerControl.tsx, the `.holiday-picker*` block in holidays.css, and its line in Footer.tsx. `HOLIDAY_COPY.name` went with it — it existed only to label the dropdown's options — so the copy table is now title, message and glyph. `writeOverride` is module-private and the change event is gone with it: nothing on the page can set an override any more, only the URL a page is opened with, and a `?holiday=` link arrives as a navigation that remounts the layer anyway. AND A REAL BUG IN THE ESCAPE HATCH, found while restoring this `?holiday=auto` did not work. `parse()` returned `null` for BOTH "auto" and "no parameter present", and the caller's guard was `if (parsed !== null)` — so the clear case fell straight through to the stored value and returned it. The one documented way to release a browser that had been pinned to a scene silently did nothing, and since the override persists to localStorage precisely so a shared link survives a navigation, anyone who followed one was stuck until they cleared site data. `Request` now keeps `absent`, `clear` and `set` distinct, and the clear case REMOVES the stored key rather than merely returning null for one page view. A garbage value (`?holiday=xmas`) is treated as absent rather than as a clear, so a typo shows whatever was already in force instead of silently wiping it. That bug is also the honest answer to "couldn't I just use the url param to fix it?" — you should have been able to, and you could not. An earlier version of this change removed override.ts entirely and justified a storage cleanup by claiming a stranded reader would have no way out. That reasoning was wrong twice over: with override.ts deleted nothing reads the key at all, so nothing could be stranded; and with it kept, the parameter is the way out. The cleanup went with the bad reasoning.

All changes

Like what you see shipping?

Every one of these updates lands in your workspace automatically. Start free and watch it grow week after week.

Start Free ForeverView Pricing