CoinKeeper is a full-stack MERN application for personal finance management. Users can register, log in, track expenses, manage savings, and visualize their financial data. The project is split into a React + TypeScript frontend and a Node.js + Express + MongoDB backend.
Both frontend & backend are deployed on Vercel. For live project, Click here
- CoinKeeper
- User authentication (register, login, logout)
- JWT-based session management
- Add, view, and delete expenses
- Categorize expenses (Savings, Expenditure, Investment)
- Expense statistics and visualization
- Responsive UI with React and Tailwind CSS
- Secure password hashing and validation
- Modular, scalable codebase
- shadcn/ui – For prebuilt, accessible, and customizable UI components.
- Frontend: React, TypeScript, Vite, Redux Toolkit, Axios, shadcn/ui
- Backend: Node.js, Express, MongoDB, Mongoose
- Authentication: JWT, bcrypt
- Validation: Zod
- Deployment: Vercel (config included)
public/— Static assetssrc/components/— React componentslib/— Utility functionspages/— Page componentsservices/— API servicesstore/— Redux store & slices
- Static files:
vite.config.ts,.env.sample
config/— Database configcontrollers/— Route controllersmiddlewares/— Express middlewaresmodels/— Mongoose modelsroutes/— API routesutils/— Utility functions- Static files:
server.js,.env.sample
Copy .env.sample to .env in the backend folder and fill in your values:
cp backend/.env.sample backend/.env- PORT=3005
- MONGODB_URI=your_mongodb_connection_string
- JWT_SECRET=your_jwt_secret
- GUEST_JWT_SECRET=your_guest_jwt_secret
- NODE_ENV=development
- ALLOWED_ORIGINS=http://localhost:5173,
Copy .env.sample to .env in the frontend folder and fill in your values:
cp frontend/.env.sample frontend/.env
- VITE_BACKEND_API=http://localhost:3005
- VITE_NODE_ENV=development
cd backend
npm installcd frontend
npm installMake sure MongoDB is running locally or update your .env with your Atlas URI.
cd backend
npm startcd frontend
npm run dev- Frontend: http://localhost:5173
- Backend: http://localhost:3005
- Both frontend and backend include
vercel.jsonfor deployment on Vercel. - Set environment variables in your Vercel dashboard for both projects.
- For production, ensure CORS and secure cookie settings are properly configured.
POST /api/v1/auth/register— Register new userPOST /api/v1/auth/login— Login userGET /api/v1/auth/check-auth— Check if user is authenticatedPOST /api/v1/auth/logout— Logout user
GET /api/v1/profile/:username— Get user profile and expensesPOST /api/v1/profile/addamount— Add new expenseDELETE /api/v1/profile/deleteexpense/:id— Delete expense by IDDELETE /api/v1/profile/deleteallexpenses— Delete all expensesDELETE /api/v1/profile/deleteaccount— Delete user account
npm start— Start servernpm run dev— Start server with nodemon
npm run dev— Start Vite dev servernpm run build— Build for productionnpm run preview— Preview production build
- Fork the repo
- Create your feature branch (
git checkout -b feature/YourFeature) - Commit your changes (
git commit -m 'Add some feature') - Push to the branch (
git push origin feature/YourFeature) - Open a Pull Request
This project is licensed under the MIT License.
For questions or collaboration, reach out to me on Twitter/x