Skip to content

Accessibility pass, plus /now, /uses and the nav separator - #47

Merged
leinss merged 2 commits into
releasefrom
feature/deps-ts
Aug 26, 2026
Merged

Accessibility pass, plus /now, /uses and the nav separator#47
leinss merged 2 commits into
releasefrom
feature/deps-ts

Conversation

@leinss

@leinss leinss commented Aug 26, 2026

Copy link
Copy Markdown
Owner

35 of 82 pages had no h1 at all. PageLayout takes a title but only puts it in
<head>, so four templates rendered their page title in a styled div and the
document had no top-level heading: the two dynamic routes, education and
social. A screen reader user landing on a project page got a document whose
first heading was an h2 belonging to the newsletter widget.

Promotes the existing title element from div to h1 rather than adding a
second heading. Zero visual change, because Tailwind preflight resets heading
font-size and margin and every class is carried over. Verified in the browser
against the built site: the promoted h1 computes to font-size 18px, weight 600,
margin-top 0, which is what the div rendered.

Also adds alt text to the one image that had none, on the Farcaster project
page. That image is the only content of a link to a YouTube video, so with no
alt the link had no accessible name either.

Not changed, having checked: twelve other image-only links were flagged by a
first pass and are fine. An img with alt text names its wrapping link, and they
all carry alt="demo image". That alt is uninformative and worth improving as
content, but it is not a missing name.

Test plan:

  • pnpm run lint and pnpm run build pass, 82 pages
  • internal link check still 1760 links, none broken
  • re-audit: pages with no h1 went 35 -> 0, images without alt 1 -> 0,
    genuinely unnamed links 1 -> 0
  • computed style of a promoted h1 read from the rendered page, not assumed

leinss added 2 commits August 26, 2026 16:02
35 of 82 pages had no h1 at all. PageLayout takes a `title` but only puts it in
`<head>`, so four templates rendered their page title in a styled `div` and the
document had no top-level heading: the two dynamic routes, education and
social. A screen reader user landing on a project page got a document whose
first heading was an h2 belonging to the newsletter widget.

Promotes the existing title element from `div` to `h1` rather than adding a
second heading. Zero visual change, because Tailwind preflight resets heading
font-size and margin and every class is carried over. Verified in the browser
against the built site: the promoted h1 computes to font-size 18px, weight 600,
margin-top 0, which is what the div rendered.

Also adds alt text to the one image that had none, on the Farcaster project
page. That image is the only content of a link to a YouTube video, so with no
alt the link had no accessible name either.

Not changed, having checked: twelve other image-only links were flagged by a
first pass and are fine. An img with alt text names its wrapping link, and they
all carry `alt="demo image"`. That alt is uninformative and worth improving as
content, but it is not a missing name.

Test plan:
- [x] `pnpm run lint` and `pnpm run build` pass, 82 pages
- [x] internal link check still 1760 links, none broken
- [x] re-audit: pages with no h1 went 35 -> 0, images without alt 1 -> 0,
      genuinely unnamed links 1 -> 0
- [x] computed style of a promoted h1 read from the rendered page, not assumed
Three things, all visible on the live site.

The nav rendered "now uses / work / projects". The separator was hardcoded
between the fixed entries only, while the static pages were mapped with
nothing between them, so any two of them ran together. Emitting it before
every mapped entry except the first is correct for one page or five.

/now did not mention the day job at all. It described the apps and the
consultancy and stopped, so the single most substantial thing on the page was
missing: senior backend engineer at Gnosis working on Circles, owning the
backend services and the platform under them. It now leads with that and
carries the figures already published on the CV, then the apps, then the
consulting. Also dated June and now two and a half months stale; refreshed,
and TobiBoard's F-Droid repository is linked because it is a thing a reader
can install.

/uses carried three `TODO(Tobias)` comments shipped in the content and
described a stack far smaller than the real one. It listed a Mac, zsh, fnm and
Astro, and omitted the entire infrastructure side, which is the professionally
interesting half. Now covers the terminal tooling, the mobile and distribution
stack including the self-hosted F-Droid repository, and the self-hosted
infrastructure: Ansible, Docker and Traefik, the Prometheus and Grafana and
Loki and Alertmanager stack, Tailscale, Borg, PostgreSQL with replication.

Deliberately not listed there, and the page says so: the identity,
DNS-filtering and intrusion-detection components. Naming those is a small
favour to somebody scanning and no favour to a reader.

The editor line is gone rather than guessed. One of the TODOs asked to confirm
it and I would only have invented an answer.

Test plan:
- [x] `pnpm run lint` and `pnpm run build` pass, 82 pages
- [x] internal link check passes, none broken
- [x] nav renders "now / uses / work / projects" in the built HTML
- [x] both pages served and screenshotted, headings h1 then h2 throughout
- [x] no TODO comments left in staticPages
@leinss leinss changed the title Give every page an h1, and name the one unnamed link Accessibility pass, plus /now, /uses and the nav separator Aug 26, 2026
@leinss
leinss merged commit b59ec89 into release Aug 26, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant