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
| Metric | Result |
|---|---|
| Time to live | One day (with meals, naps, and texting friends in between) |
| Lighthouse | 100 / 100 / 100 / 100 |
| Bilingual | Chinese / + English /en/ · Native URL split · Full hreflang |
| Infrastructure | All on free tiers (domain excluded — $60/year) |
| Division of labor | I made product decisions; Claude did implementation |
| Content system | Markdown + 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
| Layer | Choice | Why |
|---|---|---|
| Framework | Astro 5 (static) | Zero-JS runtime, perfect SEO, native Markdown |
| Hosting | Cloudflare Pages | Global CDN + auto HTTPS + Git-push deploy |
| DNS | Cloudflare DNS | Same vendor as hosting, zero config cost |
| Fonts | @fontsource/* self-hosted | Zero third-party requests, privacy-friendly, this is what earns you the Lighthouse 100 |
| Content | Content Collections + Zod | Typed article system, better than any heavy CMS |
| RSS | @astrojs/rss | Bilingual feeds auto-generated |
| Sitemap | @astrojs/sitemap | With hreflang, automatic |
| Analytics | Cloudflare Web Analytics | No cookies, no GDPR banner, no data sold |
| Buttondown | Human-reviewed, anti-spam by design | |
| Version control | GitHub private repo | Obvious |
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.
| Option | Why I passed |
|---|---|
| WordPress.com | Adds a plugin → gets slow. Adds a few → slow AND vulnerable |
| Webflow | Exported code is a mess. Locked in; migrating = rebuild |
| Squarespace | Pretty templates, weak SEO. Changing a font = three levels of menu |
| Wix | Painfully slow. Even weaker SEO |
| Framer | Beautiful but expensive; not designed for long-form content |
| Notion Publish | Markdown-native is nice, but SEO / hreflang / custom OG are weak |
| Substack | Someone else’s house. Weakest content ownership |
| Self-coded + CF Pages | Content 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.
| Phase | What happened | Output |
|---|---|---|
| Morning | Bought domains · perrilee.com + daokit.io | $60.46 |
| Early afternoon | Design system · moonlight white / ink slate / cinnabar red, Noto Serif SC + Playfair Display | Visual skeleton |
| Mid afternoon | Astro scaffold + bilingual home + componentized | Two language homes serving, design language locked |
| Late afternoon | Blog system · Content Collections + translationKey cross-linking | ZH/EN posts auto-paired |
| Early evening | Full SEO · canonical + hreflang + JSON-LD + sitemap + self-hosted fonts | Passes GSC checks |
| Before dinner | Bilingual RSS + OG image + subscribe form skeleton | Content can leave the site, email flow ready |
| After dinner | Git push → GitHub → Cloudflare Pages auto-build | Live |
| Before bed | Lighthouse fixes · contrast + heading hierarchy | 4×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:
- Create a
.mdfile insrc/content/blog/zh/ - Write frontmatter at the top (title, date, tags)
git push- 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,
wwwsubdomain, early backlinks) - Weekend: Start the
daokit.ioMVP 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)
Leave your email · Infrequent · No spam
New essays, hard-won lessons, and notes from running a solo studio — delivered to your inbox.
Email subscription opening soon ·