Skip to content
Leader

What's new

Every release of the theme, newest first.

Changelog

All notable changes to this theme are documented here. The format follows Keep a Changelog, and the theme follows Semantic Versioning: your licence covers every release within the major version you bought.

[1.4.0] - 2026-10-17

Added

  • Numbered equations: \label{…} in a display formula numbers it, and \eqref{…} / \ref{…} link back to it, even from earlier in the entry.
  • <Theorem> for theorems, lemmas, propositions, corollaries, definitions, examples, remarks and proofs in .mdx entries, numbered per page in CSS.
  • Copying a formula copies its LaTeX source (KaTeX copy-tex, loaded only on pages with math).
  • See the numbered equation in the demo: Why the queue got expensive.
  • Demo builds get a What’s new page (this changelog, with links to the demo pages that show each feature), linked from the demo bar. Buyer builds are unchanged.

[1.3.0] - 2026-10-17

Added

  • Math in notes, product pages and author pages: $…$ inline and $$…$$ on lines of their own, set with KaTeX at build time (no client JavaScript). Chemical equations work through mhchem (\ce{…}). Only a page with math loads the KaTeX stylesheet and fonts. If an entry has two dollar amounts in one paragraph ($20 and $30), the text between them now renders as a formula: escape them as \$20. See it in the demo: Why the queue got expensive.

[1.2.1] - 2026-10-14

Added

  • The demo’s own pages (Pro): /docs serves the theme’s docs/ folder, and a “Theme” group in the footer links it with the pages that show what Pro adds. Footer groups now print their titles. They appear only on the theme’s demo build (THEME_DEMO=1): your build has neither, so there is nothing to delete.

Fixed

  • With analytics set to GA4, gtag() is now on window, so your own events can call it (it was a function local to the snippet).
  • Chinese and Japanese are counted by character for the reading time; a sentence without spaces used to count as one word.

[1.2.0] — 2026-09-28

Added

  • Editions and prices for a product you sell (Pro). A work file’s offers prints as a price list on the product page — name, leader, price in mono, then Buy and Demo as text links — and as free edition · from $29 in the shelf row. The page also publishes a schema.org Product with one Offer per edition, and its Markdown twin lists them. The currency is work.currency in src/config.ts.
  • cover (Pro): one screenshot at the top of a product page, for things a buyer has to see. Rows stay type only.
  • view: 'gallery' on a category (Pro): that category’s page prints its products as cover plates, each with the usual row under it — title, leader, price. /work and the home shelf stay rows. The demo turns it on for data.
  • offersNote (Pro): one line of terms under the editions. A product page also prints the newest changelog version in its metadata line, links back to its gallery when its category has one, and uses its cover as the share card.

Fixed

  • The theme switcher no longer sticks on Light where the browser blocks storage (cookies blocked, some private modes). It read the saved choice back on every click, so each click started again from System; it now keeps the choice in the page and only saves it.

[1.1.0] — 2026-09-28

Added

  • The theme’s own words are in src/i18n/: en.ts, and ko.ts for a site in Korean. Set site.locale and every heading, label, count and date follows. A dictionary is typed against en.ts, so a missing key fails the build.

  • A second language (Pro). With features.i18nRouting on, products and notes filed under src/content/work/<code>/ and src/content/notes/<code>/ are that language’s editions, served under /<code>/ with their own home, shelf, notes, category pages and search. The footer lists the other languages and each translated page is announced with hreflang. The demo ships a Korean edition.

  • The letter (Pro): /letter, with the form, the line that says what the letter is and a row to the past issues; a Letter link in the footer and one row at the foot of every note; and /letter/sent and /letter/confirmed, set as Buttondown’s two return addresses so a reader never leaves the site’s own pages to subscribe.

Changed

  • The newsletter form is no longer in the footer of every page (Pro). It lives on /letter, and posts in the same tab.

  • site.locales is gone (Pro); the languages are i18n.locales, beside the site line and category names in each language. The home, shelf, notes and category routes moved to src/pages/[...lang]/. Addresses in the default language are unchanged.

[1.0.0] — 2026-09-23

Added

  • A ten-minute sample note with a figure in it, so the shelf shows a long piece and an illustrated one as well as the short notes. The figure is an inlined SVG drawn in the theme’s own tokens, which is how a chart follows the palette into dark mode; the pattern is written up in docs/content.md.
  • docs/customization.md says what the accents measure under colour blindness, and why the category name is always printed beside the colour.
  • /llms.txt (Pro): the whole site as one Markdown index, in the form llmstxt.org describes — every product and every note as a line with its address and its summary.
  • A Markdown twin for every page (Pro): append .md to any address and you get the Markdown it was written in, with front matter naming its category and dates. /work/cusp.md, /index.md for the front page. Static files; no header negotiation.
  • Products and notes can be filed in folders. notes/2026/04/one-tab.md is /notes/2026/04/one-tab, which is what a site moving from dated addresses needs.
  • Task lists are set with the square marker dropped and the checkbox in ink rather than the browser’s blue, which would read as a fifth category colour.

Fixed

  • A product or note in a subfolder failed the build with Missing parameter: slug. Both routes are now rest parameters.
  • A GFM task list wrote a checkbox with no label of its own, which an accessibility audit fails and which left the words beside the box outside the control. Each item’s contents are now wrapped in a <label>.
  • A paginated /notes carried no rel="prev" or rel="next", so the pages read as unrelated documents with almost the same title.

Changed

  • The colour tokens are lifted out of the stylesheets in one place, src/lib/palette.js. The contrast gate and the share card had a copy of the same parser each.
  • The CI workflow that comes with the theme runs the gates on every push and pull request and nothing else. The weekly Lighthouse schedule and the path filter it used to carry were ours, not yours, and they would have spent your Actions minutes.
  • CLAUDE.md, which is a symlink to AGENTS.md, is no longer written into the release snapshot. An unzip that ignores the symlink bit left a broken file where the guide is.

[0.9.0] — 2026-09-23

First snapshot. The theme is complete; the live demo, the screenshots and the purchase link follow in 1.0.0.

Added

  • The leader rule: one ruled row per item, the product or note on the left, its category on the right in that category’s colour, a hairline joining them that thickens into the accent on hover. Every list on the site is that one row. Switch it off with work.leaderRule: 'none'.
  • Categories as the first axis: four of them in src/config.ts, one accent each, carried from the index row to the product page to every note filed underneath.
  • Pages: home, work shelf, product, notes with pagination, note, category, tag, archive, author, search, about, contact, privacy, terms, 404.
  • Content collections for work, notes and authors, typed with zod in src/content.config.ts, with eight sample products and twelve sample notes.
  • Light and dark mode through light-dark() tokens and a three-state switcher (system, light, dark). Every token pair is checked against WCAG AA by pnpm check:contrast.
  • Second axis (Pro): tags across products and notes at /tag/<slug>, series printed at the foot of every note in a run, author pages, and /archive as one timeline.
  • Reading (Pro): a contents rail set as leader rules, related notes, callouts in MDX, footnotes, and a copy button on every code block.
  • Finding (Pro): a Pagefind index and /search, status and category filters on /work built from radio inputs and no script, per-category RSS feeds, and a changelog per product.
  • Colour presets (Pro): graph, kraft, ledger and signal beside the default, each one contrast-checked in both modes, each turned on by one @import.
  • Font pairings (Pro): quarto (Spectral, IBM Plex Mono) and jobbing (Jost, JetBrains Mono) as whole alternatives to the shipped pair, swapped in one line of src/fonts.ts.
  • Share cards (Pro): one 1200×630 PNG per product and note, drawn at build time from the same tokens the site uses, with the leader rule running out to the category.
  • Integrations: analytics (Plausible, GA4, Umami), a contact form that posts to any static form service, a newsletter line in the footer (Buttondown, Pro) and comments from GitHub Discussions (giscus, Pro). Nothing third-party is loaded until it is configured.
  • RSS feed, sitemap, robots.txt, canonical URLs, Open Graph, Twitter cards and JSON-LD.
  • AGENTS.md for Claude Code, Cursor and other agents, with CLAUDE.md pointing at it.