SplitMate is a modern web application that helps groups track and split expenses easily. No sign-up required - just create a group and share the link with your friends!
- 🎯 Create groups with unique shareable links
- 💰 Add and track expenses
- 👥 Split bills among multiple members
- 📊 View balance sheets and settlement suggestions
- 📱 Mobile-friendly interface
- 📤 Export data as CSV/PDF
- 💳 Optional payment integration (UPI/Venmo/PayPal)
- Frontend: React + Tailwind CSS
- Backend: Node.js + Express
- Database: MongoDB Atlas
- State Management: React Context API
- PDF Export: jsPDF
- Deployment: Vercel (Frontend) + Render (Backend)
- Node.js (v18 or higher)
- npm or yarn
- MongoDB (local or Atlas)
-
Clone the repository:
git clone https://github.com/yourusername/splitmate.git cd splitmate -
Install dependencies:
npm install
-
Set up MongoDB:
- For local development:
# Install MongoDB (macOS) brew tap mongodb/brew brew install mongodb-community # Start MongoDB service brew services start mongodb-community
- Or use MongoDB Atlas (cloud):
- Create a free account at MongoDB Atlas
- Create a new cluster
- Get your connection string
- For local development:
-
Set up environment variables:
Create
.envin the server directory:PORT=5000 MONGODB_URI=mongodb://localhost:27017/splitmate CORS_ORIGIN=http://localhost:3000Create
.envin the client directory:REACT_APP_API_URL=http://localhost:5000/api -
Start development servers:
npm run dev
The application will be available at:
- Frontend: http://localhost:3000
- Backend: http://localhost:5000
- Create a Vercel account at vercel.com
- Install Vercel CLI:
npm install -g vercel
- Deploy the client:
cd client vercel
- Create a Render account at render.com
- Create a new Web Service
- Connect your GitHub repository
- Configure the service:
- Build Command:
npm install && npm run build - Start Command:
npm start - Add environment variables:
PORT=5000 MONGODB_URI=your_mongodb_atlas_uri CORS_ORIGIN=your_vercel_frontend_url
- Build Command:
- Create a MongoDB Atlas account
- Create a new cluster (free tier is sufficient)
- Set up database access:
- Create a database user
- Set up IP whitelist (or allow access from anywhere for development)
- Get your connection string and update the backend's MONGODB_URI
Update the client's .env in Vercel:
REACT_APP_API_URL=https://your-render-backend-url/api
splitmate/
├── client/ # React frontend
│ ├── src/
│ │ ├── components/ # Reusable components
│ │ ├── pages/ # Page components
│ │ ├── contexts/ # React contexts
│ │ └── utils/ # Utility functions
│ └── public/ # Static assets
├── server/ # Express backend
│ ├── routes/ # API routes
│ ├── controllers/ # Route controllers
│ └── models/ # Database models
└── package.json # Root package.json
POST /api/groups- Create a new groupGET /api/groups/:id- Get group detailsGET /api/groups/:id/expenses- Get group expensesGET /api/groups/:id/balances- Get group balances
POST /api/expenses- Add new expenseGET /api/expenses/:id- Get expense detailsDELETE /api/expenses/:id- Delete expense
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add some 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.