A full-stack finance tracking application built with TypeScript, React, Node.js, and MongoDB.
A "10x more complete" personal finance tracking application designed for secure and efficient management of income and expenses. This full-stack solution provides users with dedicated accounts, robust transaction and category management, and analytical features, delivered via a modern, responsive user interface.
-
🔒 User Authentication
- JWT-based authentication
- Register and login functionality
- Protected routes
-
💰 Transaction Management
- Add income and expenses
- Categorize transactions
- Filter and sort transactions
- Pagination support
- Date range filtering
-
📊 Categories
- Create custom categories
- Separate income and expense categories
- Edit and delete categories
-
📈 Dashboard
- Summary of income and expenses
- Balance calculation
- Transaction history
- Node.js + Express
- TypeScript
- MongoDB with Mongoose
- JWT Authentication
- Input validation with Joi
- Error handling middleware
- Request logging with Morgan
- React 18
- TypeScript
- React Query for state management
- React Router v6
- Axios for API calls
- Modern CSS with variables
- Responsive design
- Docker and Docker Compose
- Nginx for frontend serving
- Environment configuration
- Production-ready setup
- Node.js (v16 or higher)
- MongoDB
- Docker and Docker Compose (optional)
-
Clone the repository:
git clone <repository-url> cd finance-tracker
-
Backend Setup:
cd backend cp .env.example .env npm install npm run dev -
Frontend Setup:
cd frontend cp .env.example .env npm install npm run dev -
Access the application:
- Frontend: http://localhost:3000
- Backend API: http://localhost:5000
-
Build and run with Docker Compose:
docker-compose up --build
-
Access the application:
- Frontend: http://localhost
- Backend API: http://localhost:5000
MONGO_URI=mongodb://localhost:27017/finance_tracker
JWT_SECRET=your_jwt_secret_key_here
PORT=5000
VITE_API_URL=http://localhost:5000
- POST
/api/auth/register- Register new user - POST
/api/auth/login- Login user - GET
/api/auth/me- Get current user
- GET
/api/categories- Get all categories - POST
/api/categories- Create new category - PUT
/api/categories/:id- Update category - DELETE
/api/categories/:id- Delete category
- GET
/api/transactions- Get transactions (with filtering and pagination) - POST
/api/transactions- Create new transaction - DELETE
/api/transactions/:id- Delete transaction - GET
/api/transactions/stats- Get transaction statistics
- Use TypeScript strict mode
- Follow ESLint rules
- Write clean, modular code
- Add appropriate error handling
- Include type definitions
- Create feature branch
- Make changes
- Test changes
- Create pull request
- Code review
- Merge to main branch
-
Update environment variables for production
-
Build the frontend:
cd frontend npm run build -
Build and deploy Docker containers:
docker-compose -f docker-compose.prod.yml up -d
cd backend
npm run testcd frontend
npm run test- Fork the repository
- Create your feature branch
- Commit your changes
- Push to the branch
- Create a pull request
This project is licensed under the MIT License - see the LICENSE file for details.