Skip to content
Faidhi Fahmi.
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.

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 — 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 captured1Assignment— 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.

Context

A financial advisory business in Singapore running paid acquisition into a manual process. Leads arrived from instant forms and landing pages; what happened next depended on which adviser happened to pick them up.

What was actually needed

The visible problem was conversion rate. The actual problem was that leads entered the system and stopped — dozens sitting in intake, none qualified, none converted, because nothing owned the step between arrival and a conversation.

What I did

I shaped the product around the operating loop rather than the org chart: lead ingestion from Meta, Google and TikTok into one scored intake; assignment with explicit ownership; an adviser workspace built around one client at a time instead of a queue per tool; appointment scheduling with calendar sync; and lifecycle messaging over WhatsApp for the cases that stall.

How personalisation worked

The message path is chosen from the lead’s source, intent signals, who owns them, the state of their appointment and what they were sent before. Someone who missed an appointment gets a recovery path, not the generic nurture sequence. The adviser keeps the relationship; the system handles the timing.

Decisions that mattered

Closing the loop back to the ad platforms. Conversions are posted back against the original lead ID through a delivery ledger with idempotency and retries, so the platform optimises toward people who actually became customers rather than people who merely completed a form.

What changed

HappySeal became one operating layer instead of a set of disconnected tools — acquisition, assignment, appointment recovery, adviser onboarding and lifecycle messaging inside a single product, with the public conversion flows feeding it directly.

The insight I kept

When a funnel stalls at one specific stage, it is almost never a messaging problem. It is a missing owner. Every stage needs a name attached to it, or work quietly accumulates there and nobody notices for a quarter.

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.