Case Study

How morganvault.com was built solo with AI in 2 weeks

This is the site you're reading. Every technical detail, tool, real cost, and pitfall — fully disclosed. This case study is also a live witness of the workflow the Morgan Vault book teaches.

By Morgan · Updated
TL;DR
What tools, time, and money did it take to build this site from zero to live?

Two weeks of work. Main tools: Claude Code + Wispr Flow + Cloudflare Pages + GitHub. Recurring monthly cost $25-40 USD (Claude Code subscription included). One person built HTML/CSS/JS, multi-language i18n, SEO/AEO structured data, and the automated deploy pipeline.

The 2-week timeline

Not '80 full-time hours over 2 weeks' — this is real life: ~4-6 hours/day with normal life around it.

Day 1-2
Environment setup: install Claude Code, open Cloudflare account, create GitHub repo, subscribe to Wispr Flow. Write the first line of HTML.
Day 3-5
Hero / About / Book / Pricing sections structured. CSS design system locked in (navy + gold palette, serif/sans typography hierarchy). First successful Cloudflare Pages auto-deploy.
Day 6-8
Multi-language i18n system: single JS translation object, data-i18n attribute swap, language picker. Wrote a build script to generate per-language sub-pages for SEO.
Day 9-10
SEO/AEO structured data: JSON-LD schemas (Organization, Person, WebSite, Book, FAQPage, BreadcrumbList, HowTo), sitemap.xml, hreflang, OG social card (1200×630). Lighthouse: all 100s.
Day 11-12
Copy polish: every paragraph went through 5-10 iterations with Claude. FAQ, pitfall log, social proof, CTAs — repeatedly balancing honesty vs sales tone.
Day 13-14
Deploy + first-week iteration: real-time adjustments based on GA4 + GSC data. Found a few RWD bugs, CSS specificity conflicts, JSON-LD validator warnings — all fixed.

Real recurring monthly cost

This isn't a marketing estimate — these are the actual line items on Morgan's credit card:

Tool Monthly Notes
Claude Code$20Anthropic Pro subscription includes Claude Code
Wispr Flow$15Voice input — essential for long prompts
Cloudflare Pages$0Free tier is more than enough (500 builds/mo, unlimited bandwidth)
GitHub$0Public repo, free
Lemon Squeezy5%Transaction fee — only charged on sales
Domain$0.83$10/year .com amortized
Total fixed monthly~$36All AI subscriptions, excluding sales fees

Tech stack

No framework, no build step (except i18n), no dependencies. The entire site is plain HTML/CSS/JS:

deploy.bat real snippet:

REM === [0.5/6] Build per-language static HTML pages (SEO/AEO) ===
!PY_CMD! build_i18n.py 2>&1

REM === [1/6] Clean lock files + git status ===
taskkill /F /IM git.exe >nul 2>&1

REM === [3/6] git add + commit + push ===
git add -A
git commit -m "!MSG!"
git push origin main

REM === [6/6] Cloudflare Worker (Wrangler) ===
powershell -File "Website\deploy_cloudflare.ps1" -Mode WorkerOnly

Quantified results

23Language sub-pages
7JSON-LD schemas
300+hreflang entries
~350KBPage size (CSS/JS inlined)
100Lighthouse Performance
100Lighthouse SEO
100Lighthouse Accessibility
100Lighthouse Best Practices

8 pitfalls navigated (each with the actual fix)

Every one of these actually happened while building morganvault.com — not 'theoretically could':

  1. PowerShell encoding garbageUTF-8 BOM clashing with Big5 codepage. Setting chcp 65001 in Windows Terminal alone doesn’t fix it — edit your PowerShell profile.
  2. Cloudflare Pages "deploy succeeded" but site unchangedCDN edge cache holds for ~24h. Use a versioned ?v=YYYYMMDD query string to force bust.
  3. JSON-LD aggregateRating warningProduct schema requires aggregateRating or review; a brand-new book has none — faking it triggers Google’s manipulative-markup flag. Switched to Book schema instead.
  4. GitHub Actions vs Cloudflare API token confusionTwo different tokens for different jobs: GitHub Actions uses secrets.CLOUDFLARE_API_TOKEN (scope: Pages: Edit); local Wrangler uses env CLOUDFLARE_API_TOKEN (scope: Workers Scripts: Edit).
  5. RWD 720/900px overlap zoneTwo @media breakpoints — 720 and 900 — created a 720-900 range where absolute positioning fought flex column. Unified all stack rules at 900px.
  6. CSS @media specificity order trapA later @media (max-width: 900px) should override an earlier 1024px, but cascade didn’t apply — both rules were (0,2,0). Refactored with more specific selectors.
  7. Tutorial drift — docs vs current UICloudflare's official docs screenshots are years behind the 2026 dashboard. Fix: screenshot the current UI and have Claude map old steps to new buttons.
  8. Site deployed, now what?The biggest pitfall — assuming 'site live = visitors arrive'. Reality: equal time again for SEO/AEO, subscription collection, traffic funnels. This book's Chapter 5 + 6 cover exactly that.

Questions people actually ask

How long does it actually take to build a site like this?Two weeks, at roughly 4-6 hours a day around normal life — not 80 concentrated hours. See the day-by-day timeline above for what happened each day.
What's the real recurring monthly cost?About $36/month fixed: $20 for Claude Code (Anthropic Pro), $15 for Wispr Flow voice input, and $0.83 for the amortized domain. Cloudflare Pages and GitHub are free at this scale. Lemon Squeezy only takes its 5% fee when there's an actual sale.
What's the single biggest mistake to avoid?Assuming "site live" means "visitors arrive." Deployment is maybe half the work — SEO/AEO, subscription collection, and traffic funnels take about as much time again after launch.

Want to use the same workflow for your own site?

This case study is the condensed version. The full 200-page hands-on book — including more pitfalls I've personally hit, copy-pasteable scripts, HTML starter templates, AI prompt templates — is in the bundle.

See the e-book bundle — $39.90 →