I sold two content companies. Now I build the systems behind a stack of small sites and tools. Have a look.
Start anywhere. Each one links down to its own section below.
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.
A soy-free snack site that does the tedious label-reading for you.
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.
Podium cards, product montages, and allergen chips render from the database. New ranking, no new code.
Photos and ingredients pulled from each brand's Shopify feed, re-hosted, and soy-checked.
Airtable brief to local or Claude writer to drip-published post, with quality gates in between.
Google Analytics and Search Console in one admin panel: who showed up and what they searched.



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.


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.
Audience of one, me. The pattern is anyone who wants their body and health data rendered like a cockpit, not a spreadsheet.
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.
Front and back body maps, green when recently stretched, red when neglected. Drifts on its own.
An injury catalog with reticles, severity, and a checkup cadence for jiu-jitsu wear and tear.
Hermes updates it over Telegram; the dashboard reads Supabase and refreshes every 30 seconds.

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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
I practice what I build. If something survives my own workload, it earns the right to be shared.