Skip to content
Faidhi Fahmi.Contact
All selected works
ProductTechnicalGrowth

One workspace for advisers, from ad click to signed client

Organisation
HappySeal · financial advisory operations
Role
Product architecture and delivery
Period
Singapore

A command centre for advisory teams: acquisition, routing, appointment fulfilment and lifecycle messaging in one product instead of five disconnected tools.

At a glance

Situation
A financial advisory business in Singapore running paid acquisition into a manual process: leads arrived from three ad platforms and stalled in intake, unowned.
Stakes
Ad spend was buying form-fills nobody followed up, not clients. The funnel leaked at the exact step between arrival and a conversation.
My role
Product architecture and delivery, shaping the product around the operating loop rather than the org chart.
Constraints
Three ad platforms with different lead formats, a small advisory team with existing habits, and five disconnected tools already in use.
What changed
  • Acquisition, assignment, appointments and lifecycle messaging consolidated into one operating layer
  • Every funnel stage from intake to converted has a named owner
  • Conversions post back to the ad platforms, so they optimise toward real clients rather than form completions
Read this if
Leads enter your funnel and quietly die between marketing and sales.
Meta, Google and TikTok into one intake
3 platformsMeta, Google and TikTok into one intake
intake through to converted, each owned
5 stagesintake through to converted, each owned
conversions posted back to the ad platform
Two-wayconversions posted back to the ad platform

How the system actually worked

One workspace for advisers, from ad click to signed client, figure 1
The public acquisition surface. The goal-selection question is doing double duty: it qualifies the lead and routes them to the right adviser before anyone has spoken to them.
From ad click to signed client, and back againLeads arrive from Meta, Google and TikTok into one scored intake. An assignment gate gives every lead an explicit owner rather than leaving it to whichever adviser picks it up. The adviser workspace handles one client at a time, appointments sync to a calendar, and lifecycle messaging over WhatsApp recovers the cases that stall, so someone who missed an appointment gets a recovery path, not the generic nurture sequence. When a lead converts, the conversion is posted back to the originating ad platform against the original lead ID, through a delivery ledger with idempotency and retries, so the platforms optimise toward people who actually became customers.PAID ACQUISITIONMetaGoogleTikTokOne scoredintakesource and intent captured1Assignmentwith an explicit owner2Adviser workspaceone client at a time,calendar syncedLifecycle messagingmissed appointment →recovery, not nurturestalls3ConvertedDelivery ledgeridempotency and retriesconversion posted back against the original lead ID4Every stage has a named owner; a funnel that stalls at one stage is missing one

Scroll the figure sideways to read it, or turn your phone.

  1. Three platforms, one scored intake. The goal-selection question on the public form qualifies the lead and routes it before anyone has spoken to them.
  2. Assignment is a gate because the funnel's real failure was here: leads arrived and stopped, because nothing owned the step between arrival and a conversation.
  3. The message path is chosen from source, intent, owner, appointment state and what was sent before. A missed appointment gets a recovery path, not the generic nurture sequence.
  4. Conversions post back against the original lead ID through a delivery ledger with idempotency and retries, so the platform optimises toward customers, not form-fillers.
Three platforms into one intake, an owner attached at assignment, and the conversion posted back to the platform that sourced the lead.

Stack & practices

  • React
  • TypeScript
  • Firebase
  • Meta Conversions API
  • WhatsApp
  • Google Calendar
  • PWA

Got a problem shaped like this one?

A short conversation is usually enough to see if there's a fit.