Problem
Planirani bilijar klub trebao je kompletnu operativnu platformu — za članove koji rezervišu stolove, prijavljuju se na turnire i prate svoje mečeve; za osoblje koje upravlja stolovima, turnirima, naplatom i ligaškim sezonama. Sve to od prvog dana.
Šta smo napravili
Tri komponente. .NET, sa punim domenskim modelom (stolovi, rezervacije, turniri sa bracket vizualizacijom, sezone, naplata sesija po stolu, korisnički nalozi, zaposleni). Next.js dashboard za osoblje. Nativna iOS + Android aplikacija (Expo + React Native) za članove. Identity preko Keycloak-a, tako da je autentifikacija članova, SSO između aplikacija i upravljanje ulogama osoblja bilo enterprise-grade od starta. Centralni log preko Seq-a, da svaki incident može da se brzo pronađe.
Moduli i celine
- Rezervacije stolovaČlanovi rezervišu stolove iz mobilne aplikacije; osoblje vidi i upravlja rezervacijama iz dashboard-a.
- Turniri sa bracket vizualizacijomPun ciklus turnira — prijava, kreiranje bracketa, praćenje rezultata, finalna tabela. Posebna stranica za vizualni prikaz bracketa.
- SezoneModul za organizaciju ligaških sezona — kalendar, učesnici, vezivanje turnira za sezonu.
- Naplata sesija po stolu (turnovers)Praćenje koliko se igralo na kom stolu i koliko je naplaćeno — operativna evidencija za samog vlasnika kluba.
- Članovi i korisnički naloziRegistracija članova, profili, istorija turnira i rezervacija.
- Zaposleni i ulogeOsoblje sa različitim nivoima pristupa — operatera, menadžera — sa ulogama.
- Centralni log (Seq)Svaki bitan događaj u sistemu (kreiranje rezervacije, brisanje, neuspešan auth) ide u Seq, gde se može pretraživati i alarmirati.
- Nativna mobilna aplikacijaiOS + Android kroz jednu Expo / React Native kod bazu — članovi rezervišu, prijavljuju se na turnire, vide svoju istoriju.
- Dashboard za osobljeNext.js aplikacija — pregled svih rezervacija, upravljanje turnirima i sezonama, naplata sesija, izveštaji.
Kako smo pristupili
Pristupili smo sistemu kao dugotrajan projekat. Keycloak smo izabrali jer autentifikacija članova nije trivijalna (SSO preko aplikacija, OAuth tok za mobilnu aplikaciju, reset lozinke, role-based pristup) i nismo hteli da to ponovo izmišljamo. Seq smo izabrali jer voditi sistem za klub znači brzo odgovoriti na pitanje "zašto rezervacija ovog člana nije prošla" — bez centralnog loga, to bi bio sat istraživanja po server fajlovima. Clean Architecture za API jer smo očekivali duge cikluse iteracije, sa novim funkcijama dolaze tokom godina rada kluba.
Rezultat
Napravljeno, testirano, spremno za produkciju. Klub se nije otvorio, pa sistem još uvek nije ušao u stvarnu upotrebu. Projekat ostaje u portfoliu kao dokaz kako pristupamo sistemima koji su predviđeni za dugu upotrebu — arhitekturalne odluke i dalje stoje, čak iako se lansiranje još uvek nije desilo.