F Bar by FTV
Table reservations, ticketed events & an admin back office for nightlife venues
Sell tables, bottle service, and ticketed nights — without ever double-booking a seat.
A full-stack booking and venue-management platform for bars, clubs, and event spaces — table reservations, ticketed events, guest lists, and an admin back office. Guests browse upcoming events, pick a date and table tier, choose a package (cover, bottle service, or VIP booth), and pay through a responsive React + Vite SPA backed by a Node/Express REST API and a PostgreSQL data layer. A transactional inventory engine with row-level locking and TTL holds prevents double-booked tables, payments confirm only on server-verified webhooks, and the venue team runs everything from a role-gated admin console with live capacity meters, guest-list approvals, and CSV door export.
Features built in
Booking & Inventory Engine
- Finite table inventory modeled per event, tier, and time slot
- Reservation writes wrapped in DB transactions with row-level locking
- Temporary holds with TTL expiry that release tables back to the pool
- Availability endpoint returns real-time remaining capacity per tier
- Idempotency keys so a retried booking never charges or seats twice
Guest Booking Funnel
- Multi-step funnel: event → date → table tier → package → checkout
- Cart and step state managed via context + reducer hooks
- React Hook Form with Zod schema validation on every step
- Optimistic UI on reserve actions with automatic rollback on failure
- Mobile-first responsive layout for on-the-go bookings
Auth & Roles
- JWT access tokens with refresh-token rotation
- Role claims separating guests, hosts, and admins
- Route guards on the client and middleware on the API
- Password hashing with bcrypt and rate-limited login
- Session restore on reload via silent refresh
Payments
- Hosted checkout redirect for PCI-safe card capture
- Server-verified webhooks as the single source of truth
- Booking flips to confirmed only on payment-succeeded event
- Signed webhook verification to reject spoofed callbacks
- Refund and cancellation flows that restore table inventory
Admin Back Office
- Event calendar with live capacity meters per tier
- Bookings table with search, status filters, and pagination
- Guest-list submission and approval workflow
- CSV export of confirmed guests for door staff
- Role-gated dashboard accessible only to venue admins
Front-End Platform
- React 18 SPA bundled with Vite for fast HMR and lean output
- Lazy-loaded route chunks via React Router v6
- TanStack Query for server-state caching and revalidation
- Tailwind CSS design system with venue-branded theming
- Day.js for timezone-safe event date handling
- A nightclub selling VIP booths and bottle-service packages for weekend events
- A rooftop bar taking table reservations with cover charges
- An events space managing ticketed nights with guest-list approvals
- A restaurant group running multiple venues from one admin back office
From idea to live in 4 steps
Enquiry
Tell me what you want to build using the form below — platform, features, budget, and timeline.
Quote & Scope
Within 24 hours you get a fixed quote, a clear scope, and a delivery plan — no surprises.
Design & Build
I design and build in weekly milestones with live previews so you watch it come together.
Deploy & Support
I ship it live — web, App Store, Play Store — and stick around for support and iteration.
Common questions
Can it handle multiple venues?
Yes — events and tables are scoped to a venue entity, so one admin console can manage several locations.
How are double-bookings prevented?
Reservation writes run inside a database transaction with row-level locking, and unpaid holds expire on a TTL sweep that returns tables to the pool.
Which payment provider does it use?
It integrates a hosted checkout provider (Stripe-style). Bookings only confirm on a server-verified, signature-checked payment webhook.
Is it mobile-friendly?
The funnel is mobile-first and responsive, since most reservations happen on phones.
Can I rebrand it?
Yes — colors, logo, and copy are driven by a Tailwind theme and config, so rebranding is a styling change, not a rewrite.
What's needed to deploy?
A static host or CDN for the SPA, a Node host for the API, and a PostgreSQL database. Config is environment-driven for clean staging/production separation.