← Journal
methodology·14 Apr 2026·7 min read

Howwebuiltaclubmanagementsystemin12weeks

Twenty-six modules, four user roles, three languages — built for one hockey school, designed to run any team sport next.

When HK Vojvodina came to us, the club had been running on Excel, Viber groups and paper folders for over a decade. Coaches marked attendance by hand. The medical staff kept injury records in a physical binder. Parents got training cancellations via a group chat that moved too fast to track. Nobody had a single honest answer to "did Marko pay for November and how is his skating rating trending."

Twelve weeks later the whole club runs on one system. Here is what actually shipped, what did not, and what we learned.

We started by mapping the real work — not the org chart. A coach at 7am opens the roster, marks who showed, drops a note on a drill. A parent checks the schedule on the way to work. The board runs a report once a month. Four genuinely different jobs, four different UIs. That gave us four user roles: admin, coach, parent, player. Everything flows from there.

The platform has 26 modules in total. Twelve are fully live: training schedule with recurring events, attendance, skill evaluations, invoices and payment tracking, medical records, competitions with live match stats, news, photo gallery, notifications, reports, public website, and CMS. Another handful are stubs on the roadmap — online checkout, video analysis, an AI assistant for drill suggestions. We shipped what was painful today, not what might be cool later.

The tech is unglamorous on purpose: Next.js 16, Supabase for database and auth, shadcn/ui, TanStack Query. Row-level security on every table so a parent literally cannot read another kid's data. Recurring events use RRULE so "Monday 6pm, skip Christmas week" is a single row, not 52. Materialised views keep tournament stats fast without any caching layer of our own.

The biggest lesson: online payments are not the hardest part of a payments module. We built the whole invoicing, tracking and reconciliation flow first — and will switch it on to an online processor only when the club asks for it. Most clubs pay by bank transfer and a printed invoice already works. Chasing online checkout in week two would have cost us two working modules elsewhere.

The architecture is deliberately sport-agnostic. Skating, shooting and hockey-specific skill categories live in one module. Swap that module and the same platform runs a football academy, a volleyball club, a swim school. That is the next phase — the first non-hockey client starts in May.

Ready when you are

Havesomethingtobuild?

Tell us what you're working on. We read every message and reply within one business day — with a real opinion and a rough number.