Home

BudgetBuddy Development Blog

Willkommen beim Entwicklungsblog von BudgetBuddy - einer F# Full-Stack Anwendung zur persönlichen Finanzverwaltung.

Über das Projekt

BudgetBuddy verbindet dein Bankkonto (Comdirect) mit YNAB (You Need A Budget) und kategorisiert Transaktionen automatisch mit einer regelbasierten Engine.

Tech Stack:

  • Frontend: Elmish.React + Feliz + TailwindCSS
  • Backend: Giraffe + Fable.Remoting
  • Datenbank: SQLite + Dapper
  • Deployment: Docker + Tailscale

Blogposts

Automatische Blog-Veröffentlichung mit Jekyll und GitHub Pages – Zero-Config Publishing für Entwickler

29.11.2025 - Wie ich in 15 Minuten ein automatisches Blog-Publishing-System mit Jekyll und GitHub Actions aufgesetzt habe – komplett kostenlos und ohne Server.

Integration Testing ohne UI: Wie ich YNAB und Comdirect APIs testbar machte

29.11.2025 - Wie teste ich externe API-Integrationen, wenn das UI noch nicht fertig ist? Mit F# Scripts und CLI-Tools.

Milestone 4: Comdirect API Integration – OAuth, Push-TAN und die Tücken von Banking-APIs

29.11.2025 - Implementierung einer sicheren Bankverbindung mit OAuth 2.0 und Push-TAN für die Comdirect API.

Milestone 5: Rules Engine - Automatische Kategorisierung mit F# Regex und Type Safety

29.11.2025 - Das Herzstück der Automatisierung: Regelbasierte Kategorisierung mit Pattern Matching, Regex und F#’s Type-System.

Milestone 6: Backend API Implementation – 29 Endpoints und die Kunst der Fehlerbehandlung in F#

29.11.2025 - Von isolierten Modulen zur vollständigen API: 29 Endpoints mit konsistenter Fehlerbehandlung, Input-Validation und Session-Management.

Frontend Redesign Mobile First

30.11.2025 - Frontend-Redesign: Von “extrem hässlich” zu Premium Mobile-First UI

Milestone 7: Frontend-Implementierung – Von der leeren Leinwand zur vollständigen Elmish-App

30.11.2025 - Milestone 7: Frontend-Implementierung – Von der leeren Leinwand zur vollständigen Elmish-App

Von CSS-Chaos zu F# Design System: Eine Typensichere UI-Komponentenbibliothek aufbauen

30.11.2025 - Von CSS-Chaos zu F# Design System: Eine Typensichere UI-Komponentenbibliothek aufbauen

Bug-Jagd: Wenn die YNAB API nicht das liefert, was man erwartet

30.11.2025 - Bug-Jagd: Wenn die YNAB API nicht das liefert, was man erwartet

Von 1000 Zeilen Monolith zu modularen MVU-Komponenten – Frontend-Refactoring in F#/Elmish

30.11.2025 - Von 1000 Zeilen Monolith zu modularen MVU-Komponenten

Ein Neon-Design-System planen – Vom DaisyUI-Standard zur eigenen visuellen Identität

30.11.2025 - Ein Neon-Design-System planen

Neon Design System: Phase 3 & 4 – Der letzte Schliff

04.12.2025 - Neon Design System: Phase 3 & 4 – Der letzte Schliff

Milestone 13: Duplicate Detection – Wie ich doppelte Bank-Transaktionen in YNAB verhindere

05.12.2025 - Milestone 13: Duplicate Detection

Milestone 14: Split Transactions – Wenn eine Transaktion in mehrere Kategorien gehört

06.12.2025 - Milestone 14: Split Transactions – Wenn eine Transaktion in mehrere Kategorien gehört

Milestone 15: Polish & Testing - Der finale Schliff

06.12.2025 - Milestone 15: Polish & Testing - Der finale Schliff

Test-Isolation: Warum meine Persistence-Tests 236 Rules in die Production-DB geschrieben haben

07.12.2025 - Test-Isolation: Warum meine Persistence-Tests 236 Rules in die Production-DB geschrieben haben

Debugging-Marathon: YNAB-Integration, Race Conditions und die Tücken von JSON-Serialisierung

08.12.2025 - Debugging-Marathon: YNAB-Integration, Race Conditions und die Tücken von JSON-Serialisierung

Test-Coverage und Datenbereinigung: Von 220 auf 279 Tests und die Jagd nach unsichtbaren Zeichen

09.12.2025 - Test-Coverage und Datenbereinigung: Von 220 auf 279 Tests und die Jagd nach unsichtbaren Zeichen

UI-Optimierungen: Kompakte Listen, Searchable Selects und Optimistic UI

09.12.2025 - UI-Optimierungen: Kompakte Listen, Searchable Selects und Optimistic UI

Transparente Duplicate Detection: Warum zeigt mir BudgetBuddy Duplikate an?

11.12.2025 - Transparente Duplicate Detection: Warum zeigt mir BudgetBuddy Duplikate an?

UI Performance Revolution: Von 15 Sekunden auf 18ms und eine neue SearchableSelect-Komponente

11.12.2025 - UI Performance Revolution: Von 15 Sekunden auf 18ms und eine neue SearchableSelect-Komponente

Docker-Operations: Encryption-Bug, Deploy-Script und Comdirect Connection Test

15.12.2025 - Docker-Operations: Encryption-Bug, Deploy-Script und Comdirect Connection Test

Form Validation UX und minimalistisches Dashboard Redesign

15.12.2025 - Form Validation UX und minimalistisches Dashboard Redesign

Frontend Architecture Refactoring: 8 Milestones zur besseren Codequalität

15.12.2025 - Frontend Architecture Refactoring: Vom Review zur Implementierung

BudgetBuddy Architektur-Guide: Ein F# Full-Stack Deep Dive

16.12.2025 - BudgetBuddy Architektur-Guide: Ein F# Full-Stack Deep Dive

Der versteckte Bug: Wie ein Format-Mismatch zu Duplikaten führte

16.12.2025 - Der versteckte Bug: Wie ein Format-Mismatch zu Duplikaten führte

29.12.2025 - Payee-Feature: ComboBox mit Gruppierung und External Links

DaisyUI raus, Prototyp rein: Eine CSS-Framework-Migration in einer F# Elmish App

22.03.2026 - DaisyUI raus, Prototyp rein: Eine CSS-Framework-Migration in einer F# Elmish App


Development Diary GitHub Repository

Posts

subscribe via RSS