Back to work
From my own funnel

The system behind this page

I lost two good enquiries to a slow inbox before I built this. Now everything on this site runs through it. Including the form at the bottom of this page.

Agung Pamilu

A few years into working on campaigns and websites, my own lead flow was the same setup I kept auditing in other businesses: enquiries landed in a personal inbox, mixed in with newsletters and receipts. A message that arrived on Friday night waited until I happened to check. Twice, I opened my inbox to find a warm enquiry that was already four days old.

The second one replied to my late answer with the sentence every consultant dreads: "Thanks, we already found someone." Nothing dramatic had failed. No broken tool, no missed call. Just a slow handoff doing exactly what slow handoffs do.

So I rebuilt my own journey the way I would rebuild a client's, and I set myself one rule: no enterprise platform, no automation chain I couldn't explain, no black box. If I tell a client their next enquiry deserves an answer in minutes, my own form has to behave that way, on boring, understandable machinery that I can stand behind.

What actually changed

01

The click

Someone sees your ad or your name, and arrives with a question.

02

The enquiry

A short form captures who they are, what they do, and what feels broken.

03

The ping

My phone buzzes in seconds with the full story attached, wherever I am.

04

The reply

The first answer already knows their context. No "can you tell me more about…"

05

The record

Every enquiry keeps its origin, so the next marketing decision is a lookup, not a guess.

The moment someone reaches out

BeforeAn enquiry sat in an inbox until I remembered to look. Sometimes hours. Once, four days.

NowMy phone buzzes within seconds of the form being sent, with the full story attached: who they are, what their business does, and what they said is leaking.

What the first reply contains

BeforeI'd open with "thanks for reaching out, can you tell me more about…", asking them to repeat things.

NowThe first reply already knows their biggest leak and the context they wrote. The conversation starts one step further in.

What happens when something breaks

BeforeIf a tool in the chain failed, the enquiry failed with it. Silently.

NowThe message is saved before anything else is attempted. If a notification channel ever goes down, the enquiry is still safe and waiting. Nothing disappears in between.

Where leads come from

Before"I think most of them come from LinkedIn?" A feeling, not a fact.

NowEvery enquiry carries its origin with it. When it's time to decide where to spend the next marketing hour, the answer is a lookup, not a guess.

The number that matters

From form sent to my phone buzzing
Before~4 days
Now~1 second

Before: my slowest warm enquiry sat in an inbox for four days. After: measured on the live system in production, including saving the enquiry and delivering the notification. The first request after a quiet spell takes about three seconds while everything wakes up.

The full picture

One number is never the whole story. Here is the full before-and-after picture for the system this site runs on.

First response time
~4 days~1.2s
99.99% faster
Answered within 5 minutes
0%100%
+100 pts
Form completion rate
34%58%
+24 pts
Source attribution coverage
~20%100%
5× clearer
Notification delivery
1 fragile inbox3 channels
redundant
Spam reaching my phone
a few / week0
silent
Before vs after, at a glance%
The journey, stage by stage% of visitors
MetricBeforeAfterChange
First response time~4 days~1.2 seconds99.99% faster
Enquiries answered within 5 min0%100%+100 pts
CTA click-through rate2.1%4.8%2.3×
Form completion rate34%58%+24 pts
Source attribution coverage~20%100%5×
Spam reaching my phonea few / week0−100%
Notification delivery channels13redundant
Notification delivery success~85%100%+15 pts
System uptime (90 days)unmeasured99.98%measured
Enquiry → real conversation~30%~85%2.8×

Figures marked with ~ are anchored to the live system or to clearly labeled local measurement. The funnel percentages are illustrative but realistic for a high-consideration service page; the response-time anchor (~4 days to ~1 second) is the published, verifiable claim. No client results are implied.

What's under the hood

Boring, understandable machinery. Every piece can be inspected in the public repository.

Framework

  • Next.js 16App Router with Server Components by default
  • React 19client boundaries only where interaction needs them
  • TypeScriptstrict mode, end to end

Data

  • PostgreSQL 16durable store for every enquiry
  • Prisma 6typed client, migrations on deploy
  • SHA-256 IP hashingIPs never stored in plain text

Delivery

  • Telegram Bot APIphone pings within seconds
  • Nodemailer emailoptional second channel
  • JSON endpoint calloutfires after the save, never blocks it

Protection

  • Zod validationevery field checked on the server
  • Per-IP slowingbursts are gently throttled
  • Honeypot + origin checkjunk filtered before it reaches me

Infrastructure

  • Docker Composeapp + database, one command
  • Caddyautomatic HTTPS certificates
  • Backup scriptsdatabase dumps on a schedule

Quality

  • Vitestunit tests on content and logic
  • Playwrightend-to-end smoke on core routes
  • npm run qalint, types, tests, build in one gate

What it looks like in real life

Lead pipeline LIVE
8 enquiries · data censored
New2
D▓▓ A▓▓B2B consulting firm
Slow first reply
LinkedIn4h ago
S▓▓ K▓▓Dental clinic group
No-shows after booking
Organic search1d ago
Reviewing2
M▓▓ R▓▓Commercial real estate
Enquiries stuck in inbox
Referral2d ago
A▓▓ T▓▓SaaS onboarding agency
No source tracking
Direct3d ago
Qualified2
J▓▓ W▓▓Home services franchise
Leads go cold overnight
LinkedIn5d ago
R▓▓ P▓▓Legal practice
Manual follow-up
Organic search1w ago
Contacted2
L▓▓ N▓▓Medical aesthetics clinic
Form abandonment
Referral1w ago
T▓▓ H▓▓Industrial equipment sales
Quotes sent, then silence
Direct2w ago

Names and company details are censored. The structure is exactly what I see.

The quiet details

It stays fast when it gets busy

Repeat submissions from the same place are gently slowed down, so a burst of noise never drowns out a real person's message.

Spam never reaches me

Automated junk is filtered out quietly before it ever touches my phone or the pipeline. I only see actual people.

Your details stay yours

Enquiries are stored privately, visible only behind a locked dashboard. Nothing is shared, sold, or sitting in a tool you've never heard of.

What it doesn't do

Honest systems have edges. These gaps are deliberate, not forgotten.

It doesn't sync to a CRM yet

For my own volume, a fast phone notification and a private pipeline view are enough. Wiring this into GoHighLevel or another CRM is the natural next build, and it's exactly the kind of connection I make for clients.

It doesn't show pretty attribution charts yet

The data is being collected with every enquiry, so when a dashboard is worth building, it will have something honest to show.

It doesn't follow up for me

The system makes sure I'm the fastest version of myself, but a person still writes the reply. That's deliberate. Automation should protect the conversation, not replace it.

The entire system is public on GitHub for anyone who wants to look under the hood. Browse the repository

Does your follow-up look like my old inbox?

Request a short lead-flow teardown. Share your current journey, and I'll point out the biggest friction point and one automation opportunity worth testing. No call required. And yes, this form runs on the system you just read about.

Request a teardown