MW
Home Blog Running 46 sites solo: month 6 retrospective

Running 46 sites solo: month 6 retrospective

What I learned, what worked, what to stop doing. Honest numbers on traffic, revenue, and the cost of context-switching.

Mahesh Waghmare
Mahesh Waghmare
7 min read
Share:
This is a comprehensive guide based on real-world experience and best practices from production projects.

RUNNING 46 SITES SOLO

Advertisement

Six months in. Solo. Evenings only. Here’s a candid look at what’s working, what isn’t, and what I’m changing for month 7.

The numbers — honestly

  • Sites live: 46 (38 content / 5 SaaS / 3 plugins)
  • Combined monthly traffic: ~17,000 real visitors (after filtering out Singapore-datacenter bot traffic, which inflated my numbers for months before I caught it)
  • Revenue: $1,295/yr — almost entirely the Copy The Code WordPress plugin via Freemius
  • AdSense: $1-5/mo (about to ship a real content cluster on marathi.community to push this)

What worked

One canonical config file per node. Every site has a _SITE.md with structured frontmatter. Every API the same. Running npm run empire shows the current state across all 46 sites in 4 seconds.

Shared platform Workers. Auth, billing, email, notifications, voting all live as central Cloudflare Workers. New sites that need user accounts plug in via auth.surror.workers.dev — no per-site OAuth setup.

Reusable component patterns. This site you’re reading is built from <Section>, <Card>, <IconBadge>, <StickyNote>, <DrawnArrow> primitives. The next site I ship reuses 80% of the same primitives.

What to stop doing

Equal-investment across all 46 sites. Traffic data shows 1 site (marathi.community) earns 90% of empire organic clicks. The other 45 get rounding-error traffic. Going forward: one-wave-per-quarter on the audience-real sites; the rest can wait.

Building infrastructure for hypothetical scale. I spent three weekends on a cross-site attribution worker before realising no two sites had enough revenue to make the data meaningful. Shipped the placeholder; deferred the rest until the trigger conditions hit.

The cost of context-switching

The single biggest hidden cost was switching between 46 sites’ codebases mentally. I lost ~30 mins per switch to “where was I in this?”

Two changes helped:

  1. Wave plan in _SEQUENCE.md. One wave is in flight at a time. Other sites wait.
  2. A canonical config + script that prints “what I was doing here”. Five seconds to context-restore instead of thirty minutes.

Month 7 priorities

Wave 1 cloud.clipboard.agency launch is the only revenue-shaped work on deck. Everything else is content + cleanup.

Get weekly notes in your inbox

Practical tips, tutorials and resources. No spam.