Context
Boveda started as a personal frustration: I wanted to track my finances but every tool required trusting a third party with my bank credentials or uploading statements to a cloud dashboard. The solution was to keep the data where it belongs — on the device. The core is a set of bank-specific statement parsers (Bancolombia, Nequi, Daviplata) that handle the quirks of each bank's export format: implicit credit/debit signs, inconsistent column names, encoding edge cases. Parsed transactions land in a local SQLite database served through a FastAPI REST API. The architecture is intentionally boring: Python 3.12, SQLAlchemy, Alembic, pytest. No AI, no cloud, no magic. The project is also a forcing function for understanding a real structural gap in Colombian fintech: banks don't expose APIs, which means users either share credentials or stay unaware of their spending. Local-first isn't a preference here — it's the only architecture that doesn't compromise user privacy.
Boveda is a local-first personal finance dashboard built for Colombian bank accounts. Colombian banks don't expose transaction APIs, so every existing budgeting tool requires cloud access or credential sharing. Boveda takes a different approach: it parses statement exports (PDF, XLSX, CSV) from Bancolombia, Nequi, and Daviplata, extracts structured transaction data using rule-based parsers per bank, and stores everything locally in SQLite with zero cloud sync. The backend runs on Python 3.12, FastAPI, and SQLAlchemy with Alembic migrations. Each bank has its own parser module handling format inconsistencies, implicit sign inference, and category tagging without machine learning. The API serves structured financial data to a React frontend in progress. Full pytest coverage across parser and API layers. Local-first by design: no credential exposure, no third-party data access, no subscription required to understand your own finances.