Alex Leet

Back to Projects

Full-Stack Web App

Built with: Angular, Node.js, MongoDB

Overview

This project was built to practice creating a complete web application, moving from a static site to a full-stack app with a database and API. I started with a provided travel site template and then expanded it by connecting the pages to a database and adding an API layer.

The site showcases trip packages that were hypotheticalβ€”created only for this projectβ€”but they served as a practical way to work with listings, details, and updates while learning how to manage data across the full stack.

Development Journey

The project started with a few static pages. From there, I added features one at a time until it worked like a real app:

  1. Static beginnings: Simple pages and styles.
  2. Server pages: Switched to Express routes and Handlebars templates to reuse layouts.
  3. Database: Moved trip data into MongoDB so content wasn't hard-coded.
  4. API layer: Built REST endpoints to list, get, create, update, and delete trips.
  5. Admin dashboard: Added a small Angular app that talks to the API for easy CRUD from the browser.

Building in stages kept things clear and made testing easier at each step.

Architecture


[ Browser ]
   β”œβ”€ Public site (Express + Handlebars)
   └─ Admin (Angular SPA) ──────► [ REST API (Express) ] ──────► [ MongoDB ]    
            

Clear separation: the public site renders pages, the admin uses Angular, the API serves both, and MongoDB stores the trip data.

Folders at a glance


travlr/
β”œβ”€ app_server/   # Views/controllers (public site)
β”œβ”€ app_api/      # API routes + models (trips)
β”œβ”€ views/        # Handlebars templates
β”œβ”€ public/       # Images, CSS
└─ app.js        # App entry point
            

API Summary

Method Path Purpose
GET/api/tripsList all trips
GET/api/trips/:idGet one trip
POST/api/tripsCreate a trip
PUT/api/trips/:idUpdate a trip
DELETE/api/trips/:idDelete a trip

Tested in the browser and with Postman during development.

Screenshots