Nbyula × Zolve · Case Study
● System Architecture · Case Study

Nbyula for Enterprise —
the Zolve Loan-Processing CRM Platform

An end-to-end walkthrough of a B2B SaaS platform: the architecture, data flows, feature system, live prototype and integration design that lets one company run its entire loan-processing operation on another’s infrastructure.

Engagement
B2B SaaS · CRM & Spaces infra
Scope
Architecture → build → live prototype
Platform
12 features live in production
Model
Multi-tenant, white-label optional

Prepared by the Growth & Strategy team · Nbyula  ·  Case study  ·  2026

01

What this is

A purpose-built CRM that lets Zolve’s loan-processing team run entirely on Nbyula’s infrastructure.

Zolve — a well-funded cross-border neobank — needed a workbench for its loan-processing officers: a place to receive qualified leads, call and message borrowers, collect and validate documents, and hand complete dossiers to lender partners. Rather than build that internal tooling from scratch, the engagement delivers it as a B2B SaaS platform: Zolve owns the customer relationship and brand; Nbyula provides the CRM, per-lead Spaces, voice/messaging infrastructure and AI layer beneath it.

The picture below is the whole system in one frame — three parties, three integration seams, everything else internal to its own lane.

Fig 1 · System context — three lanes, three seams
flowchart LR
  subgraph Z["ZOLVE · customer-facing"]
    Z3["Lead system · gen · qualify · bank-match"]
    OFF["Officers + Managers"]
  end
  subgraph N["NBYULA · SaaS platform (the workbench)"]
    G["API Gateway + Auth · SSO/JWT"]
    CRM["CRM + per-lead Spaces"]
    COM["Comms · SIP · WhatsApp · Email · IG"]
    AI["AI layer · Anika · Audit · VAPI · OCR"]
    D[("Data · MongoDB · Redis · S3")]
  end
  subgraph L["LENDERS · banks and NBFCs"]
    L1["HDFC Credila · Avanse · ICICI · Prodigy"]
  end
  Z3 -->|"1 · POST /leads"| G
  OFF -->|"log in (SSO)"| G
  G --> CRM
  CRM --> COM
  CRM --> AI
  CRM --> D
  CRM -->|"2 · POST /applications"| L1
  L1 -->|"3 · status webhook"| G
      
12
Platform features live in production
2 + 1
Integration contracts — two APIs, one webhook
$19.99
Per seat / month · all-inclusive
3 wks
Config + integration to go-live (+2 wks QA)
02

The end-to-end lead journey

From a qualified lead entering the system to a sanctioned loan flowing back — the flow that works end to end.

Zolve pushes a qualified lead; Nbyula auto-creates a Space and assigns an officer; the officer calls, walks the borrower through lender options, and sends a lender-specific checklist. Documents are collected and validated; the AI agent chases whatever is missing. Once complete, the officer signs off and the dossier is pushed to the chosen lender, whose status flows back over a webhook.

Fig 2 · Lead intake → processing → lender handoff → disbursal
flowchart LR
  A["Lead in · POST /leads"] --> B["Space created · officer assigned"]
  B --> C["Call · recorded + transcribed"]
  C --> D["Lender options + checklist sent"]
  D --> E{"Docs complete + valid?"}
  E -->|"No · Anika chases"| D
  E -->|"Yes"| F["Sign-off · POST /applications"]
  F --> G["Lender sanctions · webhook back"]
      
Two personas, no customer login Only Zolve’s officers (own queue) and managers (team roll-up, audit, re-assign) log in. The borrower never sees Nbyula — they experience 100% Zolve branding over call, WhatsApp and chat. The Space is the officer’s internal workbench, not a customer portal.
03

Platform architecture

Stateless services behind a gateway; a queue absorbs anything slow so the officer’s UI never blocks.

Officers use a React workbench served through a CDN. Requests pass an API gateway that terminates authentication (SSO → JWT) and role-based access, then fan out to services. Slow or bursty work — transcription, OCR, AI calls, outbound webhooks — is pushed to queues and handled by background workers.

Fig 3 · Platform block diagram
flowchart TB
  U["Officers / Managers · React SPA"] --> CDN["CDN + WAF"]
  CDN --> GW["API Gateway · SSO/JWT · RBAC · rate-limit"]
  GW --> S_CRM["CRM + Spaces service"]
  GW --> S_COM["Comms service · SIP/WA/Email/IG"]
  GW --> S_AI["AI orchestration service"]
  GW --> S_DOC["Docs + OCR service"]
  S_CRM --> Q["Queues · SQS"]
  S_COM --> Q
  S_AI --> Q
  S_DOC --> Q
  Q --> WK["Background workers · transcription · OCR · AI · webhooks"]
  S_CRM --> DB[("MongoDB")]
  S_CRM --> RC[("Redis · sessions + SLA timers")]
  WK --> DB
  WK --> S3[("S3 · recordings + documents")]
  S3 --> CDN2["Signed-URL delivery"]
      

Frontend

React SPA + CDN — the officer/manager workbench and per-lead Spaces.

Services

Independently scalable CRM, comms, AI and docs services behind one gateway.

Data

MongoDB for state, Redis for hot data + SLA timers, S3 for encrypted media.

04

Multi-tenancy & deployment

One codebase, two topologies — the commercial fork is a deployment choice, not a rebuild.

On the shared tier, every record is tenant-scoped and the filter is enforced below the API via the JWT, so cross-tenant reads are impossible. The optional dedicated tier gives Zolve its own database, storage, VPC and branded subdomain — physical isolation and full white-label — with the same application code.

Fig 4 · Two topologies, one codebase
flowchart LR
  subgraph SH["Shared multi-tenant · included ($19.99/seat)"]
    direction TB
    APP["Shared app cluster"]
    JWT["JWT carries tenant_id=zolve"] -.->|"auto-filters every query"| APP
    APP --> DB[("Shared MongoDB · every doc carries tenant_id")]
    APP --> S3S[("Shared S3 · tenant-prefixed keys")]
  end
  subgraph DED["Dedicated white-label · optional (+$300/mo)"]
    direction TB
    CDN2["crm.zolve.com + own SSL / brand"] --> APP2["Zolve-only app in dedicated VPC"]
    APP2 --> DB2[("Zolve-only MongoDB")]
    APP2 --> S3D[("Zolve-only S3 bucket")]
  end
      
05

The feature system

Twelve capabilities, all live in production, grouped into four working domains.

📞
In-app calling (SIP)
One-click officer→borrower calls, number masked as Zolve.
Recording + transcription
Every call recorded, transcribed, searchable — audit trail.
🛡
AI call audit
LLM reviews every call for compliance breaches.
💬
Unified inbox
WhatsApp · IG · web · email stitched into one thread.
📞
AI outbound calls (VAPI)
AI agent qualifies + chases docs, 24/7, per-call cost.
🤖
Anika · orchestrator
Delegate in natural language; dispatches sub-agents.
📂
Docs + OCR validation
Checklist, upload from any channel, type-validated.
📅
Scheduling
Book consults from inside the Space with reminders.
🏷
Pipeline + tags
Stage / lender / urgency tags drive views + SLA.
📊
Dashboards + SLA
Officer queue + manager roll-up + breach alerts.
👤
Lead profile + notes
Full borrower context and internal timeline.
🏦
Lender handoff
Push a validated dossier to the chosen lender.

Two feature flows, in detail

Fig 5a · In-app calling → recording → transcription
sequenceDiagram
  autonumber
  participant O as Officer (in Space)
  participant APP as Nbyula app
  participant SIP as SIP trunk
  participant B as Borrower
  participant S3 as Recording vault (S3)
  participant W as Transcription worker
  O->>APP: Click "Call" in lead Space
  APP->>SIP: Originate · caller-ID "Zolve"
  SIP->>B: Rings borrower
  B-->>SIP: Answers
  SIP-->>O: Two-way audio
  SIP->>S3: Stream recording
  S3->>W: Queue audio when call ends
  W-->>APP: Transcript + highlights on lead timeline
      
Fig 5b · Document collection + OCR validation loop
flowchart LR
  CK["Checklist in Space"] --> UP["Borrower uploads · any channel"]
  UP --> OCR["OCR + type validation"]
  OCR --> V{"Valid + complete?"}
  V -->|"No · Anika re-requests"| UP
  V -->|"Yes"| SG["Officer sign-off"]
      
06

The AI layer

An orchestrator that delegates, an auditor that watches, and metering that keeps it honest.

Anika is a tool-using LLM planner: an officer delegates in plain language and Anika dispatches scoped sub-agents against a fixed, permission-checked tool API. A separate audit agent reviews every call for compliance. Anika and audit are free; only metered actions (an AI voice call, an AI text) emit billable usage events.

Fig 6 · AI orchestration, audit & metering
flowchart TB
  OF["Officer · 'chase docs from Riya'"] --> AN["Anika orchestrator · LLM planner"]
  AN --> T1["Qualification sub-agent"]
  AN --> T2["Doc-follow-up sub-agent"]
  AN --> T3["Scheduling sub-agent"]
  AN --> T4["Outbound-call sub-agent · VAPI"]
  T1 --> TOOLS["Permission-checked tool API"]
  T2 --> TOOLS
  T3 --> TOOLS
  T4 --> TOOLS
  TOOLS --> SP[("Actions land in lead Space + timeline")]
  T4 --> MET["Usage event · metered + billable"]
  CALL["Every call transcript"] --> AUD["AI audit agent · compliance verdict"]
  AUD --> FEED["Manager daily flagged-call feed"]
      
Metering ties directly to the price Seats are flat at $19.99. AI voice/text is metered only when used and written to a per-tenant usage ledger; Anika and the audit agent never emit billable events. The commercial model is enforced in the architecture, not just the contract.
07

The two integration contracts

Everything Zolve’s engineers build against — two APIs and one webhook, all signed and idempotent.

Fig 7a · Lead intake — POST /leads
sequenceDiagram
  autonumber
  participant ZL as Zolve lead system
  participant GW as Nbyula gateway
  participant CRM as CRM service
  participant SP as Spaces service
  ZL->>GW: POST /leads · HMAC-signed · idempotency-key
  GW->>GW: Verify signature + tenant
  GW->>CRM: Create lead · tenant_id=zolve
  CRM->>SP: Auto-create per-lead Space
  CRM->>CRM: Assign officer + tag stage
  CRM-->>ZL: 201 · lead_id + space_url
      
Fig 7b · Dossier handoff — POST /applications + status webhook
sequenceDiagram
  autonumber
  participant OF as Officer
  participant CRM as Nbyula CRM
  participant LN as Lender CRM
  participant GW as Nbyula webhook endpoint
  OF->>CRM: Sign off · all docs validated
  CRM->>LN: POST /applications · dossier + docs
  LN-->>CRM: 202 Accepted · application_ref
  LN->>GW: status webhook · sanction / disbursal
  GW->>CRM: Update stage + timeline
  CRM-->>OF: Stage advances · notification
      
08

The working prototype — running on real data

Not a mockup: a live CRM dashboard driven by real leads, real call history and real Spaces.

To prove the platform works, the prototype dashboard is wired to production data. It shows the real leads currently assigned to two loan advisors, computes each borrower’s call metrics from actual SIP / AI-dialer history, and deep-links “Open Space” straight to that borrower’s live workspace. The diagram shows how the dashboard is assembled from four production collections.

Fig 8 · Prototype data flow — production collections to live dashboard
flowchart LR
  subgraph SRC["Nbyula production data · MongoDB"]
    C1["counselor_lead_relation · advisor → leads"]
    C2["call_history · every SIP / AI call"]
    C3["leads_info · name + contact"]
    C4["conversations · per-lead Space"]
  end
  C1 --> AGG["Aggregate · leads per advisor + call stats"]
  C2 --> AGG
  C3 --> AGG
  AGG --> DASH["CRM dashboard · attempts · connected · connect-rate · established"]
  C4 --> LINK["Space deep-link per lead"]
  LINK --> DASH
  DASH --> SPACE["Open Space → nbyula.com/chat/{id}"]
      
14
Real leads across two advisors across the live team
108
Real call attempts logged
58
Calls connected · 54% team connect rate
86%
Of assigned leads had contact established
Why this matters A proposal describes a system; a prototype on real data proves it. Every number on the dashboard is computed from live production records, and every “Open Space” link resolves to a genuine borrower workspace with the advisor’s own call highlights already inside it.
09

Commercial model

One flat per-seat price, everything included; usage-based AI; optional dedicated infra.

LineBasisDetail
Per seat / month$19.99 · all-inclusiveFull platform, unlimited human SIP + WhatsApp calls, recording, transcription, storage, support — on shared infra
One-time setup & buildFreeConfig, lead-intake API integration, lender connectors, migration, onboarding, QA
Dedicated infra + white-label+$300 / month · optionalSeparate DB + storage + VPC, branded subdomain, WhatsApp Business, monitoring
AI usageMetered · pay-as-you-goAI voice / AI text billed only when used; Anika + AI audit always free
The through-line The commercial model maps one-to-one onto the architecture: flat seats sit on shared multi-tenant infra; the optional $300 is literally the dedicated-topology deployment; and metered AI is enforced by the usage-event pipeline. Price and design tell the same story.
10

What was delivered

The engagement produced a complete, self-contained decision package — not a slide deck.

① Interactive proposal deck

A four-tab web proposal: architecture & scope, the full platform-feature showcase with clickable live demos, the working CRM prototype, and pricing — all self-contained and brand-built.

② Technical architecture brief

The engineering companion: reference stack, tenancy model, per-feature designs and the two integration contracts, with diagrams for a walkthrough with Zolve’s engineering team.

③ Build-vs-buy analysis

A grounded case for buying over building: the hidden subsystem complexity, effort model, and the opportunity-cost argument tailored to Zolve’s funding and roadmap.

④ Live CRM prototype

A real-data dashboard of leads assigned to two advisors, with call metrics computed from production records and Space deep-links that open genuine borrower workspaces.

Fig 10 · How the pieces fit together
flowchart TB
  PROB["Zolve · build vs buy internal loan-ops tooling"] --> DECK["Interactive proposal deck · 4 tabs"]
  DECK --> ARCH["Architecture brief · engineering depth"]
  DECK --> BVB["Build-vs-buy · the commercial case"]
  DECK --> PROTO["Live CRM prototype · real data"]
  ARCH --> CALL["Engineering walkthrough"]
  BVB --> CALL
  PROTO --> CALL
  CALL --> SIGN["Decision · adopt the platform"]
      
The achievement A complete enterprise SaaS engagement designed and delivered end to end: system architecture, a 12-feature platform, a real-data prototype, integration and security design, a commercial model that maps to the architecture, and a decision package that carries all of it — a full product story, not just a pitch.