A modern web application that uses AI to parse receipts and split bills among friends with Venmo integration.
- 📸 AI Receipt Parsing: Upload a photo of your receipt and let Google Gemini AI extract items and prices
- 👥 Smart Bill Splitting: Assign items to specific people for proportional splitting with tax and tip distribution
- 💳 Venmo Integration: Generate QR codes and payment page links for easy payments
- 📱 Mobile-Friendly: Responsive design that works great on phones
- ⚡ Real-time Calculation: Instant split calculations as you assign items
- 📊 Payment Tracking: Track who has paid and who still owes money
- 📱 SMS Reminders: Send text message reminders with payment links
- 📚 Bill History: View and manage your past bills with payment status
- 🔄 Payment Status Updates: Toggle paid status and see outstanding amounts in real-time
- FastAPI: Modern Python web framework
- MongoDB: Cloud database for storing bill data
- Google Gemini: AI Vision API for receipt parsing
- Pillow: Image processing
- QRCode: Generate payment QR codes
- PyMongo: MongoDB driver for Python
- React 18: Modern React with hooks
- React Router: Client-side routing
- Tailwind CSS: Utility-first CSS framework
- Axios: HTTP client for API calls
- Vite: Fast build tool and dev server
- Headless UI: Accessible UI components
- Heroicons: Beautiful SVG icons
- QRCode: Client-side QR code generation
- Python 3.8+
- Node.js 16+ (see installation instructions below)
- npm (comes with Node.js)
Option 1: Download from official website (Recommended)
- Go to https://nodejs.org/
- Download the LTS version (Long Term Support)
- Run the installer and follow the instructions
- Verify installation:
node --versionandnpm --version
Option 2: Using a package manager
- Windows (with Chocolatey):
choco install nodejs - Windows (with Winget):
winget install OpenJS.NodeJS - macOS (with Homebrew):
brew install node - Linux (Ubuntu/Debian):
sudo apt install nodejs npm - Linux (CentOS/RHEL):
sudo yum install nodejs npm
- Navigate to the backend directory:
cd backend- Create a virtual environment:
python -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate- Install dependencies:
pip install -r requirements.txt- Set up environment variables:
cp env_example.txt .env
# Edit .env and add your API keysAPI Keys Setup:
- Gemini API Key (Required): Get from https://aistudio.google.com/app/apikey
- Used for AI-powered receipt parsing
- Gemini has excellent vision capabilities for receipt parsing
- MongoDB URI (Required): Get from https://www.mongodb.com/atlas
- Used for storing bill data in the cloud
- Run the backend server:
python main.pyThe API will be available at http://localhost:8000
- Navigate to the frontend directory:
cd frontend- Install dependencies:
npm install- Start the development server:
npm run devThe app will be available at http://localhost:5173
You can deploy this application for free using Vercel (for the frontend) and Render (for the backend).
- Create a new Web Service on Render and connect your GitHub repository.
- Settings:
- Name:
tabby-backend(or your choice) - Root Directory:
backend - Environment:
Python 3 - Region: Choose a region close to you.
- Build Command:
pip install -r requirements.txt - Start Command:
uvicorn main:app --host 0.0.0.0 --port $PORT - Instance Type:
Free
- Name:
- Add Environment Variables:
GEMINI_API_KEY: Your Google Gemini API key.MONGO_URI: Your MongoDB connection string.FRONTEND_URL: The URL of your deployed frontend (e.g.,https://your-app.vercel.app).PYTHON_VERSION:3.9
- Click Create Web Service. After the first build, your API will be live.
- Create a new Project on Vercel and import your GitHub repository.
- Vercel will automatically detect the framework as Vite.
- Configure Project:
- Expand the Environment Variables section.
- Add
VITE_API_BASE_URLand set its value to your Render backend URL (e.g.,https://tabby-backend.onrender.com).
- Click Deploy. Your site will be live in a few moments.
The vercel.json file included in the frontend directory ensures that client-side routing works correctly on Vercel.
POST /api/upload-receipt- Upload and parse a receipt imageGET /api/bills/{bill_id}- Get bill data by IDPOST /api/bills/{bill_id}/assign- Assign items to people and calculate splitsPOST /api/bills/{bill_id}/toggle-paid- Toggle paid status for a personGET /api/bills/{bill_id}/payment-links- Generate Venmo payment links and QR codesGET /api/health- Health check endpoint
- Upload Receipt: Take a photo of your receipt and upload it
- Review Items: Check that the AI correctly parsed all items and prices
- Assign Items: Add people and assign specific items to them
- Generate Payments: Create Venmo links and QR codes for each person
- Track Payments: Monitor who has paid and send SMS reminders
- View History: Access your bill history and payment status
tabby-demo/
├── backend/
│ ├── main.py # FastAPI application
│ ├── models.py # Pydantic data models
│ ├── database.py # MongoDB database operations
│ ├── vision_service.py # Google Gemini AI integration
│ ├── utils.py # Helper functions
│ ├── uploads/ # Temporary image storage
│ └── requirements.txt
├── frontend/
│ ├── src/
│ │ ├── components/ # Reusable React components
│ │ ├── pages/ # Page components
│ │ ├── services/ # API service layer
│ │ └── App.jsx # Main application component
│ ├── public/ # Static assets
│ └── package.json
├── vercel.json # Vercel deployment configuration
└── README.md
- Fork the repository
- Create a feature branch
- Make your changes
- Test thoroughly
- Submit a pull request
MIT License - see LICENSE file for details