- 1Intro
- 2Follow-ups
- Every inbox warmed up and reputation-scored; below the bar it sends less, automatically
- Warm-up ≥90% gates send volume, with daily limits enforced per inbox
A founder, a marketer and an engineer see three different problems in one funnel. I think in all three, so I find the one that matters. Outbound is one of them, and the system below runs in production.
You'll leave knowing what to automate first






Five different intake signals. One qualification layer, one copy engine, one delivery system underneath all of them.
Everything below is one pipeline, one cycle. The other four run on the same qualification and delivery layer, from their own signals.
Someone likes a post from a person our buyers follow. Thirteen stages later they are a qualified lead in a campaign with copy written for them. Nobody touches it.
Every stage that costs something sits behind a stage that costs nothing. A cheap screen on the job title we already have runs before any enrichment API is called. Whether the person fits runs before we enrich their company. The company score runs before we go looking for an email address. By the time we spend real money on a record, three separate filters have already agreed it is worth it.
It runs twice a day and drains each stage to empty before moving on, so an interruption costs time and not correctness.
Every message is written off the prospect's most recent LinkedIn post, their company and them, then tailored to the channel it goes out on.
LinkedInRead once from production, July 2026. Totals only, nothing live.
Intent isn't one pipeline. Four different signals all lead to the same email and LinkedIn outreach. A fifth goes straight to a phone call. Every path ends the same way — a real meeting on the calendar.
Qualified means the company cleared a scoring rubric built for this exact use case, not a generic fit check. Verified means every email passed MX validation before a campaign ever touched it.
Five pipelines are only worth having if they stay up without anyone watching them. Three loops make that true, each on its own schedule.
It reads the last 24 hours, works out what broke and why, posts to Discord, opens GitHub issues, and ships approved fixes.
Cold email only works while the mailboxes stay healthy. This watches every one of them and pulls the burned ones out.
Live row counts across the whole database, conversion at every stage, and campaign performance by channel. When a number moves the wrong way I can see which stage did it.

Every stage finishes its own queue before the next starts, so a crash costs time, never correctness.
Cache-first lookups keep enrichment spend flat as volume grows — a repeat profile costs nothing.
Every model call returns structured data, not prose, so every result is consistent and easy to act on.
Three finders, tried in cost order, first hit wins — then every address is verified before it reaches a campaign.
Every mailbox is scored on health; one that drops below the bar sends less, automatically, before it can hurt the domain.
Known failures repair themselves automatically, inside a strict, pre-approved safety net.
Most of what's above started as somebody's manual Tuesday. If you can describe the version of that you're living with, I can usually tell you which part is worth automating first.
Almost every growth problem is one of three things: not enough of the right people arriving, too few of them converting once they do, or too much of the business still being done by hand. The method doesn't change between them.
The expensive part of demand generation isn't the tools, it's the manual loop running between them. These replace the loop.
Signal to qualified lead to written copy to delivery, on a schedule, with nobody in the middle. The engine above is one of them.
Calls, qualifies, routes and writes back to the CRM without anyone listening in. Region-aware, with its own daily caps.
Warm-up, health grading and rotation across hundreds of mailboxes, so deliverability stops being luck.
Traffic that doesn't convert is just cost. This is the half I spent nine years and up to €1.5M a month learning before I started building.
Google, Meta and LinkedIn at scale, with the pacing and account structure that holds a target return rather than chasing it.
Landing pages, audience testing and A/B, with the GA4, GTM and HubSpot tracking wired underneath so a test means something and a booked call traces back to the campaign that caused it rather than being argued about later. Part of how the 2 to 3x month-on-month at Social Beat happened.
Storefront build and optimisation, then the funnel around it.
Most of the manual work inside a company was never customer-facing. It's the spreadsheet nobody owns, the handover that gets forgotten, the report someone rebuilds every Monday.
Any repeated manual process turned into something that runs on a schedule, reports on itself and says so when it breaks. That's what everything above this section is.
Bespoke internal tools and interfaces for when the off-the-shelf option doesn't fit the process — built on a real token system rather than a template, so the tenth screen still looks like the first. The Mhari console and this page are both these.
Live numbers read from the source instead of a monthly export, plus the tracking underneath that makes them trustworthy. The operations console further up this page is one of these.
Up to €1.5M a month at GroupM. Running growth at that scale shows you which decisions actually need a person, and which ones are coordination a system does better.
Some shipped and in use, some in progress, some scaffolded with the research done and the build not started. Labelled honestly, newest proof first.
Passion project · Sonic Weaver
A browser visual engine that listens to sound. Low, mid and high frequencies each move a different part of the picture, and the whole thing stays one image instead of three.
JavaScript · WebGL · Web Audio · Storybook

Built for a café
Expense and sales tracking for a café, on Supabase and Vercel. No build step, plain HTML and JS, with three small serverless functions for the one thing that needs elevated privileges.
Supabase · Vercel · Vanilla JS

Client internal tool
Customer feedback capture and an admin dashboard for a jewellery brand, backed by Shopify and running on Vercel serverless. Tracks which review links went out, which got opened, and which turned into an actual rating.
JavaScript · Shopify · Vercel
Claude Code plugin
A plugin that packages everything I learned building the Intent Engine into something any Claude Code session can use: 24 implementation docs, 25 code templates, 8 skills and an architecture agent.
TypeScript · Claude Code
CodeClaude Code plugin
The self-healing loop, pulled out of Qubit's codebase and made generic. Collects health signals from any system, scores it 0-100, fingerprints and dedupes issues, discusses them in a chat channel, and on approval opens GitHub issues and runs safety-gated repairs.
TypeScript · PostgreSQL · Discord · GitHub
CodeSide product
Export compliance and tariff research for small manufacturers.
In progress
The paid media half of the same idea. Nine years of campaign judgement, encoded as a system that runs accounts rather than reports on them.
Visual prototype
One tool for the whole DJ prep workflow instead of four that don't talk to each other. Currently at the stage of working out how it should look and behave.
I perform and make things under the name Your Flow State. Electronic music, DJing, abstract photography, calisthenics.
This is not a hobbies section. The way I build is the way I mix: find the rhythm, iterate in small passes, keep the whole thing coherent instead of impressive in pieces, and show up consistently over a long stretch. The audio-reactive engine exists because those two halves are the same brain, and I wanted to see what happened if I pointed the engineering at the music.
I take on a small number of consulting projects at a time.
Tell me roughly what your outbound looks like now and where it's costing you time. I'll come back with what I'd change first, whether or not it turns into work.
Bring how your outbound runs today. You'll leave knowing which stage is leaking and what I'd fix first, whether or not we end up working together.