Selected Work

Case study

Personal Website Revival

This site: a recovered and rebuilt static Astro build, edited through a git-backed CMS, for writing, project notes, records, and the experiments that outlast them.

What it is

This page is about the site you are reading right now. It is a static Astro build on Cloudflare Pages, with almost everything editable through Pages CMS, which is git-backed: an edit in the CMS commits straight to GitHub and goes through the same build as everything else, so every content change is a reviewable diff rather than a database row nobody can see.

Why I built it

I did not want a generic portfolio. I wanted something closer to how I actually think about the material, which is a record store more than a resume: selected work up front, experiments on the back shelf, writing filed where it can grow. The record-bin navigation and the catalog numbers (CAT. NO. ED-001 and so on) on the homepage are that idea taken literally rather than left as a metaphor in my head.

What it does

The site collects selected projects, a resume, music and record-collection context, recovered posts, and a small workbench of active or archived builds. Content mostly lives in src/data/*.json, each with a typed src/data/*.ts wrapper the components actually import, and a matching entry in .pages.yml so the same field is editable in the CMS. Adding a field means touching all three, on purpose: the CMS should never offer to edit something that is not actually wired to the page.

Technical shape

Static routes, no server dependency, and a build that fails on real problems rather than warns about them. Broken internal links, missing SEO metadata, and accessibility regressions are all checked in CI rather than hoped for. The whole thing runs through npm run verify before anything ships.

What I learned

The site’s own copy turned out to be the most honest audit I have run on it. Going through it line by line surfaced two CMS fields that looked editable and quietly did nothing, and a genre of writing, an abstract phrase followed by a comma-separated list, that had become the site’s default voice without my ever choosing it. Building something I will actually maintain matters more than building something that looks finished on day one.

What’s next

The record-store metaphor is mostly earning its keep now. What is left is mostly content: real posts, and hand-written copy replacing the placeholder kind, page by page, in a voice that actually sounds like me rather than like whatever wrote the first draft.