Geldstück
Docker starten
Technik verständlich erklärt

So arbeitet Geldstück.

Die Oberfläche ist nur der sichtbare Teil. Dahinter verbinden sich Web-App, Android-App, API und Datenbank zu einem selbst gehosteten System.

Dein eigener Server
01BedienenWeb oder Android
→
02VerarbeitenREST API
→
03SpeichernPostgreSQL

Deine Finanzdaten bleiben in der Datenbank auf deiner Infrastruktur.

Architektur

Vier Teile, eine klare Aufgabe.

Jede Komponente übernimmt genau den Teil, für den sie gedacht ist. Das macht den Betrieb nachvollziehbar und Updates kontrollierbar.

01
UI

Web-App

React zeigt deine Daten an, nimmt Eingaben entgegen und sendet HTTPS-Anfragen an die API.

Browser
02
APP

Android-App

Die mobile App verwendet dieselbe API und denselben Benutzerbestand wie die Web-App.

Capacitor
03
API

Backend

Express prüft Anmeldung und Eingaben, berechnet Werte und führt Datenbankabfragen aus.

Node.js
04
DB

Datenbank

PostgreSQL speichert Konten, Fixkosten, Tags, Buchungen, Budgets und Planszenarien.

PostgreSQL 17
Wichtig

Web-App und Android-App enthalten keine eigene Geldstück-Datenbank. Beide benötigen einen erreichbaren Geldstück-Server.

Ein typischer Vorgang

Was passiert beim Speichern?

Vom Klick bis zum aktualisierten Bildschirm läuft eine kurze, kontrollierte Kette ab.

  1. 1
    Du sendest eine Eingabe

    Zum Beispiel Titel, Betrag, Rhythmus, Fälligkeit und Tags einer neuen Fixkostenposition.

  2. 2
    Die App ruft die API auf

    Die Daten werden als JSON gesendet. Das JWT wird im Authorization-Header mitgeschickt.

  3. 3
    Das Backend prüft alles

    Zod kontrolliert Datentypen und Grenzen. Die Benutzer-ID aus dem Token ordnet den Datensatz deinem Konto zu.

  4. 4
    PostgreSQL speichert den Datensatz

    Die API verwendet parametrisierte SQL-Abfragen und gibt das gespeicherte Ergebnis zurück.

  5. 5
    Die Ansicht wird aktualisiert

    Die App lädt die betroffenen Daten neu und berechnet Übersicht, Tags und Fälligkeiten aus den aktuellen Serverdaten.

Das Backend

Die API ist die Schaltzentrale.

Sie trennt die Benutzeroberfläche von der Datenhaltung. Dadurch können Web-App und Android-App mit demselben Datenbestand arbeiten.

AUTH

Anmeldung

Passwörter werden mit bcrypt gehasht. Nach erfolgreicher Anmeldung stellt die API ein signiertes JWT aus.

VALID

Prüfung

Eingaben werden serverseitig validiert. Ungültige Beträge, Fälligkeiten oder IDs werden abgewiesen.

DATA

Trennung

Abfragen filtern nach Benutzer-ID. Ein Konto erhält nur die Datensätze, die ihm zugeordnet sind.

CALC

Berechnung

Monatsbasis, Jahresgesamtwert, monatlicher Jahresanteil und Tag-Verteilung entstehen aus aktiven Fixkosten.

POST/auth/loginAnmelden
GET/recurring-expensesFixkosten laden
GET/recurring-summaryÜbersicht berechnen
POST/planning-scenariosPlan speichern
GET/data-exportSicherung erstellen
Datenmodell

Was in PostgreSQL liegt.

Alle 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.

users

Konto und Einkommen

Name, E-Mail, Passwort-Hash und monatliches Nettoeinkommen.

recurring_expenses

Fixkosten

Betrag, monatlicher oder jährlicher Rhythmus, Fälligkeit, Tags und Status.

planning_scenarios

Kostenpläne

Ausgewählte Fixkosten und vorübergehende Betragsänderungen für Szenarien.

categories

Kategorien

Name, Symbol und Farbe für die Organisation von Buchungen und Budgets.

transactions

Buchungen

Einnahmen und Ausgaben mit Datum, Kategorie und Notiz.

budgets

Budgets

Monatliche Grenzwerte pro Kategorie und Konto.

Anmeldung und Schutz

Vom Schlüssel bis zum Token.

Bei der ersten Registrierung muss der Registrierungs­schlüssel stimmen. Anschließend schützt das Passwort dein Konto und das JWT authentifiziert weitere API-Anfragen.

01RegistrierungsschlüsselErlaubt das Anlegen eines Kontos
→
02Passwort-HashKein Klartextpasswort in PostgreSQL
→
03JWTSigniert mit deinem JWT_SECRET
→
04Geschützte RouteDie API erkennt das angemeldete Konto

Für einen öffentlichen Server sollten Web-App und API ausschließlich per HTTPS über einen Reverse Proxy erreichbar sein. Datenbankport 5432 bleibt intern.

Betrieb mit Docker

Drei Container im selben Netzwerk.

Docker Compose startet die Komponenten gemeinsam. Nur Web-App und API benötigen veröffentlichte Ports.

Port 8080geldstueck-webNginx liefert die React-App aus
Port 3000geldstueck-serverExpress stellt die REST API bereit
nur interndatabasePostgreSQL mit persistentem Volume
money-datableibt bei Container-Updates erhalten
DATABASE_URL

Verbindet das Backend mit PostgreSQL im internen Docker-Netzwerk.

JWT_SECRET

Signiert Anmeldetokens. Der Wert muss lang, zufällig und geheim sein.

REGISTRATION_SECRET

Kontrolliert, wer auf deinem Server ein neues Konto anlegen darf.

Sicherung

Zwei Ebenen für Backups.

JSON-Export

Die App exportiert Profil, Kategorien, Buchungen, Budgets, Fixkosten und Planszenarien in eine portable Datei.

Datenbank-Backup

Ein PostgreSQL-Dump sichert die vollständige Datenbank für Wiederherstellung oder Serverumzug.

Bereit für deinen eigenen Server?

Die Anleitung führt dich durch `.env`, Docker Compose, Start, Verbindung und Backup.

Zur Docker-Anleitung