Here's what I've been building lately.

Sites, tools, and the behind-the-scenes systems that run them. Most are live. Take a look around.

Previously Founder of CoinCentral (sold) Head of content at JUICE (acquired) Writer at The Hustle and Trends
About

It's all one experiment.

These are some of my sites, tools, and behind-the-scenes systems to see what still works on the internet. Some are useful. Some are weird. Most are live. All of them are part of the same bigger experiment:

  1. 01

    Can one person build, run, and scale a stack of useful little businesses with AI, automation, taste, and the resolve to sit with problems until they're fixed?

  2. 02

    Can specific, best-in-class internet tools still earn trust, traffic, and money in a world where search, content, and software are all being rewritten as fast and faster than today?

  3. 03

    Can each project make the next one easier by sharing the same systems for research, publishing, design, analytics, and distribution?

  4. 04

    Can people besides me actually use this stuff to save time, make better decisions, or solve annoying problems they already have?

Table of contents

Fifteen 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 system

It's not a site. It's a system that improves itself.

Most people build a website. I build connected pieces that hand off to each other. A content factory turns raw sources into published pages. Then separate agents keep working on what's live: enriching it, checking it for slip-ups, and acting on what the data says. The factory is only the first stage. The rest is what keeps everything getting better on its own.

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 The shared data layer the factory's pieces read and write one model, so adding a content site is mostly config Affiliate managermatch products · insert links AnalyticsGA4 · Search Console LIVE SITES SoyFreeSnacks Zulvata WMBFF AllergyTable AnswerPlacement + next
raw sources in at the top shared data layer the pieces run on finished, live sites out the bottom
↻ always running

Then it works on itself.

Publishing is the start, not the end. A set of agents keeps going back over everything that's live, and what they learn feeds straight back into the next cycle.

Enrich

Deepens what's already up

Revisits published pages and makes them better: stronger internal links, richer comparisons, fresh picks. Nothing is left as a thin first draft.

Audit

Catches the slip-ups

Checks the sites on a schedule for broken links, stale facts, mangled formatting, and near-duplicates, so the embarrassing stuff gets caught before a reader finds it.

Optimize

Acts on the data

Reads the traffic and search signals and responds: what's working gets expanded, what's flat gets reworked or retired. The sites bend toward what actually lands.

make publish enrich check learn repeat
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
SoyFreeSnacks on mobile
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
Zulvata on mobile
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
WillMyBagFuckingFit on mobile
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
Body Diagnostics on mobile
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
AnswerPlacement on mobile
Visit answerplacement.com
Live · allergy research tool
allergytable.com
AllergyTable homepage
AllergyTable on mobile
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 real asset: a licensable allergen dataset
allergytable.com/data
AllergyTable Data — the allergen API for independent restaurants
The allergen API. The consumer app is the front door; the product underneath is the data. One request returns a cited, dish-by-dish allergen record for any restaurant, including the independents no database covers, over an API or a bulk export. Every claim carries a source, and each restaurant is researched once, then cached.
Live · done-for-you local newsletters
Who it's for
Anyone who wants to own a local audience
Every town has room for a newsletter people actually open, but almost nobody wants to source, write, and ship one every single week. LocalTrophy is the done-for-you version: pick a place, and the finished issues just show up.
Behind the curtain

It pulls the scattered signal of a place, local news, events, openings, and social chatter, clusters it into a week's worth of stories, and drafts each one in a dry, funny, second-person voice before laying it out as a finished issue. Flagship city editions for St. Pete, Scottsdale, and Charlotte show the range, and a Supabase-backed CMS lets me edit and publish any of it.

Vite / ReactSupabaseTailwindCMSNetlify
localtrophy.com
LocalTrophy homepage
LocalTrophy on mobile
Visit localtrophy.com
Live · content service and funnel
brewcontent.com
Brew Content homepage
Brew Content on mobile
Visit brewcontent.com
Who it's for
Founders drowning in AI slop
Every company now feels the pressure to publish constantly, and most of what they ship is generic AI filler with nobody accountable for it. Brew Content sells the opposite: an exceptionally content-literate human who owns the outcome, using industry-leading systems to publish at real volume.
Behind the curtain

This is a human-paired service, not software you're handed. An exceptionally content-literate operator stays in the loop on every piece, using industry-leading systems for research, drafting, and distribution to ship more in a week than most teams do in a quarter, without losing the judgment that makes content worth reading. The site itself is the funnel: a free recorded "content teardown" captures the lead, wrapped in light and dark espresso theming, a GSAP scroll build, and a blog grounded in real work.

Next.jsSupabaseGSAPTailwindVercel
Live · savings and yield comparison
Who it's for
Anyone whose cash is quietly losing money
Most people leave savings in an account paying a fraction of what's available, because comparing rates means opening fifteen tabs and trusting whoever ranked them. This puts the real numbers side by side, across savings accounts, Treasuries, and crypto yield, and shows the date each one was checked.
Behind the curtain

A separate rate-checking service verifies every number against the bank's own page before it appears here, so a stale rate shows its age instead of quietly lying. Seven calculators let you run your own situation rather than read someone else's example. The ranking is not for sale, which is written down in the repo rather than promised in a footer, because the entire value of a comparison site is that it has no reason to lie to you.

StaticSupabaseCalculatorsVercel
earnapyon.com
EarnAPYon homepage
EarnAPYon on mobile
Visit earnapyon.com
Live · snack authority blog
saltysnacks.com
SaltySnacks homepage
SaltySnacks on mobile
Visit saltysnacks.com
Who it's for
People who read snack reviews and don't believe them
Almost every "best chips" article is an affiliate grab where nobody opened a bag. This one runs recipes, reviews of snacks actually bought and eaten, ingredient deep dives, and snack travel, and it says plainly which is which.
Behind the curtain

The interesting part isn't the writing, it's that the editorial promises are enforced by the build. Review disclosure and affiliate disclosure are assertions in a rules file, so a post that skips them fails to build instead of quietly going live. Most sites make those promises in an About page and rely on somebody remembering. Here it's the deploy's job, not mine, which is the only version that survives a busy week.

Next.jsSupabaseCMSbuild gatesVercel
Live · first site off the assembly line
Why it matters
The first one I didn't hand-build
A dessert site: viral recipes, honest reviews, guides, and trends. On its own it's a decent content site. What makes it worth pointing at is how it got here, because it's the first one generated by the factory rather than assembled by me from scratch.
Behind the curtain

Every previous site here cost me a week of plumbing before a single word got written: domain, DNS, hosting, database, secrets, CMS, admin, analytics. Dessertsgram got all of that from one command, and the repo holds only what makes it a dessert site rather than a snack site. The proof that the factory works isn't the tooling. It's that this page exists and reads like the others.

Next.jsSupabaseCMSfactory-builtVercel
dessertsgram.com
Dessertsgram homepage
Dessertsgram on mobile
Visit dessertsgram.com

AllergyMenuBuilder

allergymenubuilder.com ↗
Live · one-time product for restaurants
allergymenubuilder.com
AllergyMenuBuilder homepage
AllergyMenuBuilder on mobile
Visit allergymenubuilder.com
Who it's for
Restaurants tired of the "let me go ask the kitchen" walk
Send in your current menu and get back a designed allergen menu in your own branding, print-ready, with a QR page for the table. It's one payment, not a subscription, which is the whole wedge against a category that charges monthly forever for a document that changes twice a year.
Behind the curtain

Allergen data can hurt somebody, so nothing exports until a human confirms every dish, and editing a dish you already confirmed locks the export again until you re-confirm it. That gate is the product. The full four-step flow and the menu designs are live and real; payments, the drafting pass, and file delivery are still mocked while the open question gets answered, which is whether correcting a draft is genuinely faster for a restaurant than writing the thing from scratch.

Next.jsTailwindprint PDFVercel
Live · marketplace for small internet businesses
Who it's for
People who want a business that already works
Starting from zero is the slowest way to own something online. LiveNiches lists small, mostly automated internet businesses that already run and already earn, where every listing shows real revenue, real traffic, and an owner ready to hand over the keys.
Behind the curtain

The hard part of a marketplace like this is trust in both directions. Sellers won't publish numbers next to their brand name, and buyers won't take an anonymous listing seriously. So names stay private until a seller approves a specific buyer, while the numbers stay public from the start. Everything I've learned running these sites is what tells me which listings are honest and which are a spreadsheet with a story attached.

Next.jsGSAPTailwindVercel
liveniches.com
LiveNiches homepage
LiveNiches on mobile
Visit liveniches.com
What changed this month
The factory

I stopped building sites. I built the thing that builds them.

Every site above taught me the same lesson twice: the interesting work is the site, and the week before it is plumbing. Domain, DNS, hosting, database, secrets, CMS, admin, analytics, all rebuilt slightly differently each time, all of it drift waiting to happen. So the last stretch went into an assembly line instead of another site. Dessertsgram is the first thing to come off it.

Three parts, one command
The launcher

Domain to live site, one command

One command takes a bare domain and does the whole boring sequence: DNS, hosting, database, secrets, and the registry row that tracks it. It shows you exactly what it will do before it touches anything, so a launch is a decision rather than an afternoon.

dry-run firstone command
The shared parts

The CMS is a package, not a copy

The database layer and the admin panel are installed packages every site shares. Fix a bug once and every site gets the fix, instead of hunting the same bug through nine repos that have quietly drifted apart.

tenant-safefix once
The template

Only the personality is per-site

New sites are generated from one template. Pages, admin, SEO, and the publish gate come from the shared packages, so the repo itself holds only what makes it that site: its brand, its voice, and its editorial rules.

brand + voicerules as code
Why it's worth the detour
Speed

A week of setup became an afternoon

The plumbing that used to eat the first week of every site is now a command and a brand interview. That's the difference between testing an idea and committing to one.

launch to write
Standards

Every site inherits the guardrails

Disclosure rules, the responsive check, the admin panel, the analytics module. New sites start with all of it instead of me remembering to add each one on a Friday.

inheritednot remembered
The honest part

It only pays off if I keep launching

Tooling is a bet against your future self's patience. It has produced one site so far. If it produces five more it was obviously right, and if it doesn't, it was an expensive way to avoid writing.

one site so far
The part most people never see
The glue

This is the stuff that actually makes it work.

None of these are sites. They're the plumbing the sites run on, built for myself first and shared once they survived real use. Sites come and go. This layer is what lets one person keep all of them running.

Local model rig

Compute I own, not rent.

An M4 Mac mini and a gaming PC with an RTX 5060 Ti (16GB) run open models like Qwen in LM Studio. There's enough memory here for genuinely capable models, not toys, so most of the drafting, classification, and high-volume work never leaves the network. Only the hardest calls go to Claude. That's the quiet moat: while everyone else rents intelligence by the token, most of my pipeline runs on metal I already own, and it gets stronger every time the open models do.

M4 Mac miniRTX 5060 Ti · 16GBLM StudioQwenowned, not rented
Gaming PC with an RTX 5060 Ti M4 Mac mini
And the rest of the plumbing
Reading the web

Crawling that's free and unlimited

I run my own scraper, so pulling a page costs nothing and never gets rate-limited. Paid services are only a backup for when it's offline.

self-hostedalways-on
Spend

Guardrails on cost

Every model call is metered against a budget, and a run stops itself if it drifts past twice the estimate. I learned to build these the expensive way.

meteredauto-stop
Money

One place for every affiliate link

A single panel manages 1,000+ affiliate links across all the sites, matches products to an article, and only places them when I approve. Nothing writes to a post on its own.

1,000+ linksapprove to place
Config

One source of truth for secrets

Keys and settings live in one managed place, pulled only at runtime and rotated in one spot. Nothing sensitive gets copied around between projects.

one vaultrotate once
Feedback

Every site's numbers in one view

Traffic and search data land in one in-house dashboard that any new site inherits, so I can see what's actually working without logging into a pile of tools.

GA4Search Console
Art

On-brand images, automatically

A service gives every article its cover image without a designer, and keeps the look consistent across sites. Change the brand once and all of them update.

automaticon-brand
Products

Some of it is worth selling.

The biggest product is the whole system. A couple of the smaller tools stand on their own too, and there's a longer list forming behind them.

Work with me

The whole system, pointed at your problem.

The most useful thing I've built isn't any single tool, it's the way they fit together. I can stand up a self-improving content operation for a niche from scratch, or drop the pieces into a business that already publishes: the content factory, the enrichment and audit agents, the analytics loop, the affiliate layer. Same playbook that runs the sites above, aimed at what you're trying to grow.

content factoryenrichment agentaccuracy + link auditsanalytics loopaffiliate layer
Let's talk
And a couple that stand on their own
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

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.