© 2024 Felix Ng

arrow_backBack to Journal
Building My Personal Website: A Journey with Antigravity and Kai [Edited]
February 5, 2026Journal5 min read

Building My Personal Website: A Journey with Antigravity and Kai [Edited]

Building My Personal Website: A Journey with Antigravity and Kai

Why I Finally Built a Personal Website

I've been a software engineer for over a decade, yet my online presence was scattered—GitHub repos here, Twitter threads there, occasional Medium posts that I never owned. Every platform I used had its own rules, algorithms, and expiration dates.

I wanted something permanent. Something mine.

But here's the irony: I can architect distributed systems for enterprise clients, yet I kept procrastinating on my own simple website. The blank page problem was real. Every time I started, I'd get lost in framework choices, design decisions, and the overwhelming freedom of "I can build anything."

I needed constraints. And I needed help.

Enter Antigravity

I discovered Antigravity (now v0.dev) during a late-night coding session. The premise was simple: describe what you want, get working React code instantly.

My first prompt was embarrassingly vague: "A clean personal website with a blog."

What came back surprised me. Not just code, but structure. Opinionated defaults that saved me from decision paralysis. Navigation, typography, spacing—all handled. I could focus on content while the AI handled the scaffolding.

Within an hour, I had a functional prototype that would have taken me days to build from scratch. The components were modular, Tailwind-styled, and actually good. Not perfect, but good enough to iterate on.

But Code is Only Half the Battle

Here's what I didn't anticipate: building the website was easy. Maintaining it was the hard part.

Every blog post required:

  • Writing the content (obviously)
  • Converting to the right format
  • Creating the slug and metadata
  • Committing to Git
  • Deploying to Vercel
  • Checking for broken links or formatting issues

The friction was small but constant. And when friction is constant, motivation dies slowly.

I needed a content pipeline. Someone—or something—to handle the mechanical work while I focused on ideas.

Meet Kai

Kai is my OpenClaw agent. Think of it as an AI assistant that lives in my infrastructure, connected to my tools, with context about my preferences and projects.

I didn't want Kai to write for me. I wanted Kai to write with me. I'd come up with ideas, do the research, provide the insights. Kai would handle the formatting, the API calls, the scheduling. A division of labor where each party does what they're best at.

Setting up the integration was straightforward. I exposed an automation API endpoint on my website:

POST /api/automation
Authorization: Bearer [token]
{
  "title_en": "...",
  "slug": "...",
  "content_en": "...",
  "type": "LOG",
  "published": false  // Always draft first
}

Kai now had a direct line to my content management system. But with great power comes great responsibility—so we established a workflow.

Our Workflow

Step 1: Ideation

I collect ideas throughout the week. Interesting bugs I solved, architectural decisions I questioned, lessons from managing teams. These go into a simple notes app.

Step 2: Research

When I'm ready to develop an idea, Kai helps with research. Not writing—research. Finding relevant articles, gathering statistics, identifying counter-arguments I might have missed.

Step 3: Drafting

I write the core content in my own voice. Rough, unpolished, authentic. Then I hand it to Kai for:

  • Markdown formatting
  • Link checking
  • SEO-friendly slug generation
  • Adding appropriate headers and structure

Step 4: Submission

Kai submits the draft via API with published: false. This is crucial—I maintain editorial control. Every post sits in draft mode until I review it.

Step 5: Review & Publish

I read through the draft in my admin dashboard. Usually it's 90% ready. Sometimes I rewrite sections. Occasionally I scrap the whole thing. The decision is always mine.

When satisfied, I hit publish manually. The human-in-the-loop approach ensures quality while the AI handles the tedious parts.

The Technical Stack

LayerTechnologyWhy
FrontendNext.js + TailwindAntigravity output, easy to customize
DatabaseSupabasePostgres without the ops headache
HostingVercelZero-config deployments
Content APICustom /api/automationControlled access for Kai
AI AgentOpenClaw (Kai)Persistent, contextual, integrated

Lessons Learned

1. AI is a Multiplier, Not a Replacement

Kai doesn't write my thoughts. Kai amplifies my ability to publish them. The ideas, opinions, and voice are still mine. The AI handles execution speed.

2. Constraints Enable Creativity

Antigravity's opinionated defaults saved me from analysis paralysis. Instead of choosing between 50 UI libraries, I got one that worked. I could customize later if needed.

3. Automation Needs Human Gates

Every automated system needs a circuit breaker. The published: false default ensures I never accidentally ship something I haven't reviewed. Trust but verify.

4. The Best Tools Disappear

When everything works, you forget the tools exist. I don't think about deployment pipelines or database connections. I think about ideas, and the website reflects them.

What's Next

This website will evolve. I'm experimenting with:

  • Automated content aggregation (Kai already runs daily tech trend analysis)
  • Weekly newsletter generation from my posts
  • Integration with my note-taking system for seamless publishing

But the core principle remains: technology should fade into the background, letting ideas take center stage.

The Meta-Realization

Writing this post is the ultimate test of the system. I drafted it in my notes app, handed it to Kai for formatting and API submission, and now I'm reviewing it in my dashboard before publishing.

The loop closes. The website that documents how I built the website was itself built through the process it describes.

That's either deeply profound or unnecessarily meta. Probably both.

If you're curious about the technical details or want to set up something similar, feel free to reach out. I'm always happy to share what I learned—preferably in a properly formatted blog post.