Community Platform · Mobile-First

PickleBrackit

A real-time tournament management platform for pickleball communities. Round robins, brackets, live scoring, and standings — built because the tool we depended on started charging everyone.

Role Solo Creator
Stack Next.js, Convex, Clerk, Tailwind
Status Live

What is PickleBrackit?

PickleBrackit is a tournament management web app built specifically for pickleball. It handles the full lifecycle of community play — creating tournaments, registering players, generating brackets, tracking live scores, and calculating standings with configurable tiebreaker rules.

The platform is mobile-first (players are on-court with their phones) with a web app designed for small screens and a React Native mobile app planned to share the same real-time backend. Players join tournaments via QR codes or 6-character join codes — no friction, no app download required.

The app we relied on started charging

Our pickleball community ran regular round robins and tournaments using an existing app. It worked well enough — until they put it behind a paywall. Suddenly every player needed to pay just to see their bracket, check scores, or register for the next event.

Organizers voiced their frustration — especially casual community organizers who were running free events for fun. Asking every participant to pay for a subscription just to play in a community round robin was a non-starter.

"Greed is the best way to push out your user base — and to potentially create a competitor."

Friends had tournaments planned

My friends and girlfriend are organizers who had tournaments coming up and no tool to run them. Rather than settling for spreadsheets, I built something purpose-built for how our community actually plays — round robins with rotating partners, multi-pool formats, and the occasional MLP-style team tournament.

One thing that annoys me (and several other players) is having to download something new or create an account just to play in a casual tournament. So I made PickleBrackit require zero sign-ups to run a tournament. Many apps try to maximize sign-ups to show usage metrics, but in this space that just creates overhead: "Hey, go to this website, sign up, then go here, then do these specific things the app wants." If I'm a player, I just want to play — not fight through onboarding.

The organizer takes on the setup so players get a stress-free experience. And the organizer is already invested because the tool actually made their life easier. If any player wants to become an organizer later, they ask what tool was used — word of mouth, not forced sign-ups.

From setup to standings in minutes

01

Create a Tournament

Choose format (Round Robin, MLP, etc.), set game rules (points per game, games per match, scoring method), configure tiebreakers, and assign available courts.

02

Register Players

Share a QR code or 6-character join code. Players register instantly — organizers can also send direct invites or create placeholder slots for walk-ups.

03

Generate Brackets

Automatic bracket generation using circle method algorithm. Courts are auto-assigned. Multi-pool support with dedicated courts per pool.

04

Score Live Matches

Game-by-game score tracking with real-time updates across all connected devices. Optional self-reporting with opponent confirmation to distribute the workload.

05

View Standings & Playoffs

Live standings with configurable metrics (win/loss, point differential, head-to-head). Generate playoff brackets from current standings on demand.

Format-agnostic by design

The most interesting architectural decision was building a modular tournament engine system. Each tournament format (Round Robin, MLP, future formats) is implemented as a TypeScript class behind a common interface — handling bracket generation, match completion, standings calculation, and playoff creation.

The core app never touches format-specific logic. A registry pattern maps tournament types to engines: getEngine(typeKey) returns the right engine, and generic tables (tournaments, matches, games) handle shared data while format-specific config tables extend per format.

This means adding a new tournament format — say, double elimination or Swiss — requires writing one new engine file and one config table. Zero changes to the core application.

The stack

Frontend
Next.js 16 + React 19
Backend
Convex (real-time sync)
Auth
Clerk
Styling
Tailwind + shadcn/ui
Language
TypeScript (end-to-end)
Hosting
Vercel + Convex Cloud
Mobile
Mobile-first web + React Native planned
Registration
QR codes + join codes

What makes it work on-court

01

QR Code Join

Scan a code, join the tournament. No download, no lengthy sign-up. Players get into the bracket in seconds — critical for community events where people show up last-minute.

02

Real-Time Everything

Convex powers instant sync across all devices. Score a match on your phone, and everyone's standings update immediately. No refresh needed.

03

Multiple Formats

Round Robin with rotating partners, MLP team format with DreamBreaker rules, multi-pool tournaments with knockout playoffs. Format engine is extensible for new types.

04

Smart Tiebreakers

Configurable tiebreaker chains: head-to-head, point differential, total points scored. Standings calculate automatically using the rules the organizer sets.

05

Score Self-Reporting

Players can submit their own scores with opponent confirmation/dispute workflow. Distributes the scoring workload so organizers aren't glued to a clipboard.

06

MLP DreamBreaker

Full Major League Pickleball format support — team composition validation, fixed lineups (women's, men's, mixed doubles), graduated standings points, and DreamBreaker tiebreak matches.

Filling the gap

PickleBrackit is live at picklebrackit.com and actively used by our community for weekly round robins and tournaments. It replaced a paid tool with something better, free, and purpose-built for how we actually play.

The project demonstrates what I care about most: seeing a real community need, building a production-quality solution fast, and iterating based on direct user feedback from people I play alongside every week.

Back to all projects