All workCase study
Sheelaa.com · Sheelaa M BajajProduction workflow captured

A lead engine that brings WhatsApp and Instagram enquiries into one follow-up view.

A multi-channel lead and conversation system that routes WhatsApp and Instagram messages, syncs lead records to Sheets, supports prospect research and content planning, and brings internal follow-up views together.

Sector
Numerology & spiritual guidance
Region
India
Role
Solo build · end-to-end
Evidence
Production dashboard capture
Unified inbox — every WhatsApp and Instagram lead in one place, sorted by activity, with totals on the dock.
Inbox · production capture

Unified inbox — every WhatsApp and Instagram lead in one place, sorted by activity, with totals on the dock.

01 / 05
The problem

Three inboxes, no shared history, no pipeline.

Sheelaa.com receives leads across three fragmented channels, WhatsApp, Instagram DMs, and direct site enquiries. Conversations lived in three different inboxes with no shared history, no lead pipeline visibility, and no way to track what was asked, who replied, or who paid. The team was missing leads, double-replying, and had zero analytics.

They also had no top-of-funnel discovery. Every lead came from people who messaged Sheelaa first, the business was entirely dependent on inbound traffic.

Architecture

One Express server, five integrated layers.

An Express server on Render exposes a catch-all webhook that platform-detects every inbound message, normalises it, and writes through to Postgres. Background loops sync every 15 minutes (platforms + Sheets) and every 6 hours (scraper).

System architecture
WhatsAppTrikon APIInstagramMeta Graph APIManyChatLegacy pathExpress webhookCatch-all routerPostgresSupabaseDashboardVanilla JS SPAGoogle SheetsApps Script webhookScraperReddit · X · QuoraProspectsHot / warm / cold
The five layers

Capture, store, surface, sync, and hunt.

01 · Layer

Multi-platform message capture

WhatsApp via Trikon, Instagram via direct Meta Graph API, and a legacy ManyChat path maintained for backwards compatibility. All three normalise into a single messages table with a role tag, platform, and timestamp, so the team sees one history per lead, not three.

Unified inbox — WhatsApp + Instagram leads in one feed, totals on the dock.
Inbox · production capture

Unified inbox — WhatsApp + Instagram leads in one feed, totals on the dock.

02 · Layer

Lead pipeline + conversation database

Postgres on Supabase with a per-lead state machine (new → welcomed → collecting_info → insight_sent → trust_sent → curiosity_sent → offer_sent → payment_sent → paid). Auto-extracts name, DOB, and email from natural-language messages.

State machine surfaces in the inbox — every lead carries its current stage.

State machine surfaces in the inbox — every lead carries its current stage.

03 · Layer

Team dashboard

Single-page app, password-protected. Conversation view per lead, manual reply box that sends through the original platform, daily/funnel stats, prospect quality breakdown, CSV export, archive-and-cleanup tooling. Vanilla JS, ships faster than React for an internal tool.

The internal SPA — comfortable / compact toggles, search, analytics drawer, sync.
Internal SPA

The internal SPA — comfortable / compact toggles, search, analytics drawer, sync.

04 · Layer

Google Sheets sync

Every lead update fires a webhook to a Google Apps Script Web App. Bulk sync runs every 15 minutes in chunks of 20 with rate-limiting. The team keeps working out of Sheets, the system meets them where they already are.

Google Sheets view — lead rows synced from Postgres in scheduled 15-minute chunks.
Sheet · production capture

Google Sheets view — lead rows synced from Postgres in scheduled 15-minute chunks.

05 · Layer

Autonomous lead scraper

Searches Reddit, X, Quora, and Facebook every 6 hours for people asking about the services on offer. Three-phase pipeline: global Reddit search → targeted subreddit monitoring → Google CSE for X and Quora. A custom 0-100 relevance scorer (intent signals, location, recency, engagement, spam filters) classifies each prospect as hot / warm / cold and writes to the prospects table.

Prospect Finder — hot / warm / cold leads scored across four platforms.
Outbound scraper

Prospect Finder — hot / warm / cold leads scored across four platforms.

06 · Layer

Content Pulse — questions in, calendar out

The same scraper feed is mined for genuine questions, clustered by topic (tarot, numerology, healing, marriage, career, name correction). Each cluster gets a priority score and a calendar of pre-built content ideas. The team writes against demand instead of guessing what to publish, with a digest fired at the end of each cycle.

Content Pulse — topic clusters with priority scores and a publishing calendar.
Content engine

Content Pulse — topic clusters with priority scores and a publishing calendar.

07 · Layer

Automated SEO & AEO

Daily Google Search Console snapshot for tracked keywords, plus a Brave-based competitor lite-rank for the same set. AEO citations tracked across Claude, Groq Whisper, and DuckDuckGo. Schemas regenerated on demand, internal linking audited, voice → blog drafts queued automatically. The dashboard is honest about timelines — head terms move in 8–12 weeks, local and long-tail in 2–4.

SEO & AEO — rankings, citations, schemas, and voice drafts in one pane.
Search visibility

SEO & AEO — rankings, citations, schemas, and voice drafts in one pane.

System details

What the shipped system includes.

3
enquiry channels
5
integrated APIs
15 min
scheduled Sheets sync
1
owner dashboard

The screenshots are captures of the client system and show its operational views. No conversion or revenue lift is claimed here.

Stack

Boring, reliable, owned.

Node.jsExpressPostgreSQLSupabaseMeta Graph APITrikon (WhatsApp)Google Apps ScriptReddit JSON APIGoogle Custom SearchRender
What this demonstrates

The capabilities you'd be hiring for.

End-to-end ownership

Webhook plumbing, schema design, business logic, UI, scheduled jobs, deployment, all under one roof.

Multi-API integration

Five distinct external APIs cohabit in one cohesive system without becoming a tangle.

Pragmatic over perfect

Vanilla JS dashboard ships faster than React for a team-internal tool that two people use every day.

Autonomous loops

The scraper isn't reactive, it actively goes out and finds business while the team sleeps.

Working with non-technical clients

The Sheets sync exists because the team lives in Sheets. Meet people where they are.

Next step · § IX

Pick one lead path. Make it trackable.

Send the current workflow. We'll either tell you the $500 Starter shape, or what to skip.

⌘CET overlap 10:00-18:00 · DPA & SCC ready · Reply within one working day