<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>Tumpreet Singh — Logs</title><description>Technical logs on real-time backend systems, ML in production, and the tooling around them.</description><link>https://dev.tumpreet.com/</link><language>en-us</language><item><title>Why my portfolio ships (almost) zero JavaScript</title><link>https://dev.tumpreet.com/blog/zero-javascript-portfolio/</link><guid isPermaLink="true">https://dev.tumpreet.com/blog/zero-javascript-portfolio/</guid><description>A backend dev does not need 200KB of framework to render a page. Astro islands + hand-written CSS.</description><pubDate>Thu, 18 Jun 2026 00:00:00 GMT</pubDate><category>frontend</category><category>performance</category><category>astro</category></item><item><title>ONNX in production: from Keras notebook to sub-50ms inference</title><link>https://dev.tumpreet.com/blog/onnx-in-production/</link><guid isPermaLink="true">https://dev.tumpreet.com/blog/onnx-in-production/</guid><description>Export, verify parity, quantize — the boring steps that make a model actually fast.</description><pubDate>Sat, 02 May 2026 00:00:00 GMT</pubDate><category>ai-ml</category><category>performance</category></item><item><title>Serving a TensorFlow model behind FastAPI with request batching</title><link>https://dev.tumpreet.com/blog/tensorflow-fastapi-batching/</link><guid isPermaLink="true">https://dev.tumpreet.com/blog/tensorflow-fastapi-batching/</guid><description>Single-request inference wastes the hardware. A tiny async batcher fixes it without blowing latency.</description><pubDate>Fri, 10 Apr 2026 00:00:00 GMT</pubDate><category>ai-ml</category><category>python</category><category>performance</category></item><item><title>Prompt regression testing: treat your LLM prompts like code</title><link>https://dev.tumpreet.com/blog/prompt-regression-testing/</link><guid isPermaLink="true">https://dev.tumpreet.com/blog/prompt-regression-testing/</guid><description>Fixtures, deterministic checks, and an LLM-as-judge only where you truly need it.</description><pubDate>Thu, 05 Mar 2026 00:00:00 GMT</pubDate><category>ai-ml</category><category>testing</category></item><item><title>Webhooks are a distributed-systems problem</title><link>https://dev.tumpreet.com/blog/webhooks-distributed-systems/</link><guid isPermaLink="true">https://dev.tumpreet.com/blog/webhooks-distributed-systems/</guid><description>Idempotency, replay and ordering — treat delivery as at-least-once and design accordingly.</description><pubDate>Thu, 22 Jan 2026 00:00:00 GMT</pubDate><category>distributed-systems</category><category>backend</category></item><item><title>A multi-tenant adapter layer that doesn&apos;t rot into spaghetti</title><link>https://dev.tumpreet.com/blog/multi-tenant-adapter-layer/</link><guid isPermaLink="true">https://dev.tumpreet.com/blog/multi-tenant-adapter-layer/</guid><description>One SDK contract, many integrations. How to keep per-client logic from metastasizing.</description><pubDate>Mon, 08 Dec 2025 00:00:00 GMT</pubDate><category>architecture</category><category>backend</category></item><item><title>Postgres + Redis patterns for real-time systems</title><link>https://dev.tumpreet.com/blog/postgres-redis-realtime/</link><guid isPermaLink="true">https://dev.tumpreet.com/blog/postgres-redis-realtime/</guid><description>Postgres as the source of truth, Redis as the hot path — and a clear line between them.</description><pubDate>Fri, 14 Nov 2025 00:00:00 GMT</pubDate><category>backend</category><category>databases</category></item><item><title>Shaving 400ms off voice-AI turn latency</title><link>https://dev.tumpreet.com/blog/voice-ai-turn-latency/</link><guid isPermaLink="true">https://dev.tumpreet.com/blog/voice-ai-turn-latency/</guid><description>Streaming TTS and real barge-in are the difference between a phone tree and a conversation.</description><pubDate>Wed, 01 Oct 2025 00:00:00 GMT</pubDate><category>backend</category><category>realtime</category><category>voice-ai</category></item></channel></rss>