Loading

Overview

Built the backend for OOMCO's HSEQ field platform as a NestJS microservices system on PostgreSQL, with strict database-per-service boundaries and RabbitMQ for cross-service sync via an outbox/inbox pattern. Identity handles auth and RBAC; Fieldops runs training, inspections, and incidents; Supply handles orders and approvals; Engagement handles notifications. The stack supports Flutter mobile and admin clients with JWT security and OpenAPI-documented REST APIs behind a unified gateway (/identity, /fieldops, /supply, /engagement).

What It Is

Backend for OOMCO (fuel retail / forecourt operations): Health, Safety, Environment & Quality (HSEQ) workflows in the field, including training, inspections, checklists, incidents, site/region structure, supply orders, and admin access control. Serves mobile field apps and admin web behind a single API surface.

Problem It Solves

Trainers, site managers, RBS (regional supervisors), and back-office staff need one system for plans and visits, on-site training and inspections (including offline capture), approvals and orders, and centralized users, sites, and permissions, without one giant monolithic database.

Architecture

LayerChoice
StyleMicroservices (4 services), database per service
RuntimeNode.js, TypeScript, NestJS
Repopnpm monorepo (apps/ + shared libs/messaging)
DataPostgreSQL: oomco_identity, oomco_fieldops, oomco_supply, oomco_engagement
ORMPrisma (one schema/client per service)
MessagingRabbitMQ (topic exchanges per service, e.g. oomco.identity)
IntegrationTransactional outbox + inbox; domain events; no cross-DB joins
AuthJWT from Identity; RBAC with permission matrix (roles/modules CRUD)
APIREST + OpenAPI/Swagger per service; reverse proxy path prefix in prod
OpsHealth checks (DB + broker); Docker Compose for local Postgres/RabbitMQ

Rule of thumb: If Fieldops needs a site name, it keeps a local replica updated from Identity events. It never queries Identity's database.

The Four Services

  • Identity: Login/OTP, users, roles & permissions, regions, sites, site managers/fillers, RBS delegations, audit logs, media upload, shared dropdowns.
  • Fieldops: Trainer/RBS/site-manager flows: plans, weekly visits, training sessions, inspections (HSEQ, housekeeping, RBS checklists), incidents, templates, offline-safe submits (clientUuid).
  • Supply: Orders (fuel, uniform, lubes, etc.), terminals/items, approval workflow.
  • Engagement: Push/notifications (e.g. FCM), device tokens, notification config (evolving).

Features Worth Highlighting

  • Event-driven sync between Identity and downstream services (RabbitMQ + outbox).
  • Fine-grained RBAC (module permission matrix, custom roles, admin vs field roles).
  • Multi-tenant org structure: regions → sites → assignments (site managers, fillers).
  • Field-first: inspections/training designed for offline retry and review workflows.
  • Unified API surface for Flutter mobile + admin panel (auth, users, roles, regions, fieldops, orders).

My Contribution

  • Designed and implemented REST APIs and DTOs in Identity (users, roles, dropdowns, site manager filtering).
  • Worked on the permission matrix and role access APIs for admin.
  • Integrated Flutter clients with Identity, Fieldops, and Supply endpoints.
  • Contributed to event contracts and service boundaries in a pnpm monorepo.
Tech Stack
NestJS TypeScript PostgreSQL Prisma RabbitMQ pnpm JWT OpenAPI Docker Flutter

Project: OOMCO HSEQ Backend | Industry: Fuel retail / forecourt operations | Status: Ongoing

Aebad ul Quadir

Full Stack Software Engineer at Codevative. OOMCO HSEQ backend: NestJS/TypeScript microservices, PostgreSQL, Prisma, RabbitMQ event bus, JWT RBAC, and field operations & supply APIs for fuel retail operations.