How I (re)Built This Site

May 29, 2026

The hardest part was not the implementation. It was removing an assumption that was making everything harder.

→ [51] 2026-05-28 18:15 “some projects are also publications. some blog posts are projects. they all overlap anyway. we can keep the best design elements of each and put it into one place”

That overlap sentence is the hinge of the entire redesign. Everything that followed depended on removing the assumption that made the separation feel necessary.

All blockquotes in this essay are my messages to Hermes Agent, an AI agent for long-horizon creative and engineering work. Each one has a message number and timestamp from the session log.

That separation was an assumption I inherited without examining it. The old site had four pages: landing, blog, projects, publications. Each had its own layout. Each was a separate destination. Notes, milestones, updates had no home at all. If you wanted to understand what I was doing, you had to visit three different places and what you found was incomplete.

The garden taxonomy fixes that. Everything lives in one feed. Chronological. Grouped by year. My whole career in a single place. I had been reading Maggie Appleton’s digital garden for years before this redesign. The core idea — a single feed that holds everything regardless of type — was the influence. Projects and publications and blog posts and milestones all in one place, in sequence. The masonry layout is just a technique. The garden concept is what mattered.

→ [53] 2026-05-28 18:47 “maybe we actually just drop the nested routing. render conditionally different templates based on the metadata of the routed slug’s document”

The routing layer became a detail, not a structure.

The assumption that was making everything hard

The hardest part of the redesign was not the CSS. It was not the MDX pipeline or the image handling or the routing. It was realizing that the category structure I had built the site around was artificial. It felt natural because I had been doing it for years. But natural and correct are not the same thing.

When I finally described the problem precisely — “there is an artificial distinction between blog, project, and publication that makes the site harder to navigate and harder to maintain” — the solution became obvious. Remove the distinction. Put everything in one place.

That is harder to do than it sounds. You have to challenge the assumptions you are working with. The redesign happened in a single evening. Not weeks. The old site was overcomplicated by the separation. Not by the amount of content or the number of features. By the assumption that drove the structure.

The workflow

The build was not one conversation. It was three phases, each using a different skill.

Phase one was /impeccable, a design shaping skill that produces design and product documents from high-level direction. It gave the agents a frame to work inside: users and goals, the initial reshape of the site, the design decisions that everything downstream would depend on.

Phase two was /nervous-system plan. Nervous-system is a task orchestration skill I built that manages queued execution and mid-stream feedback injection. The plan phase broke the work into an extensive task list covering everything the first design pass missed — implementation tasks, design decisions, things that were unfinished or needed improvement. The plan gave the agents a queue to work through.

Phase three was /nervous-system execute-mode. /queue and /steer are Hermes commands that let me feed direction while agents work without waiting for the next turn. The session stopped being a conversation and started being a tandem work session.

I could focus on design and user experience nearly the entire time. The agents handled the implementation. I handled the judgment calls.

→ [58] 2026-05-28 19:13 “be creative with the layout. possibly the hero stays as [name][photo][social][photo] then the bio + description are 2 cards, and then a 3rd card for the tagline”

The agent implemented the grid. The layout was not the agent’s idea.

What the agents handled — and what required explicit protection

The agents owned the execution. CSS, routing, component structure, the detail work. But the most effective communication was not high level. It was specific. CSS property names. Class names. Specific values.

The agents were reliable executors. They were not reliable curators. Intentional choices required explicit protection.

Some things I had to preserve explicitly. The spring physics on the social icons was flagged as a defect by the detector. It was not a defect. I had to say “do not remove this” before it survived the next pass.

→ [72] 2026-05-28 20:14 “CRT dies. get rid of all legacy code related to CRT.”

CRT predated the agent workflow. It had accumulated from before, and it did not play nicely with the animated elements the agents were adding. Scale transitions combined with CRT SVG filters were slow. The agents removed all of it cleanly.

My own critique was the main loop. /impeccable critique is an external validator — useful for catching what I miss, but most of what needed finding, I found myself. I direct the fix.

→ [70] 2026-05-28 20:09 “images on the project page just show up as static for some reason. also the abstract is nearly impossible to read based on the block quote”

The block quote styling was cutting into it. That is when the redesign session started — a specific typesetting problem that let me see the whole accumulated weight of the old decisions.

→ [99] 2026-05-28 22:21 “the horizontal rule with the small serif label looks really ugly. it doesn’t work at all right now. make the label bigger, space it vertically farther below the line, and update the font color”

Sometimes you need to see something first before you know if it really works or not.

→ [104] 2026-05-28 22:32 “the heading computed line height on /[slug].astro is somehow ‘24.75px’ which is incredibly small and makes the text of the title completely cramped”

I opened the browser inspector and read the computed value. The agents had built what I asked for. I had to look at the output to judge whether it was right.

→ [101] 2026-05-28 22:26 “the home link in the nav at the top has a ton of space below it for no reason”

I open the browser inspector and read computed values when the situation calls for it. I name specific CSS properties when the agents need that level of direction. I adapt my guidance to the level the agent needs at the moment.

What the garden shows

The garden shows a career in sequence. Some years are blog-heavy. Some are publication-heavy. Lately it is milestone-heavy: graduating, internships, industry jobs. You can see the shift in activity types across time. That is not something you get from three separate pages.

→ [59] 2026-05-28 19:18 “pictures always have a fixed aspect ratio shown. 2-3 lines of text preview max. i think none of them are true ‘cards’. use information hierarchy and spacing to group the content together. or only the clickable ones are cards. only typography for update/milestone that has no detail page”

The garden distinguishes between content that has a detail page and content that does not.

When you land on the home page, my whole career is there. Not a curated highlight reel. Not a filtered view. The actual timeline. Progress and pivots and everything in between.

The point

The site works because I challenged the assumption that drove the original design. The category structure was inherited, not justified. Removing it simplified everything: the routing, the layout, the maintenance burden.

Not everything was mine to claim. The agents found the duplicate slug pattern across every data file and wrote the validator. They found the date off-by-one that rendered every entry on the first of a month as the last day of the previous month in US timezones.

→ [65] 2026-05-28 19:30 “the date ordering is an absolute need”

Date ordering was not a feature request. It was a requirement I already had before the session started. The agents built around it.

The agents executed the decisions. I made them. The distinction between thinking and doing is the actual workflow.

That distinction is also what makes the leverage real. A redesign this broad — routing, layout, taxonomy, component structure, all at once — has a high enough implementation cost that it usually does not happen. You know the current structure is wrong. The cost of unwinding it keeps you where you are. The agents collapse that cost. The thing that was keeping me in a local maximum was not the idea. It was the ratio of thinking to doing. When the agents own the doing, that ratio inverts.