A full-stack personal finance tracker that helps users monitor income, expenses, and savings with insightful reports and analytics.
- Frontend: https://pfm.morshedalam.dev
- API: Hosted on Netlify
- β Track income and expenses with custom categories
- β Set and monitor savings goals with visual progress
- β Create and manage monthly budgets
- β Generate financial reports with interactive charts
- β Automated recurring transaction management
- β Multi-period analysis (daily/weekly/monthly/yearly)
- β Secure JWT authentication with bcrypt encryption
- β Fully responsive design optimized for mobile and desktop
- β File upload support for receipts and documents
- β Email notifications for important events
- β Real-time data synchronization
- Framework: Next.js 16.1.1
- Language: TypeScript 5
- UI Library: React 19.2.3
- Styling: Tailwind CSS 4.1.18
- State Management: Zustand 5.0.9
- Validation: Zod 4.3.4
- HTTP Client: Axios 1.13.2
- Date Handling: date-fns 4.1.0
- Icons: Lucide React 0.562.0
- Utilities: clsx, tailwind-merge, class-variance-authority
- Runtime: Node.js
- Framework: Express. js 5.2.1
- Language: TypeScript 5.9.3
- Database: PostgreSQL (Neon)
- ORM: Prisma 7.2.0
- Authentication: JWT (jsonwebtoken 9.0.3 + jose 6.1.3)
- Password Hashing: bcrypt 6.0.0
- Validation: Zod 4.3.4 + express-validator 7.3.1
- Security: Helmet 8.1.0, CORS 2.8.5, express-rate-limit 8.2.1
- File Upload: Multer 2.0.2 + Cloudinary 2.8.0
- Email: Nodemailer 7.0.12
- Job Scheduling: node-cron 4.2.1
- Logging: Winston 3.19.0 + Morgan 1.10.1
- Performance: Compression 1.8.1
pfm-app/
βββ client/ # Frontend (Next.js)
β βββ app/ # Next.js App Router
β β βββ (auth)/ # Authentication routes
β β βββ (dashboard)/ # Dashboard routes
β β βββ globals.css # Global styles
β β βββ layout.tsx # Root layout
β β βββ favicon.ico # App icon
β βββ assets/ # Static assets (images, icons)
β βββ fonts/ # Custom fonts
β βββ lib/ # Utilities and helpers
β β βββ utils.ts # Utility functions
β βββ components. json # shadcn/ui configuration
β βββ next.config.ts # Next.js configuration
β βββ postcss.config.mjs # PostCSS configuration
β βββ tsconfig.json # TypeScript configuration
β βββ package.json # Frontend dependencies
β
βββ server/ # Backend (Express)
β βββ server.ts # Server entry point
β βββ tsconfig.json # TypeScript configuration
β βββ package.json # Backend dependencies
β
βββ . gitignore
βββ . gitattributes
βββ README.md
Before running this application, ensure you have:
- Node.js: v18.0.0 or higher (Download)
- npm: v9.0.0 or higher (comes with Node.js)
- PostgreSQL: Local instance or Neon account
- Git: For cloning the repository
git clone https://github.com/morshedalamdev/pfm-app.git
cd pfm-appcd servernpm install# Development mode (with auto-reload)
npm run dev
# Production build
npm run build
# Production mode
npm startBackend API runs at: http://localhost:5000
Open a new terminal window:
cd clientnpm install# Development mode
npm run dev
# Production build
npm run build
# Production mode
npm startFrontend runs at: http://localhost:3000
Terminal 1 - Backend:
cd server
npm run devTerminal 2 - Frontend:
cd client
npm run devInstall concurrently in project root:
# In pfm-app root directory
npm init -y
npm install concurrently --save-devAdd scripts to root package.json:
{
"scripts": {
"dev": "concurrently \"npm run dev --prefix server\" \"npm run dev --prefix client\"",
"dev:server": "npm run dev --prefix server",
"dev:client": "npm run dev --prefix client",
"build": "concurrently \"npm run build --prefix server\" \"npm run build --prefix client\"",
"start": "concurrently \"npm start --prefix server\" \"npm start --prefix client\""
}
}Then run from root:
npm run devnpm run dev # Start development server with ts-node-dev
npm run build # Compile TypeScript to JavaScript
npm start # Start production server
npm run prisma:generate # Generate Prisma Client
npm run prisma:migrate # Run database migrations
npm run prisma:studio # Open Prisma Studio GUI
npm test # Run tests in watch mode
npm run test:ci # Run tests once (CI environment)npm run dev # Start Next.js development server
npm run build # Build optimized production bundle
npm start # Start Next.js production server- β JWT Authentication: Secure token-based authentication with jose and jsonwebtoken
- β Password Hashing: bcrypt with salt rounds for secure password storage
- β Rate Limiting: express-rate-limit to prevent API abuse
- β CORS Protection: Configured CORS for allowed origins
- β Helmet: Security headers for Express. js
- β Input Validation: Zod schemas and express-validator
- β SQL Injection Prevention: Prisma ORM with parameterized queries
- β XSS Protection: Sanitized inputs and outputs
- β Cookie Security: Secure cookie-parser configuration
This project is licensed under the ISC License.
Morshed Alam
- Website: morshedalam.dev
- GitHub: @morshedalamdev
- Project: pfm. morshedalam.dev
- Next.js - React Framework
- Express.js - Backend Framework
- Prisma - Database ORM
- Neon - Serverless PostgreSQL
- Tailwind CSS - Utility-first CSS
- Zustand - State Management
- Vercel - Frontend Hosting
- Netlify - Backend Hosting
- Cloudinary - Media Management
For issues, questions, or suggestions:
- π§ Email: Contact via morshedalam.dev
- π Issues: GitHub Issues
- π Docs: Check this README and inline code comments
If you find this project useful, please consider giving it a β on GitHub!
Made with β€οΈ by Morshed Alam