2025

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

Node.jsExpress.jsAngularMongoDBMongooseJWTPassport.jsHandlebarsTypeScriptRxJSMorgan

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

Project Links