Skip to content
Client product

NAVIGYM.cz

I built the website and booking system for NAVI, a private gym in Plzeň. Customers book the whole space, pay online and receive a code that opens the door for their visit.

Full-stack developer
NAVI Private Gym
2026

Product
Unstaffed private gym
Scope
Website, booking, payment, access and admin
Role
Full-stack development
Integrations
Comgate · Nuki · Resend · Supabase
Project visualAuthentic product interface
Admin daily overview · sample data
Admin daily overview · sample data
Reservation management · sample data
Reservation management · sample data

About the project

The gym runs without a receptionist. Customers need to arrange their visit online, and the owner needs to see bookings, payments and door access in one place. I built both the customer website and the administration behind it.

What it does

  • Booking and payment: customers choose one or more 75-minute slots and pay for them together through Comgate. They can book without an account. Selected slots are held during checkout to prevent two people from paying for the same time.
  • Customer accounts: upcoming visits, booking history, downloadable documents and options to move or cancel a reservation. Registered customers also see their progress towards every tenth qualifying visit free.
  • Door access: each visit gets its own Nuki PIN, valid only for the booked time and the shower allowance. The system checks the code with the lock before sending it by email. Customers can also opt into WhatsApp delivery.
  • Pricing: the owner can change entry prices, schedule promotional periods and create fixed or percentage discount vouchers. A fully covered booking is confirmed without sending the customer to checkout.
  • Daily administration: a calendar, opening hours, closures and customer records. Today and Tomorrow views show which visits have their payment, code and messages ready, so the owner can spot a problem before someone arrives.
  • Finance: payment totals, booking and occupancy statistics, PDF billing documents and resending by email. Collected money is shown separately from discounts; refunds are handled by the operator in Comgate.
  • Website content: photos, equipment, pricing and FAQs, with editable copy, media and email templates. The site also supports newsletter signup and unsubscribe, calendar downloads and separate analytics and marketing consent.
  • When something fails: scheduled checks retry payment verification, access-code preparation and message delivery. The admin shows failed steps, delivery history and lock events that need attention.

Built with

Next.js 15, React 19 and TypeScript run the website, customer account and admin. The interface uses Tailwind CSS, React Hook Form and Zod; FullCalendar provides the admin calendar.

PostgreSQL on Supabase stores bookings and payments, with Drizzle ORM for database queries. Database checks prevent overlapping reservations. Supabase also provides sign-in, media storage and live availability updates.

Comgate handles payments, Nuki manages door access, Resend sends email and Zernio handles WhatsApp PIN delivery. PDFKit generates billing documents. Each provider’s result is tracked so the owner can see what succeeded and what needs another attempt.

The app runs on Vercel, with scheduled checks for bookings, access and message delivery. Sentry records errors. Unit and database tests cover the booking logic; Playwright and axe check browser flows and accessibility.

Working on something like this?

I take selected product work and I am open to senior engineering roles. Email is fastest.

Get in touch