All work

doering.ai

This site: an Astro portfolio, built from my project registry.

Source on GitLab MPL-2.0 · v0.9.2
The site's content pipeline in three rows. Row one, ingest: repolist.yaml plus git -C on each repository feed bun run content:sync, which writes projects.generated.json and its sha256 sidecar. Row two, the gates of bun run verify named in the repo guide, in order: content check, astro check, vitest, build, html-validate; verify also runs further format, theme, budget and reproducibility checks. Row three: the build writes dist/, a folder of static HTML that html-validate also reads, and the container copies dist/ into an unprivileged nginx listening on port 8080. Cyan is ingest, amber the gates, green what is served. The stages light up in order. repolist.yaml + git -C per repo bun run content:sync projects .generated.json + .sha256 bun run verify content check astro check vitest build html-validate dist/ static HTML nginx unprivileged :8080

You're looking at it. The site is built with Astro and Bun, and the project pages are generated from the same registry I use to manage all of my repositories, so the facts stay current without my retyping them.

Every page works without JavaScript, the build runs its own test and validation gate, and it deploys as a small hardened container. The design has been through five rounds since mid-July.

This site's home page: an isometric map of my public projects as four islands of small voxel models, then the heading "Hi, I'm Robb.", a short introduction, and a portrait.
A left-to-right chain of five stages. A diagram is an SVG plus an optional CSS file under src/assets/diagrams; manifest.json lists it with a role of hero or extra; gallery-media.ts imports the raw text with a glob and refuses a file that lacks a title and a description; Diagram.astro inlines it and moves the title into an aria-label; the page then carries inline SVG with no style attribute, and a card hover adds the dg-run class that starts its motion. Two amber guards sit underneath. diagram-kit.test.ts checks the source files (no style element or attribute, no defs, script or hex fills, byte budgets and type floors). generate-security-headers.mjs checks the built pages and fails the build on any inline style, under a policy of style-src self. The stages light up in order. diagram files <uid>/name.svg + name.css manifest.json uid, file, role: hero or extra gallery-media.ts glob raw text; needs title+desc Diagram.astro inlineSvg: title to aria-label page HTML inline SVG, hover: dg-run diagram-kit.test.ts checks the source files no style element or attribute, no defs, no hex fills SVG 20 KB, CSS 10 KB, type floors 20 and 12.5 generate-security-headers.mjs fails the build on an inline style CSP: style-src 'self'
This site's work page: the heading "Work", my introduction to the 32 projects, links to the five sections, and the start of the Applications section beside its small island of voxel models.