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 apostbuildscript — 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
remarkplugin (remark-reading-time.mjs). - View Transitions —
<ClientRouter />for soft navigation, with the theme toggle, Pagefind, and code-copy buttons re-initialized onastro:page-load/astro:after-swap. - Localizable UI strings — every string the theme renders comes from a typed dictionary in
src/i18n/, selected by a newSITE.locale. One line also drives<html lang>,og:locale,Intldate formatting, and the RSS<language>element.enandjaship with the theme. - Optional Giscus comments on blog posts (
GISCUSinsrc/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 data —
WebSiteon the home page,BlogPosting+BreadcrumbListon 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
minutesReadis now a number, not a preformatted"3 min read"string. If you readremarkPluginFrontmatter.minutesReadin a template of your own, route it through thereadingTime()helper insrc/i18n/. The Content Layer caches rendered frontmatter, so deletenode_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-accenttoken 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-keelFull changelog: https://github.com/kpab/astro-keel/blob/main/CHANGELOG.md#020---2026-08-03
Diff: v0.1.0...v0.2.0