What it is
End-of-season awards used to die in the group chat. This turned them into a night: every manager votes from their phone, then the results play back one award at a time like a real ceremony. There were twenty ballots and thirteen awards.
A public voting page for a fantasy football league's end-of-season awards, with ballots stored as private GitHub issues and a proper ceremony reveal.
End-of-season awards used to die in the group chat. This turned them into a night: every manager votes from their phone, then the results play back one award at a time like a real ceremony. There were twenty ballots and thirteen awards.
Keep it free of accounts and running costs, and put the drama in the reveal rather than the spreadsheet. Blank votes are allowed, so a half-filled ballot still counts. The ceremony screen got more attention than the voting form, on purpose.
Next.js on Vercel with the GitHub Issues API as the database. Every ballot becomes a private issue holding the manager's name, each vote and the JSON needed to tally it. Selfie proof images sit in the same private repo, and tallying reads the issues back.
I used GitHub as the backend. It's a free ballot box with a full history, no database to run and nothing to pay for.
Every season the Thame Lads League hands out end-of-season awards, and every season it was the same mess: nominations buried in the group chat, votes counted by whoever could be bothered and no real moment when the winners were read out. I wanted it to feel like an actual awards night, without anyone installing anything or making an account.
It’s a single Next.js page that opens on a phone. Managers work through every award, cast their votes and submit one ballot. Blank slots are allowed, so a partial ballot still counts for the awards someone did fill in.
There’s no database. Each final ballot becomes a private GitHub issue with the manager’s name, a vote for every award and the structured JSON needed to tally it. Tallying reads the issues back. It’s a real backend with no running cost, and the audit trail comes free. Selfie proof images sit in the same private repo.
Instead of a table of winners, the results play back as a ceremony: hit start, dim the lights and reveal them one at a time. Most of the effort went there. We used it for the 25/26 awards, with twenty ballots in and thirteen awards out.