<?xml version="1.0" encoding="UTF-8"?>
<!-- This is an RSS feed. Paste this address into a feed reader to follow new posts. Human-readable index: https://sanchay.sh/blog/ -->

<rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0">
    <channel>
      <title>Sanchay Pahalwani - Writing</title>
      <link>https://sanchay.sh/blog/</link>
      <description>Real-time systems and AI-first products, shipped end to end.</description>
      <generator>Zola</generator>
      <language>en</language>
      <atom:link href="https://sanchay.sh/blog/rss.xml" rel="self" type="application/rss+xml"/>
      <lastBuildDate>Wed, 26 Aug 2026 00:00:00 +0000</lastBuildDate>
      <item>
          <title>How this site is built</title>
          <pubDate>Wed, 26 Aug 2026 00:00:00 +0000</pubDate>
          <dc:creator>Sanchay Pahalwani</dc:creator>
          <link>https://sanchay.sh/blog/how-this-site-is-built/</link>
          <guid>https://sanchay.sh/blog/how-this-site-is-built/</guid>
          <description xml:base="https://sanchay.sh/blog/how-this-site-is-built/">&lt;p&gt;The homepage of this site is a single hand-written HTML file. No framework, inline
CSS, a few dozen lines of vanilla JS. I wanted to keep it that way and still have a
place to write, so the blog is built by &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.getzola.org&#x2F;&quot;&gt;Zola&lt;&#x2F;a&gt;, a static
site generator that ships as one binary.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;the-rules&quot;&gt;The rules&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;The deploy output is a closed allowlist. If the build produces a file the script
does not expect, the deploy fails.&lt;&#x2F;li&gt;
&lt;li&gt;The homepage never passes through a build tool. The build script copies it into
the output directory after Zola runs, byte for byte.&lt;&#x2F;li&gt;
&lt;li&gt;Syntax highlighting happens at build time.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;the-build&quot;&gt;The build&lt;&#x2F;h2&gt;
&lt;p&gt;The whole pipeline is a short shell script:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo z-code&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name&quot;&gt;rm&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant&quot;&gt; -rf&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; dist&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name&quot;&gt;zola&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant&quot;&gt; --root&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; site build&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant&quot;&gt; --output-dir&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other&quot;&gt;$PWD&lt;&#x2F;span&gt;&lt;span class=&quot;z-string z-punctuation z-definition z-string&quot;&gt;&#x2F;dist&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name&quot;&gt;cp&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; index.html 404.html dist&#x2F;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-entity z-name&quot;&gt;cp&lt;&#x2F;span&gt;&lt;span class=&quot;z-constant&quot;&gt; -R&lt;&#x2F;span&gt;&lt;span class=&quot;z-string&quot;&gt; assets dist&#x2F;assets&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Posts are markdown files with TOML front matter. A post is a draft until the
&lt;code&gt;draft = true&lt;&#x2F;code&gt; line is deleted, and drafts never reach production builds. The feed
lives at &lt;a href=&quot;&#x2F;blog&#x2F;atom.xml&quot;&gt;&#x2F;blog&#x2F;atom.xml&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
</description>
      </item>
    </channel>
</rss>
