Full-stack personal finance platform for budgeting, transactions, analytics, and AI-assisted money insights.
- Overview
- Features
- Tech Stack
- Architecture
- Getting Started
- Configuration
- Running the Apps
- API Endpoints
- Folder Structure
- Available Scripts
- Contributing
- License
BirrWise helps users take control of personal finances with an integrated dashboard and AI chat experience.
- Track and categorize transactions
- Set and monitor monthly budgets
- Review spending trends and summary analytics
- Ask finance questions through an AI assistant (optional via Gemini)
- Secure authentication with access and refresh token flow
- Budget management with validation and update support
- Transaction CRUD with category-aware tracking
- Dashboard analytics (summary, category, monthly, and daily insights)
- Optional AI assistant endpoint for contextual personal-finance guidance
- Clean, responsive React UI built with Tailwind + shadcn/ui + Radix components
- React 18
- TypeScript 5
- Vite 5
- Tailwind CSS
- shadcn/ui + Radix UI
- React Query, React Hook Form, Recharts, Zustand
- Node.js + Express 4
- TypeScript
- MongoDB with Mongoose
- Zod request validation
- JWT authentication
- ESLint
- Vitest
- Bun or npm for frontend workflow
client/is a SPA that consumes REST APIs fromserver/.server/exposes API modules for auth, budgets, transactions, dashboard, and AI chat.- Protected endpoints use JWT middleware.
- MongoDB stores users, transactions, budgets, refresh tokens, and AI history metadata.
- Node.js 20+
- npm 10+ (or Bun for client scripts)
- MongoDB instance (local or hosted)
git clone <repo-url>
cd AI-Powered-personal-financecd server && npm install
cd ../client && npm installBirrWise supports full Docker-based development and production workflows for maximum consistency and ease of onboarding.
- Docker and Docker Compose
- MongoDB Atlas account (or any remote MongoDB URI)
Copy example environment files and fill in your secrets:
cp server/.env.example server/.env
cp client/.env.example client/.env- For development, set
VITE_API_BASE_URL=http://localhost:4000/apiinclient/.env. - For production, set
VITE_API_BASE_URL=/apiinclient/.env(or use a build-time override). - Set your MongoDB Atlas URI in
server/.envasMONGODB_URI.
docker-compose -f docker-compose.yml -f docker-compose.dev.yml up --build- Frontend: http://localhost:5173
- Backend: http://localhost:4000
docker-compose -f docker-compose.yml -f docker-compose.prod.yml up --build -d- Frontend: http://localhost
- Backend: available at
/apivia nginx reverse proxy
docker-compose -f docker-compose.yml -f docker-compose.dev.yml down
# or for production
docker-compose -f docker-compose.yml -f docker-compose.prod.yml down- No local MongoDB container: Use MongoDB Atlas for production-grade reliability.
- Secrets: Never commit
.envfiles. Rotate any credential if exposed. - Alpine images & multi-stage builds: Used for small, secure, and fast containers.
- Networking: Docker service names are used for internal communication (never
localhost). - Frontend/Backend ports: Dev: 5173 (client), 4000 (server). Prod: nginx serves frontend on 80, proxies
/apito backend. - Troubleshooting: If you see permission errors, run
sudo chown -R $USER:$USER .in the project root.
- Create a free cluster at MongoDB Atlas
- Whitelist your server's IP or use 0.0.0.0/0 for dev (not recommended for prod)
- Copy the connection string to
server/.envasMONGODB_URI
Recommended: Use Docker Compose as described above for a unified workflow.
Or, to run manually:
cd server
npm run devcd client
npm run devPOST /registerPOST /loginPOST /refreshPOST /logoutGET /me
GET /PUT /:id
GET /POST /PUT /:idDELETE /:id
GET /summaryGET /category-expensesGET /monthlyGET /daily-expenses
POST /chat(requiresAI_ENABLED=trueandGOOGLE_API_KEY)
AI-Powered-personal-finance/
|-- client/
| |-- public/
| |-- src/
| | |-- components/
| | |-- pages/
| | |-- services/
| | |-- store/
| | `-- utils/
| `-- package.json
|-- server/
| |-- src/
| | |-- config/
| | |-- controllers/
| | |-- middleware/
| | |-- models/
| | |-- routes/
| | |-- schemas/
| | |-- services/
| | `-- utils/
| `-- package.json
`-- README.md
npm run devnpm run buildnpm run previewnpm run lintnpm run test
npm run devnpm run seednpm run buildnpm run start
- Fork the repository.
- Create a feature branch.
- Commit your changes with clear messages.
- Open a pull request with context and test notes.
MIT
