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
Related work
Need this kind of work done?
See how engagements are structured, or get in touch directly.