StayComm – Full-Stack Property Management System

StayComm is the capstone project I created as part of my 2025 software engineering curriculum. It’s a full-stack property management application built to streamline reservation handling, user access, and interface display across distinct user roles. I designed the frontend in Angular with highly modular components, architected a robust backend using TypeORM, and built a normalized MySQL database to power it all.

Frontend – Angular Architecture & Componentization

The frontend of StayComm was built entirely in Angular, chosen for its powerful component-based architecture and scalable structure. My focus was on componentization — breaking the UI into highly reusable, encapsulated pieces that correspond to real parts of the application.

Component Structure

Rather than building one large monolith view, I created dedicated Angular components for each distinct section of the UI, including:

  • Landing dashboard — summarizing property metrics for logged-in users
  • Reservation entry and lookup screens — componentized forms with validation
  • Navigation and role-aware menus — dynamically renders based on user session
  • User interfaces for multiple roles — property managers, staff, and guests

Each component encapsulates its own logic, styles, and templates, which has benefits such as:

  • Reusability — identical UI patterns shared across views
  • Testability — isolated units that can be tested without global dependencies
  • Maintainability — clear separation of concerns between interactive elements

I also used Angular routing to combine these into a cohesive single-page application while preserving state and navigation flow.

Backend – TypeORM & Server Logic

For the server side, I selected TypeORM (TypeScript ORM) to leverage strong typing, clear entity definitions, and seamless integration with Express-style routing.

🔹 Core Backend Features

  • Entity models for Users, Properties, Reservations, and Roles
  • Repository pattern for database interactions, which abstracts SQL queries behind reusable methods
  • RESTful API endpoints for all major operations (GET, POST, PUT, DELETE), enabling CRUD operations securely
  • Middleware integration for authentication and access control

TypeORM gave me the ability to define each table as a class with decorators, enabling a clear, maintainable mapping between TypeScript objects and database tables. This also allowed me to leverage advanced features like:

  • Lazy & eager relations
  • Query builders for complex filters and lookups
  • Migrations to version database changes cleanly

Componentization in Server Logic

Though the backend is not a UI, I structured the API in a modular fashion:

  • Route modules for separate areas (authentication, reservations, property management)
  • Service layers abstracting business logic from request handling
  • Reusable helpers for error handling and response formats

This modular backend aligns with frontend componentization: responsibilities are cleanly separated and easy to extend.

MySQL Database – Schema & Normalization

At the core of StayComm’s data persistence is a fully normalized MySQL database, designed to:

  • Prevent data redundancy
  • Support flexible user roles
  • Enable efficient reservation lookups

Database Structure

Key tables include:

  • Users — role, contact info, credentials
  • Properties — address, availability, manager linkage
  • Reservations — links to users and properties
  • Roles & permissions — flexible mapping for access control

Using foreign keys and normalized relations ensured:

  • Referential integrity
  • Efficient JOIN queries
  • Support for future reporting or analytics

By linking the database through TypeORM entities, the backend could rely on strong typing while minimizing manual SQL.

Summary – What Makes StayComm Stand Out

StayComm showcases a complete modern full-stack application with:

  • Angular frontend built with reusable, modular components
  • TypeORM backend providing structured, type-safe data handling
  • MySQL database with normalized design supporting scalable growth
  • Clear architectural boundaries between presentation, logic, and persistence

You can explore the full codebase on GitHub:
https://github.com/msallese22/StayComm