All work
Case study · Youth sports · Nonprofit association
Online field booking with card payments for a youth sports association
PARA rents 18 lighted fields to coaches in two-hour evening slots. Bookings ran on phone calls and a shared calendar, with double bookings and after-hours requests as a fact of life. Sprintt replaced that with parafields.com: a coach picks a date, a time and a field, pays $100 by card, and gets a confirmation email. PARA’s board is notified on every booking and manages everything from one admin page.
- Client
- PARA — Pace Athletic and Recreation Association
- Location
- Pace, Florida
- Timeline
- Scoped, built and launched in under two weeks
- Live site
- parafields.com

The problem
Where it was breaking.
- Coaches booked by phone or text, often after hours, and three volunteer vice presidents handled requests by hand.
- Two coaches could claim the same field for the same evening; nobody found out until both showed up.
- Payment was separate from booking, so there was no single record of who had paid for what.
- A seasonal calendar with five different availability periods a year had to be enforced from memory.
The approach
What we decided before writing code.
- Locked the scope in a one-page specification before writing code: a public booking page and an admin page, nothing else. Anything not in it was a change order, which kept the fixed fee honest for both sides.
- Enforced double-booking prevention in the database, not in application code, so two payments in the same second cannot both succeed.
- Held a slot as pending for ten minutes while the coach pays, then confirmed or released it, so an abandoned checkout never locks a field.
- Kept everything that changes each year in one configuration file: fields, season calendar, slot times, price, notification addresses. PARA never needs a developer for a calendar change.
What shipped
Everything the client got.
- Public booking flow: date, time, field, coach details, card payment, confirmation screen with a reference code a coach can read over the phone.
- Card payments through Square, with idempotent charges so a retry can never double-charge.
- Confirmation email to the coach and a notification to PARA’s three division vice presidents on every booking.
- Admin console behind a shared password: filter by field and date, add phone-in bookings, block a slot, delete an entry, export to CSV.
- Season calendar with five availability periods, a 30-day booking window and a 60-minute cutoff, all in Central time.
- A production runbook so the handoff to PARA was a checklist, not a phone call.
The result
What changed.
- 18 fields bookable online, two slots a night, every evening the season calendar allows.
- Zero possibility of a double booking: the database rejects the second one.
- Every booking has a payment record and a reference code.
- PARA’s board runs the whole system from one page; Sprintt changes the calendar in one file.
Stack
- Next.js (App Router)
- TypeScript
- Postgres on Neon
- Drizzle ORM
- Square Web Payments
- Resend
- Vercel
Have a booking, payment or scheduling problem like this one?
Leagues, gyms, charters, rentals and clinics all have a version of it. A 30-minute consult tells you what a fix costs and how long it takes.