projects

2026liveprivate repo

Club posters

A poster generator for a sports club’s social media, installable and backend-free

Fixtures and results for every matchday, featured games and player announcements, ready to post. A single HTML file with no framework, data kept in the browser, and an installable PWA on phone and desktop.

It was born for a basketball club and now works for any club and any sport, without a single real name in the code or the sample data. No server stores anything: settings live in `localStorage`, images in IndexedDB, and data moves between browsers as a `.zip` backup. The poster comes out as a PNG that is byte-for-byte identical from any window size, which is what makes the preview trustworthy.

The service worker is hand-written, and its most instructive bug came from Cloudflare’s own edge: right after a deploy it briefly served mixed versions, and a browser installed the new page alongside the old `sw.js`, which replaced it. The fix was that a worker only installs with the page of its own version: it requests it with the version in the URL, demands that it carries its own, and otherwise fails without leaving a cache and tries again.