Skip to main content

Status: live. Delhi --:-- IST · agents running · now buildingLumora

← Back to Work

Lumora: voice agents for Indian service businesses

MVP
Role
Architect, agent orchestrator and reviewer
Timeline
2026 (Ongoing) [ADD EXACT DATES]
Status
MVP · No paying customers yet
Stack
Cloudflare Workers · Cloudflare D1 · Clerk · Zod · TypeScript

[UNVERIFIED: Indian-language support, Plivo telephony, payment-reminder agent; confirm before showing]

Problem

Small businesses in India lose leads to missed calls and slow follow-ups. Owners don't have time to learn another tool.

Get in touch

What I built

A voice-ops platform where each business gets a ready-made agent: an appointment receptionist or a lead follow-up caller. It's provider-neutral, so the telephony vendor can change without rewriting the agent.

Get in touch

Architecture diagram

The telephony vendor (provider-neutral) sends webhooks carrying an idempotent key to a versioned Cloudflare Workers API, which validates payloads with Zod and checks HMAC-SHA256 API keys. From there the flow fans out to three components: the voice agent runtime with receptionist and lead follow-up templates, Cloudflare D1 storing call admission and intents with receipts, and an envelope vault holding AES-256-GCM encrypted destinations.

Provider-neutral telephony webhooks hit a versioned Cloudflare Workers API, which fans out to the voice agent runtime, D1 and the envelope vault.
Get in touch

Key decisions

  1. 01

    Scoped, revocable API keys stored only as HMAC digests

    Why: Raw API keys are shown once at creation and stored strictly as HMAC digests in D1.

    Trade-off: Users cannot view an existing key again if they lose it (they must rotate/issue a new key), but a leaked database dump never exposes live tenant keys.

  2. 02

    AES-256-GCM envelope encryption for customer destinations and secrets

    Why: Downstream webhook URLs, phone destinations, and tenant secrets are encrypted per record with AES-256-GCM before hitting storage.

    Trade-off: Adds key-management overhead on every worker invocation, but keeps customer routing data safe at rest.

  3. 03

    Idempotent call admission

    Why: Every call trigger and telephony webhook requires an idempotency key checked at admission.

    Trade-off: Requires strict state tracking before call dispatch, but guarantees that a network retry never places an awkward duplicate call to a customer.

Get in touch

Result

  • [PLACEHOLDER]

    [ADD METRIC: calls handled] once the first pilot runs.

  • [PLACEHOLDER]

    [ADD METRIC: bookings made] once the first pilot runs.

  • [PLACEHOLDER]

    [ADD METRIC: response time] once the first pilot runs.

Get in touch

Demo

Status: live. LIVE DEMO · Smile Studio, Lajpat Nagar (Dental Clinic)

ENहिंदी

Live caption

Caller: “Saturday subah dental cleaning ke liye slot milega?” (“शनिवार सुबह डेंटल क्लीनिंग के लिए स्लॉट मिलेगा?”)

Agent: “Haan ji, Saturday 11:00 AM open hai. Shall I book that for you?”

Receipts · live telemetry

  1. 01INTENT[ waiting for call... ]
  2. 02POLICY[ waiting for call... ]
  3. 03TOOL[ waiting for call... ]
  4. 04RECEIPT[ waiting for call... ]

Demo only. No real bookings or data stored.

[ADD DEMO VIDEO — Walkthrough of Lumora receptionist & lead-follow-up templates]

Get in touch

Want one like this for your clinic, salon or business?

Get in touch