Skip to content
← Back to workPersonal project

I shipped a website before I knew what a PR was

Six weeks ago I had never built a website from scratch. I wasn’t new to Claude Code, though. At Meta I used it for careful, small fixes, a line of copy here and a button there, inside a codebase where everything around the code already existed, and I presented that way of working to 80+ designers.

This time nothing around the code existed. No template, no engineer, no hosting, no domain, just me and an AI that could build almost anything I described, sometimes in an afternoon. The building turned out to be the easy part. The hard part was knowing what to ask for, what to keep, and what my own laptop was hiding from me. It’s long, because a lot happened.

When
Aug to Sep 2026, six weeks
Built with
Claude Code, Figma, Claude Design
Team
Me and one very patient AI
Where it lives
You’re looking at it

Some of my prompts, in the order I typed them

  1. Aug 24I’m a designer, not an engineer. Be blunt.
  2. Aug 24Lets do sentence case
  3. Aug 24Don’t act on anything, I want to know what you recommend
  4. Aug 24Should I just add the gif to the chat?
  5. Aug 24should I install homebrew?
  6. Aug 24What happens if I stack them vertically?
  7. Aug 24Wait revert the change
  8. Aug 24what is WebGl hero?
  9. Aug 24I want to make sure the site is secure
  10. Aug 24yes, do the unguessable filenames
  11. Aug 25what happens if I forget my passcode?
  12. Aug 27Ignore the figma now since its outdated
  13. Aug 27I typically don’t use hyphens
  14. Sep 1what does create PR mean?
  15. Sep 1Added the name servers
  16. Sep 1actually just add my email to the footer
  17. Sep 1build the social share image with the mark
  18. Sep 3wait to check responsiveness
  19. Sep 4Waddup fam.
  20. Sep 15Follow this prompt
  21. Sep 22I redid my website again
  22. Sep 22Think squarespace CMS editor
  23. Sep 23the editor should show it
  24. Sep 24Let me see what the cut through would look like
  25. Sep 24I don’t like it, revert back
  26. Sep 25The zoom in is laggy
  27. Sep 27Revert back with no blend
  28. Sep 28Actually build 2
  29. Sep 28Why don’t we just do blocks
  30. Sep 28This footer is huge
  31. Sep 29interview me first
  32. Sep 29Tighten it up
  33. Sep 29This will change my live site
  34. Sep 29fix the P1s then do the P2s
  35. Sep 29push
By the numbers
42
chats with Claude
~430
prompts I typed
91
times I just pointed at the page
2
launches
15
bugs my laptop was hiding
01 · Day one

“Connected” (it was not connected)

On day one, Claude built my homepage, a passcode gate and a whole system for case studies in about three hours, with colours pulled straight from my Figma file. It also went sideways in a very modern way: the Figma plugin cheerfully reported “Connected” and then couldn’t see a single thing I selected. There are two Figma connections, it turns out, one to the cloud and one to the app on your desktop, and I had wired up the one that can’t see your desktop. The fix is still in the project notes, because it will bite again.

Five days later I opened a chat with what turned out to be the most important sentence of the project:

I’m a designer, not an engineer, so explain things in design terms rather than code. Be blunt.

Aug 24, the first line of the chat

It was blunt. I had drawn seven different section layouts, and it told me that underneath they were two: text beside a picture, and text above one. I’d been dressing the same two ideas in seven outfits. Those two became the building blocks of the first site, and I decided I liked blunt.

02 · The rules

The day I wrote the AI a job description

Early on I told it to use its judgement as a senior web developer, and it did exactly that: it made six decisions on its own and told me about them afterwards.

They may well have all been right, but I had no way to tell, and that was the scary part. So I wrote the rule down: you’re the senior web developer, Figma is a guideline, and if you want to change something I didn’t ask for, tell me what you’d do and wait for a yes. It went into a file the AI reads at the start of every chat, which makes it the onboarding doc for a brilliant new hire who forgets everything overnight.

CLAUDE.md · How we work

Alex is a designer, not an engineer. Explain in design terms: what a thing does and how it looks.

You are the senior web developer on this project. Alex is not going to catch a bad technical call, so don’t lean on him to. Have an opinion and say which option you’d pick and why.

Recommendations get asked about, not quietly applied. Say what it is, what breaks without it, and what you’d do. Then wait for a yes.

That file carried the whole project. I had 42 separate chats and they behaved like one long one, because each opened by reading it and most ended by adding to it. The rule held for six weeks, although on the very last day I was still reminding it that Figma is a guideline.

03 · Questions

The web, translated into Figma

The first two weeks were a crash course in how the web gets built and shipped, the parts I’d never needed inside Meta’s setup, and I asked about all of it:

should I install homebrew? What does home brew do?

For the hero, I want to have a gif on repeat. Should I just add the gif to the chat?

what is WebGl hero?

WebGL is After Effects running live inside the page.

what does create PR mean?

Aug 24 to Sep 1. I asked the last one again on Sep 4. In my defence, Meta called them diffs

The answers landed because they came in my language. CSS animation is Smart Animate; WebGL is After Effects. From there the AI talked me into a rule I loved: zero JavaScript for motion, with everything moving in plain CSS. I thought this was very cool and very principled, and I held on to it for almost a month.

We settled on one rule for every picture on the site: does the reader need to recognise it, or read it? A flow you only follow can sit small and let the caption work, but a screen whose words are the evidence needs the width. When my phone mockups came out as postage stamps, the fix was mine: “What happens if I stack them vertically?” They went from about 97 pixels wide to 380, big enough to read.

The AI wasn’t always right, but it said so when it wasn’t: “My ‘finished installing’ a moment ago was wrong.” My Mac has no video tools at all, so every clip on this site went through tiny scripts it wrote from scratch. And once I asked it a question and got an answer I hadn’t ordered:

It looks awkward because it doesn’t look left aligned. Do you think we should flip it?

flips fourteen sections

Wait revert the change

Aug 24, less than three minutes apart
04 · Pointing

I stopped describing and started pointing

The biggest change in how I worked came from a small browser built into the Claude desktop app. You can click any element on your page and attach it to your message, so instead of typing “the third paragraph in the section about the thing,” I could click the paragraph and type “make this smaller.”

An animation of the element picker: a cursor clicks a picture on a page, the picture is outlined, a message reads "this thing, right here, smaller", and the picture shrinks.

The element picker, more or less. Click the thing, say the thing

I did that 27 times in two sessions, and then I typed the sentence that ended Figma’s career as my copy doc:

Ignore the figma now since its outdated, we are just doing updates live now

Aug 27

From then on the live page was the source of truth for every word. I pointed at things 91 times over the project, and it turns out “What size type is this? Can we decrease this.” is a perfectly good prompt. It was also the first hint of something I’d build a month later, once typing sentences into a chat box started to feel like dictating to a very fast typist.

05 · Locks

A real lock, not a blurry box

Some of my case studies needed a passcode, and I wanted a real lock rather than a blurry box you can peek behind. So the protected chapters are encrypted when the site is built, the pictures inside them get random names that change with every build, and the build refuses to publish at all if the passcode is missing. The AI even caught its own gap before I did, admitting it had “encrypted the prose and left the evidence in the open,” and then closed it.

On top of that sits a check that refuses to publish any page that would leak a protected sentence onto a public page. We proved it works by sneaking leaks in on purpose and watching it catch every one, which was more fun than a security test has any right to be. My questions were the product ones:

I want to make sure the site is secure

what happens if I forget my passcode?

Aug 24 and 25

This was also the week I found out I have a thing about dashes: “I typically don’t use hyphens and it seems like AI slop because AI always uses it.” Every em dash on the site died that day. Five days later, all of it had to go live.

06 · Launch #1

Launch #1, run by screenshot

We went live on September 1st, and it took both of us. I was the hands in GitHub, Cloudflare and the domain registrar, and the AI was the eyes, reading the screenshots I pasted in with helpful captions like “This is what it shows:” and telling me what to click next. The first deploy failed on a version mismatch I couldn’t have picked out of a lineup. Then my own security settings blocked my analytics. I had a launch to finish, so I switched analytics off, and it stayed off for four weeks.

The first version of the site: a light page with the AH logo, the name Alexander Harr in large type, a one-line positioning statement and Meta and WhatsApp logos.
The first site, live Sep 1
The first version’s About page: a large About me heading over two intro paragraphs.
Its About page

That week I also got a logo. I had the AI write the prompt for Claude Design, then interview me about what I wanted (“I kind of like the mongram but its weaved into like an icon”). The file came back carrying about 13KB of hidden metadata wrapped around 300 bytes of actual artwork, so the AI redrew the mark as a handful of rectangles, and it went live about 80 minutes after the first prompt. The smallest version of it is 113 bytes.

The AH mark. It’s a gate. It opens. Hover it

I also asked for a proper contact form, got interviewed about servers and spam, and said “actually just add my email to the footer.” Scope creep, meet scope cut.

07 · The Book

The redesign I walked away from

Two weeks after launch, I designed a completely new look: paper colours, oxblood, serif type, the whole site laid out as a book in five chapters. The AI built eight pages of it in about 38 minutes.

Building it turned up two surprises. The scroll animations on my live site had been dead the whole time, killed by the step that squeezes the code down for publishing and invisible on my laptop. (Remember that step. It comes back.) And the Book showed the headings of my protected chapters in public, so my own leak check would have refused to publish it anyway.

The Book redesign: a paper-coloured page titled A portfolio in five chapters, a heavy black headline, a serif blurb and a numbered contents list.
The Book, Sep 15
The Book’s About page, with a grey placeholder box where a photo was meant to go.
Its About page, with a photo that never arrived

Then I walked away. It was boring, and it wasn’t me. It felt generic, and it didn’t say anything about me as a designer. When a whole redesign costs an afternoon, walking away from one is just a Tuesday. (September 15th was, in fact, a Tuesday.)

08 · Again

“I redid my website again”

While I was busy being bored by the Book, I was messing around in Claude Design and made a dot animation. That became the whole idea.

I work in AI, and AI is non-deterministic. Ask it the same thing twice and you get two different answers. So the dots start out scattered. But my specialty is creating order out of that, so when you scroll, the dots pull together into an ordered shape.

Here, have a go:

Scattered is the AI. Ordered is the job

Six days after the Book, I came back with exactly that sentence, “I redid my website again,” and a proper design handoff out of Claude Design: a 253-line spec, three working prototypes, exactly 420 particles, exact colours, and a background that flips from dark to light as you scroll without ever pausing on the muddy middle grey where no text colour is legible enough.

It was built in about three and a half hours, and the AI earned its keep by pushing back wherever the prototype wouldn’t survive the real web. The prototype’s passcode screen was exactly the blurry box I’d refused in August, so it swapped in the real lock. Reduced motion was missing, so it added it. And it broke my zero JavaScript rule on purpose, with a reason I couldn’t argue with: “The canvas field cannot be done in CSS.” You can’t Smart Animate 420 particles. I made my peace with it.

The current site: a dark page with a ring of particles behind the headline.03 · Particles · Sep 22
The first site: a light page with a large name and a positioning line.01 · First build · Aug 19
The Book redesign: a paper-coloured page with a heavy headline and a contents list.02 · The Book · Sep 15
Three sites in six weeks: the first build, the Book, the one you’re on
09 · The editor

“Think squarespace CMS editor”

Thirty-four minutes after I saw the new design running, I had a realisation: I was going to spend the rest of my life typing sentences into a chat box so an AI could paste them into files. So I asked for this:

We aren’t going to publish yet. I want an easy admin view where I can edit the text, add images etc. Think squarespace CMS editor.

Sep 22

And it built me one: fields on the left, my live page on the right, a save button. My own little Squarespace, living on my laptop and never published.

The site’s editor: a panel of fields on the left, with this story’s chapters listed, and a live preview of the page on the right.
The editor, open on this page

I never designed the editor. I used it, hit a wall, and named the wall:

For the work filters, I try to delete them and they aren’t being reflected

The built-in browser was quietly clicking No on every “Are you sure?” popup. Delete never worked. The popups are gone.

After saving text updates to the AI agent training card, the thumbnail reverted back

If I ask you in chat to make an update or make an update in the editor, it should save and the editor should show it

I want to be able to insert images here

I could add a setting: insert the picture after paragraph 3.

Why don’t we just do blocks. Like add a text block or an image block

Sep 22 to Sep 28

The thumbnail one was the big one. The editor was holding an old copy of the page and quietly overwriting the AI’s chat edits every time I hit save, so now the editor watches the files and merges what changed. I can change a sentence in the editor while the AI changes another one in chat, and nobody’s work disappears.

The last line is the one that mattered. I did not want to count paragraphs; I wanted blocks, like Notion and every good editor ever made. That became how the About page and every case study are built, including this one. Then came bold and italic, drag to reorder, and uploads that convert my Mac screen recordings on their own. It was the most designer-y thing I did all project, and it fit in one line.

10 · Play

Wrong on purpose, until it was right

Once the editor existed, I stopped building a portfolio and started playing with one.

Dots

My About page portrait is made of tiny dots. I asked for a slider to change their size and was dragging it before the AI had finished testing it. It noticed, because the file had changed before its check was done: I’d already used the slider and saved.

The About page: a portrait of Alex drawn in small light dots on a dark ground, beside the line I’m a lifelong tinkerer who connects unlikely ideas.
The dot portrait on the About page

Then I argued with myself:

I want the dots to bleed into the below the portrait with the light background

Anyway to dark and white color blend more? Like a blended edge instead of a stark jump

Revert back with no blend

Then make the below the hero the dark background too

Sep 27

Four decisions, two of them undoing each other. That’s how I design, it turns out. I have to see it.

Changing my mind, professionally

That became the pattern. I asked whether a word could dim when a particle passed underneath it, got four live versions, tried the one where particles cut through the text, and said “I don’t like it, revert back.” I asked for logo hover ideas, picked option 3, and the next day said “Actually build 2.” Now the A in my logo swings open like a gate, which is completely unnecessary and extremely satisfying.

On the Ads case study a spotlight searches a screenshot before it settles. I asked for it squarer, saw it, and then asked for it to start round and turn square. Designing is being wrong on purpose until you’re right.

The footer

I wrote a 741-word brief for this one: “Do NOT make this look like a SaaS footer.” “One great interaction is better than five effects.” When you reach the bottom I wanted you to think of course this is how this site ends. Then my notes got short. “This footer is huge.” “I don’t see the wave pulsing at the bottom.” That last one was a real bug. The AI had reported the wave as working, but browsers pause animations nobody can see, and its browser window was hidden, so it had never seen the wave at all.

The typed conversation

The cover of my agent training case study is a chat that types itself out, letter by letter. My brief said “no springs.” By the time I asked for another round of interview questions, the AI had already built the whole thing, and admitted it. So I designed the pieces in Figma and handed them over, and it animated them in code, with a script that writes out the motion for every letter. Then I asked for springs, and it pointed out, correctly, that I’d just contradicted my own brief. It measured one grey chat bubble at 1.1 to 1 contrast against the background, which is a polite way of saying invisible, and I picked the fix that took it to 2.1 to 1. Last note: “the spring effect is a bit too much... Tighten it up.” The finished cover is 192 tiny letter animations, and because the script does its work before the page is published, your browser runs zero JavaScript to play them. I find that hilarious.

11 · Launch #2

Launch #2, and the robot that checked my work

By launch day the playing had spread to four chats at once, all in the same project: the spotlight, the typed conversation, the WhatsApp components and some header fixes. It mostly worked. A chat I’d abandoned left behind a second copy of a component another chat had built, and the commits had to be untangled piece by piece, which is roughly what four chefs in one small kitchen looks like.

Then, on September 29th, I told the AI the thing it hadn’t assumed:

This whole particle-redesign is basically a new design which will change my live site.

Sep 29

It had been treating the redesign as a preview that would sit beside the old site. “That changes the job,” it said, and came back with a nine-step plan. Before we swapped anything, it bookmarked the old site so I could get it back in one step, shrank the published site from 111MB to 43MB, and planted five fresh leaks to prove the checker still caught them. It caught all five. I typed “push,” and about thirty seconds later the new site was live.

I switched analytics back on, and it broke again, obviously. This time its reports were going to an address on my own domain that nobody had predicted, and it took two tries to fix. The AI’s explanation: “I only found that by watching it fail live.” I’m choosing to find that charming.

Then I did the thing I’m proudest of. I wrote a brief for a QA agent:

Web QA Agent: alexharr.com

You are a senior QA engineer with a product designer’s eye. Your job is to audit alexharr.com for visual bugs, interaction bugs, responsive and mobile bugs, and design-quality bugs, then produce a prioritized, evidence-backed bug list.

The reader is a recruiter skimming on their phone.

It installed its own browsers, wrote 19 test scripts and tested eleven screen sizes, from tiny phones to huge monitors, in three browser engines, then ranked every bug so another AI could fix them top to bottom. It even checked for em dashes, because I wrote the brief.

It found fifteen bugs, and not one of them showed up on my laptop.

  • The frosted glass on my nav bar had never shipped to Chrome or Firefox. It was the same code-squeezing step that killed my scroll animations two weeks earlier, and it had been letting text scroll straight through the menu on every page.
  • Headings that stick to the top of the screen were sliding under the nav and getting cut in half.
  • On a phone, my particle ring sat right on top of the “Who I am” text.
A strip of the nav bar with a heading and paragraph text showing through it, overlapping the logo and menu links.
P1-01 · Text scrolling through the nav, in Chrome
The About page with the chapter heading Curiosity got me into trouble tucked under the nav bar, its top cut off.
P1-02 · A heading cut in half under the bar
A phone screenshot where the particle ring is drawn over the Built at and Building next text and the More about me button.
P1-03 · The ring on top of Who I am, on a phone

fix the P1s then do the P2s besides the case study titles

Sep 29

They were fixed, rechecked with the same scripts and live the same night.

12 · Over coffee

If you want to try this

Here’s what I’d tell another designer:

  1. Write down how you want to work together. Mine says I’m a designer, be blunt, and ask before changing anything. The AI reads it every time.
  2. Ask “what would you recommend?” before “do it.” You’ll learn more, and it can’t flip fourteen sections on you.
  3. Point, don’t describe. Click the thing and say what’s wrong with it.
  4. Say “revert” a lot. Seeing it is the only way I know if I like it.
  5. Ask it to write your prompts. Some of my best briefs were written by one chat and run by another.
  6. Get a second pair of eyes that isn’t your laptop. Your machine is lying to you. Mine was hiding fifteen bugs.
  7. Build the weird unnecessary thing. The gate logo is my favourite thing on the site.
13 · The tally

So, what did we make?

In six weeks, 42 chats and about 430 prompts, we made:

  • a portfolio I designed three times and shipped twice
  • real encryption on three case studies, and a checker that won’t let me leak them
  • a book-shaped redesign that lives on in a branch somewhere
  • a little Squarespace on my laptop
  • a QA robot
  • a logo that opens like a gate

I still sort of don’t know what a PR is.