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.mdxentries, 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):
/docsserves the theme’sdocs/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 onwindow, 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
offersprints as a price list on the product page — name, leader, price in mono, then Buy and Demo as text links — and asfree edition · from $29in the shelf row. The page also publishes a schema.orgProductwith oneOfferper edition, and its Markdown twin lists them. The currency iswork.currencyinsrc/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./workand the home shelf stay rows. The demo turns it on fordata.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, andko.tsfor a site in Korean. Setsite.localeand every heading, label, count and date follows. A dictionary is typed againsten.ts, so a missing key fails the build. -
A second language (Pro). With
features.i18nRoutingon, products and notes filed undersrc/content/work/<code>/andsrc/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 withhreflang. 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; aLetterlink in the footer and one row at the foot of every note; and/letter/sentand/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.localesis gone (Pro); the languages arei18n.locales, beside the site line and category names in each language. The home, shelf, notes and category routes moved tosrc/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.mdsays 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
.mdto any address and you get the Markdown it was written in, with front matter naming its category and dates./work/cusp.md,/index.mdfor the front page. Static files; no header negotiation. - Products and notes can be filed in folders.
notes/2026/04/one-tab.mdis/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
/notescarried norel="prev"orrel="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 toAGENTS.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 bypnpm 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/archiveas 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/workbuilt from radio inputs and no script, per-category RSS feeds, and a changelog per product. - Colour presets (Pro):
graph,kraft,ledgerandsignalbeside the default, each one contrast-checked in both modes, each turned on by one@import. - Font pairings (Pro):
quarto(Spectral, IBM Plex Mono) andjobbing(Jost, JetBrains Mono) as whole alternatives to the shipped pair, swapped in one line ofsrc/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.mdfor Claude Code, Cursor and other agents, withCLAUDE.mdpointing at it.