Skip to content

Add CI checks, pin Ruby, fix OG fallback, and improve accessibility#4

Merged
jansroka merged 1 commit into
mainfrom
improve-site-ci-a11y-og
Jul 8, 2026
Merged

Add CI checks, pin Ruby, fix OG fallback, and improve accessibility#4
jansroka merged 1 commit into
mainfrom
improve-site-ci-a11y-og

Conversation

@jansroka

@jansroka jansroka commented Jul 8, 2026

Copy link
Copy Markdown
Contributor

Brings the site up to date by closing gaps between the tooling that was already configured and what actually runs, plus a few correctness, accessibility, and SEO fixes. Scoped to the top recommendations from a repo review — no redesign, no dependency bumps (deps were updated recently), and no image files changed (those will be handled separately).

What changed

1. CI actually validates changes now

html-proofer, rubocop, and prettier were all configured but nothing ran them — the only workflow builds and deploys on push to main. Added .github/workflows/ci.yml that runs on every PR: builds the site, then checks internal links, Ruby lint, and formatting. This is the safety net the repo was missing.

2. Ruby version pinned

No .ruby-version existed, while CI hardcoded 3.3 — local and CI could silently diverge. Added .ruby-version as the single source of truth and removed the hardcoded value from the deploy workflow (ruby/setup-ruby reads the file automatically).

3. Fixed broken social-share image

head.html referenced /assets/images/og-image-default.png as the default OG/Twitter image — the file does not exist, so every shared link without an explicit image rendered a broken preview. The default is now driven by a new site.og_image_default config value (empty for now); when unset, no image tag is emitted (no broken reference) and the Twitter card degrades from summary_large_image to summary. A proper image can be dropped in later by setting one config value.

4. Removed dead embeds/config

  • Deleted the deprecated Twitter follow-button <iframe> (third-party request on every page, renders empty).
  • Removed the unused footer.links block from _config.yml (six platforms, all URLs commented out, referenced nowhere).

5. Accessibility + SEO baseline

  • Added a skip-to-content link and wrapped page content in <main id="main"> (both layouts).
  • Gave the footer logo a real alt (was empty).
  • Added rel="noopener" to all target="_blank" links.
  • Added robots.txt pointing at the generated sitemap.
  • .gitignore now covers .DS_Store.

Verification

Prettier and YAML validation pass locally. A full Jekyll build could not be run in the authoring environment (offline, gems not installed) — the build and link-check are therefore verified by the new CI workflow on this PR. Please confirm CI is green before merging.

Note: README.MD includes a small pre-existing local edit (hosting note + whitespace trim).

🤖 Generated with Claude Code

…ility

Brings the site up to date by closing gaps between configured tooling and
what is actually enforced, plus a few correctness and a11y fixes.

- ci: add pull_request workflow that builds the site and runs html-proofer,
  RuboCop and Prettier — none of these were gating changes before (the
  existing workflow only builds and deploys on push to main).
- ci: pin Ruby via .ruby-version (single source of truth) and drop the
  hardcoded ruby-version from the deploy workflow.
- seo/social: the default Open Graph/Twitter image referenced a file that
  does not exist, producing broken share previews. Drive it from a new
  site.og_image_default config value (empty by default) so no broken tag is
  emitted; the card degrades to summary when unset. Images to be added later.
- cleanup: remove the deprecated Twitter follow-button iframe and the unused
  footer.links block from _config.yml.
- a11y: add a skip-to-content link and wrap page content in <main id="main">;
  give the footer logo a real alt text.
- security: add rel="noopener" to all target="_blank" links.
- seo: add robots.txt pointing at the generated sitemap.
- repo hygiene: gitignore .DS_Store.

Note: a full local Jekyll build could not be run in this environment (offline,
gems not installed), so the Liquid/build is verified by the new CI workflow on
this PR rather than locally. Prettier and YAML validation pass locally.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
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