EI-6.1 — Experience Baseline & Accessibility Audit
Status: COMPLETE Date: 2026-08-08
Scope
Repository-level audit of the shared site experience, concentrating first on _layouts/default.html, _includes/meta.html, style.scss, and the navigation/terminal behaviors inherited by the corpus.
This is a code and structure audit. It does not claim to replace browser, screen-reader, or human usability testing.
Baseline strengths
- Document language is explicitly declared (
lang="en-US"). - A viewport meta element exists.
- Primary navigation has an accessible label.
- The terminal input has an accessible label and is keyboard-operable.
- Core content is rendered as HTML and does not depend on JavaScript to exist.
- Images are globally constrained to the available width.
- The main layout already includes mobile-specific rules.
- The site uses visible text labels rather than icon-only primary navigation.
Findings
Blockers
B1 — No skip link to bypass repeated site chrome
Keyboard and assistive-technology users must traverse the masthead/navigation before reaching the main content on every page.
Action: add a visible-on-focus Skip to main content link targeting #main and style it so it cannot be obscured by the CRT overlay.
B2 — Motion effects do not honor reduced-motion preference
The global CRT scan/flicker layer and blinking terminal-style decoration animate continuously. The baud-rate display also changes automatically through JavaScript.
Action: add prefers-reduced-motion: reduce handling that disables decorative animation and smooth scrolling. Make the baud-rate animation settle immediately or remain static for reduced-motion users.
Important
I1 — Focus treatment relies too heavily on hover styling
Links have strong hover/active treatment, but the shared stylesheet does not establish an equally explicit :focus-visible system for links, navigation, and the terminal input.
Action: define a consistent high-visibility keyboard focus indicator that remains legible against dark panels and decorative overlays.
I2 — Viewport unnecessarily restricts user zoom behavior
maximum-scale=1.0 is present in the viewport declaration. Modern mobile accessibility should not impose an artificial maximum zoom scale.
Action: simplify viewport to width=device-width, initial-scale=1.
I3 — Main landmark uses redundant legacy ARIA
<div id="main" role="main"> works, but a semantic <main id="main"> is clearer and removes unnecessary ARIA.
Action: replace the wrapper with <main> while preserving the existing ID and classes.
I4 — Decorative CRT overlay sits at very high z-index
body:before uses z-index: 999. It has pointer-events: none, so it does not intercept clicks, but it can visually interfere with focus indicators and text clarity.
Action: ensure focus indicators and skip-link presentation render above the decorative layer, and disable the layer under reduced motion/high-sensitivity presentation where appropriate.
I5 — Terminal interaction is discoverable visually but has weak assistive feedback
Terminal output changes dynamically after commands, but the output region is not identified as a live/status region. A screen-reader user may not be informed when command output changes.
Action: use a restrained live-region strategy for terminal output or explicitly treat the terminal as decorative/optional. Avoid turning every line into noisy announcements.
I6 — Heading presentation forces uppercase site-wide
All h1–h6 are visually transformed to uppercase and carry relatively wide letter spacing. This supports the retro identity but can reduce scanning/readability, especially for long headings.
Action: retain the retro treatment selectively for structural/interface headings; reduce forced uppercase/letter spacing for long-form article headings and subordinate content where readability benefits.
Refinements
R1 — Duplicate canonical link generation
default.html emits a canonical link directly and _includes/meta.html emits another canonical link. This is not primarily an accessibility defect, but it is unnecessary head duplication.
Action: keep one canonical implementation, preferably the absolute_url version in meta.html.
R2 — Google Fonts dependency should fail gracefully
The site loads JetBrains Mono from Google Fonts. The CSS font stack should remain fully usable if that request is blocked or slow.
Action: verify fallback stacks and avoid layout assumptions that depend on the webfont loading.
R3 — Navigation density deserves narrow-screen review
Seven primary navigation buttons are rendered in the masthead. Mobile rules allow wrapping, but the density can still dominate the first viewport.
Action: evaluate hierarchy in EI-6.4 before introducing a hamburger menu. Prefer a simple resilient HTML solution over JavaScript navigation unless testing demonstrates a need.
R4 — Decorative status bar creates repeated nonessential content
DIALING, NODE 80, SYSOP, and ANSI ON contribute strongly to identity but also add repeated chrome.
Action: retain if it remains visually subordinate; consider aria-hidden="true" for purely decorative status labels after confirming no meaningful information is lost.
EI-6 implementation backlog
EI-6.2
- improve long-form heading readability
- review article measure and spacing
- distinguish interface typography from reading typography
- verify font fallbacks
EI-6.3
- add skip link
- add
:focus-visiblesystem - remove maximum zoom restriction
- convert main wrapper to semantic
<main> - implement reduced-motion behavior
- improve terminal assistive behavior
- validate narrow-screen navigation
EI-6.4
- evaluate seven-item primary navigation hierarchy
- ensure History, The Loudmouth, subjects, archive, and portfolio remain discoverable without crowding primary navigation
- preserve Writing rather than reintroducing Blog
EI-6.5
- audit image alt text contextually rather than enforcing filename-based text
- distinguish scans/artifacts from decorative imagery
- retain privacy/media exclusions established in EI-1
EI-6.6
Automate only objective invariants. Strong candidates:
<html lang>remains present- viewport remains zoom-friendly
- skip link and main target remain present
- reduced-motion CSS remains present
- primary navigation keeps an accessible label
- known accessibility regressions are rejected
Do not attempt to automate subjective alt-text quality or visual hierarchy with simplistic string checks.
Decision
EI-6.1 is complete. No architectural blocker prevents implementation. The highest-value next work is EI-6.2 and EI-6.3: improve reading hierarchy while immediately correcting keyboard, zoom, semantic-main, and reduced-motion issues.