build:og was running before eleventy, then eleventy.before ran it again —
two full generation passes per build. Since eleventy.before handles OG
generation, the standalone pre-step is redundant.
Also fix build:og path: was passing .cache (parent dir) which after the
ogDir rename wrote PNGs to the wrong location. Now uses OG_CACHE_DIR env
var with .cache/og as fallback, matching eleventy.config.js behaviour.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Switch from KittyGiraudel's shortcode-based footnotes plugin to
markdown-it-footnote, which handles standard [^1] Markdown syntax
used in Obsidian notes. Remove the {% footnotes %} shortcode from
the post layout as the plugin renders footnotes automatically.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Registers the KittyGiraudel footnotes plugin and adds {% footnotes %}
to post.njk below the article content.
Usage in content:
{% footnoteref "id" "Footnote text here" %}anchor text{% endfootnoteref %}
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Install @fontsource/lora and serve latin/latin-ext woff2 files
(weights 400/700, normal + italic) via Eleventy passthrough copy
- Lora now leads the serif font stack in Tailwind and critical CSS,
with Iowan Old Style / Palatino as system-font fallbacks
- Light-mode background lightened: #fbf1c7 → #fefcf0 (still warm,
noticeably less yellow)
- Article prose bumped: post.njk prose-lg, page.njk prose-xl
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Adds @kevingimbel/eleventy-plugin-mermaid so mermaid fenced code blocks
render as interactive diagrams in the browser.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Adds {% unfurl "URL" %} shortcode that renders any URL as a rich card
with OpenGraph metadata (title, description, image, favicon). Uses
unfurl.js locally — no external API dependency. Results cached for 1
week in .cache/unfurl/. Also fixes Mastodon embed server config
(mstdn.social → indieweb.social).
- Add time-difference web component for relative dates
- Add @zachleat/table-saw for responsive tables
- Add webmention facepile styling with bookmarks support
- Add OG image thumbnails to post navigation
- Add @11ty/is-land for lazy widget hydration
- Wrap sidebar widgets in is-land for deferred loading
- Lazy-load webmention avatars with is-land
- Add @zachleat/filter-container for blog archive filtering
- Add posting frequency sparkline to blog header
- Inline critical CSS and defer full stylesheet loading
Uses Satori + @resvg/resvg-js to create branded 1200x630 social
preview cards at build time. Cards show post title, type badge,
date, and site name on a dark background with blue accent.
Generated images are cached in .cache/og/ (persistent on Cloudron)
and passthrough-copied to the output. Posts with photos continue
using their own images. Untitled posts (notes) use body text.
Uses markdown-it-anchor to generate linkable IDs on h2-h4 headings.
Headings become clickable links with a subtle # indicator on hover.
Includes scroll-margin-top so anchored headings don't hide behind
the sticky header.
Integrates @11ty/eleventy-plugin-syntaxhighlight (PrismJS) for
build-time syntax highlighting of fenced code blocks. Includes
a custom GitHub-inspired theme with dark mode support (.dark class).
All existing articles with triple-backtick code blocks will
automatically get highlighting on next Eleventy rebuild.
Also fixes overflow-x: hidden on .prose/.e-content that was
clipping scrollable code blocks — changed to overflow-x: clip.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Strip personal data from templates so the theme ships clean for any
deployer. Collection pages now use generatePageOnEmptyData so empty
post types show encouraging placeholders instead of 404s. Navigation
is conditional on enabled post types and installed plugins. Sidebar
widgets split into individual components with plugin-aware visibility.
Slashes page explains required plugins for root-level page creation.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add Pagefind indexing after each Eleventy build with a search page at
/search/. Indexes main content only (sidebars excluded), supports dark
mode theming and URL query parameters (?q=).
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>