Skip to main content
Harmanpreet Singh
All subjects

Coursework

Database Management Systems

A relational design carried through to a working multi-role web application.

Schema design, role-based access and a full-stack application built as a team.

Project 1

Property management system

A web app for managing properties, tenants, owners, staff, rental agreements, payments and maintenance requests, with a different dashboard for each role.

Stack
  • Nuxt 3
  • Vue 3
  • Nuxt UI
  • TypeScript
  • Express
  • Drizzle ORM
  • PostgreSQL
Who and when
Team of three: Dipendra Shrestha, Tejas D. Shinde and me, from the repositories' commit history, April 2025
My contribution
I built most of the web frontend: the sign-in flow, the role-based dashboard, and the list, detail and create pages. Dipendra Shrestha wrote most of the API and database layer, and Tejas D. Shinde also contributed to the frontend.

Working demo

Switch roles and manage a portfolio

Runs in your browser

Try this: Sign in as the tenant, file a maintenance request, then switch to the employee and move it to in progress.

An in-memory recreation with invented data. Nothing is saved after you leave.

Loading demo...

What the original did

  • A PostgreSQL schema for users, tenants, owners, employees, properties, rental agreements, payments and maintenance requests, with enums for roles, statuses and priorities.
  • An Express API with JWT sign-in, Zod validation and Drizzle ORM queries.
  • A Nuxt frontend whose dashboard shows different sections to admins, employees, owners and tenants.

How it works

  • Users have one of four roles, and the dashboard tiles are chosen from the role.
  • Rental agreements link a tenant to a property, payments belong to an agreement, and maintenance requests link a tenant to a property.
  • Maintenance requests move through pending, in progress, completed or cancelled.

Added for this showcase

  • A browser re-creation of the frontend flows with seeded demo data and an in-memory store, so it runs without a server or database.
  • A role switcher, so the role-based dashboard and permissions can be compared directly.
  • Working forms for recording payments and filing and updating maintenance requests.

Notes

  • This demo is a recreation of the screens and flows, not the original Nuxt code, and all people, properties and amounts are invented.
  • The original frontend is Nuxt and Vue, which is also what the repository shows. An earlier version of this site described it differently, and that has been corrected.

Read the earlier write-up