← Back to all thoughts

From $60 to Lighthouse 100×4 · A Solo-Operator's Build Notes

Right after the morning post, I clicked the Purchase button on Cloudflare. $60.46 bought two domains.

Then I told Claude: “Let’s build. Ship perrilee.com.”

By this evening.

Lighthouse finished, four circles lit up one by one:

Performance     100  🟢
Accessibility   100  🟢
Best Practices  100  🟢
SEO             100  🟢

Owning the domains was the “I’ve decided” moment. This screenshot was the “oh, I actually can” moment.

This post is the build log for that day. Numbers, code, decision logic. For every operator who thinks “I can’t code, therefore I can’t start a company” — you can.


The Scoreboard

MetricResult
Time to liveOne day (with meals, naps, and texting friends in between)
Lighthouse100 / 100 / 100 / 100
BilingualChinese / + English /en/ · Native URL split · Full hreflang
InfrastructureAll on free tiers (domain excluded — $60/year)
Division of laborI made product decisions; Claude did implementation
Content systemMarkdown + cross-language linking + auto RSS + auto sitemap

In one sentence: an independently operated, search-engine-friendly, globally accessible home that I can publish from for the next decade. Not rented. Not hosted on someone else’s platform. No monthly subscription.


The Stack

LayerChoiceWhy
FrameworkAstro 5 (static)Zero-JS runtime, perfect SEO, native Markdown
HostingCloudflare PagesGlobal CDN + auto HTTPS + Git-push deploy
DNSCloudflare DNSSame vendor as hosting, zero config cost
Fonts@fontsource/* self-hostedZero third-party requests, privacy-friendly, this is what earns you the Lighthouse 100
ContentContent Collections + ZodTyped article system, better than any heavy CMS
RSS@astrojs/rssBilingual feeds auto-generated
Sitemap@astrojs/sitemapWith hreflang, automatic
AnalyticsCloudflare Web AnalyticsNo cookies, no GDPR banner, no data sold
EmailButtondownHuman-reviewed, anti-spam by design
Version controlGitHub private repoObvious

The whole thing — aside from the $60/year for the domain, almost nothing else gets paid for.

I’ve watched too many clients pay Webflow / Squarespace / Wix twenty-something dollars a month for a static page that’s never going to move. I’ve watched even more pay WordPress’s “cheap” trap: plugin fees, host fees, getting-hacked cleanup fees, slow-loading traffic loss.


Why None of the “Standard” Options

I’ve been doing marketing for a decade. Every client has asked me: “Perri, should I use WordPress or Shopify or Wix?”

But when I built my own site? I picked none of them.

OptionWhy I passed
WordPress.comAdds a plugin → gets slow. Adds a few → slow AND vulnerable
WebflowExported code is a mess. Locked in; migrating = rebuild
SquarespacePretty templates, weak SEO. Changing a font = three levels of menu
WixPainfully slow. Even weaker SEO
FramerBeautiful but expensive; not designed for long-form content
Notion PublishMarkdown-native is nice, but SEO / hreflang / custom OG are weak
SubstackSomeone else’s house. Weakest content ownership
Self-coded + CF PagesContent mine. SEO mine. Data mine. Speed perfect

To be fair — every tool above is great for the use case it was designed for. Wix fits small-shop owners. Squarespace fits course creators. Substack fits writers building a media business.

But what I want is a long-term home for writing, accumulating SEO authority, and building a personal brand.

The core logic: for long-term assets, don’t pay rent. Every monthly payment isn’t buying service, it’s renting a home that can be repossessed.

Build it yourself once. Migrate once. The next decade is yours.


The Day’s Pace

I’m not selling some “ship in a few hours” fantasy. This is realistic human-plus-AI pace.

PhaseWhat happenedOutput
MorningBought domains · perrilee.com + daokit.io$60.46
Early afternoonDesign system · moonlight white / ink slate / cinnabar red, Noto Serif SC + Playfair DisplayVisual skeleton
Mid afternoonAstro scaffold + bilingual home + componentizedTwo language homes serving, design language locked
Late afternoonBlog system · Content Collections + translationKey cross-linkingZH/EN posts auto-paired
Early eveningFull SEO · canonical + hreflang + JSON-LD + sitemap + self-hosted fontsPasses GSC checks
Before dinnerBilingual RSS + OG image + subscribe form skeletonContent can leave the site, email flow ready
After dinnerGit push → GitHub → Cloudflare Pages auto-buildLive
Before bedLighthouse fixes · contrast + heading hierarchy4×100

Every phase shipped something concrete. Zero “two-hour slog with nothing to show.”

This is what AI as a co-founder actually means — not faster typing, but never starting a decision from zero, never stepping in a pit blind.

I make the product decisions (architecture, visual, copy, information structure). Claude does the implementation (code, configuration, debugging). This division of labor is what works for me right now — I don’t need to understand every line of code, but I do need to understand why it’s this line and not that one.


Three Counterintuitive Decisions

The reusable methodology lives here.

1. Astro, not Next.js / React

The intuition: “Modern means React.”

Counter: personal sites, content sites, marketing sites — no runtime JS.

Astro outputs plain HTML + CSS by default, zero JS. Results:

  • First paint under 1 second
  • Search crawlers read instantly
  • Lighthouse Performance lands in the 99+ range almost untuned

React is for apps (login, cart, interactions), not articles. Building a blog in React is buying a Rolls-Royce to do food delivery.

2. Self-host fonts. Skip Google Fonts.

The intuition: “Google Fonts is convenient and globally CDN’d.”

Counter: every user visit makes your site ask Google first. That extra HTTP request plus the CORS handshake is exactly where your Lighthouse points leak — and under GDPR it’s also a privacy risk.

Fix: npm i @fontsource/noto-serif-sc. Font files ship from your CF CDN alongside your HTML. No third party.

3. Markdown + Git, not a CMS

The intuition: “Publishing articles needs an admin backend.”

Counter: the thing a one-person company fears most is the backend. Every backend is a monthly fee, a locked account, a proprietary data format.

My publishing flow:

  1. Create a .md file in src/content/blog/zh/
  2. Write frontmatter at the top (title, date, tags)
  3. git push
  4. Site auto-updates

Content is version-controlled alongside code. Delete by accident? Git brings it back. Migrating? Copy a folder. No CMS matches this.


What This Site Carries From Here

It’s not a business card. It’s a moat.

  • Email list — subscribers are mine, not an algorithm’s
  • SEO authority — more writing, more compounding, decade-long
  • Content assets — every post is my IP, not free labor for a platform
  • Trust accumulation — strangers don’t buy from strangers. First let them know me
  • Business frontage — when I take clients, give talks, teach courses, this is my doorway

An asset that appreciates.


Next

Over the next 14 days:

  • This week: Keep polishing this site (404 refinement, www subdomain, early backlinks)
  • Weekend: Start the daokit.io MVP build
  • Next week: Write 3 long-form technical/methodology posts to feed Google
  • Before Day 14: First beta user on DaoKit MVP

Everything documented in public. Success or failure is content.


Closing

One person + AI + a domain + a focused day = a 100-point home.

This is not a miracle. This is the 2026 baseline toolkit.

All you need is a reason to start.


One person, one army. Dao begets one. One begets two. Two begets three. Three begets ten thousand things.

Today’s “one” is in bloom.

— Perri Lee, 2026-04-15 (Day 1 · evening)