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
Problem
Small businesses in India lose leads to missed calls and slow follow-ups. Owners don't have time to learn another tool.
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.
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.
Key decisions
- 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.
- 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.
- 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.
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.
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
- 01INTENT[ waiting for call... ]
- 02POLICY[ waiting for call... ]
- 03TOOL[ waiting for call... ]
- 04RECEIPT[ waiting for call... ]
Call the demo number [ADD NUMBER] — the line isn't connected yet
Demo only. No real bookings or data stored.
[ADD DEMO VIDEO — Walkthrough of Lumora receptionist & lead-follow-up templates]