2
Feature Dokumentation
Daniel Krähenbühl edited this page 2026-05-20 08:26:32 +02:00

Feature-Dokumentation

Authentifizierung

Registrierung

  • E-Mail + Passwort (min. 8 Zeichen)
  • Cloudflare Turnstile CAPTCHA
  • Nach Registrierung: Bestätigungsmail mit Link (24h gültig)
  • Route: /register

Login

  • E-Mail-basiert (kein Username), case-insensitiv
  • "Angemeldet bleiben"-Checkbox: localStorage (persistent) vs. sessionStorage
  • Bei aktivierter 2FA: zweistufiger Flow (Credentials → TOTP-Code)
  • Route: /login

Passwort vergessen

  • E-Mail eingeben → Reset-Link per Mail (15min gültig)
  • Anti-Enumeration: gleiche Antwort unabhängig ob Konto existiert
  • Route: /forgot-password

Passwort zurücksetzen

  • Token aus Mail-Link, neues Passwort eingeben
  • Bei Erfolg: alle aktiven Sessions werden invalidiert
  • Route: /reset-password?token=...

E-Mail-Verifikation

  • Token aus Bestätigungsmail, automatische Verifikation beim Laden
  • Route: /verify-email?token=...

2-Faktor-Authentifizierung (2FA)

  • Setup: QR-Code scannen mit Authenticator-App (Proton Pass, Aegis, Raivo OTP)
  • Login: 6-stelliger TOTP-Code, wechselt alle 30 Sekunden
  • Backup-Codes: 8 Codes im Format XXXXXXXX-XXXXXXXX, SHA-256-Hash in DB; Copy + PDF-Download
  • Recovery: E-Mail-Code (15min) wenn Gerät verloren; deaktiviert 2FA
  • Verwaltung unter: /settings

Dashboard (/dashboard)

KPI-Cards

  • Gesamteinnahmen, Fixkosten, Variable Ausgaben, Verfügbarer Betrag, Sparquote

Einnahmen vs. Ausgaben (Bar Chart)

  • 3 Serien: Einnahmen, Fixkosten, Variable Ausgaben
  • Jahres-Dropdown (öffnet nach oben)
  • ApexCharts, custom Tooltip in Landessprache

Fixkostenaufschlüsselung (Pie Chart)

  • %-Labels direkt auf Segmenten
  • Toggle-Button wechselt zur Listenansicht (Name, CHF, %)

Sparquote

  • Progress-Bar mit Violet Ziel-Marker
  • Ziel personalisierbar über Settings-Toggle (gespeichert im Profil)

Jahresplanung (/financial-year)

  • Jahres-Dropdown: verfügbare Jahre auswählen
  • 3 Summary-Cards: Einnahmen, Fixkosten, Verfügbar + Sparquote
  • Tab Einnahmen: Inline-CRUD für Einnahmequellen pro Jahr
  • Tab Fixkosten: Inline-CRUD für Fixkostenpositionen pro Jahr
  • Neues Jahr starten: max. 1 Jahr im Voraus, Daten aus Vorjahr kopierbar
  • Haushalt: gemeinsamen Haushalt gründen, Mitglieder einladen, Rollen verwalten

Kalender (/calendar)

  • Jahresansicht mit Monats-Klick für Detailansicht
  • Schweizer Feiertage und Schulferien nach Kanton (OpenHolidays API, mit Fallback)
  • Persönliche Termine (Deadlines) einpflegen
  • iCal-Feed abonnieren (persönlicher Link unter Einstellungen)

Konten (/accounts)

  • Drei Kontotypen: Asset (Bank/Cash), Expense (Empfänger), Revenue (Einnahmequelle)
  • Vollständiges CRUD

Budgets (/budgets)

  • 7 Kategorien: Fixkosten, Mobilfunk/Internet, Abonnements, Freizeit, Steuerrücklagen, Versicherungen, Kredite
  • Info-Modal wenn keine Konten vorhanden

Ausgaben (/expenses)

  • 10 Kategorien, optionales Fälligkeitsdatum
  • Kategoriefilter
  • Info-Modal wenn keine Konten vorhanden

Transaktionen (/transactions)

  • Doppelte Buchführung (Source + Destination Account)
  • Vollständiges CRUD

Einstellungen (/settings)

Bereich Beschreibung
Profil Avatar, Name, Kanton, Sprache, Recovery-E-Mail
2FA Aktivieren/Deaktivieren, QR-Code, Backup-Codes
Aktive Sessions Alle eingeloggten Geräte, einzeln widerrufbar
Benachrichtigungen Toggles für Termine, Budget-Warnungen, Monatszusammenfassung
Datenexport ZIP mit 6 PDFs (Profil, Konten, Budgets, Ausgaben, Transaktionen, Termine)
Danger Zone Account löschen (dreistufig: Export → Passwort + Phrase → Redirect)

E-Mail-Benachrichtigungen

Trigger Template Gültigkeit
Registrierung registration_confirm 24h
Passwort zurücksetzen password_reset 15min
Passwort geändert password_changed
E-Mail-Adresse geändert email_changed
2FA-Recovery 2fa_recovery 15min

Alle Mails: HTML + Plaintext-Fallback, Absender noreply@armarium.ch via Brevo.


Lokalisierung

  • 4 Sprachen: Deutsch, Englisch, Französisch, Italienisch
  • Sprachwahl auf Login/Register und in den Einstellungen
  • Browser-Sprache wird automatisch erkannt
  • Schweizer Feiertage in der gewählten App-Sprache

Globale Suche

  • Suche über Konten, Budgets, Ausgaben, Transaktionen, Termine
  • Mindestlänge: 2 Zeichen
  • Erreichbar via Suchfeld in der Navbar