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
Mobile app
Tenant, technician and supervisor flows with QR scanning and push
- Flutter
- FCM
- Dio
- 2
Admin console
Properties, assets, inventory, procurement, users
- Next.js 16
- Redux Toolkit
- 3
PMMS API
RBAC, audit trail, procurement workflow, multi-device sessions
- NestJS 11
- Prisma
- 4
Platform
Rate limiting, sessions, structured logs
- Redis
- Winston
- 5
Data
Property / asset / inventory relational model
- MySQL
06Engineering decisions
- 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.
- 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.
- C
Procurement as a workflow
Purchase request → approval → printable LPO, instead of free-form orders, gives finance and procurement an approval trail.
- 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