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.

Status
Active since 2024
Closed source, for now
Powers brian's portfolio of ~100 domains

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.

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