This Site: Designed & Shipped with AI
Designer, Developer & Operator · Solo · Astro · TypeScript · Vercel
The case study you're standing inside.
I designed and shipped this site the way I teach AI to my studio: directed, not generated. Every screen, every component, every line of the deploy was AI-assisted, and every one of them went through me before it went live. You're reading the proof on the deliverable itself.
01 — The brief I gave myself
A portfolio has to survive its own scrutiny.
The Brief
Design and ship a fast, accessible, self-owned portfolio, solo and end to end, that could pass the same review I put student work through: documented, reproducible, and defensible.
The Constraint
No page builder. If I tell agencies AI belongs inside a real production pipeline, my own site has to be a real production pipeline: code I own, on infrastructure I control, not a template with my name dropped in.
I chose Astro over a drag-and-drop builder on purpose. Astro ships static HTML with zero client-side JavaScript by default, which is the honest way to make a content site fast. It also gave AI a real, componentized codebase to work in instead of a locked template. TypeScript everywhere, deployed on Vercel. The result is a site I can reason about, version in git, and hand to any developer. Same standard I demand of a node graph.
02 — Directing the design
Art direction first. Generation second.
Same rule as my classroom: nothing gets generated until the intent is set. I established the system by hand, a restrained monochrome palette, a display/body type pairing, a strict grid, and the node-fan visual language that ties back to my AI work. Then I used AI to execute inside those rails, not to invent them.
The typography is self-hosted. Poppins and Lato are served from the
project itself rather than fetched from a font CDN, so the look is locked, private,
and fast. Fluid clamp() sizing means every headline scales cleanly from
phone to desktop without a rack of breakpoints. AI drafted a lot of this CSS; I set
the scale, the rhythm, and the constraints it had to stay inside.
“AI is a fast hand, not a creative director. The direction has to already exist before you let it draw.”
03 — From design to code
Turning a look into a system.
The site isn't a stack of one-off pages. It's a small design system. Every case
study is composed from the same reusable Astro components:
SectionLabel, Figure, Callouts,
Stats, PullQuote. This page is built from the exact set
the others use. Content lives in single-source data files
(work.ts, site.ts, covers.ts), so a fact like
my contact email or the order of the work grid is defined once and read everywhere.
That structure is a deliberate directing decision. AI is at its best filling in a clear pattern and at its worst inventing architecture on the fly. So I set the pattern (components in, data separated out, one source of truth per fact) and let AI move fast inside it. When it drifted, a hardcoded string that belonged in a data file, a bespoke layout that should have reused a component, I pulled it back. The node graph is the new creative brief; here, the component tree is.
04 — Shipping it: the part most portfolios skip
Design that doesn't deploy isn't finished.
"Fully deployed" means more than pushing to a host. This site runs on real production infrastructure, and I built the operational layer myself, with AI as the pair and my judgment on every security-relevant call.
Edge password gate
A custom edge middleware gated the private preview before launch. It ran before any page or asset was served, signed sessions with an HMAC key kept independent of the password, used constant-time comparison, and failed closed if its signing secret was missing. Removing one env var was the launch switch, and it has been flipped.
Build pipeline
Custom Node scripts generate the OG social cards, cut out the headshot background programmatically, and build a résumé in two forms: a designed PDF and an ATS-parseable version with an automated verification pass. A check-dist gate blocks a bad build from shipping.
Performance & SEO
Static HTML on Vercel, an auto-generated sitemap, self-hosted fonts, and responsive images sized at build time. Vercel Speed Insights and Analytics run in production so performance is measured on real visits, not just a lab score.
Owned & reproducible
Every asset is tracked and every placeholder is logged by a reporting script. Each generated artifact, the OG cards, the headshot cutout, the résumé PDFs, rebuilds from source with its own committed script. Same standard I hold student work to: if you cannot document how it was made, it does not ship.
05 — Where AI got it wrong
The corrections are the craft.
This is the section prompt-and-pray portfolios never write. AI got real things wrong, and catching them is exactly the accountability I teach.
The disappearing spaces. An AI-suggested config turned on HTML
compression, which quietly stripped the newline between text and inline tags like
<strong> and <a>, deleting the space between
words wherever a line wrapped in the source. Copy read fine in the editor and broke
on the page. The fix was deliberate: compressHTML: false, with a comment
explaining why, so no future edit silently re-breaks it.
The security model. The first pass at the preview gate would have signed session cookies with the site password itself, which turns a captured cookie into an offline password-cracking oracle. I directed the rewrite: an independent signing secret, fail-closed behavior when it's absent, and a deliberate delay on failed attempts. AI wrote the code; the threat model was mine.
“Anyone can generate a website. Knowing which of its answers to overrule is the whole job.”
06 — What this is not: Against AI slop
The widespread problem this site refuses to be.
AI-generated portfolio sites are everywhere now. Some of them look stunning: incredible animations, smooth page scroll effects, interactions that wow on first load. Then you look deeper. Speed? Neglected. Accessibility? Skipped. Security? Never considered. Fact-checking? Zero. The codebase underneath? Bloated and heavy. It's prompt and pray at its finest: someone who "knows AI" tells the software to "make a cool website with lots of motion and animations," watches the first output, and ships it without ever reading what the AI actually produced. The site looks like the designer knows their craft. The code says otherwise.
Those sites treat AI as a finish button, not a tool inside a production pipeline. The person using it never asks: Who is going to use this? How are they going to use it? Where is this product going? Is the codebase I'm shipping light, medium, or unnecessarily heavy? What happens when a mobile user on 3G hits this page? Can someone navigate this without a mouse? If I need to change a fact or fix a bug, can I do it without calling the AI back in? They skip all of that. They get animations and call it done.
This site is the opposite.
Everything here is rooted in intention. It is directed, not generated. Every motion has a reason. Every component is measured. The codebase is light, transparent, and owned. If a claim doesn't match the code, it doesn't ship. If a user can't access it, I don't publish it. If I can't explain why a decision was made, it gets reversed.
07 — Proof
Measured, not asserted.
The site reports its own vitals from production via Vercel Speed Insights. Every number below is field data from real visits, not a lab run, and the page weight is measured transferred bytes. No score I can't show you the source of.
08 — What it proves
My AI & Design course is where I direct two sections of designers through AI production every semester. This site is the same discipline turned on myself, solo: design system, component architecture, edge security, build automation, and deploy. AI-accelerated end to end, and human-directed at every decision that mattered. The medium is the message. You're looking at it.
Want this kind of AI-directed process on your team or in your classroom?
Get in touch →