Skip to main content
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 PARA field rental booking page at parafields.com, built by Sprintt

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.