ExpensePilot is a full-stack personal finance application that helps users manage income, expenses, and budgets β and understand their financial health at a glance. It pairs a modern, glassmorphic, dark-mode-only React interface with a secure Node.js/Express + MongoDB backend, giving users a calm, focused space to log transactions, set monthly limits, and explore spending trends through interactive charts.
Built as a full end-to-end product: authentication, protected routes, RESTful APIs, persistent data models, and a polished analytics dashboard β all in one codebase.
- π Secure Authentication β JWT-based auth with httpOnly cookie sessions and protected route middleware
- π΅ Income Tracking β Add, edit, delete, filter, search, and sort income records
- πΈ Expense Management β Categorized expense entries with dates and descriptions
- π Budget Monitoring β Set a monthly limit, track category-level spending caps, and get visual warning states as you approach your limit
- π Analytics Dashboard β Income vs. expense trends, category distribution, and top spending categories via interactive charts
- π Modern Dark UI β Glassmorphism, animated gradients, floating blobs, cursor-glow effects, skeleton loaders, and confetti micro-interactions
- π± Responsive Design β Fully usable across desktop and mobile viewports
- π Privacy First β User data is scoped per-account and never shared
Sign In![]() |
Dashboard![]() |
Income![]() |
Expenses![]() |
Budget![]() |
Analytics![]() |
Profile![]() |
|
| Tech | Purpose |
|---|---|
| React 19 | UI library |
| Vite | Build tool & dev server |
| TypeScript | Type safety |
| TanStack Router | Route-based navigation |
| TanStack Query | Server state & caching |
| Tailwind CSS | Utility-first styling |
| Recharts | Data visualization |
| Sonner | Toast notifications |
| Tech | Purpose |
|---|---|
| Node.js | Runtime |
| Express.js | REST API framework |
| MongoDB + Mongoose | Database & ODM |
| JWT (httpOnly cookies) | Authentication |
ExpensePilot/
βββ backend/
β βββ controllers/ # Auth, income, expense, budget, analytics logic
β βββ models/ # Mongoose schemas (User, Income, Expense, Budget)
β βββ routes/ # API route registration
β βββ middleware/ # Auth & error handling
β βββ server.js # Express app entry point
β
βββ frontend/
βββ src/
β βββ routes/ # Page-level routes (dashboard, income, expenses, budget, analytics, auth)
β βββ components/ # Shared UI shell, sidebar, layouts, icons
β βββ lib/
β βββ api.ts # API client
β βββ store.ts # Client-side UI/session state
βββ vite.config.ts
| Model | Fields |
|---|---|
| User | account details, hashed password, currency preference |
| Income | amount, category, description, date, owner |
| Expense | amount, category, description, date, owner |
| Budget | one monthly budget per user, category limits |
- Node.js (v18+ recommended)
- MongoDB (local instance or MongoDB Atlas)
- npm or yarn
# Clone the repository
git clone https://github.com/wasay-khanzada/ExpensePilot.git
cd ExpensePilot
# Install backend dependencies
cd backend
npm install
# Install frontend dependencies
cd ../frontend
npm installCreate a .env file inside backend/:
PORT=5000
MONGO_URI=your_mongodb_connection_string
JWT_SECRET=your_jwt_secret
NODE_ENV=developmentCreate a .env file inside frontend/ (if applicable):
VITE_API_BASE_URL=http://localhost:5000/api# Start the backend (from /backend)
npm run dev
# Start the frontend (from /frontend, in a separate terminal)
npm run devThe frontend will typically run at http://localhost:5173 and the backend API at http://localhost:5000.
- Automated test suite for backend endpoints and critical frontend flows
- Full backend persistence for category budget limits
- Reduce reliance on local client-side store in favor of backend as single source of truth
- CI pipeline for linting, testing, and builds
- Production deployment configuration & documentation
See CHANGELOG.md for release history.
Contributions, issues, and feature requests are welcome! Please read CONTRIBUTING.md before submitting a pull request.
This project is licensed under the MIT License.
Wasay Khanzada GitHub: @wasay-khanzada






