Back to Blog

Static Site / Accessibility / Performance

Static Site Accessibility and Index Refresh

A weekly record about turning loose site feedback into note pages, a quieter Spacewar entry, clearer project cards, and stricter publishing checks.

Synthetic site maintenance panel with note pages, project metadata, and a paused canvas preview.

Why this round changed the site itself

This week was mostly about the record site instead of a separate plugin or local tool. The review target was small but important: remove misleading interactions, reduce the homepage cost of the Spacewar panel, and make long indexes easier to scan as the number of records grows.

The site already had a lightweight Astro build, multilingual content collections, Open Graph metadata, RSS, sitemap output, and browser QA. The weaker parts were around behavior rather than infrastructure: Notes cards looked clickable but went nowhere, the game initialized as soon as the homepage loaded, and project cards mixed every kind of project into the same flat list.

Notes became real pages

The Notes section now has detail routes just like Blog. A note card links to /notes/<slug>/, with matching Simplified Chinese and Japanese routes. The article layout was adjusted so it can represent either Blog or Notes while keeping canonical links and alternate language links in the same place.

This is a small structural change, but it matters. Notes are short, yet they still have dates, descriptions, tags, language metadata, and translation keys. Treating them as real pages makes the section more consistent for keyboard navigation, search engines, and future cross-linking from longer articles.

Spacewar now starts quietly

The homepage game keeps its visual presence, but it no longer starts the full runtime on page load. The first view draws a static canvas preview and leaves the start button visible. Only after the button is clicked does the game create its debug state, begin the animation loop, and listen for controls.

The loop also observes page visibility, viewport intersection, and reduced-motion preferences. When the page is hidden, the panel leaves the viewport, or reduced motion is requested, the frame loop stops instead of continuously drawing in the background. Runtime state publishing was also reduced so ordinary frames do not serialize the full game state every time.

Project cards gained metadata

Project cards now expose a category, a status, and a compact stack line. The content model accepts categories such as plugin, local tool, website, data/benchmark, game utility, and writing. Status values are intentionally simple: active, experimental, and archived.

This gives the Projects page more structure without turning it into a large application. Public and private projects can still be mixed safely, and private projects do not need links. The card itself now explains what kind of thing it is before the reader reaches the longer description.

Verification changed with the content

The publishing checks were updated with the site. They now assert that Notes pages exist, href="#" is gone from Notes, the header marks the current section, the skip link is present, the Spacewar panel is not initialized in the static HTML, and project cards contain category and status metadata.

The fixed manifest count was replaced with a language-count consistency check. That makes future blog additions less fragile: the build now checks that English, Simplified Chinese, and Japanese have matching counts rather than expecting a hard-coded number.

The sitemap output was also renamed to sitemap.xml, while robots.txt now points to that canonical name. The browser pass covered a 16:9 desktop view, an iPhone 17 Pro-sized portrait view, and a common Android portrait view.

What stays deliberately small

The cover images remain lightweight SVG files. The current covers are mostly diagrams, so generating multiple raster sizes would add work and bytes without much benefit. Image tags now include sizes, and the article hero keeps fetchpriority="high" for the first meaningful image.

Search is still intentionally conservative. The site already exports a content index, but the visible user experience should remain coherent before a full client-side search UI is added. For now, the larger value comes from better page structure, real Notes URLs, and clearer project cards.