internal tool · written for myself first
One CLI.
A hundred sites.
Run from
one terminal.
SiteForge is the Node CLI I built to keep a 100-site portfolio sane. Domain research, SEO audits, Search Console, marketplace listings, deploys. One binary, one registry, every operation idempotent.
Closed source, for now
Powers brian's portfolio of ~100 domains
§ 01 What it does
Portfolio ops
audit, deploy, ping, repeat
A registry of every site I own at `~/.config/siteforge/sites.json`. Every command iterates over it. SEO audits across 100 sites in a minute. Deploys from any directory. Search engine pings. Daily portfolio digest in one screen. The thing that lets one person actually run a hundred sites.
Domain pipeline
research, score, check, list
Five name-generation strategies, a 0-100 brandability score with tier-based auto-pricing, RDAP + DNS availability checks, and a one-shot path to listing on Sedo with the verification TXT record auto-added via the Cloudflare API. The whole research-to-marketplace loop runs as a single workflow, not a Tuesday-night spreadsheet.
Search visibility
GSC, GA4, Bing, AI crawlers
Search Console at portfolio scale. Pull 28-day performance for every property, surface broken sitemaps, track URL inspection. Bing Webmaster too. A separate AI-crawler log captures every hit from GPTBot, ClaudeBot, PerplexityBot, et al, across the whole portfolio, in one D1 table.
Site building
scaffold, deploy, monetize
Worker site scaffold for new domains. For-sale landing page generator for the ones I park on Sedo. Multi-stack support so Workers, static HTML, and Astro all deploy through the same `siteforge deploy` command. Schema generators that drop valid JSON-LD into pages without me thinking about it.
§ 02 About SiteForge
SiteForge is closed source. It's a personal tool built for the specific portfolio I run, with assumptions and conventions baked in that wouldn't survive contact with a different operator. The interesting parts (the registry pattern, the AI-crawler tracker, the GSC integration approach) might get spun out as smaller open-source pieces later. Until then, it stays where it is.
Built in Node 22, ESM-only, single binary entry at bin/siteforge.mjs. Roughly 3 months of evenings and weekends so far. About 13,000 lines of code. Twenty-something commands. Daily-driver tool for me.
Node 22 · pnpm · D1 · Cloudflare Workers · Google APIs · Astro