KassenKnoten

KassenKnoten

Zwei Einkommen, ein Haushalt, ein klarer Plan.

Der Haushaltsplaner für alle, die Kosten ungleich teilen — und wollen, dass die Rechnung stimmt. Miete nach Einkommen, Strom halbe-halbe, das Fitnessstudio zahlt nur einer. Jeder Posten bekommt seine eigene Regel, und beide sehen sofort, was er sie kostet.

Auf den Cent — kein Float berührt je einen Betrag Linux, macOS, Windows — amd64 und arm64 Keine Telemetrie, keine externen Aufrufe MIT-Lizenz
Die Übersicht: Einnahmen, Fixkosten, variable Kosten, Sparrate und freies Geld als Kennzahlen, darunter die Aufschlüsselung pro Person und die Kosten nach Kategorie.
Die Übersicht für den laufenden Monat — und für jeden anderen, denn jeder Eintrag weiß, ab wann er gilt.

Das Problem

Jedes Werkzeug bekommt das halb hin.

Aufteilungs-Apps kennen genau eine Regel für alles. Tabellen können es ausdrücken — bis eine Zelle verrutscht und die Formel monatelang still falsch rechnet. KassenKnoten macht die Aufteilung zur bewussten Entscheidung pro Posten, rechnet sie auf den Cent und zeigt beim Tippen, was dabei herauskommt.

Jede Ausgabe nach eigener Regel

Feste Quote oder nach Einkommen — pro Posten gewählt, nie angenommen. Die Standard-Aufteilung füllt nur das Formular vor.

Auf den Cent

Beträge sind ganze Cent, Anteile Basispunkte. 39,99 € halbe-halbe werden 20,00 € und 19,99 € — nie 39,98 €. Die Rechen-Engine ist ein reines, getestetes Modul.

Die Vergangenheit bleibt ehrlich

Jeder Eintrag trägt die Monate, für die er gilt. Eine Gehaltserhöhung im September lässt den August August bleiben — und die App fragt nach, ob eine Änderung neu gilt oder schon immer galt.

Variable Kosten, zwei Wege

Lebensmittel, Tanken, Ausgehen: entweder zählt der Plan — oder jede Rechnung mit Datum, und der Plan wird zum Budget, gegen das gemessen wird.

Beleg scannen

Fotografieren, und Betrag, Datum und Geschäft sind eingetragen. Gelesen auf deinem eigenen Server — das Foto wird nirgends hochgeladen und nicht gespeichert.

Monat für Monat

Zwölf Monate in einem Diagramm. Am Verlauf entlangziehen, und Einnahmen, Kosten, Sparrate und freies Geld jedes Monats folgen — ohne Seitenwechsel.

Jeder Rhythmus wird monatlich

Eine Versicherung für 132,00 € im Jahr steht als 11,00 € im Monat neben allem anderen. Niemand teilt mehr im Kopf durch zwölf.

Sparen mit Absicht

Spartöpfe mit monatlicher Rate, Stand und optionalem Ziel — einer Person zugeordnet oder dem Haushalt.

Ruhige Warnungen

Negatives freies Geld, eine Sparrate über den Einnahmen, ein überschrittenes Budget — als Hinweis, nicht als Modal. Löschen zeigt „Rückgängig“ statt „Bist du sicher?“.

Anmelden, wie ihr wollt

Ein Haushalts-Passwort mit optionalem Einmalcode, Authentik oder ein anderer OpenID-Connect-Anbieter — oder beides, umgeschaltet in den Einstellungen.

Als App installierbar

Eigenes Symbol auf dem Home-Bildschirm, Start ohne Adressleiste. Browser, die das nicht können, bekommen den Weg durch ihr eigenes Menü genannt.

Englisch oder Deutsch

Die Sprache wählst du beim Einrichten und änderst sie jederzeit. Sie gehört dem Haushalt, nicht dem Browser — das Küchen-Tablet spricht dieselbe wie der Rechner.

Erweiterbar mit eigenem Code

Lade eine eigene Erweiterung hoch, und sie steuert Karten zur Übersicht bei. Sie läuft auf deinem Server mit vollem Zugriff — installiere nur, was du gelesen hast oder wem du vertraust.

Jeden Tag gesichert

Eine SQLite-Datei auf einem Volume, das dir gehört. Der Server hebt daneben die letzten vierzehn Stände eurer Daten auf — herunterladen, in einem Schritt wiederherstellen.

Gemeinsame Fixkosten

Wer zahlt was — und warum.

Jeder gemeinsame Posten zeigt beide Anteile in Euro und Prozent, und welche Regel sie erzeugt hat. Die Aufteilung wird beim Tippen vorgerechnet, mit derselben Funktion, die später auch speichert — eine Vorschau, die anders rechnet als das Ergebnis, ist keine.

  • Feste Quote oder nach Einkommen, pro Posten entschieden
  • Größte-Reste-Verfahren: die Anteile ergeben immer die Summe
  • Privat und gemeinsam sauber getrennt
Gemeinsame Fixkosten: jede Zeile zeigt beide Anteile in Euro und Prozent sowie die verwendete Aufteilungsregel.

Monat für Monat

Die Vergangenheit, einen Zug entfernt.

Jeder Eintrag kennt die Monate, in denen er gilt, also lässt sich jeder Monat so zeigen, wie er wirklich war. Die Übersicht zeichnet die letzten zwölf — am Diagramm entlangziehen oder die Pfeiltasten nutzen, und die Zahlen des Monats folgen.

  • Einnahmen, Fix- und variable Kosten, Sparrate und freies Geld
  • Eine Gehaltserhöhung im April ändert den April, nicht die Monate davor
  • Alle Werte stehen auch darunter, lesbar ohne Diagramm
Der monatliche Verlauf: fünf Linien über zwölf Monate, darüber die Zahlen des gewählten Monats.

Variable Kosten

Plan oder Kassenbon.

Was nicht jeden Monat gleich ist, bekommt ein Budget — und du entscheidest pro Budget, wie es geführt wird. Plan zählt den geplanten Betrag und fragt nichts weiter. Detailliert zählt, was tatsächlich gebucht ist, jede Ausgabe mit Datum.

  • Der Modus steht als Badge auf der Karte, nicht in einem Dialog
  • Gebucht gegen geplant, immer nebeneinander
  • Wird wie Fixkosten zwischen euch aufgeteilt
Variable Kosten: ein gemeinsames Budget im Detail-Modus mit Fortschrittsbalken, den Anteilen beider Personen und den einzelnen Ausgaben mit Datum.

Belege

Fotografieren. Prüfen. Speichern.

Beleg scannen öffnet die Kamera, und Betrag, Datum und Geschäft kommen ausgefüllt zurück. Offen bleibt nur, zu welchem Budget er gehört — das Budget trägt die Aufteilung, also bleibt das eure Entscheidung.

  • Gelesen von einer Texterkennung im Container, auf Deutsch und Englisch
  • Kein Schlüssel, kein Cloud-Dienst; das Foto wird nach dem Lesen verworfen
  • Was nicht lesbar war, bleibt leer und sagt es
Ein gescannter Beleg auf dem Telefon: Betrag, Datum und Geschäft ausgefüllt, das Budget gewählt, bereit zum Speichern.

Rücklagen

Sparen, das man sieht.

Spartöpfe mit Rate, Stand und optionalem Ziel. Der Fortschritt ist ein Balken, kein Kopfrechnen — und wenn ein Topf sein Ziel überschreitet, sagt die Übersicht es freundlich.

Spartöpfe mit monatlicher Rate, aktuellem Stand, Ziel und Fortschrittsbalken.

Einstellungen

Alles andere, sortiert.

Sprache und Darstellung, Standardaufteilung und Kategorien, Anmeldung, Sicherungen und Erweiterungen — jede auf ihrer eigenen Seite, alle auf einer Übersicht. Auf dem großen Bildschirm bleibt die Liste daneben.

  • Anmeldewege umschalten und die Allowlist pflegen, ohne Neustart
  • Jede der täglichen Sicherungen herunterladen, in einem Schritt zurückspielen
  • Einstellungen, die euch aussperren würden, lassen es nicht zu
Einstellungen auf dem großen Bildschirm: die Kategorien neben der Seite Anmeldung, Haushalts-Passwort und Authentik eingeschaltet, darunter die Allowlist.

Am Handy

Für 375 px entworfen, nicht dafür geschrumpft.

Der Haushaltsplan wird in der Küche geöffnet, nicht am Schreibtisch. Gleiche Funktionen, Navigation in Daumenreichweite, ein Zahlenfeld, das den Ziffernblock aufruft, und ein Design, das dem Systemthema folgt.

  • Helles und dunkles Thema, systemabhängig
  • Installierbar als App, mit eigenem Symbol
  • Ohne Verbindung sagt die App, dass sie offline ist — statt alte Zahlen zu zeigen
Die Übersicht auf einem Telefon im dunklen Thema. Der Anmeldebildschirm: ein Knopf für den Identitätsanbieter, darunter Haushalts-Passwort und das Feld für den Bestätigungscode.

Sicherheit

Es sind eure Zahlen. Sie werden auch so behandelt.

Passwort und zweiter Faktor

Ein Haushalts-Passwort, mit argon2id gehasht und aus der Umgebung gelesen — eine Kopie der Datenbank ist keine Kopie des Passworts. Optional dazu ein Code aus jeder Authenticator-App (TOTP nach RFC 6238). Ein benutzter Code wird abgelehnt.

Euer Identitätsanbieter

OpenID Connect mit PKCE, das ID-Token gegen die Schlüssel des Anbieters geprüft, und herein kommen nur Adressen auf einer Allowlist in der App. Wer von der Liste genommen wird, ist beim nächsten Klick abgemeldet.

Verschlüsselte Sitzung

Das Sitzungs-Cookie ist verschlüsselt, nicht bloß signiert (JWE, A256GCM), httpOnly, SameSite=Lax und Secure über HTTPS.

Alles zu, außer was offen sein muss

Jede Route außer Anmeldung und Health-Check verlangt eine Sitzung — deny by default, damit eine neue Seite nicht versehentlich öffentlich ist. Server Actions prüfen zusätzlich selbst.

Nichts von außen

Content-Security-Policy mit Nonce pro Anfrage, Schriften selbst gehostet, keine CDNs, keine Telemetrie. Der Container läuft als unprivilegierter Benutzer.

Geprüft, bevor es ausgeliefert wird

Kein Image wird veröffentlicht, bevor die Tests bestehen und ein echter Browser sich angemeldet, einen Haushalt eingerichtet und eine Aufteilung in der Handy-Ansicht geprüft hat — gegen genau den Server, den das Image startet.

Selbst hosten

Docker und zwei Minuten.

Kein Quellcode, kein Node, kein Build. Das Image gibt es für amd64 und arm64, und es läuft überall, wo Docker Linux-Container ausführt: auf einem Linux-Server oder NAS, einem Raspberry Pi 4 oder 5 mit 64-Bit-System, einem Mac oder unter Windows mit Docker Desktop. Beide Images werden vor jedem Release gestartet und im Browser getestet. Zwei Dateien herunterladen, die Geheimnisse erzeugen — die Skripte dafür laufen im Image selbst — und starten.

Linux und macOS

mkdir kassenknoten && cd kassenknoten
curl -LO https://github.com/jankln/KassenKnoten/releases/latest/download/docker-compose.yml
curl -L -o .env https://github.com/jankln/KassenKnoten/releases/latest/download/env.example

# ein Sitzungsschlüssel, an .env angehängt
docker run --rm ghcr.io/jankln/kassenknoten:latest \
  node scripts/session-secret.ts >> .env

# euer Haushalts-Passwort, gehasht — die ausgegebene Zeile in .env einfügen
docker run -it --rm ghcr.io/jankln/kassenknoten:latest \
  node scripts/hash-password.ts

# optional: zweiter Faktor, druckt einen QR-Code ins Terminal
docker run -it --rm ghcr.io/jankln/kassenknoten:latest \
  node scripts/totp-secret.ts

# optional: mit Authentik anmelden — die OIDC_*-Zeilen in .env ausfüllen

docker compose up -d

Windows · PowerShell

mkdir kassenknoten; cd kassenknoten
curl.exe -LO https://github.com/jankln/KassenKnoten/releases/latest/download/docker-compose.yml
curl.exe -L -o .env https://github.com/jankln/KassenKnoten/releases/latest/download/env.example

# ein Sitzungsschlüssel, an .env angehängt
docker run --rm ghcr.io/jankln/kassenknoten:latest `
  node scripts/session-secret.ts | Add-Content .env

# euer Haushalts-Passwort, gehasht — die Zeile in .env einfügen (notepad .env)
docker run -it --rm ghcr.io/jankln/kassenknoten:latest `
  node scripts/hash-password.ts

docker compose up -d

Windows braucht Docker Desktop mit WSL 2. Danach http://127.0.0.1:3000 öffnen — ein Assistent in drei Schritten richtet den Haushalt ein. Für den Zugriff von außen gehört ein Reverse Proxy mit TLS davor.