Schluss mit dem Zettel: Wie ich mit Claude die Teamkasse unserer Abteilung digitalisiert habe
Eine Kasse, ein Frühstück und die Frage: Wer hat eigentlich schon bezahlt?
Die Ausgangslage
In unserer Abteilung gibt es eine Kasse. Alle zahlen regelmäßig etwas ein, vom Geld wird zum Beispiel das gemeinsame Frühstück bezahlt. Das funktioniert, solange einer den Überblick behält. Wer hat schon gezahlt? Wie viel ist noch in der Kasse? Wer hat vor drei Wochen Brötchen vorgestreckt und das Geld noch nicht zurück? Meistens beantwortet das ein Zettel, eine Excel-Tabelle oder das Gedächtnis des Kassenwarts.
Ich wollte das besser lösen. Nicht mit einer fertigen Vereinssoftware, die für unseren Zweck zu groß ist, sondern mit einer kleinen App, die genau das kann, was wir brauchen. Gebaut habe ich sie zusammen mit Claude. Das Ergebnis heißt TeamPayer.
Die Idee in einem Satz
Jedes Teammitglied hat ein Konto. Die Kasse ist die Summe aller Konten. Alles andere ergibt sich daraus.
Was TeamPayer kann
Konten statt Zettel
Jedes Mitglied meldet sich mit E-Mail und Passwort an und sieht nur dann etwas, wenn es angemeldet ist. Auf der Übersicht stehen der aktuelle Kassenstand in Euro, ein Kassenverlauf als Diagramm mit wählbarem Zeitraum und die eigene Zahlungshistorie.
Das Mitgliedskonto arbeitet mit Soll und Haben. Wird eine Zahlung fällig, entsteht eine Forderung. Zahlt das Mitglied, bucht der Kassenwart den Eingang. Reicht jemand eine Rechnung ein, etwa fünf Euro für Milch, schreibt der Kassenwart sie gut, und die nächste Zahlung fällt entsprechend niedriger aus. Zu jeder Buchung gehören Datum, Bemerkung und der Name dessen, der sie vorgenommen hat. Fehler lassen sich stornieren, nichts wird still überschrieben.
Drei Rollen
Es gibt Admin, Kassenwart und Teammitglied. Admin und Kassenwart verwalten Mitglieder, buchen und pflegen die Zahlungsmodelle. Nur der Admin vergibt Rollen. Teammitglieder sehen ihr eigenes Konto, den Kassenstand und eine Teamliste. Dort zeigt ein kleines Symbol, wenn jemand im Zahlungsverzug ist. Das sorgt für sanften Teamdruck, ohne dass jemand bloßgestellt wird.
Zahlungsmodelle und Fälligkeiten
Nicht jeder zahlt gleich viel. Bei uns gibt es unterschiedliche Beträge für Meister, Azubis und Praktikanten, und die Modelle lassen sich jederzeit anpassen. Für jedes Mitglied wird zusätzlich festgelegt, wie oft gezahlt wird: monatlich, vierteljährlich, halbjährlich, jährlich, sporadisch oder pausiert. Für längere Zeiträume sind optionale Sonderpreise möglich.

Erinnerungen per Mail
Jeden Tag läuft ein automatischer Lauf. Er erzeugt fällige Forderungen und verschickt Erinnerungs- und Verzugsmails an das Mitglied, den Kassenwart und den Admin. Mitglieder werden dabei mit dem richtigen Geschlecht angesprochen, denn jedes Mitglied wird mit m, w oder d angelegt. Mehrfaches Auslösen am selben Tag schadet nicht, es geht also keine Mail doppelt raus.
Wer neu angelegt wird, bekommt eine Willkommensmail mit einem vorläufigen Passwort und muss es bei der ersten Anmeldung ändern. Für alles Weitere gibt es pflegbare Mail-Vorlagen und ein Versandprotokoll.
Termine, Anmeldung und Einkauf
Mit der Zeit wurde aus der Kassen-App mehr. Das Frühstück braucht schließlich auch Planung. Termine lassen sich einzeln oder als wiederkehrende Serie anlegen. Jedes Mitglied meldet sich mit Ja oder Nein an, gibt an, wie viele Brötchen es möchte, und kann einen Kommentar hinterlassen. Vor dem Termin kommt eine Erinnerungsmail. Auf der Übersicht fasst eine Kachel zusammen, wie viele Personen kommen und wie viele Brötchen gebraucht werden, als Text, den man direkt kopieren kann.
Wer einkaufen geht, trägt sich freiwillig ein. Hat sich einen Tag vor dem Termin noch niemand gemeldet, erscheint ein Hinweis. Fällt ein Termin aus, etwa wegen eines Feiertags, markiert man ihn mit Begründung, und die Betroffenen bekommen automatisch Bescheid.
Das Kaffeetassen-Ranking
Mein Lieblingsteil ist ein Ranking. Wer einkauft, bekommt nach Bestätigung einen Punkt, dargestellt als Kaffeetasse. Wer erst am Vortag oder am Tag des Termins einspringt und sich als Erster einträgt, bekommt zwei Punkte. Für das Jahr kann eine Belohnung ausgelobt werden, am Jahresende werden die Gewinner festgehalten. Ausgefallene Termine zählen nicht. Dass das Ranking tatsächlich dazu geführt hat, dass sich öfter jemand fürs Einkaufen findet, hat mich selbst überrascht.
Kleine Extras
- Konfetti, wenn eine Zahlung bestätigt wurde. Es läuft ohne Bibliothek und respektiert die Systemeinstellung „Bewegung reduzieren“.
- Eine Bekanntmachung für alle Mitglieder auf der Übersicht, optional mit Ablaufdatum.
- Ein Kontaktformular an Admin und Kassenwart mit Betreffliste und Limit gegen Missbrauch.
- Dunkler und heller Modus, mobil optimiert. Die Tabellen werden auf dem Handy zu Blöcken.
Wie ich vorgegangen bin
Am Anfang stand keine Spezifikation, sondern ein Gespräch. Ich habe Claude gebeten, mein Sparringspartner zu sein: Rückfragen zu stellen, Empfehlungen zu geben und mir zu widersprechen, wenn ich einen schlechten Weg einschlage. Das hat gut funktioniert. Viele Fragen, an die ich allein nicht gedacht hätte, kamen früh auf den Tisch. Was passiert zum Beispiel, wenn ein Gast nur sporadisch zahlt? Die Frage hat dazu geführt, dass ich dieses Modell später wieder vereinfacht habe.
Der Stack ist bewusst schlicht:
- Next.js für die Oberfläche und die Serverlogik
- Supabase als Datenbank und für die Anmeldung, mit Serverstandort Frankfurt
- nodemailer für den Mailversand per SMTP
- Hostinger mit Node.js-Hosting, der Code liegt versioniert auf GitHub
Die App ist in kleinen Schritten gewachsen. Jede Funktion bekam ihren eigenen Zweig und eine Versionsnummer, aktuell steht sie bei 2.5.1. Die Rechenlogik, etwa Fälligkeiten, Punktevergabe und Kassenverlauf, ist mit Tests abgesichert, denn bei Geld soll nichts „ungefähr“ stimmen.
Beim Design fiel die Wahl auf einen dunklen Look mit Blau und Mintgrün, damit es nicht nach Vereinskasse aussieht. Es sollte Auszubildende genauso ansprechen wie langjährige Kollegen.
Was ich gelernt habe
- Klein anfangen lohnt sich. Die erste Version konnte nur Konten, Buchungen und Mails. Termine und Ranking kamen erst, als die Kasse im Alltag lief.
- Spielerisches wirkt. Konfetti und Kaffeetassen sind technisch Kleinigkeiten, aber sie sorgen dafür, dass die App gern benutzt wird.
- Ein gutes Gespräch vorab spart Code. Die besten Entscheidungen waren die, bei denen eine Rückfrage etwas verhindert hat.
- Geld braucht Nachvollziehbarkeit. Jede Buchung hat einen Urheber und einen Zeitpunkt. Das schafft Vertrauen, und das ist bei einer Teamkasse wichtiger als jede Funktion.
Und jetzt?
TeamPayer ist für unsere Abteilung gebaut und nicht als Produkt gedacht. Gerade deshalb passt es so gut. Wer eine ähnliche Kasse führt, findet hier vielleicht Anregungen, und wer selbst eine solche App bauen will, dem sei gesagt: Mit einem klaren Problem, einem geduldigen Sparringspartner und etwas Zeit geht das heute erstaunlich weit.
Die nächste Idee steht schon auf der Liste. Mal sehen, ob das Frühstück am Freitag davon etwas mitbekommt.



