A full-stack personal finance dashboard that connects to real bank accounts via Plaid, syncs transactions, and displays them in a dark-mode dashboard.
- Email/password authentication (JWT)
- Bank account connection via Plaid Link
- Transaction sync with duplicate-safe incremental updates
- Category filtering
- Monthly spending / income summary cards
Backend: Python, FastAPI, SQLAlchemy, PostgreSQL, Plaid API, Docker Compose (local Postgres/Redis) Frontend: Next.js, React, TypeScript, Tailwind CSS
- Auth tokens are held in memory (React state), not
localStorage. This avoids exposing the JWT to XSS, but loses user session on page refresh. - Only one connected bank account is supported per user for this MVP.
- Redis is provisioned in local dev (
docker-compose.yml) for a planned background-job queue, but isn't used by the app yet, so not deployed to production for that reason. - To be deployed via Vercel and Railway
Requirements: Docker, Python 3.11+, Node 18+
git clone <your-repo-url>
cd finance-tracker
# Postgres + Redis
docker-compose up -d
# Backend
cd backend
python -m venv venv && source venv/bin/activate
pip install -r requirements.txt
alembic upgrade head
uvicorn app.main:app --reload
# Frontend (new terminal)
cd frontend
npm install
npm run devBackend runs at http://localhost:8000, frontend at http://localhost:3000.
You'll need your own Plaid sandbox API keys — see backend/app/config.py for required environment variables.
Category charts, an LLM-powered spending advisor, and multi-bank support are planned but out of scope for this MVP.