2026-03-31
Personal Site Retrospective: From Vibe Coding to Product Loops
Vibe-coding the site from idea to shipped—how I scoped it, ran the loops, hit the walls, and judged “done.”

I treated this site as the first product I fully shipped on my own cadence: I wrote the requirements, and I also made the cuts. The starting point wasn’t “pick the coolest stack,” but one sentence—visitors should know who I am, what I’m building, and how to reach me. Everything else is a trade-off against that.
Vibe coding, for me, is “think a slice → describe it clearly → accept it.” I chose Next.js + TypeScript + Tailwind and centralized bilingual copy and structure in `site-content.ts`—a single source of truth for content so I’m not hunting strings across the repo. It’s the same discipline as insisting on one authoritative PRD.
For v1 I only accepted one outcome: it loads reliably on the public internet. After Home, Projects, Gallery, and Contact were wired, I hooked up Vercel, the domain, and DNS—and for the first time I closed the loop from “a sentence in my head” to “a screen in someone else’s browser.” The win wasn’t memorizing an API; it was proving the loop.
Later the roadmap forked: the ideas area had to carry ideas, progress, and notes, and “interactivity” had to become post, render, moderate in the real world. I wired Cusdis for comments, but the PM work kept going: trust in what we show, whether posting feels shaky, and how we guard third-party payloads—all acceptance criteria. That’s where the traps showed up: some bugs were really first paint vs real use; some “bad data” was a presentation rule we never wrote; sometimes I thought I shipped but production didn’t move—then I learned to ask same code, same release, same environment before doubting myself.
On the projects page I added comment counts and status filters because I needed a tiny dashboard for myself—where feedback is, what’s moving. Dev had its own tax: hot reload drama (bundler quirks, ports, local vs remote drift)—I treat it as integration cost and default to “align first, panic second.”
At this version I care about three checks: did I state the problem clearly, does the visitor experience pass acceptance, and is “live” real delivery or self-congratulation. This is my PM-shaped field note on shipping with vibe coding—I’ll keep iterating, and I’ll keep writing.