<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
        xmlns:image="http://www.google.com/schemas/sitemap-image/1.1">
  <url>
    <loc>https://nabhpatodi.com/</loc>
    <lastmod>2026-09-20</lastmod>
    <image:image>
      <image:loc>https://nabhpatodi.com/og-card.png</image:loc>
      <image:title>Nabh Patodi | End-to-End Software Development</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://nabhpatodi.com/blog/</loc>
    <lastmod>2026-09-20</lastmod>
  </url>
  <url>
    <loc>https://nabhpatodi.com/services/</loc>
    <lastmod>2026-09-08</lastmod>
  </url>
  <url>
    <loc>https://nabhpatodi.com/services/web-application-development/</loc>
    <lastmod>2026-09-08</lastmod>
  </url>
  <url>
    <loc>https://nabhpatodi.com/services/internal-tools-automation/</loc>
    <lastmod>2026-09-08</lastmod>
  </url>
  <url>
    <loc>https://nabhpatodi.com/services/application-improvement/</loc>
    <lastmod>2026-09-08</lastmod>
  </url>
  <url>
    <loc>https://nabhpatodi.com/work/</loc>
    <lastmod>2026-09-08</lastmod>
  </url>
  <url>
    <loc>https://nabhpatodi.com/work/expense-management-platform/</loc>
    <lastmod>2026-09-08</lastmod>
  </url>
  <url>
    <loc>https://nabhpatodi.com/work/research-ai/</loc>
    <lastmod>2026-09-08</lastmod>
  </url>
  <url>
    <loc>https://nabhpatodi.com/work/comoto-internal-multi-agent-platform/</loc>
    <lastmod>2026-09-08</lastmod>
  </url>
  <url>
    <loc>https://nabhpatodi.com/blog/how-to-track-background-job-progress-in-react-and-fastapi/</loc>
    <lastmod>2026-09-20</lastmod>
    <image:image>
      <image:loc>https://nabhpatodi.com/blog/how-to-track-background-job-progress-in-react-and-fastapi/cover.jpg</image:loc>
      <image:title>How to Track Background Job Progress in React and FastAPI</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://nabhpatodi.com/blog/your-api-accepts-an-idempotency-key-that-does-not-make-it-idempotent/</loc>
    <lastmod>2026-09-13</lastmod>
    <image:image>
      <image:loc>https://nabhpatodi.com/blog/your-api-accepts-an-idempotency-key-that-does-not-make-it-idempotent/cover.jpg</image:loc>
      <image:title>Your API Accepts an Idempotency Key. That Does Not Make It Idempotent.</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://nabhpatodi.com/blog/your-tenant-context-outlives-the-request/</loc>
    <lastmod>2026-09-06</lastmod>
    <image:image>
      <image:loc>https://nabhpatodi.com/blog/your-tenant-context-outlives-the-request/cover.jpg</image:loc>
      <image:title>Your Tenant Context Outlives the Request</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://nabhpatodi.com/blog/your-health-endpoint-is-lying/</loc>
    <lastmod>2026-08-30</lastmod>
    <image:image>
      <image:loc>https://nabhpatodi.com/blog/your-health-endpoint-is-lying/cover.jpg</image:loc>
      <image:title>Your /health Endpoint Is Lying</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://nabhpatodi.com/blog/your-audit-log-is-not-an-audit-trail/</loc>
    <lastmod>2026-08-23</lastmod>
    <image:image>
      <image:loc>https://nabhpatodi.com/blog/your-audit-log-is-not-an-audit-trail/cover.jpg</image:loc>
      <image:title>Your Audit Log Is Not an Audit Trail</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://nabhpatodi.com/blog/your-database-commit-succeeded-your-message-did-not/</loc>
    <lastmod>2026-08-16</lastmod>
    <image:image>
      <image:loc>https://nabhpatodi.com/blog/your-database-commit-succeeded-your-message-did-not/cover.jpg</image:loc>
      <image:title>Your Database Commit Succeeded. Your Message Did Not.</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://nabhpatodi.com/blog/four-decisions-i-made-before-writing-any-features/</loc>
    <lastmod>2026-08-09</lastmod>
    <image:image>
      <image:loc>https://nabhpatodi.com/blog/four-decisions-i-made-before-writing-any-features/cover.jpg</image:loc>
      <image:title>Four Decisions I Made Before Writing Any Features</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://nabhpatodi.com/blog/your-agent-still-has-the-tool-you-revoked/</loc>
    <lastmod>2026-08-02</lastmod>
    <image:image>
      <image:loc>https://nabhpatodi.com/blog/your-agent-still-has-the-tool-you-revoked/cover.jpg</image:loc>
      <image:title>Your Agent Still Has the Tool You Revoked</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://nabhpatodi.com/blog/a-timeout-doesnt-tell-you-whether-the-write-happened/</loc>
    <lastmod>2026-07-26</lastmod>
    <image:image>
      <image:loc>https://nabhpatodi.com/blog/a-timeout-doesnt-tell-you-whether-the-write-happened/cover.jpg</image:loc>
      <image:title>A Timeout Doesn&apos;t Tell You Whether the Write Happened</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://nabhpatodi.com/blog/tracing-a-request-youre-not-allowed-to-log/</loc>
    <lastmod>2026-07-19</lastmod>
    <image:image>
      <image:loc>https://nabhpatodi.com/blog/tracing-a-request-youre-not-allowed-to-log/cover.jpg</image:loc>
      <image:title>Tracing a Request You&apos;re Not Allowed to Log</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://nabhpatodi.com/blog/dont-put-a-model-where-an-if-statement-will-do/</loc>
    <lastmod>2026-07-12</lastmod>
    <image:image>
      <image:loc>https://nabhpatodi.com/blog/dont-put-a-model-where-an-if-statement-will-do/cover.jpg</image:loc>
      <image:title>Don&apos;t Put a Model Where an If-Statement Will Do</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://nabhpatodi.com/blog/generated-charts-are-untrusted-code/</loc>
    <lastmod>2026-07-05</lastmod>
    <image:image>
      <image:loc>https://nabhpatodi.com/blog/generated-charts-are-untrusted-code/cover.jpg</image:loc>
      <image:title>Generated Charts Are Untrusted Code</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://nabhpatodi.com/blog/the-model-wasnt-the-hard-part/</loc>
    <lastmod>2026-06-28</lastmod>
    <image:image>
      <image:loc>https://nabhpatodi.com/blog/the-model-wasnt-the-hard-part/cover.jpg</image:loc>
      <image:title>The Model Wasn&apos;t the Hard Part: My Learnings After Shipping Multi-Agent Systems</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://nabhpatodi.com/blog/retrying-an-ai-agent-is-not-the-same-as-retrying-an-api-call/</loc>
    <lastmod>2026-06-21</lastmod>
    <image:image>
      <image:loc>https://nabhpatodi.com/blog/retrying-an-ai-agent-is-not-the-same-as-retrying-an-api-call/cover.jpg</image:loc>
      <image:title>Retrying an AI Agent Is Not the Same as Retrying an API Call</image:title>
    </image:image>
  </url>
</urlset>
