FireTracker / FOR_SMLFLG.md
smlflg's picture
Initial public upload from Projekte/FireTracker
f91bd05 verified
|
Raw History Blame Contribute Delete
3.85 kB

FireTracker

Was ist das?

FIRE-Rechner mit ADHS-Twist: 3 Zahlen eingeben, sofort sehen wann du finanziell frei bist. Assets (Depots, Immobilien, Cash) als Module, Szenario-Slider, 30-Jahres-Projektion β€” alles lokal, kein Cloud-Account.

Architektur & Tech-Stack

Browser (Tailwind + htmx + Chart.js)
   |
FastAPI main.py
   |
   β”œβ”€β”€ fire_math.py    ← reine FIRE-Berechnungen (pure functions)
   β”œβ”€β”€ models.py       ← SQLAlchemy: UserProfile, Asset, Snapshot
   β”œβ”€β”€ schemas.py      ← Pydantic: AssetCreate, AssetUpdate, SnapshotCreate
   └── database.py     ← SQLite init + Session
          |
       firetracker.db
Schicht Tech
Backend FastAPI + SQLAlchemy + SQLite
Frontend htmx + Jinja2 + Tailwind CSS
Charts Chart.js (CDN)
FIRE-Logik fire_math.py (pure Python, kein Framework)

Asset-Typen: depot, immobilie, cash, crypto, pension, other

FIRE-Metriken (berechnet, nicht gespeichert):

  • FI Number, Lean/Fat/Coast FIRE, FI%, Savings Rate, Years to FI, FI Date
  • Monatliche Compound-Growth-Iteration (12 Schritte/Jahr) fuer Genauigkeit

Starten / Nutzen

cd ~/Projekte/FireTracker
source .venv/bin/activate  # oder: python3 -m venv .venv && pip install -r requirements.txt
uvicorn main:app --reload --port 8050
# β†’ http://localhost:8050

Erststart leitet automatisch auf /setup weiter (3 Felder: Einkommen, Ausgaben, Geburtsjahr).

Was funktioniert

  • Setup-Wizard (/setup) β€” 3 Felder, dann sofort Dashboard
  • Dashboard β€” FI-%, FI-Datum, Savings Rate, 30J-Projektion, Asset-Uebersicht nach Typ gruppiert
  • Assets CRUD β€” erstellen, bearbeiten (htmx inline), loeschen; Snapshot wird automatisch angelegt
  • Snapshot-Historie β€” Wertaenderungen werden als Verlauf gespeichert
  • Szenario-API (/api/scenario) β€” "Was wenn ich X mehr spare?" mit diff_years-Berechnung
  • CSV-Import (/api/import/csv) β€” deutsche Bankformate (Semikolon, Komma als Dezimaltrenner)
  • JSON-Export (/api/export) β€” Profil + Assets + Snapshots als Backup
  • Settings-Seite β€” alle FIRE-Parameter aenderbar (SWR, Return, Inflation, Rentenalter)

Was fehlt

  • seed.py β€” erledigt (103 LOC), erstellt Demo-Profil + 5 Assets (251.7k gesamt), idempotent
  • fi_date Edge-Case β€” gefixt: Overflow via extra_years-Berechnung (fire_math.py:53-57), 4 Tests gruen
  • Historische Charts pro Asset β€” Snapshots sind in DB, UI-Chart noch nicht implementiert
  • Expense Categories β€” "faellt bei FIRE weg"-Flag fuer bestimmte Ausgaben (V2 geplant)
  • Tests β€” 17 Math-Tests passing (test_fire_math.py, 267 LOC) + 3 Playwright E2E-Tests (tests/test_e2e.py, setup/dashboard/asset flow). E2E braucht playwright install chromium. Keine Route/API-Tests.

Entscheidungen & Lessons Learned

  • fire_math.py als pure functions β€” keine DB-Referenzen, direkt testbar, einfach zu verstehen
  • Monatliche Iteration statt Formel β€” Compound-Growth-Projektion Monat fuer Monat statt geschlossener Formel: leichter lesbar, minimal langsamer (irrelevant bei 100-Jahres-Cap)
  • Single UserProfile β€” kein Multi-User, kein Auth; get_or_create_profile() erstellt Samuel-Profil beim ersten Request
  • Snapshot bei Wertaenderung β€” nur wenn current_value != old_value, kein Snapshot-Spam
  • htmx fuer Asset-CRUD β€” kein SPA-Overhead, Server rendert Partial (partials/asset_list.html) und tauscht DOM-Block
  • Gleicher Stack wie StudyAgent (FastAPI+SQLite+htmx) β€” schnelle Entwicklung durch bekannte Patterns

Next Steps (priorisiert)

  1. fi_date Edge-Case fixen β€” erledigt
  2. Route/API-Tests β€” httpx TestClient fuer POST/PUT/DELETE Endpunkte
  3. Historische Chart pro Asset aus Snapshot-Tabelle
  4. Bank-API (GoCardless/Nordigen PSD2) fuer automatischen Import