Commit Graph
7 Commits
Author SHA1 Message Date
Lucas WintherandClaude Opus 5 448c70968d feat: add the light palette, and the module that resolves a theme
The dark tokens re-struck under `[data-theme="light"]`. Nothing sets that
attribute yet, so the app still renders exactly as it did.

Two things could not be tokens. Game hues are data — ours and the
reader's — and every one was picked against a near-black ground, so
`readableHue` darkens them along the same hue until they read on paper,
and returns dark untouched by construction. And the attribute has to be
on the root before React can mount, or a reader who chose light gets a
dark flash on every load, so the shell reads the preference itself.

That leaves the ground colour written in three files that cannot import
each other, which is what the test pins together.

Co-Authored-By: Claude Opus 5 (1M context) <[email protected]>
2026-08-18 23:30:26 +02:00
Lucas Winther 059bf02130 Move analytics to bottom of page for quicker load of main app. 2026-08-17 19:00:50 +02:00
Lucas Winther 793dca4a79 Add privacy friendly analytics :) 2026-08-17 18:55:53 +02:00
Lucas WintherandClaude Opus 5 0efcfc52f0 fix: tell Dark Reader this page is already dark
Dark Reader inverts an already-dark palette, which wrecks the interface: the
colours here carry meaning — the urgency ramp is how you read how soon
something ends — so having them re-mapped is not a cosmetic problem.

darkreader-lock is its documented opt-out. color-scheme: dark is the standard
signal alongside it, so browser chrome and form controls render dark too.

Co-Authored-By: Claude Opus 5 (1M context) <[email protected]>
2026-08-15 01:43:47 +02:00
Lucas WintherandClaude Opus 5 b86794a62d feat: add GitHub Actions CI and support hosting under a subpath
Mirrors the GitLab pipeline — typecheck, tests, feed sanity — and adds a
Pages deploy.

Pages serves from /<repo>/, and the app used absolute asset paths, so that
job would have shipped a site that 404s on everything. Assets now resolve
against a <base href> the build substitutes, the feed URL resolves against
document.baseURI so deep links work too, and the service worker derives its
paths from its own registration scope. Root-hosted builds are unchanged.

Co-Authored-By: Claude Opus 5 (1M context) <[email protected]>
2026-08-15 01:22:22 +02:00
Lucas WintherandClaude Opus 5 c633d0510d feat: work offline
The reader's question is answered entirely by data already on the device and
countdowns run off the local clock, so losing signal should not lose the app.

The shell is cache-first; the feed is network-first falling back to the last
copy seen, because stale events beat a blank screen. Webfonts are cached too
— without them an offline load silently drops to system faces and the whole
thing changes character.

Offline is surfaced in the header and above the footer rather than hidden:
stale data must never be presented as current.

Co-Authored-By: Claude Opus 5 (1M context) <[email protected]>
2026-08-15 00:52:41 +02:00
Lucas WintherandClaude Opus 5 49d52e3587 chore: add React, Tailwind and the client build
Tailwind v4 @theme carries the two colour axes as tokens: a deep blue-black
ground, per-game hues for identity, and a heat ramp for urgency that is
monotonic in salience (dim, blue, amber, red).

Co-Authored-By: Claude Opus 5 (1M context) <[email protected]>
2026-08-15 00:28:17 +02:00