Ukraine (Kyiv)
4 months
Atmosfera, a racket sports club in Kyiv, 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. The club needed four entities – Customers, Coaches, Administrators, Inventory – in one system with real-time sync and a prepaid balance engine to remove cash-flow errors.
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, vouchers, deduction history, upcoming matches.
daily schedules, client lists per session, payment status, attendance, training records.
court configuration, hourly pricing grids, inventory, financial analytics, audit log.
Built from scratch on React Native (mobile) and Node.js (backend): one codebase for iOS/Android with real-time sync.
Monthly group enrollments: an upfront monthly fee with automatic session deductions by attendance status (Present, Absent, Cancelled by Coach, Compensation).
Prepaid individual bundles: block purchases for personal sessions, including “paid by colleague” logic.
Gift vouchers: alphanumeric codes for full or partial redemption.
Hour-based passes: bulk hour packages (e.g. 35,000 UAH) with a fixed per-hour discount applied across court types.
cancellations more than 12 hours before start get a 100% automatic refund; 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 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 us or another team.
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.
Firebase Cloud Messaging – coaches get a push with Accept/Decline buttons; Brevo sends transactional email summaries to users.
Yes – the voucher entity has separate Buyer and Recipient fields, so the front desk can activate a voucher against a different player’s profile by reference number.
While a traditional RFQ request for quotation is built to find the “lowest responsive price,” jumping into a project based solely on a quote without technical validation is a recipe for scope creep and budget overruns.
Have a question about pricing?
Saudi Arabia (KSA)
12 weeks to SAMA-compliant MVP
A racket-sports platform processes business rules in real time: sliding hourly tariffs, equipment-rental limits and deductions across prepaid balances (hour passes, monthly groups, vouchers). For Atmosfera, a Node.js API handles processing and Firebase keeps court availability in sync across the admin web and player apps. Balance roll-downs run as isolated database transactions to avoid ledger errors during peak booking. Background Cron jobs check timestamp records every minute to apply the 12-hour cancellation rule and release or lock slots. The client owns the source code and data; there are no third-party booking subscriptions.