Matdienst: Wie ich das Chaos in meinem Fußballverein gelöst habe

Matdienst: Wie ich das Chaos in meinem Fußballverein gelöst habe

Ich hatte es satt, zuzusehen wie mein Amateur-Fußballverein bei der Organisation versagt, also hab ich eine Web-App gebaut die tatsächlich funktioniert. Hier ist wie ein Raspberry Pi und vernünftige Architektur unser Material-Management-Albtraum gelöst haben.

Raul Lugo

Matdienst: Wie ich das Chaos in meinem Fußballverein gelöst habe

Also pass auf. Ich liebe Fußball. Ich liebe auch sauberen Code und Systeme die tatsächlich funktionieren. Was ich nicht liebe? Erwachsenen Menschen dabei zuzusehen wie sie verwirrt rumstehen weil keiner weiß wer diesmal die verdammten Wasserflaschen mitbringen soll.

So ist Matdienst im Grunde entstanden.

Das Problem das keiner gelöst hat

Jedes Wochenende in meinem lokalen Verein, die gleiche Geschichte. Irgendwer würde ein Excel-Sheet mit den Aufgabenzuteilungen ausdrucken, an die Umkleidewand kleben, und eine Woche später war's unter Jacken begraben oder wurde komplett ignoriert. Wer soll heute die Hütchen aufstellen? Keine Ahnung. Wer ist dran mit der Ausrüstung? Schulterzuck-Emoji.

Ich übertreibe nicht wenn ich sage dass ich das monatelang beobachtet hab. Trainer die genervt waren, Spieler die ihre Pflichten vergessen haben, die gleichen drei verantwortungsvollen Leute die alles gemacht haben. Klassische Tragödie der Allmende, nur halt mit Fußballausrüstung.

Aber hier ist die Sache: das ist kein Menschen-Problem, das ist ein System-Problem. Und System-Probleme? Die kann ich fixen.

Was ich tatsächlich gebaut habe

Matdienst ist eine Multi-Tenancy Web-App die auf einem billigen Raspberry Pi läuft, der an den Umkleide-TV angeschlossen ist. Das ist alles. Keine komplizierte Hardware, kein teures Setup. Nur ein Pi, ein Bildschirm und etwas Code der tatsächlich seinen Job macht.

// Kern der Rotations-Logik - läuft jeden Sonntag um Mitternacht
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);
  }
}

Die Schönheit liegt darin was es nicht tut. Keine Benachrichtigungen, keine komplexe Terminplanung, kein Versuch alles für jeden zu sein. Es zeigt einfach wer diese Woche dran ist, rotiert automatisch jeden Sonntag die Zuteilungen und hält sich raus.

Du kommst in die Umkleide, TV ist an, du siehst deine farbcodierte Gruppe, du weißt was du tun musst. Fertig.

Matdienst

Warum Multi-Tenancy hier wirklich wichtig ist

Ich hab das nicht nur für meinen Verein gebaut (obwohl das ehrlich gesagt auch okay gewesen wäre). Ich wusste dass andere Amateur-Vereine genau das gleiche Problem haben, also bin ich von Tag eins an mit einem richtigen Multi-Tenancy Setup gegangen.

Jeder Verein bekommt seinen eigenen isolierten Datenbereich, seine eigenen Spielergruppen, seine eigenen Aufgabendefinitionen. Die Architektur hält alles auf Datenbankebene getrennt, was bedeutet dass Verein A nicht versehentlich die Zuteilungen von Verein B sehen kann, und Skalierung ist im Grunde nur mehr Zeilen hinzufügen.

Hab ich das over-engineered? Vielleicht ein bisschen. Aber ich hab genug "wir fügen Multi-Tenancy später hinzu"-Projekte gesehen die zu kompletten Rewrites wurden. Das mach ich nicht nochmal.

Das Setup (überraschend simpel)

Du brauchst:

  • Einen Raspberry Pi (ich hab einen Pi 4 benutzt, aber ehrlich ein 3er würde auch reichen)
  • Einen TV mit HDMI-Eingang
  • Etwa 20 Minuten

Das ist ernsthaft alles. Der Pi bootet, lädt das Web-Interface im Kiosk-Modus und zeigt die Zuteilungen der aktuellen Woche an. Keine Tastatur nötig, keine Wartung erforderlich. Das läuft jetzt seit über einem Jahr in meinem Verein und ich glaub ich hab's zweimal angefasst, beide Male um die Software zu updaten.

Das Dashboard lässt Admins alles remote verwalten:

Matdienst

Spieler hinzufügen, Gruppen anpassen, eigene Aufgaben definieren, was auch immer. Alles über ein Web-Interface bei dem du nicht deinen Laptop aus dem Fenster werfen willst.

Was sich tatsächlich verändert hat

Ehrlich? Alles wurde einfacher. Nicht "revolutionär" oder "transformierend" oder welches Buzzword wir diese Woche benutzen. Einfach... einfacher.

Spieler wissen jetzt tatsächlich was ihre Aufgaben sind. Die gleichen drei Leute schleppen nicht mehr den ganzen Verein. Trainer können sich aufs Training konzentrieren statt auf Logistik. Wir hatten sogar weniger Strafen für vergessene Aufgaben weil keiner mehr eine Ausrede hat (steht direkt auf dem Bildschirm, Alter).

Das Beste? Andere Vereine haben danach gefragt. Hab in den ersten sechs Monaten drei weitere Installationen aufgesetzt, alle laufen von der gleichen Codebase. Multi-Tenancy zahlt sich aus.

Sachen die ich anders machen würde

Klartext: die erste Version hatte viel zu viele Features. Ich hab versucht Strafenverfolgung hinzuzufügen, Anwesenheitsmanagement, sogar ein basic Messaging-System. Hab alles nach einem Monat wieder rausgerissen weil's keiner benutzt hat.

Lektion gelernt: löse ein Problem richtig gut statt fünf Probleme schlecht zu lösen. Die TV-Anzeige und die automatische Rotation sind der Kernwert. Alles andere ist nur Lärm.

Außerdem hab ich anfangs versucht fancy mit dem Rotations-Algorithmus zu werden, hab über Fairness-Metriken und Load-Balancing nachgedacht. Zeitverschwendung. Simples Round-Robin funktioniert perfekt für Amateur-Fußballvereine. Nicht alles muss zu Tode optimiert werden.

Falls du's ausprobieren willst

https://matdienst.de

Abschließende Gedanken

Ich hab Matdienst gebaut weil ich genervt war und die Skills hatte es zu fixen. Das ist so ziemlich alles. Keine große Vision, keine Startup-Träume, nur ein Entwickler der wollte dass sein Fußballverein besser läuft.

Stellt sich raus viele Amateur-Vereine haben das gleiche Problem. Wer hätte das gedacht? (Alle, anscheinend. Ich hätte vorher rumfragen sollen.)

Wenn dein Verein immer noch mit ausgedruckten Excel-Sheets und organisatorischem Chaos zu kämpfen hat, probier das vielleicht mal aus. Schlimmster Fall, du bist einen Raspberry Pi und einen Sonntagnachmittag los. Bester Fall, du musst nie wieder "wer war nochmal dran?" hören.

Lohnt sich.