Matdienst: How I Fixed My Football Club's Chaos Problem
Look, I love football. I also love clean code and systems that actually work. What I don't love? Watching a bunch of grown adults stand around confused because nobody knows whose turn it is to bring the damn water bottles.
That's basically how Matdienst was born.
The Problem Nobody Was Solving
Every weekend at my local club, same story. Someone would print out an Excel sheet with task assignments, tape it to the changing room wall, and by the following week it'd be buried under coats or completely ignored. Who's supposed to set up the cones today? No idea. Whose turn is it to handle equipment? Shrug emoji.
I'm not exaggerating when I say I watched this play out for months. Trainers getting frustrated, players forgetting their duties, the same three responsible people doing everything. Classic tragedy of the commons, except with football gear.
Here's the thing though: this isn't a people problem, it's a systems problem. And systems problems? Those I can fix.
What I Actually Built
Matdienst is a multi-tenancy web app that runs on a cheap Raspberry Pi hooked up to the changing room TV. That's it. No complicated hardware, no expensive setup. Just a Pi, a screen, and some code that actually does its job.
// Core rotation logic - runs every Sunday at midnight
async function rotateGroups() {
const clubs = await getAllActiveClubs();
for (const club of clubs) {
const groups = await getPlayerGroups(club.id);
const rotated = groups.map((group, index) => ({
...group,
color: groups[(index + 1) % groups.length].color
}));
await updateGroupAssignments(club.id, rotated);
}
}The beauty is in what it doesn't do. No notifications, no complex scheduling, no trying to be everything to everyone. It just shows who's on duty this week, automatically rotates assignments every Sunday, and stays out of the way.
Walk into the changing room, TV's on, you see your color-coded group, you know what you need to do. Done.

Why Multi-Tenancy Actually Matters Here
I didn't build this just for my club (though honestly, that would've been fine). I knew other amateur clubs had the exact same problem, so I went with a proper multi-tenancy setup from day one.
Each club gets their own isolated data space, their own player groups, their own task definitions. The architecture keeps everything separate at the database level, which means Club A can't accidentally see Club B's assignments, and scaling is basically just adding more rows.
Did I over-engineer this? Maybe a little. But I've seen enough "we'll add multi-tenancy later" projects turn into complete rewrites. Not doing that again.
The Setup (Surprisingly Simple)
You need:
- A Raspberry Pi (I used a Pi 4, but honestly a 3 would work fine)
- A TV with HDMI input
- About 20 minutes
That's genuinely it. The Pi boots, loads the web interface in kiosk mode, and displays the current week's assignments. No keyboard needed, no maintenance required. I've had this running at my club for over a year now and I think I've touched it twice, both times to update the software.
The dashboard lets admins manage everything remotely:

Add players, adjust groups, define custom tasks, whatever. All through a web interface that doesn't make you want to throw your laptop.
What Actually Changed
Honestly? Everything got easier. Not "revolutionary" or "transformative" or whatever buzzword we're using this week. Just... easier.
Players actually know their responsibilities now. The same three people aren't carrying the entire club anymore. Trainers can focus on training instead of logistics. We've even had fewer penalties for forgotten tasks because nobody has an excuse anymore (it's right there on the screen, mate).
The best part? Other clubs started asking about it. Set up three more installations in the first six months, all running off the same codebase. Multi-tenancy paying off.
Things I'd Do Differently
Real talk: the first version had way too many features. I tried to add penalty tracking, attendance management, even a basic messaging system. Ripped all that out after a month because nobody used it.
Lesson learned: solve one problem really well instead of solving five problems poorly. The TV display and automatic rotation are the core value. Everything else is just noise.
Also, I initially tried to get fancy with the rotation algorithm, thinking about fairness metrics and load balancing. Waste of time. Simple round-robin works perfectly fine for amateur football clubs. Not everything needs to be optimized to death.
If You Want To Try It
Final Thoughts
I built Matdienst because I was annoyed and had the skills to fix it. That's pretty much it. No grand vision, no startup dreams, just a developer who wanted his football club to run smoother.
Turns out a lot of amateur clubs have the same problem. Who knew? (Everyone, apparently. I should've asked around first.)
If your club's still dealing with printed Excel sheets and organizational chaos, maybe give this a shot. Worst case, you're out a Raspberry Pi and a Sunday afternoon. Best case, you never have to hear "whose turn was it again?" ever again.
Worth it.
