Skip to content
All work

Case study · Property operations

Baab Al Rayyan PMMS

Property maintenance platform for a Doha property complex — asset tracking, procurement and maintenance tickets across nine roles, on web and mobile.

Role
Backend, admin console & mobile integration
Client
Baab Al Rayyan · Doha, Qatar
Category
Property operations
Deliverables
API · Admin console · Mobile app

01Overview

A property maintenance management system for Baab Al Rayyan in Doha, Qatar: a NestJS/Prisma backend, a Next.js admin console and a Flutter companion app for tenants, technicians and supervisors — all sharing one role-based access model.

02Context

A property complex with many buildings, units and assets — and a team spanning admins, managers, supervisors, technicians, storekeepers, procurement and finance, plus the tenants who raise issues.

03Problem

Maintenance, assets and purchasing were separate problems handled by different people. The complex needed a single system where a tenant’s ticket, the technician who fixes it, the part that gets used and the purchase order that replaces it are all connected — with each role seeing only what it should.

04Solution

A hierarchical property → sub-location → unit model anchors every asset, tracked by barcode/QR with a movement history. Procurement runs from purchase request through approval to a printable LPO, while inventory tracks parts with stock levels and reorder alerts. A Flutter app gives tenants, technicians and supervisors their own flows against the same backend.

05Architecture

  1. 1

    Mobile app

    Tenant, technician and supervisor flows with QR scanning and push

    • Flutter
    • FCM
    • Dio
  2. 2

    Admin console

    Properties, assets, inventory, procurement, users

    • Next.js 16
    • Redux Toolkit
  3. 3

    PMMS API

    RBAC, audit trail, procurement workflow, multi-device sessions

    • NestJS 11
    • Prisma
  4. 4

    Platform

    Rate limiting, sessions, structured logs

    • Redis
    • Winston
  5. 5

    Data

    Property / asset / inventory relational model

    • MySQL
One backend, two clients. The admin console and the mobile app authenticate against the same API and the same nine-role permission model.

06Engineering decisions

  1. A

    Nine roles, one permission model

    Admin, Manager, Supervisor, Technician, Tenant, Secretary, Storekeeper, Procurement and Finance Controller share a single granular RBAC layer with a full audit trail — used by both web and mobile.

  2. B

    Hierarchy-first asset model

    Every asset belongs to a property, sub-location and unit, and carries a barcode/QR identity with movement history — so “where is it and what happened to it” always has an answer.

  3. C

    Procurement as a workflow

    Purchase request → approval → printable LPO, instead of free-form orders, gives finance and procurement an approval trail.

  4. D

    Redis-backed protection

    Rate limiting and multi-device session management live in Redis, keeping the API stateless and defensible.

07Key features

  • Hierarchical property and asset management with barcode & QR tracking
  • Purchase request → approval → printable LPO procurement workflow
  • Parts inventory with stock levels and reorder alerts
  • Granular RBAC across nine roles with a full audit trail
  • Flutter app: tenant tickets, technician queues, supervisor oversight
  • Firebase push notifications and Arabic/English mobile UI

08Challenges

  • Serving nine very different roles without the permission model turning into special cases.
  • Keeping web and mobile consistent against one evolving API.
  • Supporting a bilingual Arabic/English user base on mobile.

09Results

  • Actively evolving — the most recent release added the Secretary and Procurement roles.

10Technology

  • NestJS 11
  • Prisma
  • MySQL
  • Redis
  • Winston
  • Next.js 16
  • Redux Toolkit
  • Flutter
  • Firebase Cloud Messaging

11Screens

Screenshots for this project are being prepared. A live walkthrough is available on request.

Ask for a walkthrough