<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Blog on letsblaze</title><link>https://letsblaze.thomaslaurenson.com/blog/</link><description>Recent content in Blog on letsblaze</description><generator>Hugo</generator><language>en-US</language><atom:link href="https://letsblaze.thomaslaurenson.com/blog/index.xml" rel="self" type="application/rss+xml"/><item><title>Welcome to letsblaze</title><link>https://letsblaze.thomaslaurenson.com/blog/welcome-to-letsblaze/</link><pubDate>Sun, 15 Mar 2026 00:00:00 +0000</pubDate><guid>https://letsblaze.thomaslaurenson.com/blog/welcome-to-letsblaze/</guid><description>&lt;p&gt;letsblaze is a Hugo theme built on one principle: the fastest resource is one that
was never requested.&lt;/p&gt;
&lt;p&gt;No JavaScript. No external stylesheets. No web fonts. No CDN calls. Every page is
HTML with a small inline style block. Nothing else ships to the browser.&lt;/p&gt;
&lt;h2 id="why-no-javascript"&gt;Why no JavaScript&lt;/h2&gt;
&lt;p&gt;JavaScript is powerful and often necessary. It is also the single largest contributor
to slow page loads across the web. For a blog or documentation site, there is almost
nothing that JavaScript provides that semantic HTML cannot handle.&lt;/p&gt;</description></item><item><title>Tags and Taxonomy</title><link>https://letsblaze.thomaslaurenson.com/blog/tags-and-taxonomy/</link><pubDate>Sun, 01 Mar 2026 00:00:00 +0000</pubDate><guid>https://letsblaze.thomaslaurenson.com/blog/tags-and-taxonomy/</guid><description>&lt;p&gt;letsblaze supports Hugo&amp;rsquo;s built-in taxonomy system. Tags are the primary taxonomy.&lt;/p&gt;
&lt;h2 id="adding-tags-to-a-post"&gt;Adding tags to a post&lt;/h2&gt;
&lt;p&gt;In front matter:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e5e5e5;background-color:#000;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;---
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="font-weight:bold"&gt;title&lt;/span&gt;: &lt;span style="color:#0ff;font-weight:bold"&gt;&amp;#34;My Post&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="font-weight:bold"&gt;tags&lt;/span&gt;: [&lt;span style="color:#0ff;font-weight:bold"&gt;&amp;#34;hugo&amp;#34;&lt;/span&gt;, &lt;span style="color:#0ff;font-weight:bold"&gt;&amp;#34;web&amp;#34;&lt;/span&gt;, &lt;span style="color:#0ff;font-weight:bold"&gt;&amp;#34;html&amp;#34;&lt;/span&gt;]
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;---&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id="tag-pages"&gt;Tag pages&lt;/h2&gt;
&lt;p&gt;Every tag automatically gets a listing page at &lt;code&gt;/tags/TAG-NAME/&lt;/code&gt; showing all
posts with that tag, with pagination.&lt;/p&gt;
&lt;p&gt;The tags index at &lt;code&gt;/tags/&lt;/code&gt; lists all tags ordered by post count.&lt;/p&gt;
&lt;h2 id="rss-per-tag"&gt;RSS per tag&lt;/h2&gt;
&lt;p&gt;Hugo generates an RSS feed for each tag automatically:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;/tags/hugo/index.xml&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This lets readers subscribe to specific topics rather than the full blog feed.&lt;/p&gt;</description></item><item><title>Working with Images</title><link>https://letsblaze.thomaslaurenson.com/blog/working-with-images/</link><pubDate>Sun, 15 Feb 2026 00:00:00 +0000</pubDate><guid>https://letsblaze.thomaslaurenson.com/blog/working-with-images/</guid><description>&lt;p&gt;letsblaze handles images with a custom render hook that adds &lt;code&gt;&amp;lt;figure&amp;gt;&lt;/code&gt; and
&lt;code&gt;&amp;lt;figcaption&amp;gt;&lt;/code&gt; support and automatic dimension detection for page-bundle images.&lt;/p&gt;
&lt;h2 id="page-bundles"&gt;Page bundles&lt;/h2&gt;
&lt;p&gt;The recommended way to use images is as page bundles — store the image alongside
the content file:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;content/
 blog/
 working-with-images/
 index.md ← this file
 hero.jpg ← image in the same directory&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This is a leaf bundle. Hugo can read the image dimensions at build time and emit
&lt;code&gt;width&lt;/code&gt; and &lt;code&gt;height&lt;/code&gt; attributes automatically, preventing layout shift (CLS).&lt;/p&gt;</description></item><item><title>Code and Syntax Highlighting</title><link>https://letsblaze.thomaslaurenson.com/blog/code-and-syntax-highlighting/</link><pubDate>Sun, 01 Feb 2026 00:00:00 +0000</pubDate><guid>https://letsblaze.thomaslaurenson.com/blog/code-and-syntax-highlighting/</guid><description>&lt;p&gt;letsblaze uses Hugo&amp;rsquo;s built-in Chroma syntax highlighter, configured to emit
inline styles rather than CSS classes. This means syntax highlighting works
with no external stylesheet — consistent with the theme&amp;rsquo;s no-external-resources
philosophy.&lt;/p&gt;
&lt;h2 id="inline-code"&gt;Inline code&lt;/h2&gt;
&lt;p&gt;Wrap short code references in backticks: &lt;code&gt;const x = 42&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id="fenced-code-blocks"&gt;Fenced code blocks&lt;/h2&gt;
&lt;p&gt;Use triple backticks with a language identifier:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e5e5e5;background-color:#000;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff;font-weight:bold"&gt;def&lt;/span&gt; greet(name: &lt;span style="color:#fff;font-weight:bold"&gt;str&lt;/span&gt;) -&amp;gt; &lt;span style="color:#fff;font-weight:bold"&gt;str&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#fff;font-weight:bold"&gt;return&lt;/span&gt; &lt;span style="color:#0ff;font-weight:bold"&gt;f&lt;/span&gt;&lt;span style="color:#0ff;font-weight:bold"&gt;&amp;#34;Hello, &lt;/span&gt;&lt;span style="color:#0ff;font-weight:bold"&gt;{&lt;/span&gt;name&lt;span style="color:#0ff;font-weight:bold"&gt;}&lt;/span&gt;&lt;span style="color:#0ff;font-weight:bold"&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#fff;font-weight:bold"&gt;print&lt;/span&gt;(greet(&lt;span style="color:#0ff;font-weight:bold"&gt;&amp;#34;world&amp;#34;&lt;/span&gt;))&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e5e5e5;background-color:#000;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-html" data-lang="html"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0f0;font-weight:bold"&gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&amp;lt;&lt;span style="font-weight:bold"&gt;html&lt;/span&gt; &lt;span style="color:#007f7f"&gt;lang&lt;/span&gt;=&lt;span style="color:#0ff;font-weight:bold"&gt;&amp;#34;en&amp;#34;&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;lt;&lt;span style="font-weight:bold"&gt;head&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;lt;&lt;span style="font-weight:bold"&gt;meta&lt;/span&gt; &lt;span style="color:#007f7f"&gt;charset&lt;/span&gt;=&lt;span style="color:#0ff;font-weight:bold"&gt;&amp;#34;utf-8&amp;#34;&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;lt;&lt;span style="font-weight:bold"&gt;title&lt;/span&gt;&amp;gt;Example&amp;lt;/&lt;span style="font-weight:bold"&gt;title&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;lt;/&lt;span style="font-weight:bold"&gt;head&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;lt;&lt;span style="font-weight:bold"&gt;body&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;lt;&lt;span style="font-weight:bold"&gt;p&lt;/span&gt;&amp;gt;Hello, world.&amp;lt;/&lt;span style="font-weight:bold"&gt;p&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &amp;lt;/&lt;span style="font-weight:bold"&gt;body&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&amp;lt;/&lt;span style="font-weight:bold"&gt;html&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#e5e5e5;background-color:#000;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;hugo new blog/my-post.md
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;hugo server --buildDrafts
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;hugo --minify&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id="syntax-style"&gt;Syntax style&lt;/h2&gt;
&lt;p&gt;letsblaze is opinionated: the default Chroma style is &lt;code&gt;monochrome&lt;/code&gt;. This works
in both light and dark mode without maintaining two colour palettes.&lt;/p&gt;</description></item><item><title>Writing Content</title><link>https://letsblaze.thomaslaurenson.com/blog/writing-content/</link><pubDate>Thu, 15 Jan 2026 00:00:00 +0000</pubDate><guid>https://letsblaze.thomaslaurenson.com/blog/writing-content/</guid><description>&lt;p&gt;letsblaze renders standard Markdown with a few additions. This post covers
everything available when writing content.&lt;/p&gt;
&lt;h2 id="headings"&gt;Headings&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;&amp;lt;h1&amp;gt;&lt;/code&gt; is reserved for the page title, rendered automatically by the theme.
Use &lt;code&gt;&amp;lt;h2&amp;gt;&lt;/code&gt; through &lt;code&gt;&amp;lt;h6&amp;gt;&lt;/code&gt; for section headings within content.&lt;/p&gt;
&lt;h2 id="h2"&gt;H2&lt;/h2&gt;
&lt;h3 id="h3"&gt;H3&lt;/h3&gt;
&lt;h4 id="h4"&gt;H4&lt;/h4&gt;
&lt;h5 id="h5"&gt;H5&lt;/h5&gt;
&lt;h6 id="h6"&gt;H6&lt;/h6&gt;
&lt;h2 id="lists"&gt;Lists&lt;/h2&gt;
&lt;p&gt;Ordered and unordered lists render with clean browser defaults.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;First item&lt;/li&gt;
&lt;li&gt;Second item&lt;/li&gt;
&lt;li&gt;Third item&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;Unordered item&lt;/li&gt;
&lt;li&gt;Another item&lt;/li&gt;
&lt;li&gt;And another&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="blockquotes"&gt;Blockquotes&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;The web is for everyone. Build accordingly.&lt;/p&gt;</description></item></channel></rss>