A full-stack personal finance management application. Track income, expenses, recurring transactions, and organize your money into custom wallets with automatic rule-based assignment.
- Authentication — JWT-based auth with access + refresh tokens, secure password hashing
- Dashboard — Monthly overview of income, expenses, and balance at a glance
- Income & Expenses — Full CRUD with monthly trend charts, category breakdown (pie chart), paginated history, highest/lowest transaction highlights, and CSV/Excel export scoped to the active period and category filter
- Categories — Global (shared) and personal categories, with per-user preferences to hide categories or assign custom colors without affecting other users
- Recurring Transactions — Automate regular income/expenses (daily, weekly, biweekly, monthly, yearly) with optional auto-execution or manual confirmation
- Wallets — Organize transactions into custom groupings, either manually or automatically via rules (by category, transaction type, keyword, date range, or amount range)
- Dark mode — Full light/dark theme support
- Responsive design — Collapsible sidebar on desktop, bottom navigation on mobile
Backend
- FastAPI + SQLModel + PostgreSQL
- Alembic for migrations
- Docker Compose for local development
- JWT authentication (access + refresh, with refresh token rotation and SHA-256 hashing)
- bcrypt for password hashing
- openpyxl for Excel (XLSX) export Frontend
- React + TypeScript + Vite
- Tailwind CSS v4
- Zustand (transaction state) + Context API (auth, theme)
- Recharts for data visualization
- React Router + Axios (with automatic token refresh)
- Docker and Docker Compose
- Clone the repository:
git clone <repo-url>
cd <repo-name>- Create your
.envfile at the project root (see.env.examplefor required variables: database credentials, JWT secret, token expiration settings). - Start all services:
docker compose -f docker/docker-compose.yml up --build- Seed the global categories (recommended, so new accounts have categories to work with right away):
docker compose exec backend python -m app.scripts.seed_categories- Open the app:
- Frontend: http://localhost:3000
- Backend API docs (Swagger): http://localhost:8000/docs
├── backend/ # FastAPI application (models, routes, services, migrations)
├── frontend/ # React + TypeScript application
└── docker/ # Docker Compose and Dockerfiles