Why this site exists
Football squares is a great party game with a weak link: the number draw. Somebody has to pull digits from a hat, and everybody else has to believe they did it honestly. This site replaces the hat with the browser's cryptographic random generator and adds a lock button so the board freezes before the reveal. The rest of the game — names in squares, last digits, one happy winner per quarter — needed no improvement.
How it works
The site is fully static: every page is pre-built HTML, and all interactivity is a small script that runs on your device. Boards are stored in your browser's local storage and can be packed into a shareable URL. Nothing you type is ever uploaded, because there is no backend to upload to. Printing fits the whole board — teams, axis numbers, names — on one Letter page in landscape, and the PNG export renders the same board as an image for posters and chats.
What is deliberately missing
There is no money anywhere in this tool: no entry amounts, no shared prize collection, no prize-splitting arithmetic, no accounts. What each quarter's winner receives is a conversation for your group, not a form on this website. If you want a completely stakes-free game — offices and classrooms usually do — every feature works exactly the same.
The site is also deliberately neutral about teams: the board's name fields start as “Team A” and “Team B”, and no league branding, team names, logos or colors appear anywhere. It is a template for any matchup in any sport — the basketball squares page covers the most popular non-football use.
Under the hood
Astro for the static site, TypeScript throughout, and a plain canvas for the PNG export. The
random number code uses crypto.getRandomValues with rejection sampling, so the
digit arrangements are uniformly random — the shuffle is tested with automated runs of a
thousand draws. The site carries no external fonts, images or scripts, which is why it loads
fast and works offline once a page is open.