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.