Architecture
- FastAPI + PostgreSQL backend with 63 REST endpoints, 18 tables and 31 database constraints, so the database itself enforces the rules, not just the app.
- React 19 frontend served by FastAPI from the same domain: one service, no CORS.
A full-stack platform that runs a chess club of 60+ players: a public website for parents and a secure app for the club's executives.
BUILT WITH
THE PROBLEM
KICA ran attendance, fees and member records through Excel sheets and WhatsApp messages. Fee balances depended on manual calculation, cash was spread across several volunteers with no running totals, there was no record of who changed what, and new members registered informally. As the club grew past 60 players, this became slow, error-prone and hard to audit.
THE HARD PARTS
Keeping club money correct under concurrent use, designing fee logic that matches how the club actually charges, and securing a public-facing system that holds children's and parents' personal data.
WHAT I BUILT
A full-stack platform with two sides: a public website where parents learn about the club and register new players, and a secure executive app for running the club day to day.
INSIDE THE EXECUTIVE APP
The executive app needs a login, so here's a look inside, using made-up sample data.
UNDER THE HOOD
EXCLUSIVE table locks prevent race conditions when two executives add players at the same moment. A functional unique index on (lower(name), date_of_birth) blocks duplicate players.NUMERIC(10,3) to match the Kuwaiti dinar's 3 decimal places, with no floating-point rounding errors.main runs the Alembic migrations first and goes live only if the health check passes.