HKVojvodina—onesystemforahockeyschool
We took a club running on Excel, Viber and paper folders, and put it in one system everyone actually uses.
- Players managed
- 200+
- Modules across 4 roles
- 26
- Languages live
- 3
- From zero to running club
- 12w
The brief
HK Vojvodina is a youth hockey school in Novi Sad. Coaches kept attendance in Excel, the medical staff in paper folders, parents on Viber, tournament brackets in Google Docs. Nothing talked to anything else. A question like "did Marko pay for November and skip training twice last week" took half an hour of scrolling through five tools.
What we built
One platform with 26 modules across four roles — admin, coach, parent, player. The core modules that ship: training schedule with recurring events and drill library, attendance with mobile mark-in, skill evaluations (ratings across technique, skating, game sense), invoices and payment tracking, medical records with injury history, competitions with live match stats, news and gallery on the public site. Role-based access end to end: parents see only their child, coaches only their groups, the board sees everything. Serbian (Cyrillic + Latin), English and Russian from day one.
Schedule — the module people actually open
The schedule became the most-used screen in the app, so we spent real time on it. Filters by group, age category, venue, coach and event type so a parent with two kids in different groups sees only what matters. A print-friendly view — the physical whiteboard in the rink still exists, and coaches still like a weekly printout on the door. Recurring events through RRULE with exceptions (skip Christmas week, move Tuesday's ice to Wednesday) handled as data, not as 52 separate rows.
What it runs on
Next.js 16 with Server Components, Supabase Postgres with row-level security on every table, shadcn/ui, TanStack Query. Recurring training events use RRULE. Materialised views keep tournament stats fast. Hosted on Vercel. Invoicing is manual for now (we generate PDFs and track payment status) — online checkout is the next phase.
Where it goes next
The architecture is sport-agnostic by design — hockey-specific bits live in one module, everything else (roster, schedule, payments, medical, parent portal) works for any team sport. The next clubs in line are football and volleyball academies. Same platform, different sport module.
A few recent projects
More work
that actually
ships.
OHM Agency — the engineering half of a creative studio
Long-running partnership with a Belgrade creative studio. We do the engineering, the AI work, and the internal tools that keep everything running.
Propeleri — a free tool for an amateur hockey team
A simpler, lighter version of the club platform, made for an amateur team. Roster, games, training, tournaments, stats — all self-managed by the players.
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.