Two-time founder

Here's what I've been building lately.

I sold two content companies. Now I build the systems behind a stack of small sites and tools. Have a look.

SoyFreeSnacks homepage
Zulvata homepage
Previously Founder of CoinCentral (sold) Head of content at JUICE (acquired) Writer at The Hustle and Trends
Table of contents

Eight things I'm building. Most of them live.

Start anywhere. Each one links down to its own section below.

The stack behind the work
AnthropicClaude Next.jsNext.js ReactReact TypeScriptTypeScript Tailwind CSSTailwind SupabaseSupabase VercelVercel StripeStripe AirtableAirtable Node.jsNode.js PythonPython Google AnalyticsGA4 n8nn8n CloudflareCloudflare
The backbone

One content factory. Many sites.

Most people build a website. I built the assembly line. Sources come in; they get clustered, scored, drafted (by Claude or a local model), illustrated, and published, with me approving at two gates. Every tool and every site reads and writes the same Supabase core, so adding a site is adding a row, not a repo.

SOURCES RSS · Reddit · Google News · Bluesky · brand Shopify feeds · Airtable briefs Digest enginecluster · score · routepgvector · embeddings · Haiku Writerdrafts in the site's voiceClaude Sonnet · Qwen (local) Image agenton-brand cover artFlux (fal) · Satori · Pexels CMS + publishroles · quality gates · dripVercel Cron Shared Supabase backbone one database · site_id on every row · pgvector · service-role writes Affiliate managermatch products · insert links AnalyticsGA4 · Search Console LIVE SITES SoyFreeSnacks Zulvata WMBFF AllergyTable AnswerPlacement + next
solid: content flows through the pipeline gradient: the one shared database dashed: every stage reads and writes it
Live site · affiliate content system

A soy-free snack site that does the tedious label-reading for you.

Who it's for
33M Americans reading every label
Roughly 33 million Americans live with a food allergy, and soy is hidden in everything from bread to protein bars, yet there's still no trusted infrastructure for fast "can I actually eat this?" decisions. SoyFreeSnacks is built for the label-readers who had to become their own detectives.
What it really is
A ranking engine in a snack blog
The buying guides are the readable part; the SEO system underneath is the point. Each "best soy-free X" page is built to rank for one specific long-tail search, and earn a cut when someone buys through it.
soyfreesnacks.com
SoyFreeSnacks homepage
Visit soyfreesnacks.com
Behind the curtain

Every product on the site gets a clean photo and an honest ingredient check pulled straight from each brand's own store feed, not scraped off Amazon, and the ones hiding soy get flagged. A brief becomes a draft becomes a scheduled post automatically, with gates that catch thin, junky, or duplicate writing before it can go live. The whole thing runs on the shared factory backbone, so a new category is a database row, not a deploy.

"Top 10" power pages

Podium cards, product montages, and allergen chips render from the database. New ranking, no new code.

Free product data

Photos and ingredients pulled from each brand's Shopify feed, re-hosted, and soy-checked.

Self-publishing pipeline

Airtable brief to local or Claude writer to drip-published post, with quality gates in between.

In-house traffic view

Google Analytics and Search Console in one admin panel: who showed up and what they searched.

Under the hood: the tools most people never see
affiliate-manager
Affiliate Manager
The affiliate panel. 1,000 links across every site, matched to each article and inserted only when I approve, and nothing auto-writes.
/admin
SoyFreeSnacks CMS
The CMS. Every post with its live SEO score and affiliate links, plus one-click tools for audit, status, and sponsorships.
/admin/traffic
Traffic dashboard
The analytics. Google Analytics and Search Console folded into one in-house panel: what's ranking, and the searches actually bringing people in.
Next.jsReactSupabaseAirtableClaude + local LLMGA4 / GSCVercel
Live site · automated newsroom
Who it's for
A diaspora that still checks the news from home
Millions of Bulgarians live abroad, and a big share of the next generation reads English more comfortably than Bulgarian, yet nobody covers home for them in a Western voice. Zulvata is the English-language front page for people who left but still care what happens back home.
Behind the curtain

Under the hood it's a two-part machine. A digest engine scrapes fourteen Bulgarian news sources, clusters the same story across outlets, scores each cluster for how much the diaspora would care, and hands the winners to an AI writer that drafts them in a Morning-Brew voice. A separate image agent gives every article on-brand art. I approve at two gates; the rest runs on a schedule.

Next.jsSupabasepgvectorClaudeOpenAI embeddingsVercel Cron
zulvata.com
Zulvata homepage
Visit zulvata.com
The digest engine: the sourcing brain behind the newsroom
digest.zulvata.com
Digest engine story board
Story board. Fourteen sources clustered into single stories, scored for how much the diaspora would care, and moved Suggested → Drafted → Published as I approve.
source intelligence
Source intelligence
Source intelligence. Every outlet graded on how often it breaks a story first versus just echoing one, so the system learns which sources to trust.

WillMyBagFuckingFit

willmybagfuckingfit.com ↗
Live tool · SEO and affiliate funnel
willmybagfuckingfit.com
WillMyBagFuckingFit homepage
Visit willmybagfuckingfit.com
Who it's for
Every traveler who Googled it at the gate
Hundreds of millions of people fly with a carry-on every year, and nearly all of them have Googled whether their bag fits some airline's rules. WillMyBagFuckingFit turns that evergreen, high-intent panic into an SEO and affiliate funnel.
Behind the curtain

It's a fully functional tool wrapped in an SEO engine. The bag-size checker answers the exact question people type. Underneath, a content pipeline reads briefs from Airtable, drafts articles with a local LLM, and drips them out as power pages targeting a long tail of airline-and-bag queries, each seeded with affiliate product cards. Thousands are queued so it can surface in Google, AEO, and GEO.

Next.jsSupabaseAirtablelocal LLMVercel
Live dashboard · personal HUD

Audience of one, me. The pattern is anyone who wants their body and health data rendered like a cockpit, not a spreadsheet.

Behind the curtain

Two anatomical bodies render a live thermal map of what I've stretched and what I've neglected, plus an injury catalog with lock-on reticles. A Telegram agent named Hermes writes the data into Supabase; the dashboard just reads it and re-colors itself, drifting a region toward red as it goes untouched. It's a personal-dashboard template dressed as a fighter-jet HUD.

37-region heatmap

Front and back body maps, green when recently stretched, red when neglected. Drifts on its own.

Combat and damage mode

An injury catalog with reticles, severity, and a checkup cadence for jiu-jitsu wear and tear.

Agent-written data

Hermes updates it over Telegram; the dashboard reads Supabase and refreshes every 30 seconds.

HTML / CSS / JSSupabaseWeb AudioTelegram agent
body-diagnostics.vercel.app
Body Diagnostics HUD
Visit body-diagnostics.vercel.app
The raw data view
/console
Body Diagnostics data console
Behind the HUD it's just tables (mobility, joints, injuries), the same rows the Telegram agent writes and the cockpit reads back.
Live · $29 automated audit
Who it's for
Anyone doing SEO in the age of AI answers
Every company with a website now competes to be the name an AI names, and almost none can see whether they're winning or invisible. AnswerPlacement sells that visibility check to marketers and founders who need to know where they stand.
Behind the curtain

You pay $29, it crawls your site, pulls deterministic signals like schema, robots, and metadata, then runs one big model pass that grades you across three channels: can Google find you, will an assistant cite you, will it recommend you. Out comes three scores and a prioritized fix list. Payment is the gate, so there's no way to burn tokens without a sale behind it.

Next.jsSupabaseClaudeStripeFirecrawl / Jina
answerplacement.com
AnswerPlacement homepage
Visit answerplacement.com
Live · allergy research tool
allergytable.com
AllergyTable homepage
Visit allergytable.com
Who it's for
Allergy households deciding in the moment
Some 33 million Americans live with a food allergy, and there's still no live infrastructure for deciding, in the moment, whether a given restaurant is actually safe. The hard part isn't the app, it's the research underneath: check each restaurant once, cache it forever, and never once say the word "safe."
Behind the curtain

Ask about a restaurant and an agent reads the menu, allergen docs, and diner reports, then returns a cited, dish-by-dish verdict against your allergy profile. It never says "safe"; it shows the receipts or tells you exactly what to ask the server. Each restaurant is researched once and cached, so cost scales with the catalog, not with traffic.

Next.jsSupabaseClaudeGoogle PlacesCrawl4AI
The glue

The tooling underneath all of it.

None of these are sites. They're the plumbing the sites run on, built for myself first and shared once they survived real use. Two grew into products worth pointing a stranger at. The rest just quietly hold everything together.

07

CRO Optimizer

Claude skill · conversion and AI-visibility audit

Every marketer and agency owner stares at a page that won't convert and can't say why. Point it at any URL and it returns the diagnosis plus rewrites, which also makes it a foot-in-the-door for winning those same people as clients.

It scrapes a live page for free, scores it across four channels (conversion copy, SEO, AEO, GEO) using local Lighthouse and a live "does AI cite you" probe, then renders an Apple-clean PDF with quoted findings and ready-to-paste fixes. A blind eval harness keeps the copywriting honest.

PythonCrawl4AILighthouseClaudeTavily
08

Featured Image Agent

Live service · on-brand art for every article

Every site in the factory needs on-brand art for every article, with no designer in the loop. One deployed service keeps a growing content operation visually consistent.

Give it a post and it decides between a real photo, a branded type card, or generated art, wraps the result in a deterministic brand frame, uploads it, and writes the URL back to the post. Edit the brand kit once and every site gets it.

Next.jsSatorifal.ai (Flux)SupabasePexels
Under all of it
Local LLM

The local model rig

A Mac in the corner (I call it almo) runs Qwen in LM Studio. First drafts and the cheap, high-volume passes hit it over the local network; only the hard calls go to Claude. It turns the boring 80% of the writing into a fixed cost instead of a metered one.

LM StudioQwenClaude fallback
Scraping

A scraper I host myself

Crawl4AI runs always-on via launchd on that same Mac at localhost:11235. Free, unlimited page-fetching, so crawling a site doesn't burn a paid credit every time. The cloud scrapers are the fallback, not the default.

Crawl4AIlaunchdDocker
Cost control

Guardrails on spend

Every model call logs its real tokens and dollar cost to a usage table, and budget gates halt a run if it blows past twice the estimate. I added these after a bad week where one loop quietly spent $6 a restaurant.

usage ledgerbudget gates
Affiliate

One affiliate brain

A single deployed panel manages 1,000+ affiliate links across every site: it matches products to an article, previews the placements, and inserts them only when I approve. Nothing writes to a post on its own.

Next.jsSupabaseAmazon + direct
Secrets

Config done once

Every project pulls its keys from Doppler at runtime, scoped per environment. No .env files full of live keys lying around, and rotating a key is one place, not ten repos.

Dopplerper-env
Analytics

Drop-in traffic view

One traffic module (Google Analytics + Search Console, server-side) drops into any site's admin in about ten lines and five env vars. Every new site gets the same in-house dashboard for free.

GA4Search Console

That's the stuff. Want to talk about building something?

I practice what I build. If something survives my own workload, it earns the right to be shared.