This website
A portfolio where every sentence comes from one file, a checker stops anything unsafe reaching the page, and I edit the copy in Word with track changes.
The problem
I wanted one place to show the projects I have built with AI, the techniques behind them and what each taught me, for employers and for sharing on LinkedIn, without sharing any code or private data.
A site about personal projects carries a particular risk: one stray name, figure or private screenshot would be public. So the build had to protect me, not only look good.
What I built
A static site of project pages, a techniques page and a learning page, all generated from two content files. The pages, the sitemap and the home page headline all read from them.
A copy checker that runs before every build and stops it on dashes, email addresses, phone numbers, keys, IP addresses and any name on a private list, with tests for the checker itself.
A Word round trip. The copy is exported as a document with track changes switched on, I edit it in Word, and the tracked changes are applied back to the content files.
A weekly refresh that scans my project folders and drafts updates as a pull request for me to approve. It is built, but paused while its safety checks are finished.

How AI was used
Claude Code as the builder
Claude built the site from the first scaffold to the live address. It also connected the domain, using the hosting provider's tools and my DNS settings, at my request.
Design by options
I used the front-end design skill to produce ten mock-ups, then ten more, and chose one. I then asked for a different home page, with a short summary of every project, because the first version led with techniques and I wanted it to lead with projects. Twenty mock-ups are kept as a record of what I rejected.
Facts from my own work
Claude read the git histories and session transcripts that still existed to pull out timelines, prompts and decisions for each project. Where the record had gaps, I filled them in and the notes stayed private.
Audits of its own output
Claude audited the live site for horizontal scrolling, keyboard order, colour contrast, image descriptions, headings, share tags and the sitemap, then fixed the clear cases. I also had it read the site as an employer would and flag anything that reflected badly on me.
A team that improves it
The agent team's Polisher, Code reviewer, Developer and QA tester found and built changes to this site in batches, including privacy checks and structured data. I approve every batch before it goes live.
What I think is clever
- One source of truth. Pages read from one file, and the home page headline counts the projects. When I added this one, the headline changed by itself.
- Fail the build, not the reader. A wording mistake stops the build and names the file and line, without repeating the text.
- Names matched however they are spelled. A private list of names that must never appear also catches hyphens, odd spacing, capital letters and accents.
- Private by construction. Research notes and Word drafts are kept out of the repository, every screen from a personal project uses made-up data, and the weekly refresh never reads the prompts of my private projects.
- Word as the editing tool. I edit in a tool I know, with every change tracked, and the site is updated from the document.
- Honest about what is unfinished. The weekly refresh is described as built but paused, because I would rather say so than imply it is running.
What I learned
- Ask for many options and choose. Looking at twenty mock-ups made the final choice clear, and the rejected ones are now a record.
- Another pass finds what the builder misses. An audit of the live site found every page telling search engines it was the home page, and a link colour too pale to read comfortably.
- Read the site as the audience would. A read-through for how it reflected on me found a line that contradicted the live products it described.
- Sessions that share a folder collide. One of mine committed another session's unfinished work, so I now stage named files only.
- Safety checks belong in the build. A rule that exists only in a document gets forgotten, and one that stops the build does not.
I do not share the code for this site either. The weekly refresh is built but paused, and nothing it drafts is published without my approval.