<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Vinoo Ganesh</title><link>https://vinooganesh.github.io/hugo-ink/</link><description>Designer, developer, and writer.</description><generator>Hugo 0.155.3</generator><language>en</language><managingEditor>Vinoo Ganesh</managingEditor><lastBuildDate>Sun, 15 Feb 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://vinooganesh.github.io/hugo-ink/index.xml" rel="self" type="application/rss+xml"/><item><title>Hello World</title><link>https://vinooganesh.github.io/hugo-ink/posts/hello-world/</link><pubDate>Sun, 15 Feb 2026 00:00:00 +0000</pubDate><guid>https://vinooganesh.github.io/hugo-ink/posts/hello-world/</guid><description><![CDATA[<p>This is the first post on a new site. If you&rsquo;re reading this, the theme is working.</p>
<h2 id="why-this-exists">Why this exists</h2>
<p>Every few years I rebuild my personal site. This time I wanted something that loads fast, looks clean, and gets out of the way.</p>
<h2 id="the-stack">The stack</h2>
<ul>
<li><strong>Hugo</strong> for static site generation</li>
<li><strong>Ink</strong> as the theme</li>
<li>Self-hosted Inter font, no external requests</li>
</ul>
<h2 id="code-example">Code example</h2>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-go" data-lang="go"><span style="display:flex;"><span><span style="color:#f92672">package</span> <span style="color:#a6e22e">main</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">import</span> <span style="color:#e6db74">&#34;fmt&#34;</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">func</span> <span style="color:#a6e22e">main</span>() {
</span></span><span style="display:flex;"><span>    <span style="color:#a6e22e">fmt</span>.<span style="color:#a6e22e">Println</span>(<span style="color:#e6db74">&#34;Hello, world!&#34;</span>)
</span></span><span style="display:flex;"><span>}
</span></span></code></pre></div><blockquote>
<p>The best websites are the ones that get out of your way.</p>
</blockquote>
<h2 id="whats-next">What&rsquo;s next</h2>
<p>More writing. More building. Fewer dependencies.</p>
]]></description></item><item><title>On Speed and Simplicity</title><link>https://vinooganesh.github.io/hugo-ink/posts/on-speed-and-simplicity/</link><pubDate>Sat, 14 Feb 2026 00:00:00 +0000</pubDate><guid>https://vinooganesh.github.io/hugo-ink/posts/on-speed-and-simplicity/</guid><description><![CDATA[<p>The best websites are the ones that get out of your way. They load instantly, present content clearly, and respect your time.</p>
<p>Speed is not just a technical metric — it&rsquo;s a form of respect for your readers. Every kilobyte matters.</p>
<h2 id="measuring-what-matters">Measuring what matters</h2>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>curl -s -o /dev/null -w <span style="color:#e6db74">&#34;Total: %{size_download} bytes\n&#34;</span> https://yoursite.com/
</span></span></code></pre></div><p>The target: under 100KB for a first page load.</p>
]]></description></item><item><title>Making Your Site AI-Ready</title><link>https://vinooganesh.github.io/hugo-ink/posts/ai-ready-web/</link><pubDate>Fri, 13 Feb 2026 00:00:00 +0000</pubDate><guid>https://vinooganesh.github.io/hugo-ink/posts/ai-ready-web/</guid><description><![CDATA[<p>The web is changing. AI crawlers now read your site alongside traditional search engines. Is your site ready?</p>
<h2 id="what-is-llmstxt">What is llms.txt?</h2>
<p>The <code>llms.txt</code> standard gives AI models a structured entry point to your site&rsquo;s most important content. Think of it as <code>robots.txt</code> for AI.</p>
<h2 id="json-ld-structured-data">JSON-LD structured data</h2>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">&#34;@context&#34;</span>: <span style="color:#e6db74">&#34;https://schema.org&#34;</span>,
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">&#34;@type&#34;</span>: <span style="color:#e6db74">&#34;Article&#34;</span>,
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">&#34;headline&#34;</span>: <span style="color:#e6db74">&#34;Making Your Site AI-Ready&#34;</span>,
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">&#34;datePublished&#34;</span>: <span style="color:#e6db74">&#34;2026-02-13&#34;</span>
</span></span><span style="display:flex;"><span>}
</span></span></code></pre></div><h2 id="why-it-matters">Why it matters</h2>
<p>When AI tools answer questions, they pull from indexed web content. Clean structured data means your content gets accurately cited.</p>
]]></description></item><item><title>Dark Mode Done Right</title><link>https://vinooganesh.github.io/hugo-ink/posts/dark-mode-done-right/</link><pubDate>Thu, 12 Feb 2026 00:00:00 +0000</pubDate><guid>https://vinooganesh.github.io/hugo-ink/posts/dark-mode-done-right/</guid><description><![CDATA[<p>Dark mode reduces eye strain, saves battery on OLED screens, and respects user preferences. But implementing it wrong creates a flash of the wrong theme on load.</p>
<h2 id="the-flash-problem">The flash problem</h2>
<p>Most implementations set the theme with JavaScript after the page renders. Brief flash of the wrong theme.</p>
<h2 id="the-solution">The solution</h2>
<p>Run a tiny inline script in the <code>&lt;head&gt;</code>, before any content renders:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-javascript" data-lang="javascript"><span style="display:flex;"><span>(<span style="color:#66d9ef">function</span>() {
</span></span><span style="display:flex;"><span>  <span style="color:#66d9ef">var</span> <span style="color:#a6e22e">saved</span> <span style="color:#f92672">=</span> <span style="color:#a6e22e">localStorage</span>.<span style="color:#a6e22e">getItem</span>(<span style="color:#e6db74">&#39;theme&#39;</span>);
</span></span><span style="display:flex;"><span>  <span style="color:#66d9ef">if</span> (<span style="color:#a6e22e">saved</span> <span style="color:#f92672">===</span> <span style="color:#e6db74">&#39;dark&#39;</span> <span style="color:#f92672">||</span> <span style="color:#a6e22e">saved</span> <span style="color:#f92672">===</span> <span style="color:#e6db74">&#39;light&#39;</span>) {
</span></span><span style="display:flex;"><span>    document.<span style="color:#a6e22e">documentElement</span>.<span style="color:#a6e22e">dataset</span>.<span style="color:#a6e22e">theme</span> <span style="color:#f92672">=</span> <span style="color:#a6e22e">saved</span>;
</span></span><span style="display:flex;"><span>  } <span style="color:#66d9ef">else</span> <span style="color:#66d9ef">if</span> (window.<span style="color:#a6e22e">matchMedia</span>(<span style="color:#e6db74">&#39;(prefers-color-scheme: dark)&#39;</span>).<span style="color:#a6e22e">matches</span>) {
</span></span><span style="display:flex;"><span>    document.<span style="color:#a6e22e">documentElement</span>.<span style="color:#a6e22e">dataset</span>.<span style="color:#a6e22e">theme</span> <span style="color:#f92672">=</span> <span style="color:#e6db74">&#39;dark&#39;</span>;
</span></span><span style="display:flex;"><span>  }
</span></span><span style="display:flex;"><span>})();
</span></span></code></pre></div><p>No flash. The <code>&lt;noscript&gt;</code> tag provides a CSS-only fallback for users with JavaScript disabled.</p>
]]></description></item></channel></rss>