Fieldhour is a booking system for one operator who runs one or more venues: a padel and tennis centre, a turf with splittable pitches, a coworking space with meeting rooms, desks and podcast booths. It is built by DEV3 Technologies on Laravel 12 and Filament 4. Bookers reserve on the web or in the Flutter booker app, staff run the day from a front-desk grid, and partners such as schools and leagues manage their own block bookings.
What it does
- Live hourly grids. Courts down the side, half-hours across, peak prices shaded, slots held for a few minutes with a countdown while the booker adds equipment and pays. Two people can never hold the same slot.
- Combined resources. A full pitch and its two halves block each other for overlapping time, in both directions.
- Pricing rules. Peak and off-peak bands, weekend and member prices, priorities, minimum charge, and a rule simulator that answers what Court 3 costs on Saturday at 18:00 for a member. A booking that crosses a band boundary is priced slot by slot.
- Split payments. The organiser pays their share and each friend gets a pay link that works without an account. At the deadline the organiser is charged the rest or the booking is released and paid shares are refunded, as you configure.
- Open matches. Post a booked court with spots left and a level; other players join and pay their share.
- Memberships and packs. Plans with credits that cover whole slots, member prices, a longer booking window and a release time.
- Block bookings for partners. Weekly or fortnightly series for schools and leagues, skip or move one date, change this and following, with a clash preview before anything is created, and a monthly partner invoice on account.
- Equipment. Rackets, balls, bibs, projectors and microphones with stock per slot, hand-out and take-back at the desk and a damage fee.
- Front desk and door kiosk. A desk grid with walk-in booking and drag to move, cash or card, and an installable kiosk page that scans a rotating QR pass or a six-digit code and tells the player which court is theirs.
- Reports. Utilisation heatmap by court and hour, revenue by venue and sport, peak against off-peak, split completion, no-shows, credits and equipment, plus a Court Clock on the dashboard.
- API and app. A key-based REST API with an OpenAPI document and signed webhooks, and the source of a Flutter booker app with sign in, grid, booking, split, pass, memberships and open matches (see below).
The Flutter booker app
Fieldhour ships as a venue-booking web product plus a Flutter booker app (apps/booker, Android and iOS source, dark first, demo mode on by default). Players browse venues, read the grid with peak shading, hold a slot, add players, equipment and credits, split the cost, pay a friend's share by link, show a rotating QR pass, join open matches and manage membership and wallet. docs/STORE-PUBLISHING.md (also in the buyer guide as "Publishing the apps") covers re-id, icons, the build flags that point the app at your server, Android and iOS store steps, data-safety notes and push setup.
Quality checks
The release passed seven gates on the final code: Larastan level 6 with 0 errors, a Pest suite of more than 220 tests, a build well inside the page budget, migrations and the full demo seed on MySQL 8 and SQLite, a headless smoke test with happy paths for the booker, the desk and partners, race checks on MySQL (six holds on one slot, full pitch against half pitch, a release-time rush, the last rackets, a share paid against the deadline), the installer driven from the zip and a secret scan. A consistency command proves bookings, shares, credits and equipment agree on about 99,000 demo bookings.
What you should know before buying
- One operator, several venues. It is not a marketplace where many operators sign up.
- Payments are simulated. Card payments, split payments and refunds use a simulated driver until you connect your own gateway; you are the merchant of record. No payment-compliance certification is claimed.
- No hardware drivers. Floodlights, doors and turnstiles are not driven; Fieldhour sends signed
lights.on and door.open webhooks that your own relay can act on.
- Web booking is simple. Recurring bookings and extending a booking are in the app API and the staff panels, not in the web booker flow.
- Desk grid drags to move a booking with a mouse; there is no touch drag, and extending is done on the booking page with a price preview.
- Maps in the demo are static drawings; map tiles are a configuration step for your own venues.
- Flutter app. The booker app source is included with a store-publishing guide; building, publishing and store approval are your step and are not promised. The app was verified in simulator builds, automated tests (including the pricing and split vectors) and against the live API, not on a physical device. Push is simulated and the app makes no payment-compliance claim.
- App scope. Only booker accounts can use the app (staff logins are refused). The booker web flow has no recurring booking or extend, but the app has weekly repeat and extend; the series-conflict preview is covered by tests.
- Use MySQL or MariaDB for a live site; the concurrency checks were run on MySQL 8. One cron entry every minute is required.
Included
Source code, the web installer, the Flutter booker app source with a store-publishing guide, a buyer guide, demo data with a fictional operator, three venues, 46 courts, rooms and desks and a year of bookings, and six months of support.