<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Notes | Surendar PD</title>
    <link>https://www.surendarpd.dev/notes/</link>
    <description>Write-ups and how-tos from building on the web.</description>
    <language>en</language>
    <atom:link href="https://www.surendarpd.dev/notes/rss.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Free accessibility checks on every push</title>
      <link>https://www.surendarpd.dev/notes/accessibility-checks-on-every-push/</link>
      <guid isPermaLink="true">https://www.surendarpd.dev/notes/accessibility-checks-on-every-push/</guid>
      <description>axe and Playwright on GitHub Actions, run on every page in both themes: free, about three minutes, and it caught real bugs a manual check missed.</description>
      <pubDate>Wed, 21 Oct 2026 00:00:00 GMT</pubDate>
      <category>Accessibility</category>
      <category>Playwright</category>
      <category>GitHub Actions</category>
      <category>Testing</category>
    </item>
    <item>
      <title>Publish in Sanity, rebuild on Vercel</title>
      <link>https://www.surendarpd.dev/notes/publish-in-sanity-rebuild-on-vercel/</link>
      <guid isPermaLink="true">https://www.surendarpd.dev/notes/publish-in-sanity-rebuild-on-vercel/</guid>
      <description>A filtered Sanity webhook calling a Vercel deploy hook, so publishing content rebuilds the static site, and drafts and unused types don't.</description>
      <pubDate>Fri, 16 Oct 2026 00:00:00 GMT</pubDate>
      <category>Sanity</category>
      <category>Vercel</category>
      <category>Webhooks</category>
      <category>CI/CD</category>
    </item>
    <item>
      <title>Generated share images, no uploads</title>
      <link>https://www.surendarpd.dev/notes/generated-share-images/</link>
      <guid isPermaLink="true">https://www.surendarpd.dev/notes/generated-share-images/</guid>
      <description>Replace hand-made Open Graph images with ones generated from each page's title: free, open source, on brand, and painless across many locales.</description>
      <pubDate>Mon, 12 Oct 2026 00:00:00 GMT</pubDate>
      <category>Open Graph</category>
      <category>SEO</category>
      <category>Astro</category>
      <category>Next.js</category>
      <category>Sanity</category>
    </item>
    <item>
      <title>Build pages in Sanity, not in code</title>
      <link>https://www.surendarpd.dev/notes/build-pages-in-sanity/</link>
      <guid isPermaLink="true">https://www.surendarpd.dev/notes/build-pages-in-sanity/</guid>
      <description>A typed page builder with Sanity and Astro: every page is a document made of designed blocks, one route renders them all, and TypeScript guards the seams.</description>
      <pubDate>Mon, 05 Oct 2026 00:00:00 GMT</pubDate>
      <category>Sanity</category>
      <category>Astro</category>
      <category>TypeScript</category>
      <category>CMS</category>
    </item>
    <item>
      <title>A hotel sales agent that can't make up prices</title>
      <link>https://www.surendarpd.dev/notes/llm-agent-that-cant-make-up-prices/</link>
      <guid isPermaLink="true">https://www.surendarpd.dev/notes/llm-agent-that-cant-make-up-prices/</guid>
      <description>Designing a WhatsApp sales agent for hotels where the model understands and phrases, while code owns prices, dates and leads, and evals gate every change.</description>
      <pubDate>Wed, 24 Jun 2026 00:00:00 GMT</pubDate>
      <category>AI</category>
      <category>LLMs</category>
      <category>RAG</category>
      <category>LangGraph</category>
    </item>
    <item>
      <title>Big uploads straight to storage with signed URLs</title>
      <link>https://www.surendarpd.dev/notes/signed-url-direct-uploads/</link>
      <guid isPermaLink="true">https://www.surendarpd.dev/notes/signed-url-direct-uploads/</guid>
      <description>How a healthcare app uploads large patient videos straight to cloud storage with short-lived signed URLs, so the API never touches the bytes.</description>
      <pubDate>Tue, 16 Sep 2025 00:00:00 GMT</pubDate>
      <category>Node.js</category>
      <category>Google Cloud</category>
      <category>Security</category>
      <category>NestJS</category>
    </item>
    <item>
      <title>Tracking thousands of vehicles live with Redis</title>
      <link>https://www.surendarpd.dev/notes/live-vehicle-tracking-with-redis/</link>
      <guid isPermaLink="true">https://www.surendarpd.dev/notes/live-vehicle-tracking-with-redis/</guid>
      <description>Thousands of drivers reporting every few seconds: Redis geo sets, H3 hexagons, atomic updates and pub/sub for a live map and fast dispatch.</description>
      <pubDate>Tue, 11 Mar 2025 00:00:00 GMT</pubDate>
      <category>Redis</category>
      <category>Real-time</category>
      <category>Geospatial</category>
      <category>WebSockets</category>
    </item>
  </channel>
</rss>
