Development
WhatsApp lead-generation platform
Creative studio (SaaS product)

Context
A creative studio relied on WhatsApp cold outreach for new business, but prospecting was eating the pipeline it was meant to fill: finding fresh businesses, verifying numbers, avoiding embarrassing repeat contacts, and writing opening messages one at a time.
The workflow clearly generalised — other merchants had the same problem — so what started as the studio's internal tool became a product for other businesses.
Challenge
- Outreach needed a daily supply of prospects that had never been contacted before; deduplication had to be systematic, not memory.
- Opening messages had to feel individually written at a volume where writing them individually was impossible.
- Turning one user into many tenants meant hard isolation: no tenant could ever see another's leads.
- Growth could not depend on manual onboarding — signup, trial and billing had to run themselves.
- The economics only worked if the platform ran with near-zero infrastructure and operations cost.
What we did
Development
- Collection as a controlled pipeline — merchants trigger collection from the dashboard; a queued worker gathers roughly 100 fresh prospects per run through campaign-specific source lanes (one vertical alone spans 21 search terms across 67 Malaysian cities), deduplicated against a 90-day per-campaign window and across every tenant. A database constraint permits one open request per merchant, campaign and day; stale jobs are reclaimed and retries stay idempotent.
- Messages worth sending — every lead ships with a personalised opener selected from a 15-variant, multi-framework message engine, bilingual where the vertical demands it, delivered as click-to-send WhatsApp links. The daily workflow collapses to: open list, review, tap, send.
- Tenant isolation enforced by the database — every row is stamped server-side with the owning tenant and row-level security makes cross-tenant access structurally impossible. A privilege-escalation test suite attempts every crossing and expects rejection on all of them.
- Self-serve growth loop — signup auto-provisions a workspace and a free trial delivers real leads immediately. Stripe Checkout integration built for tiered subscriptions, with webhook-driven tier sync so the database mirrors Stripe rather than trusting client claims; live billing pending the client's go-live checks.
- Owner global view — the operator oversees every tenant, campaign and collection run from one screen.
All of it runs on a deliberately serverless architecture.
Outcome
- A live product in daily use.
- Merchants collect fresh, pre-deduplicated lead lists with one click instead of hours of prospecting.
- Every lead arrives with a ready-to-send personalised opener in the right language.
- New customers sign up and trial the product entirely self-serve.
- Tenant data is isolated at the database layer and verified by adversarial tests.
- Scope
- Multi-tenant SaaS, Stripe billing, Database-level isolation, Serverless, Lead pipeline
- Outcome
- A live, self-serve product: a merchant signs up, trials real leads, and collects a fresh, deduplicated daily lead list with one click — each lead paired with a ready-to-send WhatsApp opener.
Live