AI customer support that degrades gracefully instead of failing. Backend lead and architect Jawad Ul Hadi built Omni.io, a multi-tenant RAG customer-support engine on NestJS, PostgreSQL with row-level security and pgvector, BullMQ, Gemini and React, designed so that every question still gets an answer when the AI layer fails. The system uses a three-tier fallback ladder — cited AI answer, then verbatim excerpts, then FAQ or human hand-off — plus a stored decision trace for each answer, and isolates tenants with Postgres row-level security under a NOBYPASSRLS role tested against a real database. AI customer support that degrades gracefully instead of failing. Multi-tenant RAG on NestJS, PostgreSQL row-level security + pgvector, BullMQ, Gemini and React. Jawad Ul Hadi · Backend Lead & Architect · October 2026 Let's Connect https://gravatar.com/juhbukhari Repo https://github.com/JawadulHadi/omni-io Case study: Designing for AI Failure https://juh-bukhari.vercel.app/case-study Most RAG systems have one mode: working. If the embedding API is down, the model times out, or the model cites a passage it never saw, the customer gets either an error or a confident fabrication. Omni.io follows three rules: | Rule | How it is enforced | |---|---| | Every question gets an answer | A three-tier ladder in one service method that never throws: cited AI answer → verbatim excerpts → FAQ or human hand-off | | Every answer explains itself | A step-by-step decision trace, stored in the audit log and shown to support staff | | Tenants can't see each other's data, even through a bug | Postgres row-level security under a NOBYPASSRLS role, tested against a real database | flowchart LR subgraph People OP "Support team