Raju Rayhan
Head of Development @ Sulus.ai · AI Platform Architect
Available · Q3 2026
← work / sulus.ai
Case 01 · 2023 — 2026 · Platform architecture

Sulus.ai

A white-label, multi-tenant SaaS platform where resellers deploy voice AI agents for their own customers. Built from blank repo to production over three years as the founding architect and engineering lead.
LaravelVue.jsSupabasePineconen8nGHLClaude APIOpenAIElevenLabsDeepgramPipecat
3y
Lead architect
Reseller tenants
1536
Dim vectors · cosine
Voice minutes routed
§ 01 The brief
Context

Lighthouse Graphics needed a way to sell AI voice receptionists to their own customers — and, later, to sell the selling. A white-label platform where agencies could onboard their own sub-tenants, rebrand the UI, and plug in their CRM of choice.

Constraints
  • Tenant isolation — per-reseller, per-customer, no leakage.
  • Voice infrastructure had to be swappable (Pipecat / direct providers).
  • Non-technical users had to configure agents in plain English.
  • GHL as the default CRM, but pluggable.
"Make it so the reseller can demo the platform to a prospect in under five minutes, and have them place a real call."
— the brief, paraphrased
§ 02 The architecture simplified
                    ┌──────────────────────┐
                    │   Reseller · Tenant  │    ← white-label UI, Vue 3
                    └──────────┬───────────┘
                               │
                      ┌────────┴────────┐
                      │   Laravel API   │    ← Sanctum · role-scoped
                      └───┬─────┬───────┘
                          │     │
            ┌─────────────┘     └────────────────┐
            │                                    │
   ┌────────▼─────────┐              ┌───────────▼──────────┐
   │   Supabase (pg)  │              │     n8n workflows    │
   │ · tenants        │              │ · agent config (LLM) │
   │ · agents         │              │ · GHL sync           │
   │ · call_logs      │              │ · webhooks           │
   └────────┬─────────┘              └───────────┬──────────┘
            │                                    │
   ┌────────▼─────────┐              ┌───────────▼──────────┐
   │   Pinecone KB    │              │   Voice (Pipecat)    │
   │ · 1536-d cosine  │              │ · Deepgram + 11Labs  │
   │ · reseller scope │              │ · Claude / OpenAI    │
   └──────────────────┘              └──────────────────────┘
§ 03 A few decisions
03.1
Per-reseller Pinecone namespaces, not per-tenant

A per-tenant namespace was the textbook answer — but the number of resellers was bounded while tenants per reseller were not. Reseller-scoped namespaces with tenant filters gave us cheaper indexing and simpler cache invalidation, without leaking data between resellers (the actual trust boundary).

03.2
n8n as the orchestration layer, not a bespoke engine

Writing a task-graph engine is a whole product. n8n was close enough, had the integrations we needed on day one, and let non-engineers ship automations. We wrote a thin MCP layer (later open-sourced) so Claude could drive n8n workflows directly.

03.3
Configure by conversation, not by form

Agency owners don't want to fill out 40 fields to set up a voice agent. We built a meta-agent that interviews them in chat and writes the agent config as it goes. Faster than any form — and it doubled as onboarding.

03.4
Swappable voice infra

We built the voice layer behind an interface the rest of the code couldn't see past — providers could be swapped per tenant without the app knowing the difference. Pipecat became the default for accounts that wanted tighter control over the call pipeline.

§ 04 Outcomes
Before
  • Voice agents configured by hand, per customer, per channel
  • GHL sync brittle; data drifted within a day
  • Onboarding a new reseller took a week of custom work
  • No shared knowledge base across an agent family
After
  • Conversational setup — minutes, not meetings
  • Event-driven GHL sync via webhooks, idempotent
  • New reseller tenancy in a single command
  • Pinecone KB with reseller-scoped namespaces, tenant filters
§ 05 Hand-off
In April 2026, Sulus spun out as its own company and I came with it as Head of Development. The platform is now the product — and the team has grown around it.
§ 06 The ecosystem beyond the core platform

Sulus.ai is the flagship — but production also runs on a family of systems I architected and still lead. Each has its own surface (API, widget, or MCP) and plugs into the same automation and agent layer.

Hosted MCP infrastructure — connector catalog, OAuth & API keys, workspace-scoped endpoints, no-code tool builder.
MCPOAuthConnectorsStreamable HTTP
MCP-native agent platform — connectors, file-backed context, OpenAI-compatible chat API.
MCPClaudeOpenAIConnectors
GoHighLevel Conversation Provider — SMS/MMS via Sulus carrier, Wallet Charge billing, one 10DLC brand across locations.
GoHighLevelSMSGHLCarrier
Visual feedback & bug-reporting — embeddable widget SDK, triage dashboard, MCP surface.
Widget SDKRESTMCP
n8n Admin MCP
Internal n8n ops MCP over automations.sulus.ai — workflow CRUD, webhooks, security audits.
n8nMCPAutomation
Kimai Payroll
Biweekly payroll plugin — timesheet approvals, team-lead & finance queues, project budgets.
KimaiPHPPayroll
The Hive
Internal ops — meeting summaries, Yelp lead response, scope generation across Slack & ClickUp.
NestJSLaravelOpenAI
Open-source MCP bridges
Published Laravel MCP packages for n8n, QuickBooks, and Notion — used in production and OSS.
LaravelMCPn8nQuickBooks
Next case
eDP — Defense Procurement
Read next →