A full-stack expense management application for tracking employee expenses, approvals, reimbursements, and financial reporting. This system provides separate dashboards for Finance/Admin and Employees, ensuring smooth expense tracking and reimbursement workflow.
- 🌐 Live Demo (Frontend): Deployment Link
- 🖥️ Backend API: Deployment Link
- 📹 Video Demo: Watch on YouTube
- 📚 API Documentation: Postman Collection
- ✅ Manage employee profiles and expense categories
- 📊 Review and approve/reject expense claims
- 💳 Process reimbursements and track payments
- 📈 Generate expense reports (daily/monthly/yearly)
- 🔍 Audit trail for all expense transactions
- 📑 Export reports in PDF/Excel format
- 💰 Budget tracking and expense analytics
- 🏷️ Manage expense categories and limits
- 📝 Submit expense claims with receipts
- 📸 Upload receipt images/documents
- 👁️ Track expense status (Pending/Approved/Rejected)
- 💵 View reimbursement history
- 📅 Filter expenses by date range
- 🔔 Notifications for expense approvals
- 📊 Personal expense analytics
- 🧾 Download expense reports
- React 18.x (Vite) - Fast and modern build tool
- Tailwind CSS - Utility-first styling
- Redux Toolkit - State management
- React Router - Navigation
- Axios - HTTP client
- Framer Motion - Animations
- React Icons - Icon library
- Chart.js / Recharts - Data visualization
- Node.js 18+ - Runtime environment
- Express.js - Web framework
- MongoDB (Mongoose) - Database
- JWT - Authentication
- Bcrypt.js - Password hashing
- Multer - File uploads
- Nodemailer - Email notifications
- Express Validator - Input validation
- Cloudinary - Image/file storage
- PDFKit / jsPDF - PDF generation
- Postman - API testing & documentation
- Vercel/Netlify - Frontend deployment
- Render/Railway - Backend deployment
odooxamalthea/
│
├── backend/ # Node.js Backend
│ ├── config/
│ │ ├── db.js # MongoDB connection
│ │ └── cloudinary.js # Cloudinary config
│ │
│ ├── controllers/ # Request handlers
│ │ ├── authController.js
│ │ ├── expenseController.js
│ │ ├── employeeController.js
│ │ ├── categoryController.js
│ │ └── reimbursementController.js
│ │
│ ├── models/ # Mongoose schemas
│ │ ├── User.js
│ │ ├── Expense.js
│ │ ├── Category.js
│ │ ├── Reimbursement.js
│ │ └── Employee.js
│ │
│ ├── routes/ # API routes
│ │ ├── authRoutes.js
│ │ ├── expenseRoutes.js
│ │ ├── employeeRoutes.js
│ │ ├── categoryRoutes.js
│ │ └── reimbursementRoutes.js
│ │
│ ├── middleware/ # Custom middleware
│ │ ├── auth.js # JWT verification
│ │ ├── roleCheck.js # Role-based access
│ │ ├── upload.js # Multer config
│ │ └── errorHandler.js
│ │
│ ├── utils/ # Utility functions
│ │ ├── emailService.js
│ │ ├── pdfGenerator.js
│ │ └── validators.js
│ │
│ ├── .env # Environment variables
│ ├── server.js # Entry point
│ └── package.json
│
├── frontend/ # React Frontend
│ ├── src/
│ │ ├── assets/ # Images, icons, fonts
│ │ │
│ │ ├── components/ # Reusable components
│ │ │ ├── Navbar.jsx
│ │ │ ├── Sidebar.jsx
│ │ │ ├── ExpenseCard.jsx
│ │ │ ├── Table.jsx
│ │ │ └── Modal.jsx
│ │ │
│ │ ├── pages/ # Page components
│ │ │ ├── admin/
│ │ │ │ ├── Dashboard.jsx
│ │ │ │ ├── ExpenseApproval.jsx
│ │ │ │ ├── Employees.jsx
│ │ │ │ ├── Categories.jsx
│ │ │ │ └── Reports.jsx
│ │ │ │
│ │ │ ├── employee/
│ │ │ │ ├── Dashboard.jsx
│ │ │ │ ├── CreateExpense.jsx
│ │ │ │ ├── MyExpenses.jsx
│ │ │ │ └── Profile.jsx
│ │ │ │
│ │ │ ├── Login.jsx
│ │ │ ├── Register.jsx
│ │ │ └── NotFound.jsx
│ │ │
│ │ ├── redux/ # State management
│ │ │ ├── store.js
│ │ │ ├── slices/
│ │ │ │ ├── authSlice.js
│ │ │ │ ├── expenseSlice.js
│ │ │ │ └── userSlice.js
│ │ │
│ │ ├── services/ # API calls
│ │ │ ├── api.js
│ │ │ ├── authService.js
│ │ │ ├── expenseService.js
│ │ │ └── employeeService.js
│ │ │
│ │ ├── utils/ # Helper functions
│ │ │ ├── formatDate.js
│ │ │ ├── constants.js
│ │ │ └── validators.js
│ │ │
│ │ ├── App.jsx # Main app component
│ │ ├── main.jsx # Entry point
│ │ └── index.css # Global styles
│ │
│ ├── public/
│ ├── .env # Environment variables
│ ├── vite.config.js # Vite configuration
│ ├── tailwind.config.js # Tailwind config
│ └── package.json
│
└── README.md # This file
- Node.js 18+ installed
- MongoDB installed or MongoDB Atlas account
- Git
- Cloudinary account (optional, for image storage)
git clone https://github.com/VasaraSujal/odooxamalthea.git
cd odooxamaltheacd backend
npm installStart the backend server:
npm start
# OR for development with nodemon
npm run devBackend will run on http://localhost:5000
cd frontend
npm installStart the frontend development server:
npm run devFrontend will run on http://localhost:5173
- Login → Use admin credentials
- Dashboard → View expense statistics and pending approvals
- Manage Categories → Create/edit expense categories
- Review Claims → Approve/reject employee expense claims
- Process Payments → Manage reimbursements
- Generate Reports → Export analytics and reports
- Register/Login → Create account or sign in
- Create Expense → Submit new expense claim with receipts
- Upload Documents → Attach bills/receipts (images/PDFs)
- Track Status → Monitor approval status in real-time
- View History → Check past expenses and reimbursements
- Download Reports → Get personal expense reports
- Admin: Full access to all features
- Finance Manager: Review and process expenses
- Employee: Submit and view own expenses
Complete API documentation is available on Postman:
POST /api/auth/register - Register new user
POST /api/auth/login - Login user
GET /api/auth/me - Get current user
POST /api/auth/forgot-password - Forgot password
PUT /api/auth/reset-password - Reset password
GET /api/expenses - Get all expenses
POST /api/expenses - Create expense
GET /api/expenses/:id - Get single expense
PUT /api/expenses/:id - Update expense
DELETE /api/expenses/:id - Delete expense
PUT /api/expenses/:id/approve - Approve expense
PUT /api/expenses/:id/reject - Reject expense
GET /api/categories - Get all categories
POST /api/categories - Create category
PUT /api/categories/:id - Update category
DELETE /api/categories/:id - Delete category
GET /api/reimbursements - Get all reimbursements
POST /api/reimbursements - Create reimbursement
PUT /api/reimbursements/:id - Update reimbursement status
Using Vercel:
cd frontend
npm run build
vercel --prodUsing Netlify:
cd frontend
npm run build
netlify deploy --prod --dir=dist🔗 Live Frontend: Expense Management Frontend
Using Render:
- Create new Web Service on Render
- Connect your GitHub repository
- Set build command:
cd backend && npm install - Set start command:
cd backend && npm start - Add environment variables from
.env
🔗 Live Backend: Expense Managment Backend
Watch a complete walkthrough of the application:
Demo includes:
- User registration and login
- Admin dashboard overview
- Creating and submitting expenses
- Approval workflow
- Report generation
- Mobile responsiveness
- 🚗 Transportation
- 🍽️ Meals & Entertainment
- 🏨 Accommodation
- 📎 Office Supplies
✈️ Travel- 📱 Communication
- 💼 Others (Customizable)
- Employee submits expense with receipt
- Manager reviews and approves
- Finance verifies and processes
- Payment/Reimbursement initiated
- Employee receives notification
- Monthly expense summaries
- Category-wise spending charts
- Employee-wise reports
- Budget vs. Actual analysis
- Export to PDF/Excel
| Role | Permissions |
|---|---|
| Admin | Full access to all features |
| Finance Manager | Review, approve, process reimbursements |
| Manager | Approve team expenses |
| Employee | Submit and view own expenses |
Security Features:
- JWT-based authentication
- Password hashing with bcrypt
- Role-based access control
- Input validation and sanitization
- Protected API routes
- CORS configuration
- ✅ User authentication & authorization
- ✅ Expense submission with receipts
- ✅ Multi-level approval workflow
- ✅ Reimbursement processing
- ✅ Report generation (PDF/Excel)
- ✅ Email notifications
- ✅ Real-time status updates
- ✅ Responsive design
- 🔄 Mobile app (React Native) - In Progress
- 🔄 OCR for receipt scanning - Planned
- 🔄 Credit card integration - Planned
- 🔄 Multi-currency support - Planned
- 🔄 AI-powered expense categorization - Future
- 🔄 Voice-based expense entry - Future
Contributions are welcome! Please follow these guidelines:
- Fork the repository
- Create a feature branch (
git checkout -b feature/AmazingFeature) - Commit your changes (
git commit -m 'Add some AmazingFeature') - Push to the branch (
git push origin feature/AmazingFeature) - Open a Pull Request
- Follow ESLint configuration
- Use Prettier for code formatting
- Write meaningful commit messages
- Add comments for complex logic
- Write unit tests for new features
- Update documentation
Run backend tests:
cd backend
npm testRun frontend tests:
cd frontend
npm testThis project is licensed under the LGPL-3 License - see the LICENSE file for details.
- Sujal Vasara - Full Stack Developer - @VasaraSujal
- Arya Patel - Full Stack Developer - @aryapatel23
- Prem Kambaliya - Full Stack Developer - @Premkambaliya
- Jatin Rajvani - Full Stack Developer - @JatinRajvani
Special thanks to all team members for their valuable contributions in developing this comprehensive expense management system! 🙏
For issues, questions, or contributions:
- 📫 Issues: GitHub Issues
- 💬 Discussions: GitHub Discussions
- 📧 Email: [Contact via GitHub]
- 🚀 Fast & Efficient - Built with React + Vite for optimal performance
- 🔒 Secure - JWT authentication and role-based access control
- 📱 Responsive - Works seamlessly on desktop, tablet, and mobile
- 📊 Analytics - Comprehensive reporting and insights
- 🔔 Real-time Notifications - Stay updated on expense status
- ☁️ Cloud Storage - Secure receipt storage with Cloudinary
- 📧 Email Integration - Automated notifications for approvals
- 🎨 Modern UI - Beautiful interface with Tailwind CSS
⭐ If you find this project useful, please consider giving it a star!
📺 Don't forget to check out the YouTube Demo for a complete walkthrough!
Last updated: October 2025