A full-stack personal finance management application built as a learning project to explore and master modern web development technologies.
This application allows users to track their income and expenses with an intuitive interface, visual analytics, and filtering capabilities. It's designed to be a practical learning ground for experimenting with contemporary development tools and frameworks.
This project was created to gain hands-on experience with:
- React - Building modern, component-based user interfaces
- TypeScript - Type-safe JavaScript for better code reliability
- Material-UI (MUI) - Professional component library and theming system
- Zustand - Lightweight state management solution
- React Query (TanStack Query) - Server-state management and data synchronization
- Chart.js & React-ChartJS-2 - Data visualization and analytics
- CSS Modules - Scoped styling and modular CSS architecture
- Vite - Modern build tool and development server
- Node.js & Express - Server-side JavaScript runtime and web framework
- Prisma - Modern ORM for database operations
- PostgreSQL - Powerful relational database
- Docker - Containerization for consistent development and deployment environments
- ✅ Transaction Management - Create, read, and delete income/expense transactions
- ✅ Dark Mode - Theme switching with persistent preference using MUI
- ✅ Filtering - Filter transactions by type (income/expense)
- ✅ Analytics - Visual charts showing income vs. expense trends
- ✅ Responsive Design - Mobile-friendly interface with Material-UI
- ✅ Type Safety - Full TypeScript implementation
- ✅ Real-time Updates - Optimistic UI updates with React Query
Personal_Finance/
├── backend/
│ ├── src/
│ │ ├── controllers/ # Request handlers
│ │ ├── routes/ # API route definitions
│ │ ├── db.js # Database initialization
│ │ ├── index.js # Express server entry point
│ │ └── prismaClient.js # Prisma client instance
│ ├── prisma/
│ │ └── schema.prisma # Database schema
│ ├── Dockerfile # Backend containerization
│ ├── package.json # Dependencies
│ └── prisma.config.ts # Prisma configuration
│
├── frontend/
│ ├── src/
│ │ ├── components/ # React components
│ │ ├── stores/ # Zustand stores (state management)
│ │ ├── api/ # API client functions
│ │ ├── App.tsx # Main application component
│ │ └── main.tsx # React entry point
│ ├── Dockerfile # Frontend containerization
│ ├── package.json # Dependencies
│ ├── vite.config.ts # Vite configuration
│ └── tsconfig.json # TypeScript configuration
│
├── docker-compose.yml # Multi-container setup
└── README.md # This file
- Docker and Docker Compose
- Node.js 18+ (for local development)
- npm or yarn
-
Clone the repository
git clone <repository-url> cd Personal_Finance
-
Start the application
docker-compose up -d --build
-
Access the application
- Frontend: http://localhost:4000
- Backend API: http://localhost:3000
cd backend
npm install
npm run devcd frontend
npm install
npm run devThrough this project, I've gained experience with:
- State Management - Comparing Zustand's simplicity versus Redux complexity
- Database Design - Prisma schema modeling and migrations
- Theme Implementation - MUI theming system for dark/light modes
- TypeScript Patterns - Type-safe component props and API contracts
- Containerization - Docker for reproducible development environments
- Data Visualization - Charting libraries for analytics
- Form Management - Controlled components and validation
GET /api/transactions- Fetch all transactionsPOST /api/transactions- Create new transactionDELETE /api/transactions/:id- Delete transaction
This project is open source and available under the MIT License.