PRO FORMA, System Studia Treningowego
Strona butikowego studia treningowego i cały system, który je obsługuje: grafik, karnety, rezerwacje, płatności, kasa i raporty. Publicznie grafik zajęć, cennik, opisy zajęć i blog, a po zalogowaniu trzy panele: klienta, trenera oraz recepcji z administracją. Karnety kupuje się i opłaca online, a na wejściu klient pokazuje kod QR z telefonu.
Więcej o projekcieZwiń opis
- Panel klienta: grafik z zapisem na zajęcia, lista rezerwowa z automatycznym awansem, odwoływanie według regulaminu, karnety, zakup online i powiadomienia push.
- Kod QR na wejście rysowany na serwerze jako SVG, więc pokazuje się nawet przy jednej kresce zasięgu; recepcja skanuje go kamerą telefonu albo czytnikiem.
- Panel recepcji i właścicielki: grafik z powielaniem tygodnia i automatycznym odwoływaniem zajęć przy niskiej frekwencji, klienci, kasa ze zmianami, sklepik, raporty do Excela, cennik i regulamin edytowane bez programisty.
- Panel trenera: kalendarz treningów personalnych, własna dostępność, podopieczni z pomiarami i zdjęciami postępów, które serwer wydaje tylko uprawnionym.
- Trzy bramki płatnicze pod jednym interfejsem: Elavon (aktywna), Stripe i Tpay; operatora przełącza się w panelu, a klucze leżą zaszyfrowane w bazie.
- Powiadomienia push napisane od zera w PHP według RFC 8291 i 8292, bez bibliotek, sprawdzone testem na oficjalnym wektorze ze specyfikacji.
- 1086 testów automatycznych, 226 tras, 108 ekranów, 47 modeli danych; aplikacja instaluje się na telefonie jako PWA i ma tryb offline.
Jak to jest zrobione
System powstał najpierw w Next.js, a potem przepisałem go w całości na Laravel 13 i PHP 8.3, bo hosting klienta nie uruchamia Node.js. Harmonogram zadań działa na hostingu współdzielonym bez proc_open: własna tabela pulsu crona i straż, która przy ruchu na stronie alarmuje, gdy cron zamilknie. Rezerwacje liczą wolne miejsca pod blokadą w transakcji, więc dwie osoby nie zajmą ostatniego miejsca naraz. Cena i nazwa są przepisywane do każdej płatności, zmiana cennika nie rusza historii, a saldo kasy jest liczone z ruchów, nie przechowywane.
Elavon nie pozwala ustawić adresu powiadomień, więc potwierdzenie zapłaty odpytuje operatora co pięć minut i sprawdza kwotę co do grosza. Kreator planów treningowych z biblioteką ćwiczeń jest napisany i czeka na włączenie jednym ustawieniem.






