finance.mikkelmanniche.dk
Meine eigene Finanz-App. Sie holt Buchungen direkt von meinen zwei Banken über Open Banking und zeigt Budget, Sparen, Abonnements und Investments. Das Video ist mit Demodaten aufgenommen.
Warum ich sie gebaut habe
Fertige Budget-Apps zeigen eine Übersicht, aber man kann den Zahlen keine eigenen Fragen stellen oder die Logik anpassen, die entscheidet, was eine Buchung ist. Ich wollte Rohdaten in meiner eigenen Datenbank, eine Kategorisierung, die ich selbst anpassen kann, und eine Möglichkeit, Fragen zu den Zahlen zu stellen.
Was sie macht
Jeden Morgen synchronisiert ein Job die Konten, holt Wechsel- und Aktienkurse und behält im Blick, wann die Einwilligung der Bank zum Datenzugriff erneuert werden muss.
Der Job am Morgen7 Schritte · feste Reihenfolge
- Wechselkurse von der EZB zuerst, damit Euro-Buchungen sofort den Tageskurs bekommen
- Aktienkurse für alle Papiere im Bestand und auf der Watchlist
- Synchronisierung aller Konten neue Buchungen von beiden Banken, ohne Duplikate
- Einwilligungs-Hinweis Nachricht, bevor die MitID-Einwilligung für die Bank abläuft
- Alarme Doppelabbuchungen, ungewöhnlich hohe Beträge und Gebühren
- Monatsabschluss wenn eine Gehaltsperiode endet, wird sie einmal abgerechnet
- Wochen-Mail nur sonntags: die Wochenzahlen in fünf Zeilen
Schlägt ein Schritt fehl, laufen die anderen trotzdem. Nachrichten kommen als Push-Nachricht, sonst als Mail.
Es gibt ein Budget, Sparziele, die mit Konten und einem erwarteten Datum verknüpft sind, eine Renditekurve für Investments und eine Zahl dafür, was übrig bleibt, wenn Fixkosten und geplantes Sparen abgezogen sind. Mögliche Doppelabbuchungen und ungewöhnlich hohe Ausgaben kommen als Push-Nachricht aufs Handy, und jede Gehaltsperiode wird abgerechnet, sobald sie endet.
Kategorisierung
Die Kategorisierung folgt festen Regeln in einer bestimmten Reihenfolge:
Überweisungen zwischen meinen eigenen Konten werden erkannt, sodass sie nicht doppelt als Ausgaben zählen. Belege lassen sich als Foto hinzufügen.
Der Rohtext der Bank wird in einen echten Namen übersetzt — der Rohtext bleibt in den Details weiterhin sichtbar
- Kartenkauf und Terminalnummer werden entfernt:
MCD 03942 - Kleinbuchstaben, Zeichen werden zu Leerzeichen:
lime krsel 33go - Erkannt unter bekannten Geschäften
Frag deine Zahlen
Die Zahlen lassen sich in einem Chat in der App und über einen MCP-Server abfragen, sodass ein KI-Assistent anhand der echten Buchungen antwortet, statt zu raten.
Habe ich zwei Buchungen vom selben Ort am selben Tag?
Ruft soeg_posteringer auf ·
Ja, einmal: zwei Fahrten mit Lime am selben Tag. Die Banktexte sind unterschiedlich, es handelt sich also um zwei echte Fahrten und nicht zweimal dieselbe Buchung.
Die Antwort basiert auf den Buchungen, die das Werkzeug gefunden hat.Der Chat und der MCP-Server teilen sich dieselben 12 Werkzeuge:
- maanedsoversigtMonatsübersicht
- historikMonatshistorik
- soeg_posteringerBuchungen suchen
- saldiSalden
- til_raadighedVerfügbar
- budgetstatusBudgetstatus
- abonnementerAbonnements
- opsparingsmaalSparziele
- personerPersonen
- investeringerInvestments
- kategorierKategorien
- saet_kategoriKategorie setzen
Die Technik
Next.js und React mit einer SQLite-Datenbank bei Turso und Drizzle, um die Datenbankstruktur und den Code im Gleichschritt zu halten. Die Bankanbindung läuft über Enable Banking, einen zugelassenen Vermittler für Open-Banking-Zugriff. Das Layout baut auf Jakob Fiskers Komponentenbibliothek "Fisker Finance" auf.
Der Weg einer Buchung
- Die Bankzwei Banken, eigene Konten
- Enable BankingOpen Banking mit MitID-Einwilligung
- TursoSQLite + Drizzle
- Die AppNext.js + React, Chat und MCP
Gegen die echten Zahlen getestet
Die Berechnungen hinter Budget und Verbrauch gab es in zwei Fassungen, eine im Code und eine in der Datenbank. Als sie zu einer zusammengelegt wurden, lief das Ergebnis vor dem Livegang gegen die gesamte Datenbank. Alle Zahlen auf der Analyse- und der Budgetseite stimmten überein, bis auf fünf Buchungen in Höhe von null Kronen, die aus einer Zählung herausfielen.
Eine Geschwindigkeitsprüfung senkte die Zahl der Datenbankabfragen:
Datenbankabfragen auf der Startseite
46→46
Datenbankabfragen auf der Analyseseite
61→61
Die wichtigste Erkenntnis: Kategorisierung anhand des Freitexts der Banken braucht laufende Überprüfung gegen echte Daten. Mehrere Fehler zeigten sich erst, als die Zahlen systematisch durchgesehen wurden.