Skip to content

v0.2.0 — search, i18n, comments, and a verified 100

Latest

Choose a tag to compare

@kpab kpab released this 03 Aug 06:14

The first release since the initial cut, and a large one — search, pagination, generated OG images, view transitions, opt-in comments, and localizable UI strings.

Because Astro Keel is a template, upgrading means porting the changes you want into your own copy. Every entry below names the files it touches.

Live demo: https://kpab.github.io/astro-keel/

Added

  • Static search at /search, powered by Pagefind and indexed at build time via a postbuild script — zero backend.
  • Pagination on the blog index and tag archives, 10 posts per page (src/components/Pagination.astro).
  • Auto-generated Open Graph images for every post and work, rendered at build time with satori + sharp (src/pages/og/[collection]/[slug].png.ts).
  • Reading time on blog posts, via a remark plugin (remark-reading-time.mjs).
  • View Transitions<ClientRouter /> for soft navigation, with the theme toggle, Pagefind, and code-copy buttons re-initialized on astro:page-load / astro:after-swap.
  • Localizable UI strings — every string the theme renders comes from a typed dictionary in src/i18n/, selected by a new SITE.locale. One line also drives <html lang>, og:locale, Intl date formatting, and the RSS <language> element. en and ja ship with the theme.
  • Optional Giscus comments on blog posts (GISCUS in src/consts.ts), off by default — a disabled build emits no Giscus markup, styles, or script at all. When enabled it lazy-loads, follows the light/dark toggle live, and falls back to a Discussions link if the embed never appears.
  • JSON-LD structured dataWebSite on the home page, BlogPosting + BreadcrumbList on posts.
  • Copy buttons on code blocks, previous / next post navigation, and a related posts section matched on shared tags.
  • Configurable social links in the footer via SOCIAL_LINKS, rendered as inline SVG icons.
  • Custom 404 page, sticky top bar on scroll, a default OG image, work thumbnails, and a hero image for the sample posts.
  • Community health files — issue forms, a pull request template, CONTRIBUTING.md, and a changelog.

Changed

  • minutesRead is now a number, not a preformatted "3 min read" string. If you read remarkPluginFrontmatter.minutesRead in a template of your own, route it through the readingTime() helper in src/i18n/. The Content Layer caches rendered frontmatter, so delete node_modules/.astro/ once after upgrading — clearing the repo-root .astro/ is not enough.
  • Site identity is centralized in src/consts.ts; content images recompressed; README rewritten with a badge header and light/dark previews.

Fixed

  • Filled buttons now pass WCAG AA in dark mode. The dark-scheme accent is light, so near-white label text only reached a 2.53:1 contrast ratio. A new per-scheme --color-on-accent token fixes it — every demo page now scores 100 / 100 / 100 / 100 in Lighthouse.
  • Mobile theme-toggle placement, section padding behind the works list and about ledger, and hero sizing so the call to action stays above the fold.

Getting started:

npm create astro@latest -- --template kpab/astro-keel

Full changelog: https://github.com/kpab/astro-keel/blob/main/CHANGELOG.md#020---2026-08-03
Diff: v0.1.0...v0.2.0