A League of One

A retro cartoon illustration of a midfield coin toss where the referee and both team captains are the same man, one in an Italy kit and one in a Brazil kit

TL;DR

  • Fun & Games is a multi-tenant SaaS for running youth sports leagues end to end, from an operator setting up an organization down to a parent RSVPing their kid from the sideline. I designed and built all of it, alone.
  • It started with me. I coach girls rec soccer, and I was drowning in apps. I love the coaching. I hate being the switchboard.
  • So it is a product design project first. I locked one illustration style and ran it through every screen, admin console included, because a tool you open every week should have some life in it.
  • No kid uploads a real photo. They build an illustrated avatar, and those same characters are the ones a coach drags onto the field to make a lineup, one that only offers the players who said yes for Saturday.
  • Five surfaces on one backend, ten months of work, launching soon at funandgames.app. AI helped me a lot, especially with the art. The taste, and the coaching, are mine.

I coach girls rec soccer, and it is one of the real joys of my life. What I do not love is everything around it. The schedule lives in one app, the parents live in a group chat that scrolls past anything important within the hour, who is showing up on Saturday is a spreadsheet I keep by hand, and the carpools are a whole separate text thread. I love the ninety minutes on the field. I hate being the switchboard the other six days of the week.

So I built the thing I wished existed. Fun & Games is a multi-tenant SaaS for running youth sports leagues, from an operator setting up an organization down to a parent RSVPing their kid from the sideline. That it grew into a real product with a real backend came later. It began as a coach trying to get everyone in the loop.

Every position on the roster

Building the software for a league is a lot like fielding one. You need someone on the backend who keeps two teams from being booked on the same field at the same hour, a front end for the operators who draft the teams and draw up the fixtures, a separate one for the families, a native app for the sideline, and someone to write the docs so the next person can find the light switch. On a normal project that is a team. Here it was me, for all of it, five surfaces on one backend. That is where the title of this page comes from.

Being the whole team means the order you build in is the only strategy you get. The admin console came first, because it is the surface that creates the data every other screen displays, and until an operator can run a real season there is nothing to show anyone. The public site second, once leagues existed and the missing piece was a stranger finding one and deciding to trust it. The native app last, for retention and the things you do from a sideline instead of a desk. And it takes money on its own, a small platform cut of the registration fees, collected so the operator gets paid and my slice comes off the top without me touching it. That part is unglamorous, and it is the whole difference between a company and a demo.

I gave it a whole world

Here is a decision I made early and never regretted. League software is almost always ugly, a gray spreadsheet with a login, built by people who assume that because it is administrative it is allowed to be joyless. I refused that, and locked a single illustration style across every screen, the admin console most of all, with big friendly type and not one cold empty state anywhere. There is a plain argument under all the joy. An admin stares at this screen most of the working day, so it had better be a nice place to spend it. A parent will either open the app or let it rot on the third page of their phone, and nobody, ever, opens the app that is uglier than the underside of a car. On a tool people live inside, the pleasure of using it is not a coat of paint on the usefulness, it is part of what makes the thing get used at all.

And the art is not decoration, it does real work. Every sport and every age group has its own illustration, so a league or a division is a card you recognize at a glance instead of one more identical row, and seasons wear the weather of the month you created them in, so you tell spring from winter by feel and not by reading a date.

A word on how the art got made, because I am honest about this everywhere on the site. AI rendered these illustrations, I directed them. It is not that I cannot draw, it is that the industry spent years turning me into a product designer and asking me to forget I ever could. Why I work this way now turned into its own piece: Getting the Whole Self Back.

Nobody's kid posts a real photo

The illustration style earns its keep most in the avatars. Every user builds their own in an illustrated creator that follows the same theme, mixing and matching until the little character is theirs, and it is a genuinely fun thing to do. The fun is covering for a decision I feel strongly about. These are children, and I did not want a product full of real photos of somebody's nine year old sitting on a server, findable. The usual answer is a boring settings toggle and a privacy policy nobody reads. My answer was to make the safe path the delightful one. You make your kid an avatar because it is better than uploading a photo, and the PII simply never exists. The best guardrail is the one that feels like a treat.

The avatar editor, with pickers for skin colour, eyes, eyebrows, nose, mouth, ears and hair building an illustrated character
The avatar creator. You make your kid a character instead of uploading a photo, and the PII never has to exist in the first place.

The lineup knows who is coming

Those same avatars come back in the lineup builder, and this one is less about charm than it looks. A coach drags the players onto the field, laid out the way that sport is actually laid out, and the builder is wired to the RSVPs, so it plans from who said yes for Saturday instead of handing over a full roster and letting you draw a formation around three kids who already said they cannot come. Software for volunteers has to know the constraint the volunteer is actually under, and for a rec coach that constraint is never the roster, it is attendance. I built it because I have lived that exact Saturday morning more times than I would like to admit.

Everyone in the same place

The whole point, the thing that started all of this, was to stop being the switchboard. When you sign up as a parent you get a three step onboarding, short and guided, because a parent installing yet another sports app has roughly zero patience left. And every team has its own chatroom, coaches and parents together, inside the same app that holds the schedule and the roster and the RSVPs. No more group chat in one app while the schedule lives in another and the carpools live in a third. The conversation happens where the information already is, and a coach somewhere gets to spend a little less of the week being the switchboard and a little more of it actually coaching.

Two phone screens: a list of team and match chat rooms, and a team thread where parents sort out a carpool to the game
A room for every team and every match, on the phone. Here the carpool that used to live in its own text thread gets sorted where the schedule already is.

What I took out

The decisions I am proudest of are removals. Coaches used to be able to enter a final score, and I took it away, so a referee is the only authority on a result, because a scoreline with two possible authors is a scoreline somebody is arguing about on Sunday night. Carpools came off the marketing site, not because the idea is bad but because it was not really shipped, and advertising what you cannot yet deliver is how you teach people to disbelieve the rest of your promises. And registration, the highest stakes flow in the whole product, got re-cut three times until it was barely more than pick and review, with ineligible options dimmed instead of hidden so a parent can see why something is unavailable rather than wondering where it went. Shipping is easy now. Deciding what does not ship is most of the job.

The data model is the family

The call I would defend in any room, though, is the data model. A real family is not a row in a parents table. It is one adult managing several kids, one of whom is thirteen and referees the younger division on Saturdays, while the adult also coaches, and next season they do it all again in a different sport in a different organization. So everyone, parents, kids, coaches, referees, lives in a single collection of people, and a person can exist with no login at all, which is how a nine year old is real in the system without an account of her own. It is multi-tenant underneath, many organizations sharing one platform, and that only stays sane because the people model was right before any of them showed up. When the data model matches how a family already thinks about itself, the software stops fighting reality, and an astonishing amount of the usual mess never has to be built. Fit the thing to the human, not the human to the thing.

One family account showing several people it manages and their teams across two different sports and two different organizations
One account, several people, their teams spread across two sports and two organizations. The whole dashboard is just the people model told back to the family.

The honest part

One thing these pages usually leave out. AI helped me all over this project, not only the art, and I am not going to pretend a solo builder ships ten months of product in 2026 without it. What it does not give you is the call to make the safe path the fun one, or to wire the lineup to attendance instead of the roster, or to shape the data model around a real family. It gives you cloth. The judgment is still yours, and on this project the judgment came from standing on a cold field with a clipboard.

But here is what I wanted to show, more than any feature. A lot of people can manage a team that builds something like this. What is rarer is one person holding the whole thing at once, the people model and the payouts and the little avatars and the way a chat should feel on a phone in the cold, making the call in every one of those rooms, and still shipping something with genuine life in it. The range is the unusual part, but the judgment is the bit I would actually want you to hire. I built the app I needed as a coach, and building all of it myself was the only way to be sure the joy made it in, and not just the features.