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

