Build log

This page exists because the site claims to demonstrate agentic-coding skill. The fastest way to show that claim is true is to publish the shape of the work that produced the site itself — including the parts that did not go cleanly. Entries are listed newest first.

2026-06-19 · Brand, content hygiene, and a favicon cache fight

A follow-up pass after the redesign. Content hygiene first: one field note had been authored with Markdown link and emphasis syntax inside an Astro template, which does not render it — so visitors were shown raw [text](url) and literal asterisks. Those became real links and emphasis; a stale "Solidity auditing toolkit" description of the escrow project was corrected to what it actually is; and the three field notes now cross-link each other instead of naming siblings in plain text.

The brand assets were still the previous dark/cyan identity, so the favicon and the OpenGraph share image were redrawn on the datasheet palette — an ink linework tree with a single signal-red bud, and a sheet-style card. The OG image is now also rendered to PNG, because several platforms refuse to render an SVG OpenGraph image.

The part that did not go cleanly: the new favicon would not appear in production. The cache headers pinned the brand assets to immutable for a year, and because those assets live at stable paths the edge kept serving last year's copy across every deploy. The fix was to stop marking stable-path assets immutable — content-hashed build assets keep it, since a change there already produces a new URL — and to cache-bust the icon URLs once to evict the copy the edge was still holding. Verified afterwards on desktop, tablet, and phone widths.

Agents helped: the content fixes, the asset redraws, the cache diagnosis, and the cross-device verification loop. Human-owned: the call to ship light over dark, and every public deployment.

2026-06-19 · Visual redesign + dependency hardening

The first look leaned on the now-ubiquitous "AI landing page" style — near-black background, neon gradient headline, glassmorphism, glowing orbs. It worked, but it read as templated rather than as this site. This pass replaced the whole visual language with a light "engineering datasheet": cool drafting paper, Prussian ink, a single signal-red accent, hairline structure, and monospace used as data rather than decoration. Type moved to a self-hosted Archivo Expanded nameplate with IBM Plex Sans and Mono — self-hosted on purpose, to keep the no-third-party-requests launch gate intact.

The GitHub "forest" survived but was redrawn: glowing swaying trees became an ink technical plate (Plate 01 · repository canopy) on graph paper, one rooted stalk per repo, with a language legend and a live freshness stamp. The same pass patched a batch of dependency advisories (Astro, Vite, js-yaml) via semver-compatible updates; one low-severity esbuild advisory was left in place on purpose, because its only fix is a breaking Astro major downgrade and it affects a Windows-only dev-server path that does not exist in this static build.

Agents helped: the full CSS token system and component restyle, the plate redraw, and the build-and-screenshot verification loop on desktop and mobile. Human-owned: the aesthetic direction (light over dark), the decision to keep the forest, and every public deployment step.

2026-05-22 · Content cleanup

Removed Twitter-card markup — the handle was not owned by the author. Added the fourth case study so the projects grid is now a clean 2x2. Tightened the private-cloud card to remove the operational DNS pattern reference; kept the shape, dropped the specific detail.

2026-05-21 · Content refactor

The first version of the homepage leaned on two project cards with broken "View repo →" links to private GitHub repositories, and three "coming soon" note placeholders. Both signals contradicted the rest of the page. This refactor:

  • tightened the hero (lead reduced to two sentences, meta-defensive framing removed);
  • replaced the two repo-linked project cards with three case studies from anonymised projects — a Home Assistant integration for proprietary hardware, a deterministic-plus-LLM marketplace deal watcher, and a Tailscale-private development and telemetry cloud — none of them linking to a private repo;
  • turned the two "coming soon" notes into actual published field notes ("Making agents useful without handing them the keys" and "Public signal, private surfaces");
  • made the build log itself dated and chronological instead of a single meta-paragraph.

Agents helped: discovery across roughly thirty private repositories and the tailnet infrastructure to surface candidates, drafting the case-study and field-note copy, mechanical edits to the Astro templates. Human-owned: which projects to surface, the public-versus-private posture (only one of the three case-study repos is a realistic public-release candidate; the others stay anonymised on purpose), and the editorial line on the field notes.

2026-05-21 · Custom-domain fight

Cloudflare Pages deployed cleanly to paulsen-work.pages.dev on the first try. The apex custom domain paulsen.work did not — the deploy token used by GitHub Actions had Pages scope only and could neither list nor edit zone DNS records, so the agent could not finish the domain attachment via API and the previous session ended with the apex still failing validation.

Resolution was a manual edit in the Cloudflare dashboard from a credential with zone-DNS permissions. The agent's mistake was not the scope problem — that is a real limitation — but the original framing of the task as "wire up the domain" when it should have been framed as "wire up the domain unless DNS write access turns out to be missing, in which case stop and ask." That correction has been added as a personal lesson for future infrastructure work.

2026-05-20 · Astro scaffold and first deploy

Astro project scaffold, reusable layout and header/footer components, the topology panel, content routes for legal pages (/impressum/, /datenschutz/), the first field note, and a GitHub Actions workflow that builds and ships to Cloudflare Pages on push to main. The first deploy hit a wrangler version pinning issue (deployed an older release of the CLI that did not understand the new project config), fixed in the next commit. The third commit opted GitHub Actions into Node 24 to align with the local toolchain.

Agents helped: file-by-file scaffolding from the implementation plan, repeated legal-page layout, the deployment workflow, and the local build/preview verification loop. Human-owned: positioning decisions, content selection, the privacy stance, and every public deployment step.

2026-05 (early) · Spec pivot

The original specification framed the site as a "quiet personal workshop" — a static homepage with minimal content and no public claims. Re-reading the spec with the actual goal in mind (an honest demonstration of agentic-coding ability) made it clear the quiet version would not carry that signal. The plan was rewritten so the AI claim had visible evidence: case studies, a real field note, this build log, and an explicit acknowledgement of where agents helped versus where they did not. The static-and-quiet stance survived in the form of strict launch gates (no analytics, no cookies, no third-party scripts, no forms, no public operational references).

Launch gates that stayed constant

  • No tracking. No analytics, no cookies, no third-party scripts, no fingerprinting.
  • No forms. Contact is a static mailto:. Nothing posts back to a server.
  • No private inventory. No hostnames, no stack version numbers, no operational endpoints in public copy.
  • No agent decisions on the public posture. Every public-facing claim and every deployed change goes through a human.