- 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






That's the pipeline above. It's one of five, and every one of them ends the same way: a real meeting on someone's calendar.
Everything below is one pipeline, one cycle: Fresh Intent, the one you just watched loop.
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.
LinkedInThe pipeline above is one of five. A cold list that never got a reply. A second try on a different channel. A company that just raised money. A phone call instead of an inbox. Different starting point, same qualification, same delivery, same outcome: a meeting that actually happens.


LinkedIn

LinkedInSame five pipelines. Here's what they added up to.
Read once from production, July 2026. Totals only, nothing live.
That dashed line around the diagram above is this: every one of these five pipelines reports into the same place, a Discord channel that reads the logs, classifies what broke as Critical, Warning, or Info, and says why, an API failing is a different problem than a bad field mapping. Nothing fixes itself. I decide what's actually worth fixing, open a GitHub issue for it, and that's what ships. The same channel also reads straight from the database for the numbers behind daily, weekly and monthly reports, so I know where a campaign stands against target early enough to act on it.
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.
Every failure is read from the logs, classified Critical, Warning, or Info, and flagged on Discord with the evidence behind it. Nothing fixes itself. I decide what's worth a GitHub issue and ship the fix myself.
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.
I check all three before I touch anything. The first two usually come back clean, and that is exactly what keeps the third one hidden.
The sequences send on time every single day. The meeting count has not moved in months.
Before I touch anything, I run it through three heads.
I'd check: are we reaching enough people?
Volume is fine. The list is big enough and the sends go out every day.
I'd check: are we aimed at the right people, and is the copy landing?
The ICP is defined right and the reply rate holds. On paper this should be working.
I'd check: is the system actually contacting the people we defined?
It is not. The fit check passes anyone close enough, so a big share of every send never matched the ICP at all.
The list was fine. The targeting was right on paper. But the check deciding who got contacted was looser than the definition it was built from, so a large share of every send went to people who never matched the ICP in the first place. They replied politely and went nowhere, which is why the reply rate never flinched. Now the fit check runs on the real criteria before a record is ever contacted, cheap filters first so it stays affordable at this scale. Same list, same emails, aimed at the people they were always meant for.
Two of those checks came back clean, which is exactly why the third one stays hidden. Nobody was wrong here. A founder and a marketer read dashboards, and the dashboards looked healthy. This only shows up if you read the records the system actually acted on. That is the lens I bring to every funnel I build.
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
Audio-reactive live visuals that run in a browser, built for DJs, VJs and the venues booking them. It listens to whatever is playing and drives the visual off the sound itself, so nobody is cueing clips by hand in the middle of a set.
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.
The present is the only part of it we are ever handed. Music, photographs, training, the systems I build: it is all the same practice, and all of it is me trying to stay inside the moment I am in.
Since I was two years old.
A track is scattered sound until you hear what belongs with what. Learn to hear that once and you never stop hearing it, in a mix or in a funnel that has quietly stopped working.
Where structure has nowhere to hide.
Take the subject away and only the pattern is left. The same shapes sit in a crack in a wall and in a galaxy. Micro and macro, one story told at two distances.
No machines. Weight, control, breath.
Closer to meditation than to training. You cannot move well and be somewhere else at the same time. It is where I go to get quiet.
Nothing published. That is rather the point.
Every decision you will ever make gets made in the present. That is the whole thing.
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.
30 minutes. Bring how your outbound runs today, I'll show you which stage is leaking and what I'd fix first, whether or not we end up working together.