A decision platform for university clubs: polls, roster-gated elections, automatic reminders, and an archive of what was decided that survives the officers who decided it. Front end, back end and marketing site.
Under the hood 6 things worth opening
01 Two builds, split by job
The marketing site and the application are deliberately different things on different origins. clubpolls.io is a static Astro build; the product lives at dash.clubpolls.io as a Next.js App Router app on Cloudflare Workers via OpenNext. The point of the split is that someone reading the pitch never downloads a byte of the application — the demo route alone pulls roughly 176 KB of compressed JavaScript across nine chunks that the marketing homepage never touches.
02 The interactive parts run on no JavaScript at all
The officer-console tab switcher and the monthly/annual pricing toggle look like scripted components and aren't. Both are hidden radio inputs driving sibling selectors in CSS. The radios are clipped rather than hidden, so they stay focusable and the tab group inherits native arrow-key navigation — no roving-tabindex code to write, and nothing to go wrong when a script fails to load.
03 A canvas field with a power budget
The hero is a hand-written dot field, and most of the code in it exists to stop it costing anything. The animation frame is cancelled outright when the element scrolls out of view or the tab is hidden. Device pixel ratio is capped at 2. Easing is frame-rate independent and the delta clamped, so returning to a backgrounded tab doesn't produce a jump. The glow sprite is pre-rendered once to an offscreen canvas and only drawn for dots above an alpha threshold.
04 No raster images on the page
Zero img elements, zero picture elements, no video — the only vector on the page is the wordmark. What looks like a product screenshot is real markup, which is exactly why CSS can tab-switch between three views of it, why it costs no image bytes, and why it can never go stale against the product. Typography is self-hosted and split by unicode-range, so an English reader downloads two font files rather than four.
05 A same-origin content security policy
default-src 'self', with script-src enumerating a sha256 hash per inline script and no 'unsafe-inline' anywhere. The authored page references no external host but its own: no tag manager, no font CDN, no third-party analytics.
06 A public demo that shows its working
A demo route is readable without an account, and it's the one that exposes the maths: a ranked ballot, then the officer's side of it — a Borda count with the weighting stated in plain English, a consensus score, and a per-option polarization readout that tells you when a 'popular' option is actually splitting the room. The tally bars carry screen-reader labels rather than being decorative.