SmartBudget Pro is a full-stack personal finance and budgeting platform built with Node.js, Express.js, EJS, and PostgreSQL.
The application allows users to manage transactions, create budgets, track financial goals, and interact with financial advisors through a multi-stage approval workflow system.
This project is being developed as the final project for CSE 340 Web Backend Development and is designed to demonstrate modern backend development practices including MVC architecture, authentication, authorization, relational database design, server-side rendering, and production deployment.
-
Session-based authentication using express-session
-
Password hashing with bcrypt
-
Multiple user roles:
- Admin
- Financial Advisor
- Standard User
- Income and expense tracking
- Budget management
- Category-based transactions
- Financial analytics dashboard
Users can:
- Create financial goals
- Submit goals for review
- Track approval status
Advisors and admins can:
- Review goals
- Leave advisor notes
- Approve or reject submissions
- Update workflow statuses
- Node.js
- Express.js
- PostgreSQL
- EJS
- express-session
- bcrypt
- EJS server-side rendering
- Tailwind CSS
- React components for interactive dashboard widgets
The project follows MVC (Model-View-Controller) architecture.
src/
├── controllers/
├── database/
├── middleware/
├── models/
├── public/
├── routes/
├── utilities/
└── views/
This project is intended to demonstrate:
- Relational database design
- Authentication and authorization
- Secure backend development
- Dynamic server-side rendering
- Multi-stage workflow systems
- Production-ready deployment practices
- Admin dashboard
- Advisor review queue
- User analytics dashboard
- Financial reports
- Budget recommendations
- Goal progress tracking
- Search and filtering
git clone <repository-url>Using pnpm:
pnpm installpnpm devCreate a .env file in the project root:
PORT=3000
NODE_ENV=development
DB_URL=your_supabase_postgres_connection_string
SESSION_SECRET=replace_with_a_long_random_value
ENABLE_SQL_LOGGING=falseFor Render, set NODE_ENV=production and add DB_URL and
SESSION_SECRET in the service's Environment settings. Use the Supabase
session pooler connection string when the direct database endpoint is not
reachable over IPv6. The application configures TLS for Supabase; do not set
NODE_TLS_REJECT_UNAUTHORIZED=0 or add a legacy DB_SSL_CA value.
Currently in active development.
Sprint 0 completed:
- Initial architecture planning
- MVC folder structure
- Project setup
- README initialization
Laulin Vasquez

