Every page.
Every image.
Every line.
Built with AI.

This site isn't just about building AI products. It was built with them. Every page, every piece of copy, every responsive breakpoint, every image prompt was handled by an AI agent directed by a single human in the loop.

That's not a footnote. It's the point. I talk about agentic building professionally. I wanted to know what it actually felt like to do it on something I owned completely.

This is what dogfooding looks like when you're serious about it.

7
Pages built end-to-end
3
AI agents in the workflow
0
Lines of code written by hand
100%
Human in loop
The tools

Three agents. One workflow.

Each tool played a distinct role. The work didn't happen inside any one of them. It happened in the hand-offs between them.

Brief
Scaffold
Build
Review
Ship
Claude Chat
Strategy · Content · Direction
Every word of copy on this site started in a Claude conversation. Page strategy, hierarchy decisions, narrative framing, and image prompts were all thought through in Chat before a single line of code was written.
Content writing Image prompts Design decisions Mobile QA
OpenAI Codex
Scaffolding · Generation · Review
Used for initial page scaffolding, structural generation, and code review passes. Codex helped establish the patterns that Claude Code then extended, providing a second perspective on architecture before the iterative build phase began.
Scaffolding Code review Pattern gen
Claude Code
HTML · CSS · JS · Responsive
The CLI agent that did the actual building. Every HTML file, every CSS rule, every responsive breakpoint, every JavaScript interaction was written by Claude Code operating directly on the filesystem: reading files, making targeted edits, running the preview server.
HTML/CSS Responsive fixes JS interactions Browser preview
The process

How it actually worked

Not sequential. Not clean. A tight loop of intent, execution, observation, and correction, running at machine speed with a human setting the direction at every turn.

01
Brief
Define the page goal, audience, key messages, and structural intent in Claude Chat.
Claude Chat
02
Scaffold
Generate the initial HTML structure, design token system, and content hierarchy.
Codex
03
Build
Claude Code reads, edits, and iterates on files directly. Preview server runs in parallel.
Claude Code
04
Review
Screenshots into Chat. "This spacing is wrong." "Font too large on mobile." "Stack this column." Real feedback, fast.
Claude Chat
05
Ship
Browser preview confirms. File is done. Move to the next page, section, or bug.
Claude Code
In the session

What it looked like

These are representative examples from the actual build sessions. The kinds of exchanges that produced every page on this site.

terminal: claude code cli
~/Desktop/ejk.one codex $ claude

> create a leadership page matching the design system in index.html. The page should cover philosophy, posture, and practice. Three core principles I hold regardless of context. A parallax quote section. Work with me section at the bottom.

Reading index.html to extract design tokens...
Writing leadership.html
✓ Hero section with two-column grid
✓ Values grid: 3 cards with border treatment
✓ Parallax section with quote
✓ Work with me: column layout
✓ Footer matching index.html
Preview available at localhost:3456/leadership.html
terminal: mobile responsive pass
> [image attached] The hero spacing on mobile is too loose. First line of copy should be 40px off the nav rainbow separator. Also the right column graphic should be hidden on mobile.

Reading index.html @media block...
Current: padding-top:5rem on .hero
Adding: .hero{"{"}padding-top:40px{"}"} at mobile breakpoint
Adding: .hero-art{"{"}display:none{"}"} at mobile breakpoint

Edit index.html:183
- .hero{"{"}padding-top:40px;padding-bottom:1.25rem{"}"}
+ .hero{"{"}padding-top:40px;padding-bottom:1.25rem{"}"}
+ .hero-art{"{"}display:none{"}"}
claude chat: design direction
EK
I want an inflection points page. A collection of the ideas I've written about that shaped how I think about AI product design. Cards. Each one has a title, a short summary, a tag for the domain. Some are featured.
C
For the featured cards I'd use a wider layout: span full width with a larger image column and the body text beside it. Standard cards in a 2-col grid below. Use your --cyan for the tag accent on AI items, --magenta for leadership. The filter tabs can use your existing subnav pattern so it's zero extra JS.
EK
Good. Make the featured card image on mobile disappear. The text should own that view.
claude chat: copy generation
EK
Write the hero copy for the leadership page. I lead by shaping conditions, not controlling output. I step in when systems are unpredictable and step out when constraints are embedded. The AI shift is the context.
C
Draft: "As AI changed how products behave in production, leadership had to evolve with it. Decisions no longer move cleanly through org charts. They move through systems, and small assumptions compound quickly." Want me to continue with the step-in/step-out framing?
EK
Yes. That's the right register. Keep it direct.
openai codex: initial scaffolding
// Prompt sent to Codex for initial structure generation

system: "You are building a portfolio site for a Director of Product Design. Use semantic HTML5. Inline CSS only, no frameworks. Design tokens via CSS custom properties. All layout via CSS Grid. No dependencies."

user: "Create the work case study page template. Sections: hero with metrics, image gallery grid (2x2 with gap), impact section (two col), manager quote block (grid with quotemark left), prev/next nav. Match the token system below."
// Response: structural output used as starting point

.hero{display:grid;grid-template-columns:2fr 3fr;gap:4rem}
.metrics{display:grid;grid-template-columns:repeat(3,1fr);gap:1px}
.imgs{display:grid;grid-template-columns:1fr 1fr;gap:2px}
.qt{display:grid;grid-template-columns:44px 1fr;gap:1.25rem}
.pnav{display:flex;justify-content:space-between}

✓ Pattern used across all 4 work pages
Created by AI

All imagery and illustrations

The takeaway

What dogfooding actually taught me

The bottleneck was never the agent. It was the quality of my intent. Vague direction produced vague output. The more precisely I could describe what I wanted and why, the faster the work moved and the less rework there was. That's not an AI observation. That's a leadership observation.

The loop was fast enough that I stopped thinking of it as working with a tool. It felt more like a collaborator who executes immediately, never gets tired, and needs clear direction to do their best work.

The thing I kept noticing: the agents were better at catching their own mistakes when I gave them enough context to recognize what "right" looked like. Screenshots, references to other pages, explicit criteria. That's not how most people prompt. It's also not how most people lead.

This site is the artifact. The process is the point.