web

playvolley

Websites and web apps
  • Next.js
  • Supabase
  • Capacitor
  • Stripe
playvolley, as built
The product as built.

One app on iPhone and in the browser, 67 tables, 2 languages, 71 leagues of official data

The problem

Berlin volleyball runs on WhatsApp groups and word of mouth. A host posts a session, twenty people reply, nobody knows who is actually coming, and the official league tables sit on a federation site that nobody opens on a phone. Paul plays and coaches in that scene, so the app is built from the inside, not from a brief.

The system

playvolley is a Next.js web app wrapped in Capacitor, so the same code runs as a native app on iPhone and in any browser, in German and English at exact key parity. Hosts create open sessions, matches, trainings or tournaments from one form: indoor or beach, capacity, players per side, a minimum to run, a level from 1 to 12, waitlist and sign-up cutoff. Players sign up, chat with the group and split the court cost. Official tables for 71 leagues in Berlin and Brandenburg come from the federation's data, cached and refreshed every 12 hours, so a normal visit never waits on the source. Behind it: Supabase with 67 tables and row-level security, roughly 60 database functions, data export and account deletion for GDPR, and Stripe Connect for payments.

What it does now

It is built and runs at playvolley.net and on iPhone. Every change goes through the same rules as this site: both languages complete or the build stops, and a person tests the flow on a phone before it ships. The app is our answer to the question every studio gets: can you write real code, or only wire tools together?

Where AI checks and where it decides

StepWho decides
Code, migrations and translationsAI drafts in Claude Code, a person reviews and tests every change
Who plays: sign-ups, waitlist, no-showsThe host decides, the app records
What the app says about a leagueFederation data only, never generated

Want this for your business? (opens in a new tab)