I built a website today using two AIs that don't talk to each other
Built with Claude Code. Reviewed by Codex. Shipped in a day.
I built a new website using Claude Code, had OpenAI’s Codex review the code, pushed it to GitHub, and deployed it on Vercel. It’s live now at kenashe.ai. There’s still polish to do, but the bones are up.
Here’s how it came together.
Starting from scratch with Claude Code
I’ve been spending a lot of time in Claude Code lately, and I wanted to push past the daily email (which is still humming along on Substack) and build something new. So today I sat down to build a personal site from scratch. No templates. No themes. No Wix or Squarespace. Just me, the terminal, and Claude Code.
My prompt was simple: I want a minimal, editorial site with a link to my Substack newsletter, an automated AI blog (which I’ll wire up to n8n down the road), an about section, and a contact form. Clean. Quiet. Typography-first.
Claude Code spun up an Astro project with TypeScript, Tailwind, and MDX. It gave me back exactly what I asked for, plus one section I didn’t ask for: a Projects page meant to highlight what I’m building. I almost cut it, but then I realized: this site is the project I’m building right now. So it stays. I’ll fill it in as I go.
Total cost for the initial build: under $10 in Claude API credits.
Then I handed the code to Codex
Here’s the part I want to spend more time on, because I think this is the real unlock.
Once Claude Code had finished the initial build, I opened a second terminal window (same Mac, just another tab) and pointed OpenAI’s Codex at the same repo. Same code, different model, different review. I wanted a second AI to QA what the first AI had written.
Codex caught things Claude hadn’t flagged. One example: my homepage pulls the latest posts from Substack via their feed, with placeholder posts as a fallback in case the feed ever fails. Codex pointed out that those placeholders, “Placeholder essay one, Placeholder essay two, Placeholder essay three,” would render on the live site if Substack ever hiccupped. Not a great look. The fix was simple: gate the placeholders behind a development-only flag and show a proper empty state in production. Claude Code agreed and shipped the change.
That was one of eight fixes Codex flagged. Some were security-related, some were accessibility improvements, some were schema cleanups. All of them were issues I would never have caught on my own. And importantly, ones Claude hadn’t surfaced either.
That workflow, building with one model and reviewing with another, feels like something I’m going to keep doing. It’s the AI equivalent of getting a code review from a colleague who thinks slightly differently than you do. Next project, I might flip it: have Codex write the first draft and Claude Code review. I’m curious whether the strengths reverse.
For this build, I only did one review pass before shipping. I could’ve gone deeper, but it’s a simple static site. The real complexity will come when I start wiring the blog up to n8n for automated publishing.
Shipping it
Once the fixes were in, I committed to GitHub and connected the repo to Vercel. A few rounds of copy edits (bio, about section, headlines) and the site was live. The whole end-to-end process, from empty directory to public URL, took less than a day.
What I’m taking away from this
A few things stuck with me from this build:
Watching the API meter run was eye-opening. We’ve been talking about the economics of AI-built products in one of my Maven classes, but seeing it line up in real time, under $10 to scaffold a real, deployable site, makes the math hit differently than any slide deck ever could.
Running two coding agents side by side on a Mac was surprisingly seamless. Two terminal tabs, one building, one reviewing. No framework, no plugins, no fancy orchestration layer. Just two AIs, one repo, and me in the middle.
Claude Code’s default design choices were more than serviceable. I went MVP just to stand the site up. Clean, restrained, no AI-startup gradient nonsense. I’ll loop back with Claude Design to push the visual layer further once the foundation is solid.
What’s next
This is the foundation, not the finished product. The big build is the AI blog: I’m planning to use n8n to scrape AI and digital marketing content from YouTube and other sources, generate posts, and publish them automatically to the new blog section. That’s where things get expensive. And that’s where things get interesting.
Go check out kenashe.ai, subscribe to the newsletter if you haven’t, and follow along. I’ll be sharing the n8n build next.



