Product Management0 to 1AI ProductSide ProjectAndroid & iOSShipped

Anstoss: one app for the whole club.

Amateur football clubs run on a pile of tools that were never built for them: WhatsApp for chat, Doodle for RSVPs, a PDF for the lineup, a spreadsheet for the table. Anstoss replaces all of it with one white-label app in the club's own colours. A side project I took end to end on my own: the research, the UX, and the code, for Android and iOS.

Role
Product, design and build, solo
Platform
Android & iOS
Scope
Owned end to end
Users
4 roles, one app
Replaces
A 10+ tool stack
Feature gate
6 questions, most failed
Pricing
Free for amateur clubs
Status
Live on both stores
Anstoss landing page: your club, one place

The live product and marketing site, at anstoss.io.

10+
Tools replaced
4
User roles, one app
Android + iOS
Shipped
Free
For amateur clubs

Research

I started inside the problem

Anstoss began as my own Sunday-morning admin. I help run an amateur side, so the tool-chaos was lived, not researched from a distance. To turn that into a brief I did three things: mapped every tool a club touches across a single match week, ran informal interviews with coaches and club admins at other clubs, and read the support threads where volunteers ask each other how to keep a squad organised. Three patterns came back every time.

The coach is also the admin

One volunteer owns comms, attendance, lineup, and the kit. Any tool that adds work, however small, gets dropped by the next fixture.

Information is scattered and stale

The lineup lives in a screenshot, RSVPs in a poll, the table in a browser tab. Nothing is a source of truth, so the same questions get re-asked in the group every week.

The badge does the work

People show up for the crest, not the software. Any club tool that looks generic, or like someone else's brand, never feels like theirs.


Define

The bet, and the gate every feature had to pass

The bet: a club will replace ten tools with one, but only if the one feels like the club rather than like software. With no PM to argue with and no roadmap to hide behind, I needed a gate that would stop me building things I merely found interesting. Every feature that tempted its way in had to answer these six questions first, and most did not.

Who

Volunteer coaches, players, and parents at amateur and youth clubs.

What

One white-label app for chat, fixtures, lineups, RSVP, and the table.

Why

The current ten-tool stack is fragile, generic, and re-built every season.

When

Across a match week: midweek planning through Sunday kickoff.

Where

On phones, often pitch-side with one hand and bad signal.

How

Role-based views, a multi-team data model, and an overlay for one-tap actions.


Users

One app, four very different jobs

The hardest constraint was role. A coach, a player, a parent, and a club admin open the same app and need almost opposite things. I designed around role-based views so each person sees only what is theirs, with a separate, safer space for parents of under-age players.

Coach

Builds the lineup, sets the schedule, posts announcements, runs match day from one screen.

Player

Sees fixtures, RSVPs in one tap, reads the team chat, votes for man of the match.

Parent

A dedicated channel, kept separate from the player group, for under-age teams and logistics.

Club admin

Manages multiple teams, roles, and membership across the whole club from one account.


Flows & architecture

From empty club to first whistle

The make-or-break flow is the first ten minutes. If a coach cannot stand up a club and get players in before they lose patience, nothing else matters. I designed setup to lean on what a club already has: phone numbers. A coach creates the club, invites by number, and players are auto-matched into the right team.

Create club Invite by phone Auto-match players Set the lineup Run match day

Underneath, I modelled the data around clubs from the start, not single teams: multiple teams per club, role-based access, a parent channel, and membership dues that track manual payments or a provider. It is the kind of decision that is invisible when it works and impossible to retrofit when it does not.

Multi-team architecture: from U6 to first team, one app

Design Decisions

The club's identity, not mine

Because belonging was the deepest insight, the headline design decision was white-label by default: club colours, crest, and kit, with no generic blue and no Anstoss branding on top of someone else's identity. The in-app surfaces, match day and team chat, are designed to feel like the club's own product, down to translating messages so a mixed-language squad can still read the group.

In-app match day and team chat, themed in the club's colours

Match day and team chat, rendered in each club's own colours.

The second decision was restraint. The feature set stays narrow on purpose, live scores, lineups, team chat, schedule and RSVP, squad and roster, and man-of-the-match, because every extra feature is one more thing a volunteer has to ignore. Nothing here is a roadmap promise; it is what the app does today.

Anstoss feature set: live scores, lineups, team chat, RSVP, roster, MOTM

Prioritisation

What I said no to, and what it cost

The hardest product work on Anstoss was not choosing features. It was refusing them while being the only person who would feel the pain of refusing. Three calls shaped the product more than anything I built.

No generic theme, ever

White-label per club was the whole bet, so I would not ship a default blue skin to make onboarding faster. The cost: every club starts from a blank crest, and there is no single screenshot of "Anstoss" to market. I would now ship a strong default identity a club edits down, rather than one it builds up from nothing.

Narrow beats complete

Live scores, lineups, chat, schedule and RSVP, squad, man-of-the-match. Nothing else passed the gate. The cost: Anstoss loses any feature-count comparison against a broader competitor, and I have had to say no to requests I agreed with.

Free for amateur clubs

The users are volunteers spending their own evenings. Charging them at launch would have killed the adoption the product needs to be worth anything. The cost: no revenue signal, so I have to read demand from usage and word of mouth instead of willingness to pay.

What I would measure next

The product is live but under-instrumented. The number I would put first is whether a club still runs match day in the app in week six, because a club that returns for a second month has actually replaced the ten-tool stack rather than tried it.


AI

Deciding what the AI is allowed to do

Anstoss ships two AI features, and both were scoped by the same question: what happens when the model is wrong, and who carries it? In a volunteer-run club the answer is always a person, so the AI is built to hand work back rather than take it over.

It suggests the lineup. It never picks it.

Squad insights surface as suggestions a coach accepts or ignores. A wrong suggestion costs a glance; a wrong automated team selection costs a coach their standing with parents on Sunday. That asymmetry, not model quality, is what set the scope.

Translation is an inclusion feature, not a demo

Squads are mixed-language, so chat translates in place and a parent who does not speak the squad's main language can still follow the group. It earned its place because it removes a reason someone drops out of the conversation, which is the thing the product exists to prevent.

What I turned down

The most impressive-sounding version, an AI that picks the eleven, is the one I did not build. It would demo well and be wrong in the exact moment it mattered.


Build

I didn't hand this off. I shipped it.

Writing the code myself changed the design. When a feature was mine to build and not just to spec, the ones that only worked in a mockup got cut before they wasted a sprint. The design held because it had to compile.

The floating overlay

The signature feature surfaces key actions on top of other apps. Designing it meant living inside real Android constraints, overlay permissions, draw-over behaviour, and battery. It had to be useful in one tap and invisible the rest of the time.

AI that keeps the coach deciding

AI surfaces squad insights but never picks the lineup. I designed it as suggestions a coach accepts or ignores, so the bench decision stays with the person who has to answer for it on Sunday.

Shipping reality

Getting to the store meant app signing, deep-link verification, and a review queue, the unglamorous work that decides whether a design ever reaches a phone. Coding it with AI build tools kept that loop short enough to learn from.


Testing

Tested against a real season

Because I had built it, I could put it straight into a real club's hands and watch. I dogfooded Anstoss across a run of actual fixtures, tracking two things: where onboarding stalled, and whether the overlay helped or got in the way. That loop drove the changes that mattered.

Onboarding got shorter

The first coach I onboarded never finished the manual roster, he typed three names and switched back to WhatsApp. So invites moved to phone numbers and auto-matching, and the next setup ran without me in the room.

The overlay got quieter

Early versions surfaced too much. Watching it crowd the screen during an actual match pushed it down to the few actions a coach reaches for mid-game.

What I would change: the white-label promise cuts both ways. Per-club theming is the reason clubs adopt it, but it also means there is no single screenshot of "Anstoss" to show, and every club starts from a blank crest. If I ran it again I would design a stronger default identity that a club edits down, rather than one it has to build up from nothing.


Results

Live, and in clubs' own colours

Anstoss is shipped on Android and iOS, free for amateur clubs, with a white-label build per club and the floating overlay and AI features in production. It replaced the ten-tool stack with one app, and proved out a design-engineering way of working: research the problem, design the system, write the code, and let real use reshape it.

← Back to portfolio