Travlr – Full-Stack Travel Management Platform
A modern MEAN stack travel booking platform with Angular admin dashboard, Express.js RESTful API, and MongoDB database featuring JWT authentication and server-side rendering
Tech Stack
Context
The Problem
Travel agencies need a robust platform to manage trip listings, handle user authentication, and provide both customer-facing views and administrative dashboards. Traditional static websites lack the dynamic capabilities and security required for modern travel management.
Constraints
- Full-stack MEAN architecture (MongoDB, Express, Angular, Node.js)
- Secure JWT-based authentication with Passport.js
- RESTful API design with proper HTTP methods and status codes
- Server-side rendering with Handlebars for SEO and performance
- Responsive design supporting mobile and desktop interfaces
- Admin dashboard with CRUD operations for trip management
Stakes
Capstone project for CS-465 (Full-Stack Development) demonstrating proficiency in modern web architecture, API design, database modeling, and authentication systems
My Role
Title
Full-Stack Software Engineering
Team
Academic Project (Individual)
Ownership
End-to-end development: backend API, admin dashboard, database schema, authentication system, and deployment architecture
Approach & Key Decisions
Built a complete travel management platform using the MEAN stack with separated Express.js backend API and Angular admin frontend, Mongoose for MongoDB ORM, JWT + Passport.js for authentication, and Handlebars for customer-facing server-side rendered views.
MEAN stack (MongoDB, Express, Angular, Node.js)
JavaScript across the entire stack enables code reuse, reduces context switching, and leverages Node.js non-blocking I/O for handling concurrent API requests efficiently.
Separated backend API and admin dashboard architecture
Decoupling the RESTful API from the admin frontend enables independent scaling, testing, and deployment, while supporting future mobile apps or third-party integrations.
JWT (JSON Web Tokens) for stateless authentication
JWTs eliminate server-side session storage, enable horizontal scaling, and provide secure token-based authentication that works seamlessly with RESTful APIs and single-page applications.
Passport.js for authentication middleware
Passport provides battle-tested authentication strategies, simplifies JWT integration, and offers extensibility for future OAuth providers (Google, Facebook) without rewriting auth logic.
Mongoose ODM for MongoDB modeling
Mongoose enforces schema validation, provides middleware hooks for business logic, and offers a cleaner API for database operations compared to raw MongoDB driver.
Server-side rendering with Handlebars for public pages
SSR improves SEO for trip listings, reduces initial page load time, and provides better accessibility compared to client-side rendering for content-heavy pages.
Angular for admin dashboard
Angular's TypeScript support, dependency injection, and component architecture provide enterprise-grade structure for complex admin interfaces with routing, forms, and real-time updates.
Alternatives Considered
Considered Next.js for unified frontend/backend but chose MEAN stack to demonstrate traditional RESTful API design and separation of concerns between client and server
Challenges & Solutions
⚠Challenge
Implementing secure JWT authentication across API and admin dashboard
✓Solution
Built Passport.js JWT strategy that validates tokens on protected routes, implemented token generation on login with expiration, and added Authorization header handling in Angular HTTP interceptors for automatic token attachment.
⚠Challenge
Designing RESTful API with proper HTTP semantics and error handling
✓Solution
Implemented REST endpoints following HTTP conventions (GET /api/trips, POST /api/trips, PUT /api/trips/:id, DELETE /api/trips/:id) with appropriate status codes (200, 201, 400, 401, 404, 500) and JSON error responses.
⚠Challenge
Managing database relationships between users and trips in MongoDB
✓Solution
Used Mongoose references to link trips to user creators, implemented population for nested queries, and added cascade deletion logic to maintain data integrity when users or trips are removed.
⚠Challenge
Building responsive admin dashboard with real-time trip updates
✓Solution
Created Angular services for API communication, implemented reactive forms for trip creation/editing, added client-side validation, and used RxJS observables for handling asynchronous data streams and updates.
⚠Challenge
Handling CORS for cross-origin API requests from Angular dev server
✓Solution
Configured Express.js CORS middleware to allow requests from Angular development server (localhost:4200), implemented proper preflight handling, and restricted origins in production for security.
Outcomes & Impact
Full-Stack Proficiency
Demonstrated mastery of MEAN stack with MongoDB, Express.js, Angular, and Node.js across all tiers
API Design
RESTful API with GET, POST, PUT, DELETE operations for trips and users, following HTTP best practices
Authentication System
Secure JWT-based authentication with Passport.js, token expiration, and protected route middleware
Database Architecture
Mongoose schemas for Users and Trips with validation, references, and middleware hooks for business logic
Admin Dashboard
Angular SPA with routing, forms, HTTP interceptors, and real-time CRUD operations for trip management
Server-Side Rendering
Handlebars templates for SEO-optimized public trip listings with dynamic data from MongoDB