PlayTennisMarin

Mar. 2026 - Present

An iOS app for a Marin County tennis league. Players enroll, pay, and report match scores. Built with AI coding tools.

AI-Assisted Development React Native Expo iOS Node.js Product Design

Overview

PlayTennisMarin is an iOS app for a recreational tennis league in Marin County. Players enroll in a season, pay with Apple Pay or Venmo, and report their match scores. My mom runs the league and was doing all of it by hand over email.

I built it using AI coding tools.

What I Did

How It Works

A React Native app sends and receives data to and from an Express backend. There's no database. Session info is sent to Airtable, which my mom edits directly, and completed enrollments get written back there for her to work from.

Apple Pay enrollments finish on the server rather than on the phone. The app requests a payment intent, and a Stripe webhook completes the enrollment after the charge goes through, so someone who loses signal partway still ends up enrolled with a confirmation email. If the app can't reach live data it falls back to the last good response, and then to a baseline shipped with the backend, so it never just fails to load.

Tech Stack

App
React Native / Expo SDK 54, JavaScript, iOS only
Backend
Node.js / Express on Railway
Payments
Stripe, plus a Venmo/Zelle option
Data
Airtable, editable by the league admin
Email
Resend, with SPF / DKIM / DMARC set up
Error Monitoring
Sentry
Distribution
EAS Build, TestFlight, App Store
AI tools
Claude for planning, Claude Code for the implementation

What I Learned

Most of my time went to things that weren't code but rather design-based like whether a confirmation email asking for a Venmo payment reads as a scam or if the app is clear and easy to use for an older user base.

Could I code an app from scratch by myself? Absolutely no way. This project mostly taught me how to use an agentic coding tool efficiently and effectively. I learned how to manage context windows, choose the appropriate model, and oversee multiple agents.

I also ended up learning a lot about DNS records, email deliverability, API rate limits, and staging environments.

Some Concepts and Terms I Learned

Webhook
A webhook is triggered by a specific action in an application which will send the event details in a packet to an "endpoint" which is provided by the receiving app. The receiving app processes the information however it sees fit, and then sends back an acknowledgement.
API Keys and Secrets
An API key is a sequence of characters you send with a request that proves you are who you claim to be.
SPF / DKIM / DMARC
SPF is a list of servers allowed to send email on your domain. DKIM attaches a signature to the email which the receiver verifies with a public key. DMARC verifies that SPF or DKIM passed and that the domain that passed matches the one in the From address, then enforces a policy on what happens when it doesn't.