How I built a complete personal website in two days using multiple AI agents, and how the real work was deciding what not to build.
Why This Post Exists
I already wrote about why I built this website.
This post is about the how.
Not a technical tutorial. Not a framework comparison.
This is about the decisions and constraints that took me from “I should do this someday” to a live website in two days.
Think of this as a decision framework you could hand to any capable AI and say:
build me something like this, given these constraints.
My Starting Context
Before touching any tech, I had to be honest about my constraints.
- Time: Planned 2–3 hours a week. Actually spent ~6 hours on Day 1 and ~2 hours on Day 2.
- Background: Former MLOps engineer. Comfortable with systems and APIs, rusty on frontend syntax.
- Maintenance tolerance: Very low. I don’t enjoy ongoing DevOps work.
- Costs: Free or cheap now, with a clear upgrade path later.
- Content cadence: One substantial post a month.
- Pattern to break: Over-planning and never shipping.
That last point mattered more than any technical choice.
The Foundational Decisions
Own Domain vs Platform
The choice: Own domain vs Medium, Substack, or LinkedIn.
Why owning the domain won:
- Long-term flexibility for interactive or experimental content
- Full control over structure and presentation
- Content that AI systems can index cleanly
- Infrastructure reusable for other personal projects
The trade-off: I gave up built-in discovery in exchange for ownership and flexibility.
That was a conscious choice.
Static vs Dynamic Architecture
The choice: Static site vs full-stack application.
Why static won:
- My content doesn’t change in real time
- Performance and simplicity by default
- Near-zero maintenance
- Much lower costs
The important part wasn’t just choosing static. It was choosing an ecosystem where dynamic features could be added later without rewriting everything.
Hosting Strategy
The choice: Cloudflare Pages vs Netlify, Vercel, or traditional hosting.
Why Cloudflare won:
- Generous free tier with excellent performance
- Global CDN by default
- Domain management, hosting, analytics, and future backend options in one ecosystem
- Predictable cost curve
For the first few months, the only real cost is the domain itself.
Tech Stack Choices
Framework Selection
The choice: Astro vs Next.js vs Hugo.
Why Astro won:
- Content-first philosophy
- Ships almost no JavaScript by default
- Markdown and MDX feel natural
- Easy to add interactivity later
- Lower cognitive overhead than a full React app
I wanted the tooling to disappear so the writing could stay front and center.
Content Management Strategy
The choice: Notion as a CMS vs Git-only workflow or traditional CMS.
Why Notion won:
- Already part of my daily workflow
- Works well on mobile
- Rich formatting without setup
- Easy draft management with publish status
- Plays well with AI tools for editing and iteration
The workflow:
- Write in Notion
- Mark post as “Published”
- Site rebuilds automatically
- Post goes live a few minutes later
Not real-time publishing, but perfectly fine for a monthly cadence.
Design Approach
I wanted the site to feel calm.
Whitespace, minimal color, typography doing most of the work.
Nothing shouting for attention. Nothing competing with the text.
I started with a feature-rich Astro theme and removed things until it felt quiet enough. Most of my time on Day 1 wasn’t spent coding. It was spent deciding what didn’t need to exist.
Automation and Publishing
The goal: Write once. Publish with zero friction.
Changing a post’s status in Notion triggers a rebuild on Cloudflare Pages. No manual deploys. No extra steps.
This matters less for technical elegance and more for psychology.
The fewer steps between writing and publishing, the more likely consistency becomes.
URLs, Structure, and SEO
One unexpectedly tricky problem was URLs.
Notion pages come with messy internal IDs. I wanted clean, readable URLs for posts. The solution was to generate slugs from post titles during the build process and let Astro handle consistency across rebuilds.
My SEO approach was intentionally conservative:
- Clean URLs
- Proper heading hierarchy
- Basic metadata and Open Graph tags
- Automatic sitemap generation
- Fast load times from a static build
This works well for both traditional search and AI-driven discovery.
Analytics
I set up basic analytics to understand what content resonates.
Nothing fancy. Enough data to learn, not enough to feel invasive.
This is a personal site, not a growth dashboard.
The Multi-Agent Workflow
I initially tried to plan everything perfectly. Every feature. Every edge case.
That went nowhere.
Progress started when I broke the work into small steps and let different AI tools handle different kinds of thinking:
- Strategy and trade-offs
- Implementation details
- Writing and tone
- Quick frontend fixes
The real unlock wasn’t that AI is powerful.
It was that I stopped trying to coordinate everything myself.
The Two-Day Timeline
Day 1 (~6 hours)
Structure, framework choice, design decisions, core content, first deployment.
Day 2 (~2 hours)
Automation, domain setup, analytics, cleanup.
Total time: ~8 hours from nothing to live.
A Small but Important Fun Fact
This entire post, from ideation to drafting to publishing, was done entirely on my phone.
No laptop. No local development environment.
Just thinking, writing, editing, and shipping.
That constraint forced simplicity.
And simplicity shipped.
The Lesson That Matters
Start smaller than your ego wants.
Ship before you feel ready.
Let the first version be incomplete, slightly awkward, and real.
Most personal websites don’t fail because of bad technology.
They fail because they never leave the planning phase.
Build something simple. Make it live.
Then let it earn complexity over time.
Built in two days. Maintained in minutes.
That was the goal.