<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>My Blog</title><description>Posts and short notes about software, tools and things I learn.</description><link>https://example.pages.dev/</link><language>en</language><item><link>https://example.pages.dev/notes/20261007-0930/</link><guid isPermaLink="true">https://example.pages.dev/notes/20261007-0930/</guid><description>&lt;p&gt;New blog, who dis? Notes are for things too short for an article. Create one with &lt;code&gt;bun run new:note &quot;text&quot;&lt;/code&gt;.&lt;/p&gt;</description><pubDate>Wed, 07 Oct 2026 09:30:00 GMT</pubDate><category>meta</category></item><item><title>Hello, world</title><link>https://example.pages.dev/posts/hello-world/</link><guid isPermaLink="true">https://example.pages.dev/posts/hello-world/</guid><description>Why I started this blog, and what you&apos;ll find here.</description><pubDate>Wed, 07 Oct 2026 08:00:00 GMT</pubDate><content:encoded>&lt;p&gt;This is the first post on this blog. Posts are the long-form side of the site: things I took time to research, explain or reflect on.&lt;/p&gt;
&lt;h2 id=&quot;two-kinds-of-posts&quot;&gt;Two kinds of posts&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Posts&lt;/strong&gt; (like this one) have a title, a description and are meant to be read start to finish.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&quot;/notes/&quot;&gt;Notes&lt;/a&gt;&lt;/strong&gt; are short, title-less posts. A link with a comment, a TIL, a half-formed thought.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Having a low-friction format matters: most blogs die because every post feels like it has to be an essay.&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;Write the thing you wish you had found when you were searching for it.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;See you in the next one.&lt;/p&gt;</content:encoded><category>meta</category></item><item><link>https://example.pages.dev/notes/20261006-1815/</link><guid isPermaLink="true">https://example.pages.dev/notes/20261006-1815/</guid><description>&lt;p&gt;TIL &lt;code&gt;text-wrap: balance&lt;/code&gt; avoids those lonely single words on the last line of a heading. One line of CSS, and it’s in every evergreen browser.&lt;/p&gt;</description><pubDate>Tue, 06 Oct 2026 18:15:00 GMT</pubDate><category>css</category></item><item><title>What a code-heavy post looks like</title><link>https://example.pages.dev/posts/writing-with-code/</link><guid isPermaLink="true">https://example.pages.dev/posts/writing-with-code/</guid><description>A sample article to check typography, code blocks and dark mode.</description><pubDate>Mon, 05 Oct 2026 08:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Use this post to tweak the theme. Inline code looks like &lt;code&gt;bun run dev&lt;/code&gt;, and code blocks are highlighted at build time by Shiki, with no JavaScript shipped to the reader.&lt;/p&gt;
&lt;h2 id=&quot;table-of-contents&quot;&gt;Table of contents&lt;/h2&gt;
&lt;p&gt;&lt;/p&gt;&lt;details&gt;&lt;summary&gt;Open Table of contents&lt;/summary&gt;&lt;p&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#code-blocks&quot;&gt;Code blocks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#callouts&quot;&gt;Callouts&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#a-table-because-tech-posts-love-tables&quot;&gt;A table, because tech posts love tables&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#drafts-and-scheduled-posts&quot;&gt;Drafts and scheduled posts&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;/p&gt;&lt;/details&gt;&lt;p&gt;&lt;/p&gt;
&lt;h2 id=&quot;code-blocks&quot;&gt;Code blocks&lt;/h2&gt;
&lt;p&gt;AstroPaper adds file names, line highlights and diffs through Shiki transformers:&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes min-light night-owl has-highlighted mt-8&quot; style=&quot;--shiki-light:#24292eff;--shiki-dark:#d6deeb;--shiki-light-bg:#ffffff;--shiki-dark-bg:#011627; overflow-x: auto;--file-name-offset: -0.75rem;&quot; tabindex=&quot;0&quot; data-language=&quot;ts&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#D32F2F;--shiki-light-font-style:inherit;--shiki-dark:#C792EA;--shiki-dark-font-style:italic&quot;&gt;export&lt;/span&gt;&lt;span style=&quot;--shiki-light:#D32F2F;--shiki-dark:#C792EA&quot;&gt; function&lt;/span&gt;&lt;span style=&quot;--shiki-light:#6F42C1;--shiki-light-font-style:inherit;--shiki-dark:#82AAFF;--shiki-dark-font-style:italic&quot;&gt; readingTime&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292EFF;--shiki-dark:#D9F5DD&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292EFF;--shiki-dark:#D7DBE0&quot;&gt;markdown&lt;/span&gt;&lt;span style=&quot;--shiki-light:#D32F2F;--shiki-dark:#C792EA&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;--shiki-light:#22863A;--shiki-dark:#D9F5DD&quot;&gt; &quot;&quot;&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292EFF;--shiki-dark:#D9F5DD&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292EFF;--shiki-dark:#D6DEEB&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line highlighted&quot;&gt;&lt;span style=&quot;--shiki-light:#D32F2F;--shiki-dark:#C792EA&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;--shiki-light:#1976D2;--shiki-light-font-style:inherit;--shiki-dark:#82AAFF;--shiki-dark-font-style:italic&quot;&gt; words&lt;/span&gt;&lt;span style=&quot;--shiki-light:#D32F2F;--shiki-dark:#C792EA&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;--shiki-light:#1976D2;--shiki-light-font-style:inherit;--shiki-dark:#D6DEEB;--shiki-dark-font-style:italic&quot;&gt; markdown&lt;/span&gt;&lt;span style=&quot;--shiki-light:#6F42C1;--shiki-light-font-style:inherit;--shiki-dark:#C792EA;--shiki-dark-font-style:italic&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--shiki-light:#6F42C1;--shiki-light-font-style:inherit;--shiki-dark:#82AAFF;--shiki-dark-font-style:italic&quot;&gt;trim&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292EFF;--shiki-dark:#D6DEEB&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;--shiki-light:#6F42C1;--shiki-light-font-style:inherit;--shiki-dark:#C792EA;--shiki-dark-font-style:italic&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--shiki-light:#6F42C1;--shiki-light-font-style:inherit;--shiki-dark:#82AAFF;--shiki-dark-font-style:italic&quot;&gt;split&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292EFF;--shiki-dark:#D6DEEB&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--shiki-light:#22863A;--shiki-dark:#D9F5DD&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;--shiki-light:#22863A;--shiki-light-font-style:inherit;--shiki-dark:#82AAFF;--shiki-dark-font-style:italic&quot;&gt;\s&lt;/span&gt;&lt;span style=&quot;--shiki-light:#D32F2F;--shiki-dark:#7FDBCA&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;--shiki-light:#22863A;--shiki-dark:#D9F5DD&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292EFF;--shiki-dark:#D6DEEB&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;--shiki-light:#6F42C1;--shiki-light-font-style:inherit;--shiki-dark:#C792EA;--shiki-dark-font-style:italic&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--shiki-light:#6F42C1;--shiki-light-font-style:inherit;--shiki-dark:#82AAFF;--shiki-dark-font-style:italic&quot;&gt;filter&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292EFF;--shiki-dark:#D6DEEB&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292EFF;--shiki-light-font-style:inherit;--shiki-dark:#D6DEEB;--shiki-dark-font-style:italic&quot;&gt;Boolean&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292EFF;--shiki-dark:#D6DEEB&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292EFF;--shiki-light-font-style:inherit;--shiki-dark:#C792EA;--shiki-dark-font-style:italic&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--shiki-light:#1976D2;--shiki-light-font-style:inherit;--shiki-dark:#7FDBCA;--shiki-dark-font-style:italic&quot;&gt;length&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292EFF;--shiki-dark:#D6DEEB&quot;&gt;; &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#D32F2F;--shiki-light-font-style:inherit;--shiki-dark:#C792EA;--shiki-dark-font-style:italic&quot;&gt;  return&lt;/span&gt;&lt;span style=&quot;--shiki-light:#1976D2;--shiki-dark:#D6DEEB&quot;&gt; Math&lt;/span&gt;&lt;span style=&quot;--shiki-light:#6F42C1;--shiki-light-font-style:inherit;--shiki-dark:#C792EA;--shiki-dark-font-style:italic&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--shiki-light:#6F42C1;--shiki-light-font-style:inherit;--shiki-dark:#82AAFF;--shiki-dark-font-style:italic&quot;&gt;max&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292EFF;--shiki-dark:#D6DEEB&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--shiki-light:#1976D2;--shiki-dark:#F78C6C&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;--shiki-light:#212121;--shiki-dark:#5F7E97&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;--shiki-light:#1976D2;--shiki-dark:#D6DEEB&quot;&gt; Math&lt;/span&gt;&lt;span style=&quot;--shiki-light:#6F42C1;--shiki-light-font-style:inherit;--shiki-dark:#C792EA;--shiki-dark-font-style:italic&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--shiki-light:#6F42C1;--shiki-light-font-style:inherit;--shiki-dark:#82AAFF;--shiki-dark-font-style:italic&quot;&gt;round&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292EFF;--shiki-dark:#D6DEEB&quot;&gt;(words &lt;/span&gt;&lt;span style=&quot;--shiki-light:#D32F2F;--shiki-dark:#C792EA&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;--shiki-light:#1976D2;--shiki-dark:#F78C6C&quot;&gt; 220&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292EFF;--shiki-dark:#D6DEEB&quot;&gt;));&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#24292EFF;--shiki-dark:#D6DEEB&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;span class=&quot;absolute py-1 text-foreground text-xs font-medium leading-4 pl-4 pr-2 before:inline-block before:size-1 before:bg-green-500 before:rounded-full before:absolute before:top-[45%] before:left-2 left-2 top-(--file-name-offset) border rounded-md bg-background&quot;&gt;src/utils/readingTime.ts&lt;/span&gt;&lt;/pre&gt;
&lt;pre class=&quot;astro-code astro-code-themes min-light night-owl has-diff&quot; style=&quot;--shiki-light:#24292eff;--shiki-dark:#d6deeb;--shiki-light-bg:#ffffff;--shiki-dark-bg:#011627; overflow-x: auto;--file-name-offset: -0.75rem;&quot; tabindex=&quot;0&quot; data-language=&quot;ts&quot;&gt;&lt;code&gt;&lt;span class=&quot;line diff remove&quot;&gt;&lt;span style=&quot;--shiki-light:#D32F2F;--shiki-dark:#C792EA&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;--shiki-light:#1976D2;--shiki-light-font-style:inherit;--shiki-dark:#82AAFF;--shiki-dark-font-style:italic&quot;&gt; posts&lt;/span&gt;&lt;span style=&quot;--shiki-light:#D32F2F;--shiki-dark:#C792EA&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;--shiki-light:#D32F2F;--shiki-light-font-style:inherit;--shiki-dark:#C792EA;--shiki-dark-font-style:italic&quot;&gt; await&lt;/span&gt;&lt;span style=&quot;--shiki-light:#6F42C1;--shiki-light-font-style:inherit;--shiki-dark:#82AAFF;--shiki-dark-font-style:italic&quot;&gt; getCollection&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292EFF;--shiki-dark:#D6DEEB&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--shiki-light:#22863A;--shiki-dark:#D9F5DD&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--shiki-light:#22863A;--shiki-dark:#ECC48D&quot;&gt;posts&lt;/span&gt;&lt;span style=&quot;--shiki-light:#22863A;--shiki-dark:#D9F5DD&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292EFF;--shiki-dark:#D6DEEB&quot;&gt;); &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line diff add&quot;&gt;&lt;span style=&quot;--shiki-light:#D32F2F;--shiki-dark:#C792EA&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;--shiki-light:#1976D2;--shiki-light-font-style:inherit;--shiki-dark:#82AAFF;--shiki-dark-font-style:italic&quot;&gt; posts&lt;/span&gt;&lt;span style=&quot;--shiki-light:#D32F2F;--shiki-dark:#C792EA&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;--shiki-light:#D32F2F;--shiki-light-font-style:inherit;--shiki-dark:#C792EA;--shiki-dark-font-style:italic&quot;&gt; await&lt;/span&gt;&lt;span style=&quot;--shiki-light:#6F42C1;--shiki-light-font-style:inherit;--shiki-dark:#82AAFF;--shiki-dark-font-style:italic&quot;&gt; getCollection&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292EFF;--shiki-dark:#D6DEEB&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--shiki-light:#22863A;--shiki-dark:#D9F5DD&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--shiki-light:#22863A;--shiki-dark:#ECC48D&quot;&gt;posts&lt;/span&gt;&lt;span style=&quot;--shiki-light:#22863A;--shiki-dark:#D9F5DD&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--shiki-light:#212121;--shiki-dark:#C792EA&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292EFF;--shiki-dark:#D9F5DD&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292EFF;--shiki-dark:#C792EA&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292EFF;--shiki-light-font-style:inherit;--shiki-dark:#D7DBE0;--shiki-dark-font-style:italic&quot;&gt; data&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292EFF;--shiki-dark:#C792EA&quot;&gt; }&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292EFF;--shiki-dark:#D9F5DD&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;--shiki-light:#D32F2F;--shiki-dark:#C792EA&quot;&gt; =&gt;&lt;/span&gt;&lt;span style=&quot;--shiki-light:#D32F2F;--shiki-dark:#C792EA&quot;&gt; !&lt;/span&gt;&lt;span style=&quot;--shiki-light:#1976D2;--shiki-light-font-style:inherit;--shiki-dark:#D6DEEB;--shiki-dark-font-style:italic&quot;&gt;data&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292EFF;--shiki-light-font-style:inherit;--shiki-dark:#C792EA;--shiki-dark-font-style:italic&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292EFF;--shiki-light-font-style:inherit;--shiki-dark:#BAEBE2;--shiki-dark-font-style:italic&quot;&gt;draft&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292EFF;--shiki-dark:#D6DEEB&quot;&gt;); &lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;callouts&quot;&gt;Callouts&lt;/h2&gt;
&lt;div class=&quot;callout&quot; data-callout=&quot;tip&quot; data-collapsible=&quot;false&quot;&gt;&lt;div class=&quot;callout-title&quot;&gt;&lt;div class=&quot;callout-title-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;1em&quot; height=&quot;1em&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;none&quot; stroke=&quot;currentColor&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;&lt;path d=&quot;M8.5 14.5A2.5 2.5 0 0 0 11 12c0-1.38-.5-2-1-3-1.072-2.143-.224-4.054 2-6 .5 2.5 2 4.9 4 6.5 2 1.6 3 3.5 3 5.5a7 7 0 1 1-14 0c0-1.153.433-2.294 1-3a2.5 2.5 0 0 0 2.5 2.5z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/div&gt;&lt;div class=&quot;callout-title-text&quot;&gt;Tip&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;callout-content&quot;&gt;&lt;p&gt;Callouts use the Obsidian/GitHub syntax.&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;
&lt;h2 id=&quot;a-table-because-tech-posts-love-tables&quot;&gt;A table, because tech posts love tables&lt;/h2&gt;























&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Format&lt;/th&gt;&lt;th&gt;Title&lt;/th&gt;&lt;th&gt;Typical length&lt;/th&gt;&lt;th&gt;Comments&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Post&lt;/td&gt;&lt;td&gt;yes&lt;/td&gt;&lt;td&gt;800+ words&lt;/td&gt;&lt;td&gt;yes&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Note&lt;/td&gt;&lt;td&gt;no&lt;/td&gt;&lt;td&gt;&amp;#x3C; 500 chars&lt;/td&gt;&lt;td&gt;yes&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;h2 id=&quot;drafts-and-scheduled-posts&quot;&gt;Drafts and scheduled posts&lt;/h2&gt;
&lt;p&gt;Add &lt;code&gt;draft: true&lt;/code&gt; to the frontmatter to keep a post unpublished. A &lt;code&gt;pubDatetime&lt;/code&gt; in the future schedules it: it appears on the first build after that date.&lt;/p&gt;</content:encoded><category>astro</category><category>meta</category></item><item><link>https://example.pages.dev/notes/20261004-1200/</link><guid isPermaLink="true">https://example.pages.dev/notes/20261004-1200/</guid><description>&lt;p&gt;Reading the &lt;a href=&quot;https://docs.astro.build/en/guides/content-collections/&quot;&gt;Astro docs on content collections&lt;/a&gt;. Typed frontmatter with Zod is the feature that sold me: a typo in a date fails the build instead of shipping.&lt;/p&gt;</description><pubDate>Sun, 04 Oct 2026 12:00:00 GMT</pubDate><category>astro</category></item></channel></rss>