Will Ellis

Next.js 16 · Prisma · Stripe Connect · Expo

Ballrs — football club management platform for web and mobile

A greenfield SaaS product for grassroots football clubs — memberships, event sign-ups, squad selection and stats, with Stripe Connect payouts to club managers and a companion Expo app.

Overview

Product: Ballrs (original product)
Role: Lead engineer — product, architecture and build
Platforms: Web app and native mobile app

Ballrs is a club management platform built for grassroots football in the UK. Managers run their clubs, events and squads from one place; players join clubs, subscribe, sign up to sessions and track their stats.

What it does

  • Two-sided roles: every user is a player or a manager, with player profiles covering position, preferred foot, physical details and football history.
  • Clubs and memberships: managers set a subscription price and interval (weekly, monthly or yearly) and players subscribe per club.
  • Events: practices and games with capacity limits, free-for-members pricing and one-off payment links for non-members.
  • Squads and pitches: managers build teams, assign players to pitches and pick starting, bench and reserve squads for games, publishing the team when ready.
  • Stats: seasonal appearances, goals, assists and clean sheets, with a suggestion-and-approval flow for stat corrections.

Technical details

Payments

The payment model runs on Stripe as a marketplace. Managers onboard through Stripe Connect Express to receive subscription revenue directly; players pay through recurring subscriptions (one per player per club) or one-off event payments. Each sign-up records how it was paid for — subscription, one-time or free — along with its payment status, so refunds and failed payments are traceable.

Data model

A PostgreSQL schema managed with Prisma 7 models users, clubs, memberships, events, sign-ups, teams, pitch assignments, game squads, stats and subscriptions, using enums and unique constraints to enforce the business rules at the database level.

Auth and sync

Clerk handles authentication. Clerk webhooks, verified with Svix signatures, keep the Prisma user records in sync, and a separate Stripe webhook route keeps subscription and payment state current.

Stack

  • Web: Next.js 16 App Router, React 19, TypeScript, Tailwind CSS 4, Prisma with the native pg adapter, Clerk, Stripe, AWS S3 for media.
  • Mobile: Expo and React Native with expo-router file-based routing (mirroring the web app's structure), bottom-tab navigation, Reanimated animations and haptic feedback.