[{"content":"This is the first post on a new site. If you\u0026amp;rsquo;re reading this, the theme is working.\nWhy this exists Every few years I rebuild my personal site. This time I wanted something that loads fast, looks clean, and gets out of the way.\nThe stack Hugo for static site generation Ink as the theme …","permalink":"https://vinooganesh.github.io/hugo-ink/posts/hello-world/","summary":"This is the first post on a new site. If you\u0026rsquo;re reading this, the theme is working.\nWhy this exists Every few years I rebuild my personal site. This time I wanted something that loads fast, looks clean, and gets out of the way.\nThe stack Hugo for static site generation Ink as the theme Self-hosted Inter font, no external requests Code example package main import \u0026#34;fmt\u0026#34; func main() { fmt.Println(\u0026#34;Hello, world!\u0026#34;) } The best websites are the ones that get out of your way.\n","title":"Hello World"},{"content":"The best websites are the ones that get out of your way. They load instantly, present content clearly, and respect your time.\nSpeed is not just a technical metric — it\u0026amp;rsquo;s a form of respect for your readers. Every kilobyte matters.\nMeasuring what matters curl -s -o /dev/null -w \u0026amp;#34;Total: …","permalink":"https://vinooganesh.github.io/hugo-ink/posts/on-speed-and-simplicity/","summary":"The best websites are the ones that get out of your way. They load instantly, present content clearly, and respect your time.\nSpeed is not just a technical metric — it\u0026rsquo;s a form of respect for your readers. Every kilobyte matters.\nMeasuring what matters curl -s -o /dev/null -w \u0026#34;Total: %{size_download} bytes\\n\u0026#34; https://yoursite.com/ The target: under 100KB for a first page load.\n","title":"On Speed and Simplicity"},{"content":"The web is changing. AI crawlers now read your site alongside traditional search engines. Is your site ready?\nWhat is llms.txt? The llms.txt standard gives AI models a structured entry point to your site\u0026amp;rsquo;s most important content. Think of it as robots.txt for AI.\nJSON-LD structured data { …","permalink":"https://vinooganesh.github.io/hugo-ink/posts/ai-ready-web/","summary":"The web is changing. AI crawlers now read your site alongside traditional search engines. Is your site ready?\nWhat is llms.txt? The llms.txt standard gives AI models a structured entry point to your site\u0026rsquo;s most important content. Think of it as robots.txt for AI.\nJSON-LD structured data { \u0026#34;@context\u0026#34;: \u0026#34;https://schema.org\u0026#34;, \u0026#34;@type\u0026#34;: \u0026#34;Article\u0026#34;, \u0026#34;headline\u0026#34;: \u0026#34;Making Your Site AI-Ready\u0026#34;, \u0026#34;datePublished\u0026#34;: \u0026#34;2026-02-13\u0026#34; } Why it matters When AI tools answer questions, they pull from indexed web content. Clean structured data means your content gets accurately cited.\n","title":"Making Your Site AI-Ready"},{"content":"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.\nThe flash problem Most implementations set the theme with JavaScript after the page renders. Brief flash of the wrong theme.\nThe solution …","permalink":"https://vinooganesh.github.io/hugo-ink/posts/dark-mode-done-right/","summary":"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.\nThe flash problem Most implementations set the theme with JavaScript after the page renders. Brief flash of the wrong theme.\nThe solution Run a tiny inline script in the \u0026lt;head\u0026gt;, before any content renders:\n(function() { var saved = localStorage.getItem(\u0026#39;theme\u0026#39;); if (saved === \u0026#39;dark\u0026#39; || saved === \u0026#39;light\u0026#39;) { document.documentElement.dataset.theme = saved; } else if (window.matchMedia(\u0026#39;(prefers-color-scheme: dark)\u0026#39;).matches) { document.documentElement.dataset.theme = \u0026#39;dark\u0026#39;; } })(); No flash. The \u0026lt;noscript\u0026gt; tag provides a CSS-only fallback for users with JavaScript disabled.\n","title":"Dark Mode Done Right"},{"content":"Hi, I\u0026amp;rsquo;m Vinoo. I\u0026amp;rsquo;m a designer and developer based in San Francisco.\nI\u0026amp;rsquo;ve spent the last decade building products at startups and larger companies. I care about craft, clarity, and making things that work well for people.\nThis site is built with Ink, a minimal Hugo theme designed to …","permalink":"https://vinooganesh.github.io/hugo-ink/about/","summary":"Hi, I\u0026rsquo;m Vinoo. I\u0026rsquo;m a designer and developer based in San Francisco.\nI\u0026rsquo;ve spent the last decade building products at startups and larger companies. I care about craft, clarity, and making things that work well for people.\nThis site is built with Ink, a minimal Hugo theme designed to be fast, readable, and AI-ready.\nIf you\u0026rsquo;d like to get in touch, send me an email.\n","title":"About"},{"content":"What I\u0026amp;rsquo;m working on Building a new product at the intersection of AI and developer tools. Spending most of my time writing Go and thinking about how to make complex systems feel simple.\nWhat I\u0026amp;rsquo;m learning Distributed systems design How LLMs can augment (not replace) creative work Baking …","permalink":"https://vinooganesh.github.io/hugo-ink/now/","summary":"What I\u0026rsquo;m working on Building a new product at the intersection of AI and developer tools. Spending most of my time writing Go and thinking about how to make complex systems feel simple.\nWhat I\u0026rsquo;m learning Distributed systems design How LLMs can augment (not replace) creative work Baking sourdough, still badly What I\u0026rsquo;m reading Designing Data-Intensive Applications by Martin Kleppmann Several Short Sentences About Writing by Verlyn Klinkenborg What I\u0026rsquo;m listening to A lot of ambient music while coding. Tycho, Brian Eno, Nils Frahm.\n","title":"Now"}]