<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Web on Vedant Andhale</title>
    <link>https://www.vedant.me/tags/web/</link>
    <description>Recent content in Web on Vedant Andhale</description>
    <image>
      <url>https://www.vedant.me/</url>
      <link>https://www.vedant.me/</link>
    </image>
    <generator>Hugo -- gohugo.io</generator>
    <language>en-us</language>
    <lastBuildDate>Thu, 10 Sep 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://www.vedant.me/tags/web/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>A portfolio is a good fit for static HTML</title>
      <link>https://www.vedant.me/notebook/static-sites-are-underrated-again/</link>
      <pubDate>Thu, 10 Sep 2026 00:00:00 +0000</pubDate>
      
      <guid>https://www.vedant.me/notebook/static-sites-are-underrated-again/</guid>
      <description>Why this site uses generated pages, with small interactive features added where they help.</description>
      <content:encoded><![CDATA[<p>Most of this site&rsquo;s work happens before anyone opens a page. The content is known at build time: an introduction, project write-ups, technical notes and a résumé link. That makes static HTML a natural fit.</p>
<p>Hugo turns the Markdown into pages. The browser can read the article without running an application bundle or waiting for a content API. JavaScript adds search, feed controls and theme switching where those interactions are useful.</p>
<h2 id="keep-the-dynamic-boundary-small">Keep the dynamic boundary small</h2>
<p>Static does not mean every part of the system is static. This portfolio&rsquo;s CMS authentication uses API functions, while the public writing remains generated HTML. Editing content triggers a new build through GitHub.</p>
<p>That separation suits a personal site because public readers do not need accounts or personalised results. If the product were a collaborative editor or a live operational dashboard, the boundary would need to be different.</p>
<h2 id="search-needs-accessible-content">Search needs accessible content</h2>
<p>Rendering the text into HTML gives crawlers a straightforward document to fetch. It is only the starting point. The site also needs working links, canonical URLs, suitable metadata, a sitemap and useful published content.</p>
<p>This site includes an <code>llms.txt</code> index as another way to find the public pages. It does not guarantee that a search engine or an AI assistant will mention the site. Google&rsquo;s guidance for AI features still centres on ordinary search eligibility and useful content; it does not require a special AI file.</p>
<p>The technical choice is therefore fairly ordinary: keep the public content easy to load and inspect, then spend the saved complexity on better examples and project evidence.</p>
<p>References: <a href="https://gohugo.io/documentation/">Hugo&rsquo;s documentation</a> and <a href="https://developers.google.com/search/docs/appearance/ai-features">Google&rsquo;s guidance on AI features and websites</a>.</p>
]]></content:encoded>
    </item>
    
    <item>
      <title>Keep a static-site build easy to explain</title>
      <link>https://www.vedant.me/notebook/a-build-that-finishes-in-seconds/</link>
      <pubDate>Thu, 10 Sep 2026 00:00:00 +0000</pubDate>
      
      <guid>https://www.vedant.me/notebook/a-build-that-finishes-in-seconds/</guid>
      <description>The build contract behind this Hugo portfolio: pinned inputs, explicit environments and generated HTML.</description>
      <content:encoded><![CDATA[<p>This portfolio has a fairly small job: turn Markdown, templates and assets into pages that a browser can read. Keeping that build easy to understand matters more to me than introducing a larger application framework.</p>
<p>The site uses Hugo Extended, a pinned PaperModX theme, custom CSS and a small amount of JavaScript. Vercel serves the generated output. The CMS edits the same Markdown files in GitHub, so a content change goes through the normal deployment path.</p>
<h2 id="make-the-environment-explicit">Make the environment explicit</h2>
<p>The production command is:</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-sh" data-lang="sh"><span class="line"><span class="cl">hugo --gc --minify --environment production
</span></span></code></pre></td></tr></table>
</div>
</div><p>A preview needs a different environment because its search-indexing policy is different:</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-sh" data-lang="sh"><span class="line"><span class="cl">hugo --gc --minify --environment preview --destination public-preview
</span></span></code></pre></td></tr></table>
</div>
</div><p>In this site&rsquo;s deployment configuration, Vercel&rsquo;s environment is passed through to Hugo. Production pages can be indexed; preview pages emit <code>noindex</code>. That is a site-template decision, not something the word “preview” magically guarantees in Hugo.</p>
<h2 id="know-what-a-timing-includes">Know what a timing includes</h2>
<p>The time Hugo reports for rendering is only one part of a deployment. Downloading the build tool, fetching the theme, preparing assets and uploading output can take longer than generating the HTML.</p>
<p>If a deployment becomes slow, I would measure those stages separately before changing the renderer. A cached build-tool download solves a different problem from an expensive template loop.</p>
<p>Pinning the Hugo version and theme revision also makes a surprising change easier to investigate. Otherwise, a content-only commit can pick up a new dependency and quietly become a software update.</p>
<h2 id="inspect-the-output">Inspect the output</h2>
<p>A successful process exit means the build completed. It does not tell you that a résumé link exists, a draft stayed unpublished or the canonical URL points to the right host.</p>
<p>For this site, those are useful checks on the generated files. They exercise the result someone will actually receive, and they keep the deployment contract small enough to understand when something breaks.</p>
<p>Reference: <a href="https://gohugo.io/commands/hugo/">Hugo command options</a>.</p>
]]></content:encoded>
    </item>
    
  </channel>
</rss>
