Web-App
React zeigt deine Daten an, nimmt Eingaben entgegen und sendet HTTPS-Anfragen an die API.
BrowserDie Oberfläche ist nur der sichtbare Teil. Dahinter verbinden sich Web-App, Android-App, API und Datenbank zu einem selbst gehosteten System.
Deine Finanzdaten bleiben in der Datenbank auf deiner Infrastruktur.
Jede Komponente übernimmt genau den Teil, für den sie gedacht ist. Das macht den Betrieb nachvollziehbar und Updates kontrollierbar.
React zeigt deine Daten an, nimmt Eingaben entgegen und sendet HTTPS-Anfragen an die API.
BrowserDie mobile App verwendet dieselbe API und denselben Benutzerbestand wie die Web-App.
CapacitorExpress prüft Anmeldung und Eingaben, berechnet Werte und führt Datenbankabfragen aus.
Node.jsPostgreSQL speichert Konten, Fixkosten, Tags, Buchungen, Budgets und Planszenarien.
PostgreSQL 17Web-App und Android-App enthalten keine eigene Geldstück-Datenbank. Beide benötigen einen erreichbaren Geldstück-Server.
Vom Klick bis zum aktualisierten Bildschirm läuft eine kurze, kontrollierte Kette ab.
Zum Beispiel Titel, Betrag, Rhythmus, Fälligkeit und Tags einer neuen Fixkostenposition.
Die Daten werden als JSON gesendet. Das JWT wird im Authorization-Header mitgeschickt.
Zod kontrolliert Datentypen und Grenzen. Die Benutzer-ID aus dem Token ordnet den Datensatz deinem Konto zu.
Die API verwendet parametrisierte SQL-Abfragen und gibt das gespeicherte Ergebnis zurück.
Die App lädt die betroffenen Daten neu und berechnet Übersicht, Tags und Fälligkeiten aus den aktuellen Serverdaten.
Sie trennt die Benutzeroberfläche von der Datenhaltung. Dadurch können Web-App und Android-App mit demselben Datenbestand arbeiten.
Passwörter werden mit bcrypt gehasht. Nach erfolgreicher Anmeldung stellt die API ein signiertes JWT aus.
Eingaben werden serverseitig validiert. Ungültige Beträge, Fälligkeiten oder IDs werden abgewiesen.
Abfragen filtern nach Benutzer-ID. Ein Konto erhält nur die Datensätze, die ihm zugeordnet sind.
Monatsbasis, Jahresgesamtwert, monatlicher Jahresanteil und Tag-Verteilung entstehen aus aktiven Fixkosten.
POST/auth/loginAnmeldenGET/recurring-expensesFixkosten ladenGET/recurring-summaryÜbersicht berechnenPOST/planning-scenariosPlan speichernGET/data-exportSicherung erstellenAlle fachlichen Daten gehören zu einem Konto. Löscht du ein Konto, können die abhängigen Datensätze über die Datenbankbeziehungen sauber entfernt werden.
Name, E-Mail, Passwort-Hash und monatliches Nettoeinkommen.
Betrag, monatlicher oder jährlicher Rhythmus, Fälligkeit, Tags und Status.
Ausgewählte Fixkosten und vorübergehende Betragsänderungen für Szenarien.
Name, Symbol und Farbe für die Organisation von Buchungen und Budgets.
Einnahmen und Ausgaben mit Datum, Kategorie und Notiz.
Monatliche Grenzwerte pro Kategorie und Konto.
Bei der ersten Registrierung muss der Registrierungsschlüssel stimmen. Anschließend schützt das Passwort dein Konto und das JWT authentifiziert weitere API-Anfragen.
Für einen öffentlichen Server sollten Web-App und API ausschließlich per HTTPS über einen Reverse Proxy erreichbar sein. Datenbankport 5432 bleibt intern.
Docker Compose startet die Komponenten gemeinsam. Nur Web-App und API benötigen veröffentlichte Ports.
DATABASE_URLVerbindet das Backend mit PostgreSQL im internen Docker-Netzwerk.
JWT_SECRETSigniert Anmeldetokens. Der Wert muss lang, zufällig und geheim sein.
REGISTRATION_SECRETKontrolliert, wer auf deinem Server ein neues Konto anlegen darf.
Die Anleitung führt dich durch `.env`, Docker Compose, Start, Verbindung und Backup.
Zur Docker-Anleitung