Bentfly Logo
OffersCase StudiesProcess
PLEN
Let's Talk
  • Offers
  • Case Studies
  • Process
  • PLEN
    Let's Talk
Bentfly Logo

High-performance web solutions built for scale. We help businesses turn ideas into reality with modern technology.

Company

  • Home
  • Process
  • Case Studies
  • Contact

Legal

  • Privacy Policy
  • Terms of Service

© 2026 Bentfly. All rights reserved.

Email

We respect your privacy

We use cookies to understand site traffic and improve our services. You decide what you consent to. Details in our privacy policy.

Gravity Gym logo
Fitness / Sports

Gravity Gym — fitness management platform for a Polish gym

Full-stack fitness management platform for a Polish gym: landing page, admin dashboard, client portal, and Przelewy24 payment integration. Replaced spreadsheet chaos with automated attendance tracking and payment collection — the gym stopped losing money on missed invoices.

Gravity Gym
1-2 months
Visit Site

Services

Web developmentUI/UXPayment integrationLanding page

Tech Stack

Next.jsSupabasePrzelewy24Tailwind CSSVercel

TL;DR

Gravity Gym is a Polish gym offering parkour, breakdance, and acrobatics training. They ran on spreadsheets — losing time on manual tracking and money on payments that slipped through the cracks. We built a complete platform: marketing landing page, admin dashboard for trainings and payments, and a client portal. The P24 integration means parents can pay online; attendance and billing are now automatic. We also delivered an end-to-end fiscal pipeline — a Raspberry Pi running at the owner's home drives a Novitus fiscal printer via NoviAPI, so every online payment is booked and fiscalized automatically with zero manual work.

Client context

Gravity Gym is a training facility in Poland focused on movement disciplines: parkour, breakdance and acrobatics. Their clientele is largely children and teenagers, which means most accounts are managed by parents — often with multiple kids enrolled in different classes.

Before Bentfly, everything ran on spreadsheets. Client lists, attendance, payment tracking — all manual. The owner knew who was enrolled and roughly who owed what, but the system leaked. Payments got missed, reminders didn't go out, and reconciling monthly billing took hours.

Challenge

The core problem wasn't just inefficiency — it was revenue loss. When you're tracking dozens of clients across multiple training types with varying rates and attendance, spreadsheets fail silently. A missed payment here, a forgotten trial class there. The gym was doing the work but not capturing the money it was owed.

The system needed to handle Polish market specifics: monthly billing cycles, Przelewy24 for card payments, Polish-language UI, and a parent/child account structure where one parent manages multiple enrolled children.

Our approach

We treated this as a business operations problem, not just a website project. The landing page was table stakes — what the gym really needed was a system that would close the loop between "client attends class" and "client pays."

We chose Supabase for the backend: PostgreSQL with built-in auth, real-time capabilities, and row-level security for multi-tenant isolation. Next.js 15 with server actions kept the stack modern and deployable on Vercel with zero DevOps overhead.

The parent/child account model was a key design decision. Rather than treating each enrolled child as a separate user, we built a system where parents see a unified dashboard with all their children, their trainings, attendance history, and payment status in one place.

What we delivered

Landing page

  • Hero section with animated reveals
  • Service pages for each discipline
  • Pricing page with clear rate structure
  • Training schedule display
  • Contact form with email integration
  • Event registration with Google Calendar

Admin dashboard

  • Full client CRUD and trial tracking
  • Training schedule management
  • Attendance tracking per session
  • Payment management (cash + P24)
  • Monthly financial summaries
  • Trainer profiles and assignments

Client portal

  • Personalized overview with trainings
  • Multi-child view for parents
  • Payment history and status
  • Attendance history
  • Trial class workflow
  • Account settings

Payment integration

  • Full Przelewy24 integration
  • Webhook handler with IP validation
  • Signature verification
  • Transaction status tracking
  • Support for online + cash payments

Full fiscal automation (Raspberry Pi + Novitus)

Polish fitness services require a fiscal receipt for every payment. The legacy workflow was a daily ritual: log into the payment dashboard, reconcile transfers, then manually print a stack of paragons on the fiscal printer. We removed that step entirely.

We built a dedicated on-prem server on a Raspberry Pi that lives at the owner's home next to the Novitus fiscal printer. Every 60 seconds it pulls newly confirmed P24 payments from the cloud, prints a fiscal receipt over the Novitus NoviAPI protocol, and acks the receipt back as printed. At 23:55 it triggers the daily fiscal report. No human in the loop.

Raspberry Pi server

  • Flask + APScheduler + SQLite, runs as a systemd service
  • Outbound-only pull loop — no inbound ports on the home router
  • HMAC-SHA256 signed requests against the cloud API
  • Lightweight monitoring dashboard exposed via Cloudflare Tunnel

Novitus + NoviAPI integration

  • Full NoviAPI lifecycle: JWT auth, POST → PUT → long-poll for DONE
  • Idempotent printing keyed on P24 sessionId — zero double prints
  • Automatic 23:55 raport dobowy (daily fiscal report)
  • Self-healing across WiFi flaps, paper-out, and Pi reboots

Results

10+ hours
Saved weekly on manual tracking
0
Missed invoices
Online
Parents can pay & manage kids

Stack

Next.js 15
App Router
React 19
TypeScript
Supabase
Database + Auth
Przelewy24
Payments
Tailwind CSS
Styling
Vercel
Hosting
Sentry
Error tracking
PostHog
Analytics
Raspberry Pi
On-prem fiscal server
Novitus + NoviAPI
Fiscal printer
Flask + SQLite
Pi poller service
Cloudflare Tunnel
Remote dashboard

Working on a similar project?

Get in touch