Ukraine (Kyiv)
4 months
Atmosfera, a tennis and sports club near Kyiv (Zhytomyr actually), ran into an operational bottleneck: peak/off-peak pricing, indoor vs. outdoor courts, racket and ball rentals, independent coach schedules and recurring cancellation disputes. Their existing tools did not automate this (they used this proven combination of the Telegram Chat Group, Google Sheets and mobile phone – sounds familiar?). The club needed four entities – Customers, Coaches, Administrators and Inventory – in a single system with real-time sync and a prepaid balance engine to eliminate cash-flow errors. And many more tiny issues after, but who counts)
Fully designed, UI UX prototyped and built from scratch on React Native (mobile) and Node.js (backend): one codebase for iOS/Android with real-time sync.
Book a court or join a group session in three taps; memberships, online payments, deduction history, upcoming sessions, adding an inventory and dividing payments.
Daily schedules (repeated weekly), client lists per session, payment status, attendance and training records. How to manage everything from the court being there for 12 hours.
Court configuration, hourly pricing grids, inventory, financial analytics and audit log, initiating pushes, checking the percentage of bookings and expected revenue.
The coach is the center of the app. Trainers set their own availability, receive booking requests as a one-tap confirm or deny (flagged red until they respond), track attendance per session, and see who has paid
Cancellations more than 12 hours before start get a 100% automatic refund; cancellations under 12 hours block automatic returns; admins can override for exceptions.
The front desk adds Name + Phone as a "Guest"; when that person registers in the app with the same number, histories and balances merge.
A booked lesson shows a red pending indicator; the coach gets a push to confirm or deny; a coach cancellation under 12 hours triggers a 100% refund.
lower eye strain for evening sessions.
a horizontal court grid to find open 30-minute slots and book in seconds.
availability bars tied to each coach's schedule.
Before this, memberships, group attendance and the 12-hour cancellation rule meant paper notebooks and spreadsheets. Now the system handles hour deductions, verifies coach schedules and merges phone guests with app profiles. Clients book in three taps and we have full transparency over finances and operations.
Discovery Phase ($300): In two weeks, our CTO and analysts will deliver an RFP – system architecture and integration map, a fixed development price with milestones, and MVP vs. Phase 2 prioritization.
The blueprint is yours to build with another team or with us.
An atomic slot-lock on the Node.js backend. When a slot enters checkout, it is flagged “pending” for 5 minutes and turns non-interactive on all other devices.
Initially, we used Firebase Cloud Messaging – coaches get a push with Accept/Decline buttons, same as a push notification that gets the player; Email Architecture sends transactional email summaries to users.
Yes, once the app went live, we implemented both options: required payment during the booking process and optional cash payment on the deck after the session. The second one is for those who are not sure they will arrive.
We would love to help you with your custom app via Coderfy, just as we run a SaaS solution for the padel and tennis clubs with the separate product brand cortclub.com for the EU-based clubs and Courtefy.com for the UK.
The first version did one thing — let players book a tennis court. Real use pulled in the rest: padel alongside tennis, individual and group coaching, prepaid balances, memberships and a strict cancellation policy. We kept all of it on a single React Native codebase for iOS and Android, synced in real time — so the club runs from a phone, not a back office
Have a question about pricing?
Croatia / Southern Europe
Pre-Launch Beta and stabilization
Saudi Arabia (KSA)
12 weeks to SAMA-compliant MVP
Under the tennis court booking app sits a real-time rules engine.
Every reservation is priced and settled on the fly — sliding peak/off-peak tariffs, equipment-rental limits and deductions from whichever prepaid balance applies (hour passes, monthly groups or vouchers).
A Node.js API handles the processing, while Firebase keeps court availability in sync between the admin and the players’ and coaches’ mobile apps.
Balance roll-downs run as isolated database transactions, so the ledger stays correct even during peak-hour booking.
Background Cron jobs scan timestamps every minute to enforce the 12-hour cancellation rule and release or lock slots automatically.
And because it’s a custom build, the club owns the source code and the data — no per-booking commission, no third-party booking subscription.