A modern, full-stack personal finance management application with AI-powered receipt scanning, budget planning, and expense analytics.
- Receipt Management - Upload and scan receipts using OCR (PaddleOCR + Gemini AI)
- Expense Tracking - Automatic categorization and tracking of expenses
- Budget Planning - Set and monitor budgets with visual progress indicators
- Bill Reminders - Never miss a payment with smart bill tracking
- Analytics Dashboard - Visual insights into spending patterns with charts
- AI Suggestions - Get personalized financial advice powered by Groq AI
- Subscription Tracking - Monitor recurring subscriptions
- User Authentication - Secure OTP-based email authentication via Supabase
- React 19 with TypeScript
- Vite - Build tool
- TailwindCSS - Styling
- Zustand - State management
- React Query - Server state management
- Recharts - Data visualization
- React Hook Form + Zod - Form handling & validation
- FastAPI - Python API framework
- MongoDB Atlas - Database
- Motor - Async MongoDB driver
- PaddleOCR - Receipt text extraction
- Google Gemini AI - Receipt parsing & categorization
- Supabase - Authentication
- Node.js 18+ and npm
- Python 3.10+
- MongoDB Atlas account (free tier works)
- Supabase account (free tier works)
- Gmail account (for OTP emails)
git clone https://github.com/yourusername/finex.git
cd finex# Navigate to backend
cd backend
# Create virtual environment
python -m venv venv
# Activate virtual environment
# Windows:
venv\Scripts\activate
# macOS/Linux:
source venv/bin/activate
# Install dependencies
pip install -r requirements.txt# Navigate to frontend
cd frontend
# Install dependencies
npm installCopy backend/.env.example to backend/.env and fill in your values:
# MongoDB - Get from https://cloud.mongodb.com
MONGODB_URL=mongodb+srv://username:password@cluster.mongodb.net/?appName=finex
DB_NAME=finex
# API Settings
DEBUG=False
PORT=8000
FRONTEND_URL=http://localhost:5173
# Supabase - Get from https://supabase.com/dashboard -> Settings -> API
SUPABASE_URL=https://your_project.supabase.co
SUPABASE_ANON_KEY=your_anon_key
SUPABASE_JWT_SECRET=your_jwt_secret
# Email (Gmail App Password) - Get from https://myaccount.google.com/apppasswords
SENDER_EMAIL=your_email@gmail.com
SENDER_PASSWORD=your_16_char_app_password
SENDER_NAME=Finex
# Gemini AI (Optional) - Get from https://aistudio.google.com/app/apikey
GEMINI_API_KEY=your_gemini_api_keyCopy frontend/.env.example to frontend/.env and fill in your values:
# Supabase
VITE_SUPABASE_URL=https://your_project.supabase.co
VITE_SUPABASE_ANON_KEY=your_anon_key
# API
VITE_API_URL=http://localhost:8000/api
# Groq AI (Optional) - Get from https://console.groq.com/keys
VITE_GROQ_API_KEY=your_groq_api_key- Create a new project at supabase.com
- Go to Authentication → Providers → Enable Email
- Disable "Confirm email" for OTP-based flow
- Copy your project URL and anon key from Settings → API
- Create a free cluster at MongoDB Atlas
- Create a database user
- Whitelist your IP (or use
0.0.0.0/0for development) - Get your connection string and add it to
.env
cd backend
python run.pyBackend runs at: http://localhost:8000
API Docs: http://localhost:8000/docs
cd frontend
npm run devFrontend runs at: http://localhost:5173
finex/
├── backend/
│ ├── app/
│ │ ├── api/ # API routes
│ │ ├── models/ # Pydantic models
│ │ ├── services/ # Business logic
│ │ ├── config.py # Settings
│ │ ├── database.py # MongoDB connection
│ │ └── main.py # FastAPI app
│ ├── storage/ # Uploaded files
│ ├── requirements.txt
│ └── run.py
├── frontend/
│ ├── src/
│ │ ├── components/ # React components
│ │ ├── pages/ # Page components
│ │ ├── services/ # API services
│ │ ├── stores/ # Zustand stores
│ │ └── lib/ # Utilities
│ ├── package.json
│ └── vite.config.ts
└── README.md
| Endpoint | Description |
|---|---|
POST /api/auth/request-otp |
Request OTP for signup/login |
POST /api/auth/verify-otp |
Verify OTP code |
GET /api/receipts |
Get user's receipts |
POST /api/receipts/upload |
Upload & scan receipt |
GET /api/budget |
Get budget settings |
GET /api/bills |
Get bill reminders |
GET /api/analytics/summary |
Get spending analytics |
GET /api/subscriptions |
Get subscriptions |
Coming soon
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.
Karthik Prabhu
- Email: karthikprabhu319@gmail.com
- Website: https://kaprabhu.me
Made with ❤️ by Karthik Prabhu