Start · Devlog

Tag 1 · Montag, 15. Juni 2026

Montag, 2026-06-15 — Tag 1

Spieler-Sicht

An diesem Tag ist saldo entstanden und noch am selben Abend live gegangen — von der leeren Seite bis zur eingeloggten App unter saldo.mana.how.

saldo hilft dir, Einnahmen und Ausgaben im Blick zu behalten und deine Belege geordnet aufzubewahren — privat genauso wie für eine Selbständigkeit in der Schweiz. Du meldest dich mit deinem bestehenden mana-Konto an, ein eigenes Passwort brauchst du nicht.

Was zum Start schon da ist:

  • Privat und Firma getrennt. Beim ersten Login bekommst du automatisch deinen privaten Bereich. Eine Einzelfirma oder weitere Selbständigkeit legst du als eigenen Bereich an und schaltest oben jederzeit zwischen ihnen um. Jede Buchung und jeder Beleg gehört eindeutig zu einem Bereich.
  • Buchungen erfassen. Einnahmen und Ausgaben trägst du direkt in der Liste ein. Das Dashboard zeigt dir die echten Salden, nicht nur eine Zahlenwüste.
  • Belege fotografieren. Ein Foto einer Rechnung wird zu einem unveränderbaren PDF — so, wie es die Schweizer Aufbewahrungspflichten verlangen. Einmal abgelegte Originale bleiben fälschungssicher erhalten.
  • Beleg automatisch auslesen. Fotografierst du einen Beleg, liest saldo Betrag und Mehrwertsteuer aus und füllt die Buchung schon mal für dich vor. Du musst nur noch prüfen und bestätigen. (Beim allerersten Beleg nach längerer Pause kann das einen Moment dauern.)
  • Für den Treuhänder exportieren. Deine Buchungen und eine Mehrwertsteuer-Übersicht kannst du als CSV herausziehen und weitergeben.
  • Deine Daten gehören dir. Du kannst deine Daten exportieren und löschen lassen; Belege bleiben nur so lange aufbewahrt, wie es das Gesetz vorschreibt.

saldo ist ab heute als Web-App nutzbar. Native Apps für iPhone und Android sind in Planung.

Macher-Sicht

Stats: 14 Commits, +8100 / -190 LoC, 79 Files Top-Dirs: apps/web/src/routes (14%), apps/api/src/db (11%), apps/api/src/routes (10%), apps/web/src/lib (9%), STATUS.md (8%) Tags: — Session: 13:15 → 21:26 (~104 aktive Min, längster Fokus 60 Min)

Tag eins von saldo: Greenfield von leerem Repo bis 🟢 LIVE auf saldo.mana.how an einem Nachmittag, plus Abend-Nachschlag für OCR und einen Migrationsplan. Phasen wurden nicht der Reihe nach gefahren, sondern in der Reihenfolge, in der sie sich ergaben (1 → 4 → 5 → 2 → 3 → 6 → Deploy).

Scaffold (a576e46, +4547). Das Fundament in einem Commit: SvelteKit 2 / Svelte 5 (runes-only) Web, Hono + Bun + Drizzle API, Postgres mit pgSchema('saldo'). SSO über mana-auth via lokalem JWKS-Cache (jose), kein Live-Call pro Request. Mandanten-Provisioning beim ersten Login (privater Mandant = user:<id>), eingeloggtes leeres Dashboard. Bewusst self-contained — keine @mana/*-Runtime-Deps, damit das Scaffold ohne Verdaccio/Stack lauffähig ist (Adoption von shared-ui/shared-hono/themes ist Phase-2-Politur).

Buchungen & Dashboard (8682e98). Flache buchung-Tabelle (Einnahme/Ausgabe/Privatbezug/-einlage als eigene Typen, weil Privatbewegungen keine GuV-Posten sind), Inline-Erfassen, echte Saldi statt Platzhalter.

Export (2a8ec05). Jahres-CSV für den Treuhänder plus MWST-Übersicht. MWST-Sätze kommen aus der datierten mwst_satz-Tabelle, nie hartkodiert.

Mandanten-Verwaltung (73e1746). Das Principal-Modell wird sichtbar: privat (user:) und Einzelfirma/Selbständigkeit (org: über mana-org) nebeneinander, Umschalter, Stammdaten. Damit ist die Trennung privat/geschäftlich = bestehendes Principal-Modell, keine eigene Mandanten-Logik.

Belege (d835216). Foto → mana-media → unveränderbares PDF mit originalHash und retainUntil (GJ-Ende + 10 J) für GeBüV-Integrität, Löschen nur Soft-Delete vor Frist. Davor mana-compliance — Verdikt: bedingtes Go. Hintergrund: Encryption initial AUS (server-authoritativ statt E2E), weil OCR/Compute serverseitig laufen.

Compliance-Pre-Live (e35d339). DSGVO-Endpoints (Export/Löschung), Retention-Mechanik, /datenschutz nach Art. 13, VVT-Eintrag — das Gate vor dem Live-Schalten.

Deploy & Live (65b9367, b6f34c4). Deploy-Konfig nach dem Konsolidierungs-Standard (shared mana-infra-postgres, eigene DB+Rolle, cloudflared-Ingress, Belege-fs-Volume). STATUS → 🟢 LIVE.

Abend-Nachschlag. OCR scharf gestellt: 0a0a2b6 Beleg-Auslesen + Encryption-Roadmap, 03a527f SALDO_OCR_ENABLED + Pin mana/op/saldo.beleg.ocr, MwSt-Prompt von Satz auf Betrag geschärft, qwen3-vl-Pin auf der GPU-Box. Kaltstart-Caveat notiert, danach launchd-Warmhaltung (d94af32). Zuletzt (617223b, 23:26) ein Event-Sourced-Local-First-Migrationsplan mit mana-compliance-Verdikt: P1–4 go, P5 (Encryption/E2E) gated.

Trade-offs des Tages. Server-authoritative statt eigener Sync-Engine (Local-First später via mana-sync, falls nötig). Self-contained Phase 1 statt früher @mana-Adoption — schnelleres lauffähiges Scaffold gegen spätere Politur-Schuld. Encryption bewusst aus, weil serverseitiges OCR sonst nicht ginge; dafür compliance-gegated dokumentiert.

Offen (aus STATUS): native Apps iOS/Android, OCR-Kaltstart-Verhalten beobachten, Encryption-Roadmap / P5, Verantwortliche:r im VVT.

Stats

14
Commits
+8100/-190
Zeilen
79
Files
1.7 h
Aktiv
Erster Commit
13:15 (Montag)
Letzter Commit
21:26
Spannweite
8.2 Stunden
Aktiv (ohne Pausen > 30min)
1.7 Stunden
Pausen
4
Längster Fokus
1.0 Stunden

Wo wurde gearbeitet

  • 14% apps/web/src/routes
  • 11% apps/api/src/db
  • 10% apps/api/src/routes
  • 9% apps/web/src/lib
  • 8% STATUS.md

Commits (14)

Volle Liste aufklappen
  • a576e46 saldo Phase 1: Scaffold (SvelteKit+Hono+Drizzle, SSO-JWKS, Mandanten-Provisioning, leeres Dashboard)
  • 8682e98 saldo Phase 4: Buchungen & Dashboard
  • 2a8ec05 saldo Phase 5: Export (CSV für Treuhänder + MWST-Übersicht)
  • 73e1746 saldo Phase 2 (MVP): Mandanten-Verwaltung (privat + Einzelfirma)
  • d835216 saldo Phase 3: Belege (Foto→PDF), mana-compliance bedingtes Go
  • e35d339 saldo Phase 6: Compliance-Pre-Live (DSGVO-Endpoints, Retention, Datenschutz, VVT)
  • 65b9367 saldo: Deploy-Konfig (Konsolidierungs-Standard)
  • b6f34c4 saldo: STATUS → 🟢 LIVE auf saldo.mana.how
  • 0a0a2b6 saldo: OCR (Beleg-Auslesen) + Verschlüsselungs-Roadmap
  • 082f419 saldo: STATUS — VVT/Encryption-Roadmap/OCR erledigt, Restpunkte markiert
  • 03a527f saldo: OCR scharf (SALDO_OCR_ENABLED, Pin mana/op/saldo.beleg.ocr); MwSt-Prompt geschärft (Betrag statt Satz)
  • 9605ed9 saldo: STATUS — OCR live (qwen3-vl-Pin), Kaltstart-Caveat notiert
  • d94af32 saldo: STATUS — OCR-Warmhaltung (launchd) + native Apps (iOS/Android) dokumentiert
  • 617223b saldo: Event-Sourced-Local-First-Migrationsplan + mana-compliance-Verdikt (P1-4 go, P5 gated)
Geschrieben mit Claude — Hand veredelt
Impressum · Datenschutz · mana — Daten in der Schweiz; angemeldet Ende-zu-Ende-verschlüsselt, im Gast-Modus nur lokal (siehe Datenschutz).