FlaskAdmin dashboard

finance-dashboard-template — Flask Admin dashboard Template

By barnabys-drew

A Flask-based self-hosted personal finance dashboard template that aggregates bank, brokerage, and equity plan data via Plaid and custom scrapers, keeping all personal data local.

Explore the design

Compare the page layouts and mobile experience. Open any screenshot for a closer look.

1 previews
Author preview
Author-provided previewTop of page

Preview provided in the project README.

One original preview is available. Open the full image to inspect the design.

Screenshots show visual appearance; interactive behavior may differ.

Recorded 2026-10-13View source

What stands out

A quick read of the recorded project description.

01

Sync bank and brokerage data via Plaid, supplemented by Playwright + Chrome scrapers for equity plans and pharmacy prescriptions that Plaid does not cover

02

All personal data, tokens, and configuration reside in the ~/.finance-viz/ directory; the repository code contains no balances, transactions, or keys

03

Provides a --demo mode that generates sample data and launches the full dashboard without any credentials

04

Includes analytical views such as spending drill-downs, category donut charts, net worth and asset class exposure, concentration alerts, equity vesting schedules, subscription detection, and anomaly scans

05

Categorization rules, merchant keywords, account labels, employer codes, and budgets are configured via config.json, separate from the code

Template Details

This is a self-hosted personal finance dashboard template built with Flask, designed to bring financial data scattered across banks, brokerages, and equity plans into a single local web interface. Data sources include the Plaid API, Playwright- and Chrome-based equity plan scrapers, a pharmacy prescription scraper, and manually entered items; refresh.py orchestrates these sources, while app.py serves pages and APIs in read-only mode.

The dashboard includes tabs such as Spending, Net Worth, and Cash Flow & Trends, offering monthly spending drill-downs, category donut charts, top merchants, daily charts, keyword insight cards, and optional budgets; account balances and asset class exposure, concentration alerts, vested and unvested employer equity with vesting schedules; and income vs. expense comparisons, period-over-period changes, subscription detection, and anomaly discovery. There are also recurring charge scans and Yahoo Finance news related to holdings.

The template emphasizes data isolation: all personal data, tokens, and configuration reside in the ~/.finance-viz/ directory, which is gitignored and set to chmod-600; the repository itself contains no balances, transactions, or keys. Categorization rules, merchant keywords, account labels, employer codes, and budgets all come from config.json. The repository provides a --demo mode that generates sample data and launches the full dashboard locally without a Plaid account or any credentials, making it suitable for previewing the interface and features before deciding whether to connect real accounts.

In terms of limitations, connecting real accounts requires completing Plaid onboarding and account linking per SETUP.md, and configuring scrapers yourself for institutions Plaid does not cover; scrapers rely on a Chrome remote debugging workflow, with operational details documented in RUN.md. This template is an MIT-licensed code release; third-party assets and external services require separate verification of licensing and fees.

FlaskBackend

Is it right for your project?

Use Cases

  • View balances, spending, and cash flow trends across multiple bank and brokerage accounts locally in one place
  • Track vested and unvested shares and vesting schedules for employer equity plans
  • Identify recurring charges, subscription price changes, and anomalous transactions
  • Preview the dashboard interface and features with --demo mode before connecting real accounts
  • Write or integrate custom scrapers for institutions Plaid cannot cover

Suitable For

  • Individual users who want their financial data to remain entirely on their machine and not be uploaded to third-party cloud services
  • Developers with a Python environment and basic command-line skills who are willing to configure Plaid and scrapers per SETUP.md
  • Users who need to view spending, net worth, cash flow, and equity vesting in a single interface
  • Developers who want to build on the existing Flask code or extend data sources

Getting started & customization

Use these recorded setup notes alongside the repository instructions for your chosen version.

  1. 1

    After cloning the repository, create a Python virtual environment and install requirements.txt; run ./start.sh --demo to generate sample data without credentials and open http://localhost:5000

  2. 2

    To connect real accounts, refer to SETUP.md to complete Plaid onboarding and account linking, and create config.json based on config.example.json

  3. 3

    Personal data, tokens, and configuration reside in ~/.finance-viz/, which is gitignored and set to chmod-600

  4. 4

    Secrets come from local files or the 1Password CLI, read at runtime, never hardcoded or written to logs

  5. 5

    Scrapers rely on a Chrome remote debugging workflow; Tailwind build and WSL-related details are documented in RUN.md

Read repository instructions

License & source material

Usage conditions & limitations

Free to use · keep license notice

This entry covers the free version in the public repository under the MIT license; the free scope is the code of this version and does not imply that external services or third-party assets are free.

Must comply with when using

  • You may use, modify, commercialize, and distribute the code of this version for free.
  • When distributing copies or substantial portions of the code, retain the original author's copyright notice and the full MIT license notice.
  • The code is provided as is; warranties and limitations of liability are governed by the original license and applicable law.

Additional costs & items to verify

  • Demo images, fonts, icons, and other third-party assets must be checked against their respective licenses; the code's MIT license alone cannot be used to judge them.
  • External services such as domains, hosting, databases, payments, or AI may incur separate fees.
  • Connecting real bank and brokerage data depends on the third-party Plaid service; you must register a Plaid account and complete account linking yourself, which may incur external service fees.
  • Secret retrieval depends on local files or the 1Password CLI; using the 1Password method requires a corresponding 1Password account and subscription.
  • The holdings news feature depends on the external Yahoo Finance service, whose availability and terms are determined by the third party.
  • The equity plan scraper relies on Playwright and a Chrome remote debugging workflow, requiring a locally installed and configured Chrome environment.
  • Institutions not covered by Plaid require you to write or configure scrapers yourself; the template does not provide ready-made support.
View Original Text Basis

Permission is hereby granted, free of charge

Original License Text

live bank/brokerage data via **Plaid**

Original README

Secrets come from a local file or the 1Password CLI at runtime

Original README

Position news** — Yahoo Finance headlines for your current holdings

Original README

Equity plan scraper ────┤ ~/.finance-viz/*.json Flask (Playwright + Chrome)

Original README

adding scrapers for institutions Plaid doesn't reach

Original README
https://github.com/barnabys-drew/finance-dashboard-template/blob/main/LICENSEhttps://github.com/barnabys-drew/finance-dashboard-template/blob/main/README.md

Compiled by DeepSeek based on repository license and README ·2026-10-13. Results only cover the materials read; dependencies, images, fonts, and subsequent term changes are subject to their respective original texts.

Project checks & description sources

Template Information

Source platforms
GitHub
Documentation and maintenance reference score
Partly documented · 68 / 100
Technologies
Flask
Website type
Admin dashboard
How this score is calculated

Our heuristic uses license records (up to 30), a demo link (12), a preview (10), stars (15), recorded maintenance (15), description completeness (8), feature records (5) and classification data (5). It is not a code, security or performance test, or a Google score. A link does not establish tested functionality.

What to verify for this project

Repository update recorded
2026-10-13
Screenshot last checked
2026-10-13

No demo link is recorded. Use the repository instructions to evaluate the project locally; the screenshot alone cannot establish interactive behavior.

The catalog identifies Flask as the primary stack. Check the actual dependency manifest and lockfile for versions and hosting requirements. These notes use recorded metadata, not a code audit or a deployment test.

Use a selection guide →

How this description was prepared

AI-assisted description based on catalog records and repository material. Repository authors are not automatically the reviewers of this description.

Review declaration: [email protected] · 2026-10-13

Inspect the recorded source material

SHA-256: fc703f090b85035669d56d3bdfd245f613cd01cade7934074c369545e3cec7f8

2026-10-13T01:04:57.451Z

Source file / repository
# Finance Dashboard

A self-hosted personal finance dashboard: live bank/brokerage data via **Plaid**,
equity-plan scraping for what Plaid can't reach, and a local **Flask** dashboard.
All financial data stays on your machine — the repo never contains balances,
transactions, or secrets.

[![CI](https://github.com/barnabys-drew/finance-dashboard-template/actions/workflows/ci.yml/badge.svg)](https://github.com/barnabys-drew/finance-dashboard-template/actions/workflows/ci.yml)
![Python](https://img.shields.io/badge/python-3.10%2B-blue)
![License](https://img.shields.io/badge/license-MIT-green)

| Spending | Net Worth |
|----------|-----------|
| ![Spending tab](docs/screenshots/spending.png) | ![Net Worth tab](docs/screenshots/networth.png) |

_All figures shown are generated sample data._

## Try it in 60 seconds

No Plaid account, credentials, or configuration needed:

```bash
git clone https://github.com/barnabys-drew/finance-dashboard-template.git
cd finance-dashboard-template
python3 -m venv venv && source venv/bin/activate && pip install -r requirements.txt
./start.sh --demo
```

That generates realistic sample data and opens the full dashboard at
`http://localhost:5000`.

## Features

- **Spending** — monthly drill-down, category donut, top merchants, daily chart,
  and keyword-driven insight tiles (Household, Baby, Pet, AI, Utilities, …) with
  optional per-tile budgets
- **Net Worth** — account balances, asset-class exposure, concentration alerts,
  vested vs. unvested employer equity with a per-tranche vesting schedule
- **Cash Flow & Trends** — income vs. spend, month-over-month deltas,
  subscription detection (price changes, lapsed, emerging), anomaly findings
- **Recurring-charge scan** — flags stable monthly/annual merchants, splits true
  subscriptions from bills
- **Position news** — Yahoo Finance headlines for your current holdings

## How it works

```
Plaid API ──────────────┐
Equity plan scraper ────┤            ~/.finance-viz/*.json           Flask
(Playwright + Chrome)   ├─ refresh.py ─────────────────────► app.py ───► localhost:5000
Pharmacy Rx scraper ────┤   (orchestrator)                  (read-only)
Manual entries ─────────┘
```

- **Everything personal lives in `~/.finance-viz/`** (data, tokens, config) —
  gitignored, chmod-600, never in the repo.
- **Code contains no personal data.** Category rules, merchant keywords, account
  labels, employer tickers, and budgets all come from `config.json`
  (see [`config.example.json`](config.example.json)).
- Secrets come from a local file or the 1Password CLI at runtime — never
  hardcoded, never logged.

## Setup with your real accounts

Follow **[SETUP.md](SETUP.md)** — it covers Plaid onboarding, linking accounts,
the full `config.json` reference, and adding scrapers for institutions Plaid
doesn't reach. It's written step-by-step, so you can also hand it to an AI
coding assistant and have it walk you through the process.

## Running it

| Command | What it does |
|---------|--------------|
| `./start.sh` | Refresh all sources, then open the dashboard |
| `./start.sh --fast` | Skip refresh — cached data, instant |
| `./start.sh --demo` | Generated sample data — no credentials at all |
| `./start.sh --no-shareworks` | Refresh Plaid only; don't touch Chrome |

`RUN.md` documents the runtime details (Chrome remote-debugging flow for
scrapers, Tailwind build, WSL specifics).

## Key files

| File | Purpose |
|------|---------|
| `app.py` | Flask app + API routes |
| `finance_config.py` | Paths, category rules, config loading, bucket classifier |
| `refresh.py` | Orchestrates all data sources |
| `plaid_setup.py` / `plaid_refresh.py` | One-time account linking / incremental sync |
| `providers/` | Pluggable balance providers (Shareworks scraper, manual entries) |
| `portfolio_analytics.py` | Asset-class exposure + concentration alerts |
| `detect_subscriptions.py` / `detect_anomalies.py` | Recurring-charge + anomaly scans |
| `scripts/gen_sample_data.py` | Demo data generator (powers `--demo` and CI) |
| `static/app.js`, `templates/` | Dashboard front-end (Chart.js + Tailwind) |

## Tests

```bash
pip install -r requirements-dev.txt
python3 -m pytest -q
```

## License

MIT
Report a correction

Explore similar templates

Compare previews and descriptions within the same stack and category.