Alle Projekte
Im Einsatz · aufgezeichnet auf einer lokalen Kopie mit Demo-Clubsn. Chr. · nach ChatGPTFallstudie

CoachEval

Wöchentliche Bewertungen für die jungen Athleten eines Sportclubs: ein Kartenstapel für die Trainer, Worte für die Familien.

Rolle
Alles: Produktdesign, die Vue-Web-App, die .NET-API, die Datenbank und der Server
Auftraggeber
Ein Tennistrainer und Clubinhaber
Zeitraum
2026 – heute
Plattformen
Web-App, auf dem Smartphone installierbar (PWA); eine Flutter-Begleit-App in Entwicklung
  • Vue 3
  • TypeScript
  • Pinia
  • Tailwind CSS
  • shadcn-vue
  • .NET 8
  • ASP.NET Core
  • EF Core
  • PostgreSQL
  • Finbuckle.MultiTenant
  • Playwright
  • Docker
  • GlitchTip

Das Produkt

CoachEval begleitet die jungen Athleten eines Sportclubs durch die Saison. Einmal pro Woche bewerten die Trainer, was sie gesehen haben, in einem Kartenstapel, der ein paar Minuten dauert; aus diesen Bewertungen erstellt die App die Karte jedes Athleten, die Trends der Gruppen und Ideen für das nächste Training. Dazu kommen der Kalender des Clubs, Aufgebote, Aufstellungen und Spielberichtsbögen für den Spieltag und eine Pinnwand, auf der jede Familie die Woche ihres eigenen Kindes sieht.

Ich habe die App im Alleingang für einen Tennistrainer gebaut, der einen Club führt: das Produkt und seine Oberfläche, die API, die Datenbank und den Server, auf dem alles läuft. Angefangen hat sie mit Tennis, inzwischen deckt sie auch Fußball ab.

100%
der Commits stammen von mir (536 seit Juli 2026)
92k
Zeilen C#, Vue und TypeScript, ohne Tests und Migrationen
1,7k
automatisierte Tests: 901 für die API, 795 End-to-End-Tests im Browser
2
Sportarten, Tennis und Fußball, auf Italienisch und Englisch

Rundgang

Die App in Aktion

Wählen Sie eine Aufnahme oder springen Sie direkt zu einem Kapitel.

Die Woche als Kartenstapel, erstes Bild
0:00 / 0:58

Aufgezeichnet aus dem aktuellen Release in Smartphone-Größe, so wie die Trainer die App nutzen, auf einer lokalen Kopie mit den Demo-Clubs. Auf Italienisch, der Sprache ihrer Clubs. Ohne Ton.

Funktionen

Von den Bewertungen der Woche zur Pinnwand der Familie

01

Die Woche als Kartenstapel

Die Trainer bewerten ihre Athleten einmal pro Woche, Karte für Karte. Jede Karte zeigt ein Merkmal (die Vorhand, die Beinarbeit, die Einstellung im Spiel) für eine ganze Gruppe, bewertet von 1 bis 10 mit einem Tipp auf einen Balken: Eine Gruppe im selben Punkt zu vergleichen geht schneller und ist gerechter, als jeden Athleten nacheinander zu öffnen. Wer nicht gesehen wurde, bleibt unbewertet: Niemand bekommt automatisch eine Note. Die Größe des Stapels ergibt sich aus dem Saisonplan, und er endet, wenn das Wochenziel erreicht ist; Erfahrungspunkte und Meilensteine halten die Gewohnheit am Leben.

02

Eine Athletenkarte

Die Athleten des Clubs als Kartenalbum. Jede Karte öffnet sich mit dem Durchschnitt und den Bereichen, dann folgen die vier Dimensionen (technisch, taktisch, physisch, mental) mit ihrem Trend und der letzten Note jedes Merkmals. „Quanto lo conosciamo“ (wie gut wir ihn kennen) misst das Beobachten, nicht den Athleten: Der Wert steigt, wenn ein Trainer hinschaut, und zeigt, wo man als Nächstes hinschauen sollte.

03

Radar und Trainingsprotokoll

Das Radar ist ein Feed mit allem, was sich in den Gruppen des Trainers verändert hat: wer bei einem Merkmal zu selten gesehen wurde, eine Stärke oder Schwachstelle einer Gruppe, ein Trend, eine Übung für das nächste Training. Karten über eine Gruppe entstehen aus aggregierten Werten und stellen nie ein einzelnes Kind heraus. Die Glühbirne listet die Trainings und Spiele auf, die noch abzuschließen sind; das gestrige Training braucht drei Tipps.

04

Spieltag

Im Demo-Club für Fußball: Das Aufgebot geht vom vorherigen aus, mit Rückennummern und Kapitän, und kommt mit einer Nachricht für die Spieler samt Treffzeit und Treffpunkt. Die Aufstellung kommt auf ein Spielfeld, jeder Spieler mit Rolle und stärksten Merkmalen, und wird mit dem Trainerteam der Gruppe als Link geteilt, sodass die Namen in der App bleiben. Der Spielberichtsbogen für den Schiedsrichter füllt sich automatisch aus dem Kader und wird ausgedruckt: Nichts, was darauf eingetippt wird, wird je gespeichert.

05

Die Familien-Pinnwand

Eltern melden sich mit einem sechsstelligen Code an, der an die beim Club hinterlegte Adresse geschickt wird: kein Passwort, das man sich ausdenken muss. Sie sehen Woche, Kalender und Aufgebote ihres eigenen Kindes und die von niemandem sonst. Die Karte spricht in Worten (Stärken, der nächste Schritt), nie in Noten, und Tokens, die es für die Anwesenheit gibt, schmücken sie. Ein Check-in mit zwei Tipps sagt den Trainern, wie die Woche lief und ob ein Gespräch gewünscht ist.

Unter der Haube

So wurde es entwickelt

Ein funktionaler Kern

Jede Zahl, die das Produkt berechnet (das Wochenpensum, wen man zuerst beobachten sollte, der Kalender der Saison, Level und Serien), ist eine reine Funktion in der Anwendungsschicht, getestet ohne Datenbank; die API-Endpunkte um sie herum kümmern sich um Ein- und Ausgabe. Invarianten sitzen direkt in den Entitäten: Ohne hinterlegte Einwilligung lässt sich kein Foto anhängen, egal welcher Endpunkt es versucht.

Eine Datenbank, viele Clubs

Die Clubs teilen sich eine PostgreSQL-Datenbank: Jede clubbezogene Zeile trägt ihren Club, und ein globaler Abfragefilter von EF Core (Finbuckle.MultiTenant) wendet ihn auf jede Abfrage an. Rollen sind Berechtigungen, die aus einer einzigen Tabelle gelesen und lückenlos geprüft werden, sodass eine neue Rolle, die niemand eingeordnet hat, die App beim Start anhält, statt die Zugriffsrechte einer anderen zu erben.

Auf Minderjährige ausgelegt

Die App speichert Daten über Kinder, also setzt das Design genau dort an. Keinerlei Gesundheitsdaten (Verfügbarkeit ist ein Ja oder ein Nein, nie ein Warum); Fotos nur hinter einer Authentifizierung ausgeliefert; der Spielberichtsbogen nie gespeichert; für Familien Worte statt Zahlen; keine Rangliste der Trainer; Fehlerberichte mit der Route, nie mit einer Person. Tests sichern die Regeln ab: Der zum Spielberichtsbogen etwa schlägt fehl, sobald etwas, das darauf eingetippt wurde, den Browser verlässt.

Vom Smartphone bis zum Server

Eine PWA mit Vue 3 in TypeScript (Pinia, Tailwind, shadcn-vue), mit Typen, die aus der OpenAPI-Beschreibung der API generiert werden; .NET 8 und EF Core auf PostgreSQL; durchgehend Italienisch und Englisch. Sie läuft in Docker auf einem ARM-Server in der Oracle Cloud, hinter Cloudflare, mit selbst gehosteter Fehlerüberwachung, und Clubs können sich selbst registrieren: mit einer bestätigten Adresse und dem online akzeptierten Dienstleistungsvertrag. Eine Flutter-Begleit-App ist in Entwicklung.

Ein Live-Produkt aufzeichnen

Der eigene Code, die eigenen Demo-Clubs, keine echten Menschen

CoachEval ist im Einsatz und enthält Daten über Minderjährige. Nichts davon gehört in ein Portfolio, deshalb zeigen die Aufnahmen den aktuellen Code der App auf einer Datenbank, die ich eigens dafür auf meinem Rechner aufgebaut habe.

  1. 1

    Eine Kopie des Codes

    Web-App und API des aktuellen Releases laufen auf meinem Rechner in Docker, mit einer frischen PostgreSQL-Datenbank. Der Browser, der aufzeichnet, darf mit dieser API sprechen und mit nichts anderem.

  2. 2

    Die mitgelieferten Demo-Clubs

    Der Code legt zwei Demo-Clubs an, einen für Tennis und einen für Fußball, die auf den ersten Blick als erfunden zu erkennen sind: Jeder Nachname ist ein Begriff aus dem Sport (Rovescio, Smorzata, Contropiede), jede Adresse endet auf @example.com. Ich habe eine Saison eröffnet und die Vereinbarung des Clubs akzeptiert, wie es ein Inhaber tun würde, über die eigene API der App.

  3. 3

    Jede Aufnahme aus derselben Woche

    Eine Aufnahme speichert Bewertungen, ein Aufgebot, eine Aufstellung, die Sitzung eines Elternteils. Vor jeder Aufnahme wird die Datenbank auf einen Snapshot zurückgesetzt, sodass alle vom selben Stand ausgehen.

  4. 4

    Auf Italienisch gezeigt

    Die App spricht Italienisch und Englisch, aber der Katalog der Sportarten und die Clubs sind italienisch, deshalb wurde sie auf Italienisch aufgezeichnet, so wie ihre Trainer sie sehen.

Die Oberfläche stammt aus der App. Clubs, Trainer, Athleten, Familien, Bewertungen und Spiele sind die synthetischen Demodaten, die mit ihrem Code ausgeliefert werden.

Eine Karte, ein Merkmal

Hier gibt es keine Demo zum Ausprobieren: CoachEval ist ein Live-Produkt mit Daten über Minderjährige, deshalb zeigt diese Seite Aufnahmen seiner Demo-Clubs.

Alle Bildschirme

Alle Screenshots im Überblick

  • Eine Karte, ein MerkmalDie ganze Gruppe beim selben Merkmal, bewertet von 1 bis 10: Vergleichen geht schneller und ist gerechter, als jeden Athleten einzeln zu öffnen.
  • Woche geschafftDas Wochenziel ist erreicht: Zurück auf dem Dashboard ist der Zähler voll. Weitere Karten gibt es für alle, die möchten.
  • Das AlbumDer Kader als Karten, mit dem Hinweis, wann jeder Athlet zuletzt beobachtet wurde.
  • Die AthletenkarteDurchschnitt und Bereiche für das Trainerteam: Die Zahlen sind das Arbeitswerkzeug der Trainer und werden den Familien nie gezeigt.
  • Eine aufgeklappte DimensionJedes Merkmal mit seiner letzten Note und der Richtung, in die es sich bewegt hat.
  • Wie gut wir ihn kennenWie vollständig die Beobachtung ist, nicht wie gut er ist: Der Wert steigt, wenn ein Trainer hinschaut.
  • Wen man beobachten sollteAthleten, die bei einem Merkmal zu selten gesehen wurden: der Schwerpunkt für heute.
  • Die Stärke einer GruppeGruppenkarten entstehen aus aggregierten Werten: Kein Kind wird herausgestellt.
  • Trainings und SpieleWas noch abzuschließen ist und was heute ansteht.
  • Ein Training abschließenIntensität, Beteiligung und Aufmerksamkeit, mit drei Tipps.
  • Das SpielAufgebot, Aufstellung und Spielberichtsbogen, alles an einer Stelle.
  • AufgebotVorgeschlagen auf Basis des vorherigen: wer nominiert ist, die Rückennummern, der Kapitän.
  • Das Aufgebot teilenTreffzeit und Treffpunkt werden beim Spiel gespeichert; die Nachricht für die Spieler ist versandfertig.
  • AufstellungDie Spieler auf dem Spielfeld, jeder mit Rolle und stärksten Merkmalen.
  • SpielberichtsbogenAus dem Kader vorausgefüllt, für den Schiedsrichter ausgedruckt. Nichts, was hier eingetippt wird, wird gespeichert.
  • Zugang für FamilienEin Code an die Adresse, die beim Club hinterlegt ist. Kein Passwort, das man sich ausdenken muss.
  • Die Woche des KindesKalender und Aufgebote, nur für dieses Kind.
  • Die KarteStärken und der nächste Schritt in Worten; Tokens für die Anwesenheit schmücken die Karte.
  • Wöchentlicher Check-inWie die Woche lief und ob man mit dem Trainer sprechen möchte: zwei Tipps, gelesen von den Trainern der Gruppe.

Nächste Fallstudie

Indennizzo Diretto →