W skrócie
Gravity Gym to polski klub oferujący treningi parkour, breakdance i akrobatyki. Działali na arkuszach — tracili czas na manualne śledzenie i pieniądze na płatnościach, które wymykały się systemowi. Zbudowaliśmy kompletną platformę: marketingowy landing page, panel admina do treningów i płatności oraz portal klienta. Integracja P24 sprawia, że rodzice mogą płacić online; obecność i rozliczenia są teraz automatyczne. Dostarczyliśmy też pełną automatyzację fiskalną — dedykowany serwer na Raspberry Pi u właściciela steruje drukarką fiskalną Novitus przez NoviAPI, więc każda płatność online jest automatycznie księgowana i fiskalizowana, bez żadnej ręcznej pracy.
Kontekst klienta
Gravity Gym to obiekt treningowy w Polsce skupiony na dyscyplinach ruchowych: parkour, breakdance i akrobatyka. Klientelę stanowią głównie dzieci i nastolatkowie, co oznacza, że większość kont prowadzą rodzice — często z kilkorgiem dzieci zapisanych na różne zajęcia.
Przed Bentfly wszystko działało na arkuszach. Listy klientów, obecność, śledzenie płatności — wszystko ręcznie. Właściciel wiedział, kto jest zapisany i mniej więcej kto co jest winien, ale system przeciekał. Płatności były pomijane, przypomnienia nie wychodziły, a rozliczanie miesiąca zajmowało godziny.
Wyzwanie
Główny problem to nie tylko nieefektywność — to była utrata przychodów. Gdy śledzisz dziesiątki klientów na wielu typach treningów, z różnymi stawkami i obecnościami, arkusze zawodzą po cichu. Pominięta płatność tu, zapomniane zajęcia próbne tam. Klub wykonywał pracę, ale nie ściągał należnych pieniędzy.
System musiał obsługiwać specyfikę polskiego rynku: miesięczne cykle rozliczeniowe, Przelewy24 do płatności kartą, interfejs po polsku i strukturę kont rodzic/dziecko, w której jeden rodzic zarządza wieloma zapisanymi dziećmi.
Nasze podejście
Potraktowaliśmy to jako problem operacyjny biznesu, a nie tylko projekt strony. Landing page był standardem — czego klub naprawdę potrzebował, to system, który zamknie pętlę między „klient przyszedł na zajęcia” a „klient zapłacił”.
Wybraliśmy Supabase do backendu: PostgreSQL z wbudowaną autoryzacją, możliwościami real-time i row-level security dla izolacji multi-tenant. Next.js 15 z server actions utrzymał stack nowoczesnym i wdrażalnym na Vercelu bez narzutu DevOps.
Model kont rodzic/dziecko był kluczową decyzją projektową. Zamiast traktować każde zapisane dziecko jako oddzielnego użytkownika, zbudowaliśmy system, w którym rodzice widzą jednolity dashboard ze wszystkimi swoimi dziećmi, ich treningami, historią obecności i statusem płatności w jednym miejscu.
Co dostarczyliśmy
Landing page
- Sekcja hero z animowanymi odsłonami
- Podstrony usług dla każdej dyscypliny
- Strona cennika z czytelną strukturą stawek
- Wyświetlanie harmonogramu treningów
- Formularz kontaktowy z integracją mailową
- Zapisy na wydarzenia z Google Calendar
Panel administracyjny
- Pełne CRUD klientów i śledzenie zajęć próbnych
- Zarządzanie harmonogramem treningów
- Śledzenie obecności na sesję
- Zarządzanie płatnościami (gotówka + P24)
- Miesięczne podsumowania finansowe
- Profile trenerów i przypisania
Portal klienta
- Spersonalizowany przegląd z treningami
- Widok wielu dzieci dla rodziców
- Historia i status płatności
- Historia obecności
- Flow zajęć próbnych
- Ustawienia konta
Integracja płatności
- Pełna integracja z Przelewy24
- Obsługa webhooków z walidacją IP
- Weryfikacja podpisu
- Śledzenie statusu transakcji
- Obsługa płatności online + gotówkowych
Pełna automatyzacja fiskalna (Raspberry Pi + Novitus)
W Polsce każda płatność za usługi fitness wymaga wystawienia paragonu fiskalnego. Wcześniej oznaczało to codzienną, ręczną pracę: logowanie do panelu płatności, sprawdzanie przelewów i drukowanie stosu paragonów na drukarce fiskalnej. Cały ten proces zautomatyzowaliśmy.
Stworzyliśmy dedykowany serwer on-premise oparty na Raspberry Pi, działający u właściciela klubu obok drukarki fiskalnej Novitus. System co 60 sekund pobiera nowe płatności z Przelewy24, automatycznie drukuje paragony przez protokół Novitus NoviAPI i zapisuje status wydruku w chmurze. Każdego dnia o 23:55 generowany jest również raport dobowy — bez potrzeby jakiejkolwiek ręcznej obsługi.
Serwer Raspberry Pi
- Flask + APScheduler + SQLite, działa jako usługa systemd
- Wyłącznie ruch wychodzący — żadnych otwartych portów na routerze
- Żądania do API w chmurze podpisane HMAC-SHA256
- Lekki dashboard monitoringu wystawiony przez Cloudflare Tunnel
Integracja Novitus + NoviAPI
- Pełny lifecycle NoviAPI: JWT, POST → PUT → long-poll do DONE
- Idempotentny druk po sessionId z P24 — zero dubli paragonów
- Automatyczny raport dobowy o 23:55
- Samonaprawa po zaniku WiFi, braku papieru i restarcie Pi
Rezultaty
Stack
Pracujesz nad podobnym projektem?
Skontaktuj się
