- 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 each one ends the same way: a real meeting on someone's calendar.
Everything below belongs to a single pipeline, one full cycle: Fresh Intent, the loop you just watched play out.
Someone likes a post from a person our buyers follow. Thirteen stages later, they've become a qualified lead sitting in a campaign, with personalized copy written for them.
Before any enrichment or further processing, we run the checks that don't cost anything first: the job title we already have, then fit, then a company score. Only once all three agree does the record move on to enrichment and email lookup.
It runs every day at a scheduled time, working through each stage fully before moving to the next. If something breaks mid-run, we get an instant notification on Discord, so we can fix it right away.
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. Each one starts differently, but they share the same qualification, the same delivery, and the 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.
Each morning, it reads the last 24 hours, works out what went wrong and why, and posts the findings to Discord. Once I approve a fix, it opens the GitHub issue and ships it.
Cold email only works while the mailboxes stay healthy. This keeps an eye on all of them and quietly retires the ones that aren't.
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 exactly which stage caused 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 targeting was correct. The check deciding who got contacted was not, so a share of every send went to people who never matched it. They replied politely and went nowhere, which is why the reply rate looked fine. The fit check now runs on the real criteria before anyone is contacted, cheapest checks first. Same list, aimed at the people it was always meant for.
Two of those checks came back clean, and that's exactly why the third stayed hidden. It wasn't a mistake on anyone's part: a founder and a marketer both read the dashboards, and the dashboards looked healthy. This only shows up when you look at the records the system actually acted on, and that's 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. 9 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.