- Own tool
- Live
Pokuty, a team fines tracker
A fines board for an amateur football team. Anyone with the link can look. Only admins can change anything.
- For
- My own tool, for an amateur football team
- Status
- Live, in Czech. The live board shows real players, so it is not linked from here.
- Period
- 2026
- What I did
- Web application, Admin login, Database security


Screenshots are real. Player names and the club name have been replaced.
The problem
An amateur team needed one shared place to record fines, see who owes what and mark fines as paid, without making every player create an account.
The approach
The database decides who can do what, not the screen. Visitors can read four tables and nothing else. Every change is re-checked on the server. Fines keep the amount they had when issued, so editing the price list never rewrites history, and nothing is hard-deleted.
What was built
A Czech-language dashboard with fines, players, a price list and an admin area. Admins sign in with e-mail and password.
Proof points
- Postgres row-level security is the real gate: the public role can read four tables and can never insert, update or delete.
- Every admin action re-checks the admin’s rights on the server, even if the screen hides the button.
- Fines snapshot their amount when issued. Players deactivate, fine types archive and fines are voided, so nothing is lost.
- Covered by unit tests, tests against the live database’s security rules, and browser tests at two screen sizes.
Built with
- Next.js 16
- Supabase (Postgres, Auth, row-level security)
- Tailwind
- Vercel
Want something like this built?
Tell me about your business. I’ll send a short video and a homepage preview, or tell you within 2 working days if I can’t take yours on. No obligation.