Izazov
Željezna Generacija u Hrasnici vodila se iz sveske i grupnog chata. Tri pitanja su svaki put tražila ručno prebrojavanje: ko je trenutno član, kome članarina ističe ove sedmice i da li je ovaj mjesec pokrio troškove. Gotovi programi za teretane traže plaćanje karticom, rampe i aplikaciju na telefonu svakog člana — a ništa od toga ne opisuje teretanu u kojoj većina plaća keš na pultu.
Pristup
Projektovali smo oko pulta, a ne oko liste funkcionalnosti. Prvo pitanje nikad nije bilo koje module teretana želi — nego šta se dešava u devedeset sekundi dok član plaća, ko dira zapis, i šta vlasnik mora vidjeti prvog u mjesecu. Iz toga je izašla jedna odluka iz koje slijedi sve ostalo: zapis o članu nije nalog za prijavu. Članovi postoje u sistemu bez obzira na to hoće li ikad išta instalirati, a aplikacija je opcija za one koji je žele, ne uslov da bi te sistem brojao.
Rješenje
Jedna Next.js 16 aplikacija nad jednom Postgres bazom, sa tri površine: javna web stranica, portal za članove pravljen za telefon, i panel vlasnika. Članarine, gotovinske uplate, zalihe i prodaja suplemenata, narudžbe, oprema, troškovi i upiti sa stranice žive u istom sistemu, pa se slika mjeseca sama slaže umjesto da se rekonstruiše. Cijene i zalihe računaju funkcije baze — klijent šalje šifru paketa i količinu, nikad iznos — a sigurnost na nivou reda na svakoj tabeli drži finansije, nabavne cijene i tuđe podatke van dohvata članskih naloga. Sadržaj javne stranice se uređuje iz panela, pa promjena cijene ili dodavanje fotografije ne traži programera.
Tehnologija
Next.js 16 (App Router, serverske komponente), TypeScript, React 19, Tailwind CSS v4 na Base UI-ju, Recharts, i Supabase za Postgres, prijavu i objektni storage — 15 tabela, 38 politika na nivou reda i 12 SQL funkcija, uz testnu skriptu koja podigne privremenu bazu i provjeri sigurnosna pravila umjesto da im vjeruje. Hosting na Vercelu, baza u Frankfurtu.
Ishod
Vlasnik otvori jedan ekran i mjesec je tu: prihod, trošak, neto, aktivni članovi, kome ističe u sedam dana, koji suplementi idu pri kraju, koji upiti nisu odgovoreni. Članovi kojima članarina ističe sami dobiju mail. Web stranica teretane više nije stvar koju mijenja programer — cjenovnik, galerija, radno vrijeme i priče o transformacijama uređuju se u panelu, a vodič od 51 koraka objasni cijeli panel jezikom kojim vlasnik stvarno govori.