Mohammad Jahangir

Mohammad Jahangir — Riyadh, Saudi Arabia

Software Architecture

Architecture decisions show up most clearly in Opperiq: a multi-tenant data model, an event-driven background layer (Redis, BullMQ) for anything that doesn't need to happen synchronously, and a clear separation between the NestJS API and the React Native/React clients consuming it. The same architectural instincts — isolate tenant data, move slow work off the request path, keep the API contract stable across clients — carry into every other backend.

What this looks like in practice

  • Multi-tenant data isolation on shared infrastructure (Opperiq)
  • Event-driven background processing for attendance events, notifications, and OCR/verification jobs (Redis, BullMQ)
  • REST API design that serves both a React Native mobile client and a React web client from one backend
  • Log-reconciliation architecture to detect and sync missing records across two systems (Aconex, SharePoint) that don't share a data format
  • Scalable, secure REST API design integrating backend systems with real-time functionality at MMR

Frequently asked

What's an example of a real architecture decision he's made?

Isolating tenant data in Opperiq's PostgreSQL schema while keeping it on shared infrastructure, rather than provisioning separate databases per client — a decision that shapes every feature built on top of it.

Technologies

System DesignMulti-TenancyRedisBullMQPostgreSQL

Need this kind of work done?

See how engagements are structured, or get in touch directly.