Personal finance tracking desktop app — track income, expenses, budgets, and savings goals with everything running locally.
A portable Windows desktop application for personal finance management. No external database or server required — everything runs locally with an embedded SQLite database.
- Fully Offline — no cloud, no accounts, your data stays on your machine
- Portable — single
.exe, no installation required - Monorepo — NestJS REST API backend + React frontend in one workspace
- Accounts — checking, savings, credit, investment, cash with balances
- Transactions — income, fixed costs, variable expenses, transfers with pagination and month navigation
- Categories — organize transactions, track fixed vs variable costs
- Recurring Rules — automatic transaction posting (daily, weekly, monthly, yearly)
- Budgets — spending limits per category with progress tracking and projections
- Monthly Summary — income, fixed costs, variable expenses, savings at a glance
- Category Breakdown — where your money goes each month
- Net Worth Trend — balance over time across all accounts (up to 12 months)
- Budget vs Actual — track spending against budget limits
- Recurring Costs — overview of fixed monthly obligations
- Savings History — 6-month income vs expenses comparison
- Tags & Payees — label and organize transactions
- Savings Goals — track progress toward targets with contributions
- Export/Import — JSON full backup, CSV transaction export, restore with replace or merge
- Audit Log — automatic tracking of all data changes
- Settings — currency, first day of month/week preferences
- Command Palette — quick keyboard navigation (
Ctrl+K) - Swagger Docs — full API documentation at
/api/docs(dev mode)
| Layer | Technology |
|---|---|
| Desktop | Electron 41 |
| Frontend | React 19 + TypeScript 6 + Vite 8 |
| Styling | Tailwind CSS 4 + Framer Motion 12 |
| Backend | NestJS 11 |
| ORM | Prisma 7 + better-sqlite3 adapter |
| Database | SQLite (file-based, portable) |
| Charts | Recharts |
- Node.js 22+
npm install # install all workspace dependencies
npm run dev # start backend + frontend + ElectronThe dev server waits for both the backend (port 8080) and frontend (port 5173) before opening the Electron window.
npm run dev # full dev environment
npm run dev:backend # backend only (NestJS, port 8080)
npm test # run 201 backend tests
npm run lint # lint both packages
npm run typecheck # type-check both packages
bash build-all.sh # build portable Windows EXEbash build-all.shOutput: packages/desktop/dist/Finance Desktop-<version>-portable.exe (~105 MB)
The portable executable bundles the backend, frontend, and database — no installation required.
packages/
├── backend/ NestJS REST API (port 8080)
│ ├── prisma/ Database schema and migrations
│ ├── prisma.config.ts Prisma 7 datasource configuration
│ └── src/
│ ├── generated/ Prisma client (auto-generated)
│ ├── modules/ Feature modules (14 total)
│ │ ├── accounts/ CRUD + balance tracking
│ │ ├── analytics/ Summaries, trends, breakdowns
│ │ ├── audit/ Change tracking interceptor
│ │ ├── budgets/ Per-category spending limits
│ │ ├── categories/ Income/expense classification
│ │ ├── export/ JSON/CSV export, JSON import
│ │ ├── goals/ Savings goals + contributions
│ │ ├── health/ Health check endpoint
│ │ ├── payees/ Transaction payees
│ │ ├── recurring-rules/ Auto-post scheduling
│ │ ├── seed/ Initial data setup
│ │ ├── settings/ App preferences
│ │ ├── tags/ Transaction labels
│ │ └── transactions/ Paginated with date filtering
│ ├── prisma/ PrismaService (better-sqlite3 adapter)
│ └── common/ Shared filters, interceptors, DTOs
└── desktop/ Electron + React frontend
├── electron/ Main process (backend fork, migrations)
└── src/
├── pages/ 13 pages (Dashboard → Settings)
├── components/ UI (SidePanel, CommandPalette, SparkLine, etc.)
├── api/ Backend client + types
└── hooks/ Shared React hooks
Base URL: http://127.0.0.1:8080/api
| Endpoint | Description |
|---|---|
GET /api/health |
Health check |
/api/accounts |
CRUD accounts |
/api/categories |
CRUD categories |
/api/transactions |
CRUD with pagination and date filtering |
/api/recurring-rules |
CRUD recurring rules + generate next |
/api/budgets |
CRUD budget limits |
/api/tags |
CRUD transaction tags |
/api/payees |
CRUD payees |
/api/goals |
CRUD savings goals + contributions |
/api/settings |
App preferences |
/api/analytics/* |
Month summary, category breakdown, net worth, budget vs actual, recurring costs |
/api/export/* |
JSON/CSV export, JSON import |
/api/audit/* |
Audit log queries |
/api/docs |
Swagger UI (dev mode only) |
201 backend unit tests across 18 suites.
npm test # all tests
npm -w @finance/backend run test:cov # with coverage report- Fork the repository
- Create a feature branch
- Make your changes
- Run
npm run lintandnpm run typecheck - Run
npm test - Submit a pull request
MIT License — see LICENSE for details.