Mudit Gulati

Experiment

Financial Dashboard

Personal use only · FastAPI, SQLAlchemy, SQLite, IMAP/JMAP, local LLM

Financial Dashboard is a self-hosted service that polls Gmail (via IMAP) and Fastmail (via JMAP) for bank transaction alert emails, parses them into structured transactions, and reconciles them against credit card statement PDFs. Email parsing covers a dozen-plus Indian banks and 28+ email formats through a dedicated parser library. New transactions are automatically categorized using a local LLM: the app talks to a local LMStudio instance over its OpenAI-compatible API, auto-discovers whichever model is currently loaded, and asks it to classify each transaction into one of a configurable set of categories. If the local LLM is offline, categorization is skipped and the transaction is left uncategorized rather than blocking the pipeline — categorization is treated as best-effort, never a hard dependency. The same local LLM also helps onboard new bank email formats: when an email fails to parse, the app can ask the model to propose a regex pattern for it, with retry logic if the first attempt doesn't match the sample email. The suggestion is only saved after manual review, never automatically. Built with FastAPI and Jinja2 templates on the backend, SQLAlchemy with async SQLite for storage, and Fernet encryption for stored email credentials. Runs on a schedule, polling every 15 minutes by default, with Telegram notifications for new transactions. Personal use only — there's no authentication on the web UI, so it's meant to run on a private network rather than be exposed publicly.