<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>Manuele</title>
  <link href="https://d3strukt0r.dev/atom.xml" rel="self"/>
  <link href="https://d3strukt0r.dev/"/>
  <updated>2026-05-15T17:17:34.810Z</updated>
  <id>https://d3strukt0r.dev/</id>
  <author><name>Manuele</name><email>gh-contact@d3st.dev</email></author>
  <entry>
    <title>Blog feature reference</title>
    <link href="https://d3strukt0r.dev/2026/04/23/features"/>
    <updated>2026-04-23T00:00:00.000Z</updated>
    <id>https://d3strukt0r.dev/2026/04/23/features</id>
    <content type="html">&lt;p&gt;A single post that exercises every feature the blog pipeline supports. Everything below renders at build time via &lt;code&gt;marked&lt;/code&gt; plus the custom extensions in &lt;code&gt;app/vite/plugins/md-frontmatter.ts&lt;/code&gt;. Use this as a cheat sheet when writing future posts — if something on this page renders wrong on the deployed site, the renderer regressed, not the content.&lt;/p&gt;
&lt;h2&gt;Table of contents&lt;/h2&gt;
&lt;p&gt;The &lt;code&gt;{{ toc }}&lt;/code&gt; token expands to a bullet list of the post&amp;#39;s &lt;code&gt;h2&lt;/code&gt;–&lt;code&gt;h6&lt;/code&gt; headings:&lt;/p&gt;
&lt;p&gt;{{ toc }}&lt;/p&gt;
&lt;h2&gt;Headings&lt;/h2&gt;
&lt;p&gt;Post titles come from frontmatter (&lt;code&gt;title&lt;/code&gt;), so the body starts at &lt;code&gt;h2&lt;/code&gt;. Use &lt;code&gt;h3&lt;/code&gt;/&lt;code&gt;h4&lt;/code&gt; for subsections — anything deeper probably means the section should be split into its own post.&lt;/p&gt;
&lt;h3&gt;This is an h3&lt;/h3&gt;
&lt;h4&gt;And this an h4&lt;/h4&gt;
&lt;h2&gt;Text formatting&lt;/h2&gt;
&lt;p&gt;Standard emphasis: &lt;strong&gt;bold&lt;/strong&gt;, &lt;em&gt;italic&lt;/em&gt;, &lt;em&gt;&lt;strong&gt;both&lt;/strong&gt;&lt;/em&gt;, &lt;del&gt;strikethrough&lt;/del&gt;. Inline &lt;code&gt;code&lt;/code&gt; uses backticks.&lt;/p&gt;
&lt;p&gt;Raw inline HTML passes through for semantic extras: &lt;mark&gt;highlight&lt;/mark&gt;, &lt;abbr title=&quot;HyperText Markup Language&quot;&gt;HTML&lt;/abbr&gt;, &lt;cite&gt;— Mark Otto&lt;/cite&gt;, &lt;del&gt;deleted&lt;/del&gt;, &lt;ins&gt;inserted&lt;/ins&gt;, H&lt;sub&gt;2&lt;/sub&gt;O, E = mc&lt;sup&gt;2&lt;/sup&gt;.&lt;/p&gt;
&lt;h2&gt;Links&lt;/h2&gt;
&lt;p&gt;Plain markdown &lt;code&gt;[text](url)&lt;/code&gt; works for every link type. Internal links that start with &lt;code&gt;/&lt;/code&gt; are intercepted at runtime by &lt;code&gt;useInternalLinkNav&lt;/code&gt; and navigate through React Router — no full page reload.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;External: &lt;a href=&quot;https://reactrouter.com&quot;&gt;React Router docs&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Internal route: [blog index]({{ urls.blog }}), [CV page]({{ urls.cv }}).&lt;/li&gt;
&lt;li&gt;Static artifact: [RSS feed]({{ urls.feed }}), [404 page]({{ urls.not_found }}).&lt;/li&gt;
&lt;li&gt;Reference-style: see the &lt;a href=&quot;https://marked.js.org&quot;&gt;marked docs&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Autolink: &lt;a href=&quot;https://d3strukt0r.dev&quot;&gt;https://d3strukt0r.dev&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;In-page anchor: &lt;a href=&quot;#code&quot;&gt;jump to code&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Reusable references&lt;/h3&gt;
&lt;p&gt;Reference-style links let you define a URL once and reuse it across the post. Define the label anywhere (convention: grouped at the bottom), then cite it with &lt;code&gt;[text][label]&lt;/code&gt;:&lt;/p&gt;
&lt;p&gt;Check out the &lt;a href=&quot;https://marked.js.org&quot;&gt;marked docs&lt;/a&gt; for more info on how to get the most out of &lt;a href=&quot;https://marked.js.org&quot;&gt;marked&lt;/a&gt;. File all bugs/feature requests at &lt;a href=&quot;https://github.com/markedjs/marked&quot;&gt;marked&amp;#39;s GitHub repo&lt;/a&gt;. If you have questions, you can ask them on the &lt;a href=&quot;https://github.com/markedjs/marked/discussions&quot;&gt;marked discussions&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Site variables&lt;/h2&gt;
&lt;p&gt;Post content references central data through &lt;code&gt;{{ path.to.key }}&lt;/code&gt; — expanded against &lt;code&gt;content/site.yml&lt;/code&gt; at build. Keeps URLs, handles, and identity strings out of prose.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Name: {{ name }}&lt;/li&gt;
&lt;li&gt;Site URL: {{ url }}&lt;/li&gt;
&lt;li&gt;Repository: {{ repo }}&lt;/li&gt;
&lt;li&gt;Contact: {{ socials.email }}&lt;/li&gt;
&lt;li&gt;GitHub: {{ socials.github }}&lt;/li&gt;
&lt;li&gt;Built on: {{ now }}&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Router paths are derived from &lt;code&gt;app/routes.ts&lt;/code&gt; and exposed as &lt;code&gt;{{ urls.&amp;lt;route-file-basename&amp;gt; }}&lt;/code&gt; — e.g. &lt;code&gt;{{ urls.home }}&lt;/code&gt; → &lt;code&gt;{{ urls.home }}&lt;/code&gt;, &lt;code&gt;{{ urls.blog }}&lt;/code&gt; → &lt;code&gt;{{ urls.blog }}&lt;/code&gt;. Anything under the &lt;code&gt;urls:&lt;/code&gt; section of &lt;code&gt;site.yml&lt;/code&gt; (static artifacts like &lt;code&gt;feed&lt;/code&gt; and &lt;code&gt;not_found&lt;/code&gt;) wins over the router-derived map.&lt;/p&gt;
&lt;h2&gt;Lists&lt;/h2&gt;
&lt;p&gt;Unordered:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;first item&lt;/li&gt;
&lt;li&gt;second item&lt;ul&gt;
&lt;li&gt;nested once&lt;/li&gt;
&lt;li&gt;also nested&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;third item&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ordered:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;one&lt;/li&gt;
&lt;li&gt;two&lt;/li&gt;
&lt;li&gt;three&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;Blockquote&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;The best code is no code at all. Every new line of code you willingly bring into the world is code that has to be debugged, code that has to be read and understood, code that has to be supported.&lt;/p&gt;
&lt;p&gt;— Jeff Atwood&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;Horizontal rule&lt;/h2&gt;
&lt;p&gt;Three or more hyphens on their own line render as a dashed divider:&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;Code&lt;/h2&gt;
&lt;p&gt;Inline snippets use backticks: &lt;code&gt;marked.use()&lt;/code&gt; registers an extension.&lt;/p&gt;
&lt;p&gt;Fenced without a language — plain preformatted:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ pnpm run build
$ pnpm run preview
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Fenced with a language — &lt;a href=&quot;https://shiki.style&quot;&gt;shiki&lt;/a&gt; highlights at build time using real TextMate grammars, with dual light/dark themes that follow the site&amp;#39;s theme toggle:&lt;/p&gt;
&lt;pre class=&quot;shiki shiki-themes github-light-default github-dark-default&quot; style=&quot;--shiki-light:#1f2328;--shiki-dark:#e6edf3;--shiki-light-bg:#ffffff;--shiki-dark-bg:#0d1117&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#CF222E;--shiki-dark:#FF7B72&quot;&gt;export&lt;/span&gt;&lt;span style=&quot;--shiki-light:#CF222E;--shiki-dark:#FF7B72&quot;&gt; function&lt;/span&gt;&lt;span style=&quot;--shiki-light:#8250DF;--shiki-dark:#D2A8FF&quot;&gt; slugify&lt;/span&gt;&lt;span style=&quot;--shiki-light:#1F2328;--shiki-dark:#E6EDF3&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--shiki-light:#953800;--shiki-dark:#FFA657&quot;&gt;text&lt;/span&gt;&lt;span style=&quot;--shiki-light:#CF222E;--shiki-dark:#FF7B72&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--shiki-light:#0550AE;--shiki-dark:#79C0FF&quot;&gt; string&lt;/span&gt;&lt;span style=&quot;--shiki-light:#1F2328;--shiki-dark:#E6EDF3&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;--shiki-light:#CF222E;--shiki-dark:#FF7B72&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--shiki-light:#0550AE;--shiki-dark:#79C0FF&quot;&gt; string&lt;/span&gt;&lt;span style=&quot;--shiki-light:#1F2328;--shiki-dark:#E6EDF3&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#CF222E;--shiki-dark:#FF7B72&quot;&gt;  return&lt;/span&gt;&lt;span style=&quot;--shiki-light:#1F2328;--shiki-dark:#E6EDF3&quot;&gt; text&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#1F2328;--shiki-dark:#E6EDF3&quot;&gt;    .&lt;/span&gt;&lt;span style=&quot;--shiki-light:#8250DF;--shiki-dark:#D2A8FF&quot;&gt;toLowerCase&lt;/span&gt;&lt;span style=&quot;--shiki-light:#1F2328;--shiki-dark:#E6EDF3&quot;&gt;()&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#1F2328;--shiki-dark:#E6EDF3&quot;&gt;    .&lt;/span&gt;&lt;span style=&quot;--shiki-light:#8250DF;--shiki-dark:#D2A8FF&quot;&gt;replace&lt;/span&gt;&lt;span style=&quot;--shiki-light:#1F2328;--shiki-dark:#E6EDF3&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--shiki-light:#0A3069;--shiki-dark:#A5D6FF&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;--shiki-light:#0550AE;--shiki-dark:#79C0FF&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;--shiki-light:#CF222E;--shiki-dark:#FF7B72&quot;&gt;^&lt;/span&gt;&lt;span style=&quot;--shiki-light:#0550AE;--shiki-dark:#79C0FF&quot;&gt;\w\s-]&lt;/span&gt;&lt;span style=&quot;--shiki-light:#0A3069;--shiki-dark:#A5D6FF&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;--shiki-light:#CF222E;--shiki-dark:#FF7B72&quot;&gt;g&lt;/span&gt;&lt;span style=&quot;--shiki-light:#1F2328;--shiki-dark:#E6EDF3&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--shiki-light:#0A3069;--shiki-dark:#A5D6FF&quot;&gt;&apos;&apos;&lt;/span&gt;&lt;span style=&quot;--shiki-light:#1F2328;--shiki-dark:#E6EDF3&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#1F2328;--shiki-dark:#E6EDF3&quot;&gt;    .&lt;/span&gt;&lt;span style=&quot;--shiki-light:#8250DF;--shiki-dark:#D2A8FF&quot;&gt;replace&lt;/span&gt;&lt;span style=&quot;--shiki-light:#1F2328;--shiki-dark:#E6EDF3&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--shiki-light:#0A3069;--shiki-dark:#A5D6FF&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;--shiki-light:#0550AE;--shiki-dark:#79C0FF&quot;&gt;\s&lt;/span&gt;&lt;span style=&quot;--shiki-light:#CF222E;--shiki-dark:#FF7B72&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;--shiki-light:#0A3069;--shiki-dark:#A5D6FF&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;--shiki-light:#CF222E;--shiki-dark:#FF7B72&quot;&gt;g&lt;/span&gt;&lt;span style=&quot;--shiki-light:#1F2328;--shiki-dark:#E6EDF3&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--shiki-light:#0A3069;--shiki-dark:#A5D6FF&quot;&gt;&apos;-&apos;&lt;/span&gt;&lt;span style=&quot;--shiki-light:#1F2328;--shiki-dark:#E6EDF3&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#1F2328;--shiki-dark:#E6EDF3&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Append &lt;code&gt;linenos&lt;/code&gt; to the info string for a two-column render with a line-number gutter:&lt;/p&gt;
&lt;pre class=&quot;shiki shiki-themes github-light-default github-dark-default ta-linenos-block&quot; style=&quot;--shiki-light:#1f2328;--shiki-dark:#e6edf3;--shiki-light-bg:#ffffff;--shiki-dark-bg:#0d1117&quot; tabindex=&quot;0&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;ta-linenos&quot;&gt;1
2
3
4
5
6
7
8
9
&lt;/span&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#CF222E;--shiki-dark:#FF7B72&quot;&gt;export&lt;/span&gt;&lt;span style=&quot;--shiki-light:#CF222E;--shiki-dark:#FF7B72&quot;&gt; function&lt;/span&gt;&lt;span style=&quot;--shiki-light:#8250DF;--shiki-dark:#D2A8FF&quot;&gt; expandTemplate&lt;/span&gt;&lt;span style=&quot;--shiki-light:#1F2328;--shiki-dark:#E6EDF3&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--shiki-light:#953800;--shiki-dark:#FFA657&quot;&gt;md&lt;/span&gt;&lt;span style=&quot;--shiki-light:#CF222E;--shiki-dark:#FF7B72&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--shiki-light:#0550AE;--shiki-dark:#79C0FF&quot;&gt; string&lt;/span&gt;&lt;span style=&quot;--shiki-light:#1F2328;--shiki-dark:#E6EDF3&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--shiki-light:#953800;--shiki-dark:#FFA657&quot;&gt;vars&lt;/span&gt;&lt;span style=&quot;--shiki-light:#CF222E;--shiki-dark:#FF7B72&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--shiki-light:#953800;--shiki-dark:#FFA657&quot;&gt; Record&lt;/span&gt;&lt;span style=&quot;--shiki-light:#1F2328;--shiki-dark:#E6EDF3&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;--shiki-light:#0550AE;--shiki-dark:#79C0FF&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;--shiki-light:#1F2328;--shiki-dark:#E6EDF3&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--shiki-light:#0550AE;--shiki-dark:#79C0FF&quot;&gt;unknown&lt;/span&gt;&lt;span style=&quot;--shiki-light:#1F2328;--shiki-dark:#E6EDF3&quot;&gt;&gt;)&lt;/span&gt;&lt;span style=&quot;--shiki-light:#CF222E;--shiki-dark:#FF7B72&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--shiki-light:#0550AE;--shiki-dark:#79C0FF&quot;&gt; string&lt;/span&gt;&lt;span style=&quot;--shiki-light:#1F2328;--shiki-dark:#E6EDF3&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#CF222E;--shiki-dark:#FF7B72&quot;&gt;  return&lt;/span&gt;&lt;span style=&quot;--shiki-light:#1F2328;--shiki-dark:#E6EDF3&quot;&gt; md.&lt;/span&gt;&lt;span style=&quot;--shiki-light:#8250DF;--shiki-dark:#D2A8FF&quot;&gt;replace&lt;/span&gt;&lt;span style=&quot;--shiki-light:#1F2328;--shiki-dark:#E6EDF3&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--shiki-light:#0A3069;--shiki-dark:#A5D6FF&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;--shiki-light:#116329;--shiki-light-font-weight:bold;--shiki-dark:#7EE787;--shiki-dark-font-weight:bold&quot;&gt;\{\{&lt;/span&gt;&lt;span style=&quot;--shiki-light:#0550AE;--shiki-dark:#79C0FF&quot;&gt;\s&lt;/span&gt;&lt;span style=&quot;--shiki-light:#CF222E;--shiki-dark:#FF7B72&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;--shiki-light:#0A3069;--shiki-dark:#A5D6FF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--shiki-light:#0550AE;--shiki-dark:#79C0FF&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;--shiki-light:#CF222E;--shiki-dark:#FF7B72&quot;&gt;^&lt;/span&gt;&lt;span style=&quot;--shiki-light:#0550AE;--shiki-dark:#79C0FF&quot;&gt;}]&lt;/span&gt;&lt;span style=&quot;--shiki-light:#CF222E;--shiki-dark:#FF7B72&quot;&gt;+?&lt;/span&gt;&lt;span style=&quot;--shiki-light:#0A3069;--shiki-dark:#A5D6FF&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;--shiki-light:#0550AE;--shiki-dark:#79C0FF&quot;&gt;\s&lt;/span&gt;&lt;span style=&quot;--shiki-light:#CF222E;--shiki-dark:#FF7B72&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;--shiki-light:#116329;--shiki-light-font-weight:bold;--shiki-dark:#7EE787;--shiki-dark-font-weight:bold&quot;&gt;\}\}&lt;/span&gt;&lt;span style=&quot;--shiki-light:#0A3069;--shiki-dark:#A5D6FF&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;--shiki-light:#CF222E;--shiki-dark:#FF7B72&quot;&gt;g&lt;/span&gt;&lt;span style=&quot;--shiki-light:#1F2328;--shiki-dark:#E6EDF3&quot;&gt;, (&lt;/span&gt;&lt;span style=&quot;--shiki-light:#953800;--shiki-dark:#FFA657&quot;&gt;match&lt;/span&gt;&lt;span style=&quot;--shiki-light:#1F2328;--shiki-dark:#E6EDF3&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--shiki-light:#953800;--shiki-dark:#FFA657&quot;&gt;raw&lt;/span&gt;&lt;span style=&quot;--shiki-light:#1F2328;--shiki-dark:#E6EDF3&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;--shiki-light:#CF222E;--shiki-dark:#FF7B72&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;--shiki-light:#1F2328;--shiki-dark:#E6EDF3&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#CF222E;--shiki-dark:#FF7B72&quot;&gt;    const&lt;/span&gt;&lt;span style=&quot;--shiki-light:#0550AE;--shiki-dark:#79C0FF&quot;&gt; inner&lt;/span&gt;&lt;span style=&quot;--shiki-light:#CF222E;--shiki-dark:#FF7B72&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;--shiki-light:#1F2328;--shiki-dark:#E6EDF3&quot;&gt; raw.&lt;/span&gt;&lt;span style=&quot;--shiki-light:#8250DF;--shiki-dark:#D2A8FF&quot;&gt;trim&lt;/span&gt;&lt;span style=&quot;--shiki-light:#1F2328;--shiki-dark:#E6EDF3&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#CF222E;--shiki-dark:#FF7B72&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;--shiki-light:#1F2328;--shiki-dark:#E6EDF3&quot;&gt; (inner &lt;/span&gt;&lt;span style=&quot;--shiki-light:#CF222E;--shiki-dark:#FF7B72&quot;&gt;===&lt;/span&gt;&lt;span style=&quot;--shiki-light:#0A3069;--shiki-dark:#A5D6FF&quot;&gt; &apos;toc&apos;&lt;/span&gt;&lt;span style=&quot;--shiki-light:#1F2328;--shiki-dark:#E6EDF3&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;--shiki-light:#CF222E;--shiki-dark:#FF7B72&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;--shiki-light:#8250DF;--shiki-dark:#D2A8FF&quot;&gt; buildTocList&lt;/span&gt;&lt;span style=&quot;--shiki-light:#1F2328;--shiki-dark:#E6EDF3&quot;&gt;(md);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#CF222E;--shiki-dark:#FF7B72&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;--shiki-light:#1F2328;--shiki-dark:#E6EDF3&quot;&gt; (inner &lt;/span&gt;&lt;span style=&quot;--shiki-light:#CF222E;--shiki-dark:#FF7B72&quot;&gt;===&lt;/span&gt;&lt;span style=&quot;--shiki-light:#0A3069;--shiki-dark:#A5D6FF&quot;&gt; &apos;now&apos;&lt;/span&gt;&lt;span style=&quot;--shiki-light:#1F2328;--shiki-dark:#E6EDF3&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;--shiki-light:#CF222E;--shiki-dark:#FF7B72&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;--shiki-light:#8250DF;--shiki-dark:#D2A8FF&quot;&gt; formatNow&lt;/span&gt;&lt;span style=&quot;--shiki-light:#1F2328;--shiki-dark:#E6EDF3&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#CF222E;--shiki-dark:#FF7B72&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;--shiki-light:#1F2328;--shiki-dark:#E6EDF3&quot;&gt; (inner.&lt;/span&gt;&lt;span style=&quot;--shiki-light:#8250DF;--shiki-dark:#D2A8FF&quot;&gt;startsWith&lt;/span&gt;&lt;span style=&quot;--shiki-light:#1F2328;--shiki-dark:#E6EDF3&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--shiki-light:#0A3069;--shiki-dark:#A5D6FF&quot;&gt;&apos;gist:&apos;&lt;/span&gt;&lt;span style=&quot;--shiki-light:#1F2328;--shiki-dark:#E6EDF3&quot;&gt;)) &lt;/span&gt;&lt;span style=&quot;--shiki-light:#CF222E;--shiki-dark:#FF7B72&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;--shiki-light:#8250DF;--shiki-dark:#D2A8FF&quot;&gt; gistEmbed&lt;/span&gt;&lt;span style=&quot;--shiki-light:#1F2328;--shiki-dark:#E6EDF3&quot;&gt;(inner.&lt;/span&gt;&lt;span style=&quot;--shiki-light:#8250DF;--shiki-dark:#D2A8FF&quot;&gt;slice&lt;/span&gt;&lt;span style=&quot;--shiki-light:#1F2328;--shiki-dark:#E6EDF3&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--shiki-light:#0550AE;--shiki-dark:#79C0FF&quot;&gt;5&lt;/span&gt;&lt;span style=&quot;--shiki-light:#1F2328;--shiki-dark:#E6EDF3&quot;&gt;));&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#CF222E;--shiki-dark:#FF7B72&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;--shiki-light:#8250DF;--shiki-dark:#D2A8FF&quot;&gt; lookup&lt;/span&gt;&lt;span style=&quot;--shiki-light:#1F2328;--shiki-dark:#E6EDF3&quot;&gt;(inner, vars) &lt;/span&gt;&lt;span style=&quot;--shiki-light:#CF222E;--shiki-dark:#FF7B72&quot;&gt;??&lt;/span&gt;&lt;span style=&quot;--shiki-light:#1F2328;--shiki-dark:#E6EDF3&quot;&gt; match;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#1F2328;--shiki-dark:#E6EDF3&quot;&gt;  });&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#1F2328;--shiki-dark:#E6EDF3&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Tables&lt;/h2&gt;
&lt;p&gt;GFM table syntax:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;Source&lt;/th&gt;
&lt;th&gt;Handler&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;Footnotes&lt;/td&gt;
&lt;td&gt;&lt;code&gt;[^id]&lt;/code&gt; / &lt;code&gt;[^id]: body&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;marked-footnote&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;TOC&lt;/td&gt;
&lt;td&gt;&lt;code&gt;{{ toc }}&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;md-frontmatter.ts&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Line numbers&lt;/td&gt;
&lt;td&gt;&lt;code&gt;linenos&lt;/code&gt; fence flag&lt;/td&gt;
&lt;td&gt;&lt;code&gt;md-frontmatter.ts&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gists&lt;/td&gt;
&lt;td&gt;&lt;code&gt;{{ gist:ID }}&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;md-frontmatter.ts&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Route URLs&lt;/td&gt;
&lt;td&gt;&lt;code&gt;{{ urls.&amp;lt;name&amp;gt; }}&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;app/routes.ts&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Site vars&lt;/td&gt;
&lt;td&gt;&lt;code&gt;{{ path.to.key }}&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;content/site.yml&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;h2&gt;Definition list&lt;/h2&gt;
&lt;p&gt;Raw HTML — marked doesn&amp;#39;t parse the Kramdown &lt;code&gt;term\n: def&lt;/code&gt; shorthand, so write &lt;code&gt;&amp;lt;dl&amp;gt;&lt;/code&gt; directly:&lt;/p&gt;
&lt;dl&gt;
  &lt;dt&gt;HTML&lt;/dt&gt;
  &lt;dd&gt;HyperText Markup Language. Structure.&lt;/dd&gt;
  &lt;dt&gt;CSS&lt;/dt&gt;
  &lt;dd&gt;Cascading Style Sheets. Presentation.&lt;/dd&gt;
  &lt;dt&gt;JS&lt;/dt&gt;
  &lt;dd&gt;JavaScript. Behavior.&lt;/dd&gt;
&lt;/dl&gt;&lt;h2&gt;Images&lt;/h2&gt;
&lt;p&gt;External placeholders via &lt;code&gt;placehold.co&lt;/code&gt;:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://placehold.co/800x400?text=Large&quot; alt=&quot;sample&quot; title=&quot;800×400&quot;&gt;
&lt;img src=&quot;https://placehold.co/400x200?text=Medium&quot; alt=&quot;sample&quot; title=&quot;400×200&quot;&gt;&lt;/p&gt;
&lt;p&gt;Local images go under &lt;code&gt;app/assets/&lt;/code&gt; and are imported by the route component, not referenced from markdown.&lt;/p&gt;
&lt;h2&gt;Footnotes&lt;/h2&gt;
&lt;p&gt;Reference a footnote inline with &lt;code&gt;[^id]&lt;/code&gt;&lt;sup&gt;&lt;a id=&quot;footnote-ref-example&quot; href=&quot;#footnote-example&quot; data-footnote-ref aria-describedby=&quot;footnote-label&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; and define the body anywhere in the document. On render, marked-footnote collects all definitions into a &lt;code&gt;&amp;lt;section class=&amp;quot;footnotes&amp;quot;&amp;gt;&lt;/code&gt; at the bottom and wires up back-links automatically.&lt;/p&gt;
&lt;p&gt;Multiple references to the same id collapse to a single footnote with multiple back-arrows&lt;sup&gt;&lt;a id=&quot;footnote-ref-example-2&quot; href=&quot;#footnote-example&quot; data-footnote-ref aria-describedby=&quot;footnote-label&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;
&lt;h2&gt;Gist embed&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;{{ gist:ID }}&lt;/code&gt; expands to an iframe pointing at the gist&amp;#39;s &lt;code&gt;pibb&lt;/code&gt; URL (GitHub&amp;#39;s iframe-safe render) — drops the embed inline without blocking on a &lt;code&gt;&amp;lt;script&amp;gt;&lt;/code&gt; tag:&lt;/p&gt;
&lt;p&gt;{{ gist:b24679402957c63ec426 }}&lt;/p&gt;
&lt;p&gt;{{ gist:dd5639089d837e95c22a706260b26706 }}&lt;/p&gt;
&lt;h2&gt;Frontmatter&lt;/h2&gt;
&lt;p&gt;Every post needs frontmatter at the top:&lt;/p&gt;
&lt;pre class=&quot;shiki shiki-themes github-light-default github-dark-default&quot; style=&quot;--shiki-light:#1f2328;--shiki-dark:#e6edf3;--shiki-light-bg:#ffffff;--shiki-dark-bg:#0d1117&quot; tabindex=&quot;0&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#0550AE;--shiki-dark:#79C0FF&quot;&gt;---&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#116329;--shiki-dark:#7EE787&quot;&gt;title&lt;/span&gt;&lt;span style=&quot;--shiki-light:#1F2328;--shiki-dark:#E6EDF3&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--shiki-light:#0A3069;--shiki-dark:#A5D6FF&quot;&gt;Post title&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#116329;--shiki-dark:#7EE787&quot;&gt;date&lt;/span&gt;&lt;span style=&quot;--shiki-light:#1F2328;--shiki-dark:#E6EDF3&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--shiki-light:#0550AE;--shiki-dark:#79C0FF&quot;&gt;2026-04-23&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#0550AE;--shiki-dark:#79C0FF&quot;&gt;---&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;title&lt;/code&gt; drives the page &lt;code&gt;&amp;lt;title&amp;gt;&lt;/code&gt; and the rendered h1. &lt;code&gt;date&lt;/code&gt; can come from the filename prefix (&lt;code&gt;YYYY-MM-DD-slug.md&lt;/code&gt;) or the frontmatter field — frontmatter wins when both are present. Slug is derived from the filename with any leading &lt;code&gt;YYYY-MM-DD-&lt;/code&gt; stripped.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;That&amp;#39;s the full surface. To add a new feature, extend &lt;code&gt;expandTemplate&lt;/code&gt; (build-time tokens), register a &lt;code&gt;marked.use({ renderer })&lt;/code&gt; override (HTML shape), or add styles under &lt;code&gt;app/styles/terminal-content.scss&lt;/code&gt; (appearance).&lt;/p&gt;
&lt;section class=&quot;footnotes&quot; data-footnotes&gt;
&lt;h2 id=&quot;footnote-label&quot; class=&quot;sr-only&quot;&gt;Footnotes&lt;/h2&gt;
&lt;ol&gt;
&lt;li id=&quot;footnote-example&quot;&gt;
&lt;p&gt;Footnote body. Marked-footnote moves this to the bottom and links back to the reference via the return arrow. &lt;a href=&quot;#footnote-ref-example&quot; data-footnote-backref aria-label=&quot;Back to reference example&quot;&gt;↩&lt;/a&gt; &lt;a href=&quot;#footnote-ref-example-2&quot; data-footnote-backref aria-label=&quot;Back to reference example&quot;&gt;↩&lt;sup&gt;2&lt;/sup&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/section&gt;
</content>
  </entry>
</feed>
