<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Darshan Turakhia — Blog</title>
    <link>https://darshanturakhia.com/blog</link>
    <description>Full-stack architecture, systems engineering, and developer insights by Darshan Turakhia.</description>
    <language>en-us</language>
    <atom:link href="https://darshanturakhia.com/feed.xml" rel="self" type="application/rss+xml"/>
    
    <item>
      <title>From Vercel to AWS, part 3: the migration playbook</title>
      <link>https://darshanturakhia.com/blog/from-vercel-to-aws-part-3-migration</link>
      <guid isPermaLink="true">https://darshanturakhia.com/blog/from-vercel-to-aws-part-3-migration</guid>
      <description>The migration decision is not technical. It is financial. At $6k/month in platform costs, the AWS equivalent saves $4k. Here is the exact sequence to move without stopping product work.</description>
      <pubDate>Sat, 04 Jul 2026 00:00:00 GMT</pubDate>
      <category>Architecture</category>
    </item>
    <item>
      <title>From Vercel to AWS, part 2: the breaking points</title>
      <link>https://darshanturakhia.com/blog/from-vercel-to-aws-part-2-breaking-points</link>
      <guid isPermaLink="true">https://darshanturakhia.com/blog/from-vercel-to-aws-part-2-breaking-points</guid>
      <description>Your Supabase connection pool is full at 3 AM. Vercel cold starts are appearing in your P99. Railway is CPU-throttling your worker. Not all at once — each signal arrives weeks apart. Here is how to read them.</description>
      <pubDate>Fri, 03 Jul 2026 00:00:00 GMT</pubDate>
      <category>Architecture</category>
    </item>
    <item>
      <title>From Vercel to AWS, part 1: the $50/month stack</title>
      <link>https://darshanturakhia.com/blog/from-vercel-to-aws-part-1-the-stack</link>
      <guid isPermaLink="true">https://darshanturakhia.com/blog/from-vercel-to-aws-part-1-the-stack</guid>
      <description>A three-person team ships a B2B SaaS in four weeks with Vercel, Supabase, Railway, and Upstash. Total monthly cost: $47. Three months later it&apos;s still holding at 200 customers. This is not an accident.</description>
      <pubDate>Thu, 02 Jul 2026 00:00:00 GMT</pubDate>
      <category>Architecture</category>
    </item>
    <item>
      <title>Agents in production, part 3: the 2,000-person enterprise</title>
      <link>https://darshanturakhia.com/blog/agents-in-production-part-3-enterprise</link>
      <guid isPermaLink="true">https://darshanturakhia.com/blog/agents-in-production-part-3-enterprise</guid>
      <description>Thirty teams, each running agents independently. One shared LLM quota. No visibility across team boundaries. The cost bill triples in sixty days and nobody knows why.</description>
      <pubDate>Wed, 01 Jul 2026 00:00:00 GMT</pubDate>
      <category>Architecture</category>
    </item>
    <item>
      <title>Agents in production, part 2: the 150-person scale-up</title>
      <link>https://darshanturakhia.com/blog/agents-in-production-part-2-scaleup</link>
      <guid isPermaLink="true">https://darshanturakhia.com/blog/agents-in-production-part-2-scaleup</guid>
      <description>Multi-step agent chains break in ways single LLM calls do not. When step 3 fails, you have no idea which step produced bad data, and retries re-run everything from the start.</description>
      <pubDate>Sat, 27 Jun 2026 00:00:00 GMT</pubDate>
      <category>Architecture</category>
    </item>
    <item>
      <title>Event-driven architecture patterns that actually work</title>
      <link>https://darshanturakhia.com/blog/event-driven-architecture-patterns</link>
      <guid isPermaLink="true">https://darshanturakhia.com/blog/event-driven-architecture-patterns</guid>
      <description>Domain events, event sourcing, the outbox pattern, and consumer groups — the event-driven patterns I use in production and the tradeoffs you need to understand before adopting them.</description>
      <pubDate>Sat, 27 Jun 2026 00:00:00 GMT</pubDate>
      <category>Architecture</category>
    </item>
    <item>
      <title>Agents in production, part 1: the 20-person startup</title>
      <link>https://darshanturakhia.com/blog/agents-in-production-part-1-startup</link>
      <guid isPermaLink="true">https://darshanturakhia.com/blog/agents-in-production-part-1-startup</guid>
      <description>Most startups already have the queue-based foundation LLMs need. The problem is how they wire the LLM in — synchronously, inline, with no fallback.</description>
      <pubDate>Fri, 26 Jun 2026 00:00:00 GMT</pubDate>
      <category>Architecture</category>
    </item>
    <item>
      <title>Node.js streams: processing gigabytes of data without loading it into memory</title>
      <link>https://darshanturakhia.com/blog/nodejs-stream-processing</link>
      <guid isPermaLink="true">https://darshanturakhia.com/blog/nodejs-stream-processing</guid>
      <description>Node.js streams pipe data through transforms without buffering. Here is the practical pattern for CSV processing, HTTP responses, and file transformations.</description>
      <pubDate>Wed, 10 Jun 2026 00:00:00 GMT</pubDate>
      <category>NodeJS</category>
    </item>
    <item>
      <title>FastAPI WebSockets: building real-time features without a separate service</title>
      <link>https://darshanturakhia.com/blog/fastapi-websocket-realtime</link>
      <guid isPermaLink="true">https://darshanturakhia.com/blog/fastapi-websocket-realtime</guid>
      <description>FastAPI has first-class WebSocket support. Here is the complete pattern for connection management, broadcasting to rooms, and handling reconnections.</description>
      <pubDate>Sun, 07 Jun 2026 00:00:00 GMT</pubDate>
      <category>Python</category>
    </item>
    <item>
      <title>Postgres materialized views turned my 12-second report query into 50ms</title>
      <link>https://darshanturakhia.com/blog/postgres-materialized-views-refresh</link>
      <guid isPermaLink="true">https://darshanturakhia.com/blog/postgres-materialized-views-refresh</guid>
      <description>Materialized views pre-compute expensive queries and store the results. With CONCURRENTLY refresh, you get zero-downtime updates. Here is the complete pattern.</description>
      <pubDate>Sat, 06 Jun 2026 00:00:00 GMT</pubDate>
      <category>Database</category>
    </item>
    <item>
      <title>Next.js Image component features most developers skip over</title>
      <link>https://darshanturakhia.com/blog/nextjs-image-component-optimization</link>
      <guid isPermaLink="true">https://darshanturakhia.com/blog/nextjs-image-component-optimization</guid>
      <description>Beyond basic usage, the Next.js Image component has placeholder blurs, priority loading, art direction with different sizes, and fill mode for responsive containers.</description>
      <pubDate>Fri, 05 Jun 2026 00:00:00 GMT</pubDate>
      <category>React</category>
    </item>
    <item>
      <title>Using Claude as your regex generator and explainer</title>
      <link>https://darshanturakhia.com/blog/claude-regex-pattern-generator</link>
      <guid isPermaLink="true">https://darshanturakhia.com/blog/claude-regex-pattern-generator</guid>
      <description>Regex is powerful and unreadable. I use Claude to generate patterns from plain English, explain existing ones, and build test suites — all without opening a regex reference.</description>
      <pubDate>Fri, 05 Jun 2026 00:00:00 GMT</pubDate>
      <category>Claude</category>
    </item>
    <item>
      <title>How I use Claude as a system design interview practice partner</title>
      <link>https://darshanturakhia.com/blog/claude-system-design-interview-prep</link>
      <guid isPermaLink="true">https://darshanturakhia.com/blog/claude-system-design-interview-prep</guid>
      <description>Claude can roleplay as a skeptical interviewer who pushes back on your design decisions. Here is the exact setup that makes the practice sessions feel like real interviews.</description>
      <pubDate>Thu, 04 Jun 2026 00:00:00 GMT</pubDate>
      <category>Claude</category>
    </item>
    <item>
      <title>Claude gives you structured JSON output every time with this one trick</title>
      <link>https://darshanturakhia.com/blog/claude-structured-output-api-design</link>
      <guid isPermaLink="true">https://darshanturakhia.com/blog/claude-structured-output-api-design</guid>
      <description>Using a dummy tool call to force Claude to return structured JSON is more reliable than prompt-based instructions. Here is the pattern with real examples.</description>
      <pubDate>Wed, 03 Jun 2026 00:00:00 GMT</pubDate>
      <category>Claude</category>
    </item>
    <item>
      <title>I paste slow SQL queries into Claude and get optimized versions back instantly</title>
      <link>https://darshanturakhia.com/blog/claude-sql-query-optimizer</link>
      <guid isPermaLink="true">https://darshanturakhia.com/blog/claude-sql-query-optimizer</guid>
      <description>The prompt pattern that gets Claude to rewrite slow SQL with CTEs, proper indexes, and query plan analysis — turning 8-second queries into 200ms ones.</description>
      <pubDate>Sat, 30 May 2026 00:00:00 GMT</pubDate>
      <category>Claude</category>
    </item>
    <item>
      <title>I use Claude Projects to onboard engineers 3x faster — here&apos;s the setup</title>
      <link>https://darshanturakhia.com/blog/claude-projects-team-onboarding</link>
      <guid isPermaLink="true">https://darshanturakhia.com/blog/claude-projects-team-onboarding</guid>
      <description>Claude Projects with the right context files turns new engineer onboarding from a week-long process into a few focused hours. Here is exactly what I put in each project.</description>
      <pubDate>Fri, 29 May 2026 00:00:00 GMT</pubDate>
      <category>Claude</category>
    </item>
    <item>
      <title>WebMCP: how websites will talk to AI agents natively</title>
      <link>https://darshanturakhia.com/blog/webmcp-browser-ai-agents-standard</link>
      <guid isPermaLink="true">https://darshanturakhia.com/blog/webmcp-browser-ai-agents-standard</guid>
      <description>Google&apos;s WebMCP lets sites expose structured tools so browser agents skip the DOM guessing and call functions directly. Chrome 149 origin trial opens June 2.</description>
      <pubDate>Sat, 30 May 2026 00:00:00 GMT</pubDate>
      <category>Web</category>
    </item>
    <item>
      <title>Why I switched my agent&apos;s inner loop from Claude to Gemini 3.5 Flash</title>
      <link>https://darshanturakhia.com/blog/gemini-flash-agentic-loops-latency</link>
      <guid isPermaLink="true">https://darshanturakhia.com/blog/gemini-flash-agentic-loops-latency</guid>
      <description>A Claude-based code review agent was taking 36 seconds per request — 12 steps at 3 seconds each. Switching the inner loop to Gemini 3.5 Flash cut it to under 10 seconds with no quality drop.</description>
      <pubDate>Wed, 03 Jun 2026 00:00:00 GMT</pubDate>
      <category>Gemini</category>
    </item>
    <item>
      <title>Claude Opus 4.8: benchmarks, new features, and what changed</title>
      <link>https://darshanturakhia.com/blog/claude-opus-4-8-released</link>
      <guid isPermaLink="true">https://darshanturakhia.com/blog/claude-opus-4-8-released</guid>
      <description>Claude Opus 4.8: 96.7% on USAMO math, 88.6% SWE-bench Verified, 0% silent flaw rate. Full breakdown of benchmarks, new features, and what it means for engineers.</description>
      <pubDate>Fri, 29 May 2026 00:00:00 GMT</pubDate>
      <category>AI</category>
    </item>
    <item>
      <title>I was running meeting audio through two APIs. Gemini collapsed it into one.</title>
      <link>https://darshanturakhia.com/blog/gemini-audio-video-pipeline-simplification</link>
      <guid isPermaLink="true">https://darshanturakhia.com/blog/gemini-audio-video-pipeline-simplification</guid>
      <description>Running audio through Whisper then GPT-4 was two API calls, two billing accounts, and a temp file in the middle. Gemini accepts the audio directly and returns structured output.</description>
      <pubDate>Sun, 17 May 2026 00:00:00 GMT</pubDate>
      <category>Gemini</category>
    </item>
    <item>
      <title>What becomes possible when you stop chunking your codebase</title>
      <link>https://darshanturakhia.com/blog/gemini-1m-context-window-large-codebase</link>
      <guid isPermaLink="true">https://darshanturakhia.com/blog/gemini-1m-context-window-large-codebase</guid>
      <description>After hitting Claude&apos;s 200K limit on a 300K-token codebase, I switched to Gemini and fed the whole thing at once. Here&apos;s what changed.</description>
      <pubDate>Sat, 16 May 2026 00:00:00 GMT</pubDate>
      <category>Gemini</category>
    </item>
    <item>
      <title>Gemini 3.5 Flash beats last year&apos;s Pro on coding. Here is what that means</title>
      <link>https://darshanturakhia.com/blog/gemini-25-models-guide</link>
      <guid isPermaLink="true">https://darshanturakhia.com/blog/gemini-25-models-guide</guid>
      <description>Google released Gemini 3.5 Flash at I/O 2026 and it outperforms Gemini 3.1 Pro on 11 of 15 benchmarks. Here is a breakdown of what changed, where it wins, and where 3.1 Pro still holds.</description>
      <pubDate>Fri, 15 May 2026 00:00:00 GMT</pubDate>
      <category>Gemini</category>
    </item>
    <item>
      <title>From git diff to perfect PR description in 2 minutes using Claude</title>
      <link>https://darshanturakhia.com/blog/claude-pr-description-two-minutes</link>
      <guid isPermaLink="true">https://darshanturakhia.com/blog/claude-pr-description-two-minutes</guid>
      <description>I wrote a shell alias that pipes git diff to Claude and gets a structured PR description back. The whole workflow takes under two minutes and reviewers actually thank me now.</description>
      <pubDate>Thu, 28 May 2026 00:00:00 GMT</pubDate>
      <category>Claude</category>
    </item>
    <item>
      <title>Claude generates OpenAPI specs from existing code in minutes</title>
      <link>https://darshanturakhia.com/blog/claude-openapi-spec-from-codebase</link>
      <guid isPermaLink="true">https://darshanturakhia.com/blog/claude-openapi-spec-from-codebase</guid>
      <description>I had 40 undocumented API endpoints. Claude read the route handlers and generated a complete OpenAPI 3.1 spec in one afternoon. Here is the workflow.</description>
      <pubDate>Wed, 27 May 2026 00:00:00 GMT</pubDate>
      <category>Claude</category>
    </item>
    <item>
      <title>How I use Claude to navigate a 200K-line monorepo without getting lost</title>
      <link>https://darshanturakhia.com/blog/claude-monorepo-navigation</link>
      <guid isPermaLink="true">https://darshanturakhia.com/blog/claude-monorepo-navigation</guid>
      <description>A three-layer context strategy for using Claude on large codebases — global map, service summary, and targeted file context — that fits within any context window.</description>
      <pubDate>Sat, 23 May 2026 00:00:00 GMT</pubDate>
      <category>Claude</category>
    </item>
    <item>
      <title>I built a custom MCP server in 30 minutes and Claude gained superpowers</title>
      <link>https://darshanturakhia.com/blog/claude-mcp-custom-server-build</link>
      <guid isPermaLink="true">https://darshanturakhia.com/blog/claude-mcp-custom-server-build</guid>
      <description>The Model Context Protocol lets you give Claude access to any tool, database, or API. Here is the exact pattern I use to build MCP servers in under an hour.</description>
      <pubDate>Sat, 23 May 2026 00:00:00 GMT</pubDate>
      <category>Claude</category>
    </item>
    <item>
      <title>I use Claude to review Terraform before every apply — it finds what I miss</title>
      <link>https://darshanturakhia.com/blog/claude-infrastructure-as-code-review</link>
      <guid isPermaLink="true">https://darshanturakhia.com/blog/claude-infrastructure-as-code-review</guid>
      <description>A pre-apply Claude review of Terraform plans catches security misconfigurations, overly permissive IAM policies, and missing deletion protection that human reviewers routinely miss.</description>
      <pubDate>Mon, 18 May 2026 00:00:00 GMT</pubDate>
      <category>Claude</category>
    </item>
    <item>
      <title>I use Claude to audit npm dependencies before every major upgrade</title>
      <link>https://darshanturakhia.com/blog/claude-dependency-audit-workflow</link>
      <guid isPermaLink="true">https://darshanturakhia.com/blog/claude-dependency-audit-workflow</guid>
      <description>A workflow that uses Claude to analyze breaking changes, identify risky dependencies, and generate a prioritized upgrade plan — before you run npm update.</description>
      <pubDate>Sun, 17 May 2026 00:00:00 GMT</pubDate>
      <category>Claude</category>
    </item>
    <item>
      <title>Claude&apos;s extended thinking mode solves bugs I had given up on</title>
      <link>https://darshanturakhia.com/blog/claude-debugging-think-mode</link>
      <guid isPermaLink="true">https://darshanturakhia.com/blog/claude-debugging-think-mode</guid>
      <description>Extended thinking gives Claude time to reason through complex, multi-layer bugs before answering. Here is when to use it and the prompt structure that works best.</description>
      <pubDate>Sun, 17 May 2026 00:00:00 GMT</pubDate>
      <category>Claude</category>
    </item>
    <item>
      <title>I use Claude to design data pipelines from rough specs in one afternoon</title>
      <link>https://darshanturakhia.com/blog/claude-data-pipeline-design</link>
      <guid isPermaLink="true">https://darshanturakhia.com/blog/claude-data-pipeline-design</guid>
      <description>The iterative Claude workflow that turns a rough product requirement into a complete ETL pipeline design with schema, error handling, and monitoring strategy.</description>
      <pubDate>Wed, 06 May 2026 00:00:00 GMT</pubDate>
      <category>Claude</category>
    </item>
    <item>
      <title>How I use Claude&apos;s 200K context window without burning my API budget</title>
      <link>https://darshanturakhia.com/blog/claude-context-window-strategy</link>
      <guid isPermaLink="true">https://darshanturakhia.com/blog/claude-context-window-strategy</guid>
      <description>A 200K context window is powerful but expensive if you fill it carelessly. Here are the strategies I use to send the right context, not all the context.</description>
      <pubDate>Thu, 30 Apr 2026 00:00:00 GMT</pubDate>
      <category>Claude</category>
    </item>
    <item>
      <title>My Claude code review workflow catches things I always miss manually</title>
      <link>https://darshanturakhia.com/blog/claude-code-review-workflow</link>
      <guid isPermaLink="true">https://darshanturakhia.com/blog/claude-code-review-workflow</guid>
      <description>A structured prompt that uses Claude to review code for security issues, performance problems, and API design consistency — the things humans skip when tired.</description>
      <pubDate>Sat, 25 Apr 2026 00:00:00 GMT</pubDate>
      <category>Claude</category>
    </item>
    <item>
      <title>I automated changelog generation with Claude and git log — never again manually</title>
      <link>https://darshanturakhia.com/blog/claude-changelog-generation</link>
      <guid isPermaLink="true">https://darshanturakhia.com/blog/claude-changelog-generation</guid>
      <description>A script that turns raw git log into polished, user-facing changelogs grouped by type. Takes 30 seconds instead of 30 minutes before every release.</description>
      <pubDate>Thu, 23 Apr 2026 00:00:00 GMT</pubDate>
      <category>Claude</category>
    </item>
    <item>
      <title>Claude&apos;s Batch API cuts my AI processing costs by 50% for overnight jobs</title>
      <link>https://darshanturakhia.com/blog/claude-batch-api-background-tasks</link>
      <guid isPermaLink="true">https://darshanturakhia.com/blog/claude-batch-api-background-tasks</guid>
      <description>The Message Batches API processes up to 10,000 requests asynchronously at half the price. Perfect for document processing, classification, and content generation jobs.</description>
      <pubDate>Thu, 23 Apr 2026 00:00:00 GMT</pubDate>
      <category>Claude</category>
    </item>
    <item>
      <title>Claude writes better API documentation than most humans do — here&apos;s the prompt</title>
      <link>https://darshanturakhia.com/blog/claude-api-documentation-from-code</link>
      <guid isPermaLink="true">https://darshanturakhia.com/blog/claude-api-documentation-from-code</guid>
      <description>The prompt that turns a raw TypeScript function signature into complete API documentation with examples, error descriptions, and edge case notes.</description>
      <pubDate>Thu, 16 Apr 2026 00:00:00 GMT</pubDate>
      <category>Claude</category>
    </item>
    <item>
      <title>1.2s → 85ms. The LATERAL join 90% of devs have never written.</title>
      <link>https://darshanturakhia.com/blog/postgres-lateral-joins-replaced-loops</link>
      <guid isPermaLink="true">https://darshanturakhia.com/blog/postgres-lateral-joins-replaced-loops</guid>
      <description>Four nested Python loops. One slow endpoint. I replaced all of it with one Postgres LATERAL join. Most backend devs don&apos;t know it exists.</description>
      <pubDate>Wed, 15 Apr 2026 00:00:00 GMT</pubDate>
      <category>Database</category>
    </item>
    <item>
      <title>FastAPI Depends() — the pattern I learned 7 weeks too late</title>
      <link>https://darshanturakhia.com/blog/fastapi-depends-pattern-every-project</link>
      <guid isPermaLink="true">https://darshanturakhia.com/blog/fastapi-depends-pattern-every-project</guid>
      <description>Tutorials show you Depends() in week 1. Nobody shows you composition until your auth is already a mess. The 4-day refactor I could have skipped.</description>
      <pubDate>Sat, 11 Apr 2026 00:00:00 GMT</pubDate>
      <category>Python</category>
    </item>
    <item>
      <title>React Query changed how I think about state — and I have not used Redux since</title>
      <link>https://darshanturakhia.com/blog/react-query-replaced-redux-server-state</link>
      <guid isPermaLink="true">https://darshanturakhia.com/blog/react-query-replaced-redux-server-state</guid>
      <description>The server state vs client state distinction that React Query makes explicit replaced my need for Redux entirely. Here is the mental model shift.</description>
      <pubDate>Fri, 10 Apr 2026 00:00:00 GMT</pubDate>
      <category>React</category>
    </item>
    <item>
      <title>Your Next.js app has 3 dead API routes. Most teams miss it.</title>
      <link>https://darshanturakhia.com/blog/nextjs-server-actions-removed-api-layer</link>
      <guid isPermaLink="true">https://darshanturakhia.com/blog/nextjs-server-actions-removed-api-layer</guid>
      <description>Profile, notifications, settings — 3 routes I deleted last month. Server Actions made them obsolete and most teams haven&apos;t noticed yet.</description>
      <pubDate>Thu, 09 Apr 2026 00:00:00 GMT</pubDate>
      <category>React</category>
    </item>
    <item>
      <title>The Claude extended thinking mode that changes how I debug hard problems</title>
      <link>https://darshanturakhia.com/blog/claude-extended-thinking-debug-complex-bugs</link>
      <guid isPermaLink="true">https://darshanturakhia.com/blog/claude-extended-thinking-debug-complex-bugs</guid>
      <description>Most engineers use Claude like a search engine. Turn on extended thinking and it reasons through your problem like a senior engineer thinking out loud — the difference is remarkable.</description>
      <pubDate>Fri, 03 Apr 2026 00:00:00 GMT</pubDate>
      <category>Claude</category>
    </item>
    <item>
      <title>The React pattern that eliminated 80% of my useEffect calls</title>
      <link>https://darshanturakhia.com/blog/react-eliminate-useeffect-derived-state</link>
      <guid isPermaLink="true">https://darshanturakhia.com/blog/react-eliminate-useeffect-derived-state</guid>
      <description>Most useEffect calls are just bad data derivation. Here is the derived state pattern that cleaned up years of accumulated complexity in my React components.</description>
      <pubDate>Wed, 08 Apr 2026 00:00:00 GMT</pubDate>
      <category>React</category>
    </item>
    <item>
      <title>The Claude tool use pattern I copy-paste into every AI project</title>
      <link>https://darshanturakhia.com/blog/claude-tool-use-pattern-every-project</link>
      <guid isPermaLink="true">https://darshanturakhia.com/blog/claude-tool-use-pattern-every-project</guid>
      <description>The exact function calling pattern for Claude tools — structured output, error handling, retries — that saves 2 hours per project. Here is the reusable ToolRunner class.</description>
      <pubDate>Sat, 04 Apr 2026 00:00:00 GMT</pubDate>
      <category>Claude</category>
    </item>
    <item>
      <title>I stopped writing boilerplate. Claude generates it from a single comment</title>
      <link>https://darshanturakhia.com/blog/claude-boilerplate-from-comment</link>
      <guid isPermaLink="true">https://darshanturakhia.com/blog/claude-boilerplate-from-comment</guid>
      <description>The prompting pattern that generates production-ready code with type hints, error handling, and tests — from a single comment. The secret is not the prompt itself.</description>
      <pubDate>Fri, 03 Apr 2026 00:00:00 GMT</pubDate>
      <category>Claude</category>
    </item>
    <item>
      <title>Claude can hold your entire codebase in memory — here&apos;s what I built with that</title>
      <link>https://darshanturakhia.com/blog/claude-codebase-context-what-i-built</link>
      <guid isPermaLink="true">https://darshanturakhia.com/blog/claude-codebase-context-what-i-built</guid>
      <description>Most engineers use Claude for snippets. I started feeding it my entire repo — and it changed how I do architecture reviews, refactors, and onboarding.</description>
      <pubDate>Thu, 02 Apr 2026 00:00:00 GMT</pubDate>
      <category>Claude</category>
    </item>
    <item>
      <title>The Claude API feature that cut my AI costs by 80% overnight</title>
      <link>https://darshanturakhia.com/blog/claude-prompt-caching-cut-ai-costs</link>
      <guid isPermaLink="true">https://darshanturakhia.com/blog/claude-prompt-caching-cut-ai-costs</guid>
      <description>Most engineers send the full context on every Claude API call. There&apos;s a built-in feature that changes that — and most people have never heard of it.</description>
      <pubDate>Tue, 31 Mar 2026 00:00:00 GMT</pubDate>
      <category>Claude</category>
    </item>
    <item>
      <title>The MCP Server That Gave Our AI Coding Agent Production Write Access for 11 Days</title>
      <link>https://darshanturakhia.com/blog/mcp-server-prod-db-write-access-incident</link>
      <guid isPermaLink="true">https://darshanturakhia.com/blog/mcp-server-prod-db-write-access-incident</guid>
      <description>A misconfigured Model Context Protocol server quietly connected our AI coding assistant directly to production PostgreSQL. For 11 days it only read. On day 12 it wrote — and we noticed too late.</description>
      <pubDate>Sat, 28 Mar 2026 00:00:00 GMT</pubDate>
      <category>Security</category>
    </item>
    <item>
      <title>The Prompt Injection That Silently Leaked Customer Data for 72 Hours</title>
      <link>https://darshanturakhia.com/blog/prompt-injection-ai-agent-data-leak</link>
      <guid isPermaLink="true">https://darshanturakhia.com/blog/prompt-injection-ai-agent-data-leak</guid>
      <description>Our AI support agent was exfiltrating customer ticket data for three days before a cost anomaly alert fired. Here is what we missed and how we fixed it.</description>
      <pubDate>Fri, 27 Mar 2026 00:00:00 GMT</pubDate>
      <category>Security</category>
    </item>
    <item>
      <title>Our AI Rate Limiter Decided 0 Requests Per Second Was the Correct Limit at 2 AM</title>
      <link>https://darshanturakhia.com/blog/ai-rate-limiter-zero-rps</link>
      <guid isPermaLink="true">https://darshanturakhia.com/blog/ai-rate-limiter-zero-rps</guid>
      <description>We built an AI-powered adaptive rate limiter that monitored traffic patterns and adjusted limits automatically. At 2:07 AM on a Saturday, it analyzed an anomalous traffic spike, classified it as a DDoS attack, and set our public API rate limit to 0 requests per second. It was our own mobile app doing a scheduled sync.</description>
      <pubDate>Fri, 27 Mar 2026 00:00:00 GMT</pubDate>
      <category>AI</category>
    </item>
    <item>
      <title>We Let Claude Write Our Database Migrations — Here&apos;s What It Silently Deleted</title>
      <link>https://darshanturakhia.com/blog/claude-wrote-db-migrations-deleted-data</link>
      <guid isPermaLink="true">https://darshanturakhia.com/blog/claude-wrote-db-migrations-deleted-data</guid>
      <description>We used Claude to clean up deprecated columns from our users table. The migration ran in 180ms. What we didn&apos;t know: a billing service in a separate repo was still reading those columns. 3,200 invoices went out with blank shipping addresses before anyone noticed. Recovery took 14 hours.</description>
      <pubDate>Thu, 26 Mar 2026 00:00:00 GMT</pubDate>
      <category>AI</category>
    </item>
    <item>
      <title>We Asked GPT-4 to Review Our Pull Requests for 30 Days — It Approved the Bug That Took Down Prod</title>
      <link>https://darshanturakhia.com/blog/ai-pr-reviewer-approved-bug</link>
      <guid isPermaLink="true">https://darshanturakhia.com/blog/ai-pr-reviewer-approved-bug</guid>
      <description>We integrated GPT-4 as an automated code reviewer into our GitHub Actions pipeline. Over 30 days it caught 61 real issues. Then it approved a subtle auth bypass that left 23 admin routes unprotected for 11 days — because the bug lived across three files that were never in the diff.</description>
      <pubDate>Wed, 25 Mar 2026 00:00:00 GMT</pubDate>
      <category>AI</category>
    </item>
    <item>
      <title>Our Next.js Middleware Silently Bypassed Auth on 23 Admin Routes for 11 Days</title>
      <link>https://darshanturakhia.com/blog/nextjs-middleware-edge-auth-bypass</link>
      <guid isPermaLink="true">https://darshanturakhia.com/blog/nextjs-middleware-edge-auth-bypass</guid>
      <description>After migrating to Next.js 15 App Router, our JWT verification middleware silently failed on Edge Runtime — leaving 23 admin API routes accessible without a valid token for 11 days before a security audit caught it.</description>
      <pubDate>Tue, 24 Mar 2026 00:00:00 GMT</pubDate>
      <category>Security</category>
    </item>
    <item>
      <title>One kafka-consumer-groups.sh Command Sent $180k in Duplicate Payments</title>
      <link>https://darshanturakhia.com/blog/kafka-offset-reset-duplicate-payments</link>
      <guid isPermaLink="true">https://darshanturakhia.com/blog/kafka-offset-reset-duplicate-payments</guid>
      <description>A single Kafka offset reset to --to-earliest replayed 3 hours of payment events on a live consumer group. Here is exactly what happened and how we fixed it.</description>
      <pubDate>Sat, 21 Mar 2026 00:00:00 GMT</pubDate>
      <category>Architecture</category>
    </item>
    <item>
      <title>The CodePush Update That Silently Bricked 40,000 React Native Users for 72 Hours</title>
      <link>https://darshanturakhia.com/blog/react-native-codepush-bundle-corruption-40k-users</link>
      <guid isPermaLink="true">https://darshanturakhia.com/blog/react-native-codepush-bundle-corruption-40k-users</guid>
      <description>We pushed a JavaScript bundle via CodePush — no app store review, instant delivery, zero validation. By the time Sentry caught it, 40,000 users had a white screen and no clean rollback path existed.</description>
      <pubDate>Sat, 21 Mar 2026 00:00:00 GMT</pubDate>
      <category>Mobile</category>
    </item>
    <item>
      <title>Our Blue-Green Deploy Corrupted 3,200 Records in 11 Minutes</title>
      <link>https://darshanturakhia.com/blog/blue-green-column-rename-data-corruption</link>
      <guid isPermaLink="true">https://darshanturakhia.com/blog/blue-green-column-rename-data-corruption</guid>
      <description>We had blue-green deployments, health checks, and automatic rollbacks. Then a single column rename executed during the deploy window and our old containers spent 11 minutes writing to a column that no longer existed.</description>
      <pubDate>Tue, 17 Mar 2026 00:00:00 GMT</pubDate>
      <category>CI/CD</category>
    </item>
    <item>
      <title>The AI-Generated Migration That Dropped the Wrong Index and Took Our API from 3ms to 45 Seconds</title>
      <link>https://darshanturakhia.com/blog/ai-dropped-wrong-index-migration-query-spike</link>
      <guid isPermaLink="true">https://darshanturakhia.com/blog/ai-dropped-wrong-index-migration-query-spike</guid>
      <description>We asked an AI coding assistant to clean up redundant PostgreSQL indexes. It dropped the wrong one. API latency jumped from 3ms to 45 seconds. Here is what a 3.5-hour investigation taught us about trusting AI with schema changes.</description>
      <pubDate>Tue, 17 Mar 2026 00:00:00 GMT</pubDate>
      <category>AI</category>
    </item>
    <item>
      <title>ECS Autoscaling Fought Our Postgres max_connections at 2AM and Postgres Won</title>
      <link>https://darshanturakhia.com/blog/ecs-autoscaling-postgres-max-connections</link>
      <guid isPermaLink="true">https://darshanturakhia.com/blog/ecs-autoscaling-postgres-max-connections</guid>
      <description>We scaled to 38 ECS tasks during a flash sale. Each task held 10 Postgres connections. Our RDS instance allowed 170. The math was never going to work.</description>
      <pubDate>Mon, 16 Mar 2026 00:00:00 GMT</pubDate>
      <category>Database</category>
    </item>
    <item>
      <title>The AI Agent That Cleaned Up Our K8s Manifests and Crashed Production</title>
      <link>https://darshanturakhia.com/blog/ai-agent-k8s-resource-limits-oom-cascade</link>
      <guid isPermaLink="true">https://darshanturakhia.com/blog/ai-agent-k8s-resource-limits-oom-cascade</guid>
      <description>We let a Cursor AI agent refactor our Kubernetes deployment files to remove boilerplate. Six hours later, 34% of requests were failing as pods OOMKilled faster than they could restart.</description>
      <pubDate>Sun, 15 Mar 2026 00:00:00 GMT</pubDate>
      <category>AI</category>
    </item>
    <item>
      <title>We Upgraded Our Embedding Model and Our RAG Pipeline Returned Wrong Results for 6 Days</title>
      <link>https://darshanturakhia.com/blog/rag-embedding-model-upgrade-silent-wrong-results</link>
      <guid isPermaLink="true">https://darshanturakhia.com/blog/rag-embedding-model-upgrade-silent-wrong-results</guid>
      <description>We upgraded from text-embedding-ada-002 to text-embedding-3-large without re-embedding our 2.3M documents. Cosine similarity searches silently returned wrong content for six days — valid JSON, HTTP 200, completely wrong answers.</description>
      <pubDate>Sun, 15 Mar 2026 00:00:00 GMT</pubDate>
      <category>AI</category>
    </item>
    <item>
      <title>We Found Our .env File in 47 Public Forks After a Junior Dev&apos;s First Open Source PR</title>
      <link>https://darshanturakhia.com/blog/env-file-47-forks-junior-dev-pr</link>
      <guid isPermaLink="true">https://darshanturakhia.com/blog/env-file-47-forks-junior-dev-pr</guid>
      <description>A junior developer forked our private repo to submit a bug fix, unknowingly committed our .env file, and GitHub indexed it. We had production credentials exposed in 47 public forks before anyone noticed.</description>
      <pubDate>Mon, 16 Mar 2026 00:00:00 GMT</pubDate>
      <category>Security</category>
    </item>
    <item>
      <title>We Set temperature=0 and GPT-4 Still Gave Different Answers — Our Entire CI Pipeline Broke</title>
      <link>https://darshanturakhia.com/blog/gpt4-nondeterminism-broke-ci-pipeline</link>
      <guid isPermaLink="true">https://darshanturakhia.com/blog/gpt4-nondeterminism-broke-ci-pipeline</guid>
      <description>We built an automated code review pipeline that used GPT-4 with temperature=0 to enforce consistent output. After OpenAI silently updated the model behind the same API endpoint, our determinism assumption collapsed — tests started flipping between pass and fail on identical inputs, and we couldn&apos;t reproduce failures locally.</description>
      <pubDate>Wed, 18 Mar 2026 00:00:00 GMT</pubDate>
      <category>AI</category>
    </item>
    <item>
      <title>Our OpenAI Bill Went From $23 to $4,200 in 48 Hours — A Missing Stop Sequence Did It</title>
      <link>https://darshanturakhia.com/blog/openai-bill-4200-dollars-missing-stop-token</link>
      <guid isPermaLink="true">https://darshanturakhia.com/blog/openai-bill-4200-dollars-missing-stop-token</guid>
      <description>We built a feedback-processing pipeline that used GPT-4 to categorise and summarise user feedback. A single missing stop sequence caused the model to loop indefinitely, generating 40-million tokens of circular output over a holiday weekend while our alerts stayed quiet.</description>
      <pubDate>Tue, 17 Mar 2026 00:00:00 GMT</pubDate>
      <category>AI</category>
    </item>
    <item>
      <title>Our AI Documentation Bot Invented 14 API Routes That Never Existed — 6,000 Users Integrated Against Them</title>
      <link>https://darshanturakhia.com/blog/llm-hallucinated-api-routes-production</link>
      <guid isPermaLink="true">https://darshanturakhia.com/blog/llm-hallucinated-api-routes-production</guid>
      <description>We shipped an LLM-powered documentation assistant trained on our API docs. Within three weeks, it had confidently hallucinated 14 non-existent endpoints. Developers built integrations against them. Support tickets arrived. We had to choose between breaking those integrations or actually building the routes the AI had promised.</description>
      <pubDate>Mon, 16 Mar 2026 00:00:00 GMT</pubDate>
      <category>AI</category>
    </item>
    <item>
      <title>How a GitHub Actions Cache Hit Skipped Our Tests and Shipped a Regression to 12,000 Users</title>
      <link>https://darshanturakhia.com/blog/github-actions-cache-test-skip-regression</link>
      <guid isPermaLink="true">https://darshanturakhia.com/blog/github-actions-cache-test-skip-regression</guid>
      <description>Our CI pipeline showed green for six consecutive deploys while never running the new test files we added. A cache key tied only to package-lock.json silently restored stale compiled test artifacts — new tests never compiled, never ran, and a broken discount-code checkout reached production for 6 hours.</description>
      <pubDate>Sun, 15 Mar 2026 00:00:00 GMT</pubDate>
      <category>CI/CD</category>
    </item>
    <item>
      <title>How a NOT NULL Column Migration Locked Our Users Table for 14 Minutes</title>
      <link>https://darshanturakhia.com/blog/postgres-not-null-migration-table-lock</link>
      <guid isPermaLink="true">https://darshanturakhia.com/blog/postgres-not-null-migration-table-lock</guid>
      <description>A routine schema migration to add a NOT NULL column with a default value triggered a full table rewrite in Postgres, holding an exclusive lock on 2.4 million rows and taking our entire platform offline for 14 minutes at 10 AM on a Monday.</description>
      <pubDate>Sun, 15 Mar 2026 00:00:00 GMT</pubDate>
      <category>Database</category>
    </item>
    <item>
      <title>How SQLAlchemy&apos;s Identity Map Served Stale Data to 23,000 API Requests</title>
      <link>https://darshanturakhia.com/blog/flask-sqlalchemy-scoped-session-stale-reads</link>
      <guid isPermaLink="true">https://darshanturakhia.com/blog/flask-sqlalchemy-scoped-session-stale-reads</guid>
      <description>We managed SQLAlchemy sessions manually in Flask, skipping Flask-SQLAlchemy. Forgetting one line — Session.remove() — turned the ORM&apos;s per-thread identity map into a stale-data cache that silently returned outdated records for six hours.</description>
      <pubDate>Sun, 15 Mar 2026 00:00:00 GMT</pubDate>
      <category>Python</category>
    </item>
    <item>
      <title>How AWS SQS Visibility Timeout Caused the Same Order to Be Processed 847 Times</title>
      <link>https://darshanturakhia.com/blog/sqs-visibility-timeout-order-duplication</link>
      <guid isPermaLink="true">https://darshanturakhia.com/blog/sqs-visibility-timeout-order-duplication</guid>
      <description>A production war story about how a 30-second SQS visibility timeout turned a slow order processor into a duplicate-charge machine — and how we fixed it with heartbeats and a distributed lock.</description>
      <pubDate>Sat, 14 Mar 2026 00:00:00 GMT</pubDate>
      <category>Architecture</category>
    </item>
    <item>
      <title>How a Race Condition in Our Cron Job Sent 2.3 Million Duplicate Emails in One Night</title>
      <link>https://darshanturakhia.com/blog/cron-race-condition-duplicate-emails</link>
      <guid isPermaLink="true">https://darshanturakhia.com/blog/cron-race-condition-duplicate-emails</guid>
      <description>A nightly email digest cron job was running on two servers simultaneously without a distributed lock — what started as a minor scheduling overlap turned into a 2.3 million email catastrophe that got our domain blacklisted before sunrise.</description>
      <pubDate>Sat, 14 Mar 2026 00:00:00 GMT</pubDate>
      <category>Architecture</category>
    </item>
    <item>
      <title>How Next.js 15&apos;s Full Route Cache Served Stale Prices at Checkout for 3 Hours</title>
      <link>https://darshanturakhia.com/blog/nextjs-15-full-route-cache-stale-checkout</link>
      <guid isPermaLink="true">https://darshanturakhia.com/blog/nextjs-15-full-route-cache-stale-checkout</guid>
      <description>After migrating a SaaS checkout flow to Next.js 15 App Router, our price display layer silently served cached values — not the live database prices — costing us 3 hours of confused customers and 19 manual refunds.</description>
      <pubDate>Sat, 14 Mar 2026 00:00:00 GMT</pubDate>
      <category>Architecture</category>
    </item>
    <item>
      <title>How a Single Power User&apos;s Post Triggered 45,000 DB Queries and Crashed Our Mobile API</title>
      <link>https://darshanturakhia.com/blog/mobile-push-fanout-pool-exhaustion</link>
      <guid isPermaLink="true">https://darshanturakhia.com/blog/mobile-push-fanout-pool-exhaustion</guid>
      <description>A synchronous push notification fanout loop for a user with 45,000 followers exhausted our Flask database connection pool in 90 seconds, failing 62% of mobile requests for 3 hours.</description>
      <pubDate>Sat, 14 Mar 2026 00:00:00 GMT</pubDate>
      <category>Mobile</category>
    </item>
    <item>
      <title>How Rotating a JWT Secret Logged Out 34,000 Users and Exposed a Session Design Flaw</title>
      <link>https://darshanturakhia.com/blog/jwt-secret-rotation-outage</link>
      <guid isPermaLink="true">https://darshanturakhia.com/blog/jwt-secret-rotation-outage</guid>
      <description>A routine security rotation invalidated every active session simultaneously, triggered a support flood, and revealed that our JWT architecture had no graceful degradation path whatsoever.</description>
      <pubDate>Fri, 13 Mar 2026 00:00:00 GMT</pubDate>
      <category>Security</category>
    </item>
    <item>
      <title>How a DigitalOcean Firewall Rule Silently Dropped 23% of Production Traffic for 11 Days</title>
      <link>https://darshanturakhia.com/blog/digitalocean-firewall-silent-drop</link>
      <guid isPermaLink="true">https://darshanturakhia.com/blog/digitalocean-firewall-silent-drop</guid>
      <description>Intermittent user timeouts, normal server metrics, and zero firewall logs — how a stateless firewall rule was killing TCP connections before they reached Nginx, and why it took eleven days to find it.</description>
      <pubDate>Fri, 13 Mar 2026 00:00:00 GMT</pubDate>
      <category>Docker</category>
    </item>
    <item>
      <title>How a Redis Cache Key Missing One Field Leaked Client Data Across Tenants for 72 Hours</title>
      <link>https://darshanturakhia.com/blog/multitenant-cache-poisoning</link>
      <guid isPermaLink="true">https://darshanturakhia.com/blog/multitenant-cache-poisoning</guid>
      <description>A SaaS platform cached API responses by resource ID alone — when two tenants happened to share the same integer ID, one client spent three days reading another&apos;s confidential records.</description>
      <pubDate>Thu, 12 Mar 2026 00:00:00 GMT</pubDate>
      <category>Architecture</category>
    </item>
    <item>
      <title>How a Redis Connection Leak Crashed Our AWS ECS Cluster at 3AM</title>
      <link>https://darshanturakhia.com/blog/docker-ecs-memory-leak-cascade</link>
      <guid isPermaLink="true">https://darshanturakhia.com/blog/docker-ecs-memory-leak-cascade</guid>
      <description>A Redis client spawned inside getServerSideProps accumulated 8,847 open connections over six hours, OOM-killed every ECS task, and took the service down for 47 minutes before we found the root cause.</description>
      <pubDate>Thu, 12 Mar 2026 00:00:00 GMT</pubDate>
      <category>Docker</category>
    </item>
    <item>
      <title>How a Missing useCallback Triggered 10,000 API Requests Per Minute in Production</title>
      <link>https://darshanturakhia.com/blog/react-usecallback-api-storm</link>
      <guid isPermaLink="true">https://darshanturakhia.com/blog/react-usecallback-api-storm</guid>
      <description>A React search component&apos;s unstable function reference created an infinite useEffect loop that sent 10,400 req/min to our backend until the rate-limiter started blacklisting our own users.</description>
      <pubDate>Wed, 11 Mar 2026 00:00:00 GMT</pubDate>
      <category>React</category>
    </item>
    <item>
      <title>The Shared State Trap: How a FastAPI &apos;Optimisation&apos; Leaked User Data</title>
      <link>https://darshanturakhia.com/blog/fastapi-shared-state-trap</link>
      <guid isPermaLink="true">https://darshanturakhia.com/blog/fastapi-shared-state-trap</guid>
      <description>We replaced Flask&apos;s request-scoped g with a plain dict during migration. Under async concurrency, that dict silently served one tenant&apos;s data to a completely different user.</description>
      <pubDate>Wed, 11 Mar 2026 00:00:00 GMT</pubDate>
      <category>Python</category>
    </item>
    <item>
      <title>The Invisible Bottleneck: How One Sync Call Froze Our Node.js API</title>
      <link>https://darshanturakhia.com/blog/nodejs-event-loop-invisible-bottleneck</link>
      <guid isPermaLink="true">https://darshanturakhia.com/blog/nodejs-event-loop-invisible-bottleneck</guid>
      <description>A single fs.readFileSync buried in a utility function seemed harmless in development — in production under real traffic, it silently froze every request in the system for 700ms at a time.</description>
      <pubDate>Tue, 10 Mar 2026 00:00:00 GMT</pubDate>
      <category>NodeJS</category>
    </item>
    <item>
      <title>We Killed the PHP Monolith. It Took 18 Months and One Client&apos;s Data.</title>
      <link>https://darshanturakhia.com/blog/php-to-nextjs-the-migration-nobody-warned-us-about</link>
      <guid isPermaLink="true">https://darshanturakhia.com/blog/php-to-nextjs-the-migration-nobody-warned-us-about</guid>
      <description>What looked like a clean strangler-fig migration turned into 18 months of session bridges, soft-delete mismatches, and hard lessons about the implicit contracts hiding inside every legacy codebase.</description>
      <pubDate>Mon, 09 Mar 2026 00:00:00 GMT</pubDate>
      <category>Architecture</category>
    </item>
    <item>
      <title>The Friday Deploy That Taught Me to Respect PostgreSQL</title>
      <link>https://darshanturakhia.com/blog/postgres-the-query-that-killed-production</link>
      <guid isPermaLink="true">https://darshanturakhia.com/blog/postgres-the-query-that-killed-production</guid>
      <description>A four-line SQL query worked perfectly in development — in production, with 8 million rows, it held the database hostage for 47 minutes and took down an entire SaaS platform on a Friday afternoon.</description>
      <pubDate>Sat, 07 Mar 2026 00:00:00 GMT</pubDate>
      <category>Database</category>
    </item>
    <item>
      <title>We Deployed on a Friday. Here&apos;s What Happened Next.</title>
      <link>https://darshanturakhia.com/blog/deploy-friday-never-again</link>
      <guid isPermaLink="true">https://darshanturakhia.com/blog/deploy-friday-never-again</guid>
      <description>A production deploy at 4:30 PM on a Friday turned a routine release into a 6-hour incident — and permanently changed how I think about automation and discipline.</description>
      <pubDate>Thu, 05 Mar 2026 00:00:00 GMT</pubDate>
      <category>CI/CD</category>
    </item>
    <item>
      <title>The Night the Cluster Went Silent</title>
      <link>https://darshanturakhia.com/blog/elasticsearch-the-night-the-cluster-went-silent</link>
      <guid isPermaLink="true">https://darshanturakhia.com/blog/elasticsearch-the-night-the-cluster-went-silent</guid>
      <description>It was 11:47 PM. Search was down. 40,000 users couldn&apos;t find anything. This is the story of how a single shard misconfiguration quietly ate our cluster — and what we learned after rebuilding it from scratch.</description>
      <pubDate>Tue, 03 Mar 2026 00:00:00 GMT</pubDate>
      <category>ElasticSearch</category>
    </item>
  </channel>
</rss>