cschr .devHome
WorkVitaContact
Deutsch
WorkVitaContact

cschr .dev

2026 · 03

This site is a static Next.js export with content from Contentful, built in about ten days by a team of nine Claude Code agents. I set the spec and the quality gates, made the decisions and reviewed the work. The code is public. [PLACEHOLDER: make the repository public before launch]

← All work

03 / 05Project 3 of 5

Year
2026
Role
Architecture, specs, review
In the vita: 2025 →
The cschr.dev home page with the intro text and a row of project tiles.

01 · Why a fresh start

My first attempt, cschrdev, ran from March to June 2026, and I threw it away. It had no content model and no CMS, its stack was too experimental, and the design didn't fit. I started again with a design handover as the spec, acceptance criteria for every part, and a team of agents.

  • 02 · Architecture

    The core in `src/core` knows nothing about Next.js or React; Biome enforces that, so another frontend can reuse it later. Zod schemas are the only source of types. Content is validated at build time, and invalid content fails the build while the last good deploy stays live.

  • Diagram of the build: content from Contentful passes Zod validation in the core, then becomes a static export on Vercel; invalid content stops at validation.
  • 03 · Speed

    After the build, a script defers hydration: the Next.js chunks load after the `load` event, so they don't compete with the largest image. A JS budget fails CI when a page grows too heavy. Lighthouse runs on every preview and has to score 100 for accessibility, best practices and SEO, and at least 95 for performance.

  • 04 · Transitions

    Pages morph into each other with cross-document View Transitions, without GSAP and without a client-side router. Speculation rules prerender the likely next page, so the morph starts from a page that's already there.

  • 05 · Content operations

    Contentful schema changes are migrations in code, and each run is logged in the environment it ran in. A migration can't reach production before it has run on dev. Publishing on production triggers a deploy, so bulk edits pause the webhook first and deploy once at the end. An orphan tool finds entries nothing links to anymore.

  • 06 · The agent team

    Nine Claude Code agents do the work: architect, developer, reviewer, QA, designer, copywriter, performance auditor, researcher and writer. A hub plans and decides; the spokes get a brief and report back in a fixed protocol. Plans and acceptance criteria live in GitHub issues. I'm the human in the loop: I make the calls and read the reviews. The hub may merge small, green changes on its own; everything else goes through me.

  • The hub board for one work package: the list of packages and what waits for me on the left, the timeline with the rounds of developer, reviewer, copywriter and designer in the middle, and the conversation between hub and agents on the right.
  • 07 · Where agents fail

    Agents run into loops, and then I have to step in. One developer agent chased a code health score through two refactors, though by construction the score could not rise any further. The protocol stopped it there: after two failed attempts, an agent has to ask instead of trying a third time.

  • Key message

    Annoying when you want to get ahead, but looking at the code, I'm happy with it.

08 · Outcome

From its first commit on 26 September 2026, the site took about ten days to build, in English at the root and German under /de. It also speaks to machines: llms.txt, Markdown versions of each page and structured data. The repository is public [PLACEHOLDER: repository URL], so every decision and every review is there to read.

Next project · 04Wünsche Zappel-Philipp →
ContactSay hello→
Work·Vita·Back to top ↑
© 2026 Christian Schröder
Legal notice·Privacy·Cookies
Color scheme