← All projects

TogethrTeam

A social and team management app for youth and amateur sports teams

ClientPrototype2026

React · Vite · TypeScript · Framer Motion · PWA

What it is

A mobile-first social and team management app for youth and amateur sports teams, built for a client. The pilots run with 13-to-17-year-old squads. The core loop is positive peer recognition: teammates award each other Swag Coins for character and contribution, which build a public player identity: an avatar, earned gear, a playable player card. Coaches and parents get role-shaped versions of the app, and neither can send or receive peer recognition. There is no negative option anywhere in the product; that is a construction decision, not a setting.

The Locker Room — coin balance, progress to the next level, and the give-recognition flow that mints most of it.

What it does

Five tabs whose contents change by role: players get chat, the team, the locker room, video and a penalty-shootout game; coaches trade the game for weekly drills and an anonymous team-pulse view; parents get logistics and their child's page.

The running of the team is the half that has to work before any of the rest earns its place. Schedule and roster are shared, but each role is handed the slice it actually needs: a coach's home is the administrative view — what is next, who has not RSVP'd yet, the shape of the season — while a parent's is logistics only, meaning the next event, whether their child is down as going, what they owe, and everyone's number. The schedule leads with the league table and sits beside the squad list; contact details render through a single gate, so who may see whose phone number is one function rather than a rule re-implemented on five screens. Coaches set weekly drills from a seeded library of skills and fitness work or write their own, assign them to the whole squad or to named players, and can see who has proven the work with a clip. The manager takes fees and the game-day rota.

Schedule and roster share a screen, and the league table sits on top of it. Each fixture carries its venue, who has said yes, and the RSVP the coach's home screen is counting.

Money is deliberately the one thing the app will not do. Fees are read-only and there is no payment rail anywhere in it, on the reasoning that a "Paid" button that lies is worse than a report that tells you the truth. Scheduling is kept small for the same reason: no calendar sync, no recurring events, no reminders, no attendance history, no venue maps. Each of those is a promise that breaks quietly, and a team app that is wrong about kick-off is worse than one that never claimed to know.

The coin economy is built to resist gaming: peer picks cap at eight per trait, anything self-reported pays only with a photo or clip attached, and signed shoutouts between players are worth zero, because reciprocal rewards are the farming loop to keep out. Safeguarding lives in the reducer, not the interface: chat rooms derive from role, and the one room the app refuses to create is a parent alone with someone else's child. There are no rankings of kids, no GPS, and video pixels never leave the phone.

The roster is a directory, deliberately — no ordering by recognition and no public counts, because ranking kids against each other is the thing this product refuses to do.
The receiving side of the loop: what a player has earned and what their teammates recognise them for.

There is a second surface for the adults running the club. /manage is a laptop-first console sharing the same store as the phone app: the roster, the fixture list and league table, outstanding invoices, and the invites that get families onto the team. It exists because the desk work of running a squad — chasing unpaid subs, filling a game-day job, finding out who still hasn't replied about Thursday — is miserable on a phone, and it is a different job from the recognition loop the players use.

The manager console, on the demo club's fictional data. The 'Needs you' panel is the point of the screen: what is outstanding, unfilled, or still unanswered.

How it's built

React, TypeScript and Vite as an installable PWA. It is demo-grade and honest about it: no backend, no accounts, all state on-device with fictional seed data, and one load/save boundary in the store that is the single swap point when a real backend lands. Every write goes through one reducer, and the scoring and rating engines are pure modules with no randomness in them.

Working with Claude

This one is demo-grade on purpose: no backend, no accounts, everything held on the device, so a client could put a working product in front of people before anyone committed to infrastructure. That constraint did most of the design work. It is roughly 23,700 lines across about 85 files, and the hard part was never any single screen — it was keeping the role rules identical everywhere they apply, so that what a coach can see and what a parent cannot are the same answer on every surface of the app.