Building the App the County Didn’t
Shipping my own iPhone app after booking courts kept derailing plans with friends.
The short version
60 second read- The problem
- Booking a public court meant fighting the county’s website. When plans changed, finding a new time was a headache.
- What I did
- Designed and built an iPhone app that books a court in a few taps and warns you about rain, all on your phone.
- How I tested it
- A closed beta with 10 real players, including people from a Charlotte pickleball group I joined. Their notes shaped every build.
- What happened
- 12 builds and 28 days of work later, testers have made 5 real bookings and the app is in App Store review.
About ParkPlay Charlotte
ParkPlay Charlotte is an iPhone app for finding and booking public pickleball courts at 9 Mecklenburg County parks. You sign in with the county account you already have, and everything runs on your phone. It’s independent and not affiliated with the county.
It started as a passion project. My friends and I have played at Charlotte parks for the past two years, and booking courts caused more tension than any game. So I designed it and built it in SwiftUI with Claude Code inside Xcode, to help me and them.
My role
This one is all mine. I designed it, built it, tested it with real players and submitted it to the App Store.
Product strategy
- Found the problem as a player
- Kept everything on the phone
- App Store listing and submission
Research and testing
- Closed TestFlight beta
- 10 real players in the beta
- Marked-up screenshot feedback
Interaction design
- Week at a glance availability
- Search across every park
- Two-tap time selection
Visual design
- Light and dark mode
- Native iOS patterns
- Bars that show how open a day is
iOS development
- Built in SwiftUI
- Claude Code inside Xcode
- Live Activities and weather alerts
UX writing
- Plain labels for courts and times
- Weather alerts that name the hour
- A full summary before you pay
The courts were close and cheap. Booking one on a phone was the hard part.
To reserve a public court, you go through the county’s booking site. On a phone, each park is one long page. Every court is stacked on top of the next with its own party size counter, and open and taken times are white and light gray buttons that look almost the same. Then there’s a captcha before you can pay.
Each park only opens bookings 7 days out. My friends felt the pain too. Over the past two years, booking caused real tension in our group. Getting everyone together was hard enough, and if someone changed the time at the last minute, finding a new slot on that site was a headache. So I built something for me and for them.

Four limits, and the first one was on purpose.
Nothing leaves your phone
I didn’t want anyone’s information on a server, including mine. There’s no ParkPlay account and no backend. You sign in with the county account you already have, and your login stays locked on your phone.
Someone else’s courts
The courts, hours, rules and prices all belong to the county. The app has to match its booking site exactly, or people stop trusting it.
Real money
Reservations and payments are live, even in the beta. Every tap has to be right, because a mistake costs someone real money and a real court.
A team of one
I was the designer, developer, tester and support desk. Every hour spent polishing was an hour not spent on the next build.
A week of open courts on one screen, and a booking in two taps.
I built every screen around the question players actually ask. When can I play? A park opens on the week, with a bar under each day that shows how open it is. Or you can search every park at once for the time you want.
Tap a time and a green button is ready to book it for an hour, while everything that can’t pair with it fades back. Tap the hour next to it to make it 2 hours, like 6 to 8 PM. If rain is likely, the app says so right there and points you to a clearer time before you pay.
It all happens on your phone. The app signs in to the county’s system for you, so there’s no new account and nothing goes to a server of mine. Your login stays on the phone, behind Face ID if you want it. Because I built it myself, every idea could land on testers’ phones in the next TestFlight build.
Small decisions that make booking feel easy.
You still pick slots. After the first tap, the Reserve button is ready for 1 hour and everything that can’t pair with it fades back. Pick 5 PM and only 4 PM and 6 PM stay open. Tap one of those to make it 2 hours, so there’s no way to choose a gap or a length the county won’t accept. Try it with sample times, and pick 6 PM to see a rain alert.
Pickleball #26 openTry it
Tap any open time.
Times with a line through them are already booked.
Sample times, not live county data.

If there’s at least a 50% chance of rain during your hour, you see it the moment you pick a time, with a clearer time you can switch to in one tap. It shows up again before you pay, and strong wind counts too. If rain shows up in the forecast for a court you’ve already booked, your phone gives you a heads-up the day before.

In the 4 hours before you play, your booking shows up as a Live Activity on the Lock Screen and in the Dynamic Island. It counts down to your start time with the park, court and weather, then switches to time left on court. The bar turns orange in the last 15 minutes so nobody gets surprised by the next group.

Each park only books 7 days out, so the whole window fits on one row. The first build showed a number under each day, like 47 open slots. A number doesn’t tell you much on its own, so build 5 swapped it for a bar that stays green while there’s plenty of room and turns orange as courts book up.

Real players marked up my screenshots and showed me what I couldn’t see on my own.
I opened a closed TestFlight beta to 10 real players, including people from a Charlotte pickleball group I joined. They drew right on their screenshots and told me what didn’t make sense. Here’s what they said and what I did about it.

“I was capped at 2 hours, is this intentional?”
Yes, on purpose. The county caps every booking at 2 hours, so the app follows the same rule instead of letting you pick something that would fail at checkout.
“I think a small window view of the map and pin dropped would be a nice touch!”
I added each park’s distance from where you are, and you can tap the address to open it in Maps.
“If you have 4 people, you know you’re in for 4-5 games per hour.”
This is a feature I’m still exploring. Players think in games, not hours, and a simple guide could help a bigger group pick a length where everyone gets to play.
“There is an email based rebooking process in case of rainout.”
That note turned into the weather feature. Now the app warns you about rain before you book, points you to a clearer time, and gives you a heads-up if your booked hour looks wet.
In App Store review, with real players already booking courts.
ParkPlay Charlotte is in review for public release, and it will be my first app on the App Store. I designed the listing too. It leads with speed, ends with privacy, and says plainly that the app isn’t affiliated with the county.
I don’t collect any data, on purpose. So these numbers come straight from testers telling me.

“Great work. I just looked at the latest and loved it!”
David T.Beta tester · version 1.1 (7) “This is such a good platform.”
Max M.Beta tester · version 1.0 (3)
When I build what I design, feedback turns into the next build, not the next meeting.
Challenges
The hardest part wasn’t the screens. It was matching someone else’s system. Hours, limits and prices all come from the county, and any gap between their site and my app showed up in tester feedback fast.
Keeping everything on the phone had a cost too. With no server, the app can’t watch the forecast while it’s closed, so rain alerts are scheduled ahead of time and checked again whenever you open it. I’d make that trade again.
What’s next
I’d show the rules sooner. The 2 hour limit and the county’s rainout process both came up as questions before anyone found the answer on their own.
I’m exploring weekly auto-booking. When your usual time opens up at midnight, the app would book it for you. The county’s rules may not allow it, so I’m still figuring out if it’s possible.
I don’t track anyone. Here’s how I’ll know it’s working.
- Booking without help
Are testers booking on their own, or still asking me how?
ProofFewer how-do-I questions in the group chat would show the flow speaks for itself.
- Rain switches
When a rain alert shows up, do people switch to the clearer time?
ProofTesters telling me they moved instead of getting rained out would show the alert earns its spot.
- Rule questions
Are people still asking about time limits or rainouts?
ProofFewer questions would prove the app explains the county’s rules instead of leaving people to guess.
ParkPlay Charlotte is in App Store review, with a closed TestFlight beta running now.