Skip to content
Marketplace & BookingAndroidiOS

Ground Booking

Two-sided sports-ground booking — partner and player apps

A two-sided Flutter marketplace for sports-ground bookings: a partner app where venue owners manage grounds, weekly slot templates and incoming reservations, and a player app for browsing grounds, picking hourly slots on a calendar and tracking payment status — both sharing one Firestore backend.

Ground Booking — app screenshot
Ground Booking — app screenshot
Ground Booking — app screenshot

Both repositories are private. The recurring weekly slot model, the six-state booking pipeline and the manual payment check (deposit plus screenshot, no gateway API) are explained below.

About this project

Ground Booking is two Flutter apps reading and writing the same Firestore backend in real time. Players browse a live-updating, paginated feed of grounds, open a ground's detail page — image carousel, price per hour, supported sports, floor area, WhatsApp/call buttons — and book through a calendar-plus-hourly-slot screen: pick a date on a table calendar, tap open hour chips (24 slots a day, in fixed bands like "6pm-7pm"), and submit a reservation.

Each ground stores its own recurring weekly availability as a week-slots model — a separate list of open hour-indices for every day of the week, so an owner sets the schedule once and it repeats. Grounds carry a real domain vocabulary: 11 sport types (cricket, football, basketball, volleyball, badminton, tennis, hockey, kabaddi, handball, table tennis, squash), an indoor/outdoor ground type, and a pitch type (turf, mat, cement, grass). A ground can also have more than one linked partner account with an owner/admin role tag, and the partner app resolves which ground a signed-in partner manages from that link. On the partner side, incoming bookings are triaged in a status-tabbed dashboard — Reserved, Pending, Approved, Completed — each tab a live, ground-scoped Firestore query, and a booking's full lifecycle runs through six states (Reserved → Pending → Approved → Playing → Completed/Cancelled).

Payment is a manual, verify-by-screenshot flow rather than an integrated gateway: a booking records a token-money deposit, an optional cash flag, a bank/EasyPaisa payment-method reference and an uploaded payment-proof screenshot the venue owner reconciles by hand. Both apps authenticate with Firebase phone/OTP verification (no email/password path) and run on GetX for state and navigation.

Key features

  • Live, paginated Firestore feed of grounds with favorites (heart-toggle) and a game-type/ground-type filter screen
  • Ground detail: image carousel, price/hr, 11 supported sports, floor area, WhatsApp and call buttons
  • Booking flow: table calendar plus 24 hourly-slot chips per day, driven by a per-ground weekly recurring slot template
  • Manual payment tracking per booking: token-money deposit, cash flag, bank/EasyPaisa reference and an uploaded payment-proof screenshot — no payment-gateway API
  • Partner dashboard: status-tabbed live booking queries (Reserved/Pending/Approved/Completed), scoped per ground
  • Multi-partner ground ownership — a ground can have more than one linked partner account with an owner/admin role tag
  • Firebase phone/OTP authentication on both apps

More in Marketplace & Booking

~/sherazi.dev$./say-hello

Say hello.

Questions about a case study, one of the packages, AI tooling or Flutter in general are always welcome.

// or browse the packages on pub.dev(opens in a new tab)