<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>Alok Ranjan: Blogs</title><description>Alok Ranjan (@aloki-alok), a software engineer at OmniDimension. He goes by ryu online. Projects and writing.</description><link>https://alokranjan.me/</link><item><title>One invisible character, two reasonable assumptions, one lost write</title><link>https://alokranjan.me/blog/invisible-character-production-bug/</link><guid isPermaLink="true">https://alokranjan.me/blog/invisible-character-production-bug/</guid><description>A broken PDF font map produced a NUL byte. Every layer accepted it until the database rejected the write, while HTTP 200 made the failure look successful.</description><pubDate>Sun, 04 Oct 2026 00:00:00 GMT</pubDate><category>production</category><category>reliability</category><category>json</category><category>pdf</category><category>distributed-systems</category></item><item><title>NAT bought us IPv4. It made real-time audio weird.</title><link>https://alokranjan.me/blog/nat-voip/</link><guid isPermaLink="true">https://alokranjan.me/blog/nat-voip/</guid><description>NAT let the internet outgrow its public IPv4 address supply. It also made a connected VoIP call a surprisingly different problem from a working one.</description><pubDate>Sun, 23 Aug 2026 00:00:00 GMT</pubDate><category>nat</category><category>voip</category><category>sip</category><category>rtp</category><category>networking</category><category>telephony</category></item><item><title>The account was the hard part</title><link>https://alokranjan.me/blog/the-account-was-the-hard-part/</link><guid isPermaLink="true">https://alokranjan.me/blog/the-account-was-the-hard-part/</guid><description>x402, Cloudflare Wallets and cloudflare.pay are usually described as giving AI agents a wallet. What they actually do is take apart the account: the thing that fuses who you are, what you&apos;re allowed to use, and how you pay into one long-lived, human-shaped object.</description><pubDate>Mon, 10 Aug 2026 00:00:00 GMT</pubDate><category>x402</category><category>agents</category><category>cloudflare</category><category>payments</category><category>http</category><category>protocols</category></item><item><title>The phone number was flagged before we ever used it</title><link>https://alokranjan.me/blog/phone-number-flagged-before-we-used-it/</link><guid isPermaLink="true">https://alokranjan.me/blog/phone-number-flagged-before-we-used-it/</guid><description>Recycled phone numbers carry the previous owner&apos;s spam reputation. We linked out to Truecaller instead of showing our own guess, which meant reverse-engineering an undocumented Android deep link with adb.</description><pubDate>Thu, 16 Jul 2026 00:00:00 GMT</pubDate><category>reputation</category><category>telephony</category><category>android</category><category>deeplinks</category><category>adb</category></item><item><title>The slow page wasn&apos;t the database</title><link>https://alokranjan.me/blog/slow-page-not-the-database/</link><guid isPermaLink="true">https://alokranjan.me/blog/slow-page-not-the-database/</guid><description>A dashboard page was slow to load, so everyone reached for the database. The real cost was the code drawing one dropdown 400 times. A story about N+1 queries and the fix that took them from 400 to 4.</description><pubDate>Thu, 16 Jul 2026 00:00:00 GMT</pubDate><category>performance</category><category>n+1</category><category>orm</category><category>postgres</category><category>backend</category></item><item><title>You can&apos;t un-bounce an email</title><link>https://alokranjan.me/blog/email-deliverability/</link><guid isPermaLink="true">https://alokranjan.me/blog/email-deliverability/</guid><description>An AWS suspension taught me that email deliverability is a reputation system. Here is what actually moves it: bounce thresholds, the hard ceiling on address verification, and why clean lists still land in spam.</description><pubDate>Sat, 13 Jun 2026 00:00:00 GMT</pubDate><category>email</category><category>deliverability</category><category>smtp</category><category>infrastructure</category></item><item><title>Extending Uptime Kuma: 90-day heartbeats, a Slack command, and shipping a fork</title><link>https://alokranjan.me/blog/extending-uptime-kuma/</link><guid isPermaLink="true">https://alokranjan.me/blog/extending-uptime-kuma/</guid><description>Getting an unmerged feature into production, adding a Slack /incident command, and open-sourcing the result as a clean fork.</description><pubDate>Sat, 30 May 2026 00:00:00 GMT</pubDate><category>uptime-kuma</category><category>monitoring</category><category>open source</category><category>docker</category></item><item><title>Driving a whole voice-AI platform from a single prompt</title><link>https://alokranjan.me/blog/omnidimension-mcp/</link><guid isPermaLink="true">https://alokranjan.me/blog/omnidimension-mcp/</guid><description>Building OmniDimension&apos;s MCP integration layer: two services, 49 tools, an OAuth 2.1 server, shipped to npm and live in production.</description><pubDate>Fri, 29 May 2026 00:00:00 GMT</pubDate><category>MCP</category><category>OAuth</category><category>AI agents</category><category>TypeScript</category></item><item><title>Our computers don&apos;t really know what time it is</title><link>https://alokranjan.me/blog/computers-dont-know-the-time/</link><guid isPermaLink="true">https://alokranjan.me/blog/computers-dont-know-the-time/</guid><description>A trip down the rabbit hole of quartz crystals, cesium atoms, GPS, NTP, and PTP, after chrony told me my clock was running slow.</description><pubDate>Fri, 22 May 2026 00:00:00 GMT</pubDate><category>systems</category><category>time</category><category>ntp</category><category>linux</category></item><item><title>Most modern mail tooling is two binaries with a UI on top</title><link>https://alokranjan.me/blog/postfix-mail-server/</link><guid isPermaLink="true">https://alokranjan.me/blog/postfix-mail-server/</guid><description>Configuring a multi-tenant mail server from scratch with Postfix and Dovecot, now handling 200k+ emails a day.</description><pubDate>Mon, 18 May 2026 00:00:00 GMT</pubDate><category>postfix</category><category>smtp</category><category>imap</category><category>linux</category><category>email</category></item><item><title>What actually makes an AI agent &quot;agentic&quot;</title><link>https://alokranjan.me/blog/agentic-ai/</link><guid isPermaLink="true">https://alokranjan.me/blog/agentic-ai/</guid><description>Agentic AI is the same LLM wired into a loop: plan, act, observe, repeat, until a goal is met instead of answered in one reply.</description><pubDate>Sat, 19 Jul 2025 00:00:00 GMT</pubDate><category>AI agents</category><category>LLM</category></item><item><title>A backend take-home, and the two bugs that taught me more than the task</title><link>https://alokranjan.me/blog/inv/</link><guid isPermaLink="true">https://alokranjan.me/blog/inv/</guid><description>A FastAPI service that stores stock prices, serves them over a REST API, and backtests a moving-average crossover strategy, containerized end to end. Two bugs taught me more than the assignment did.</description><pubDate>Fri, 18 Jul 2025 00:00:00 GMT</pubDate><category>python</category><category>fastapi</category><category>docker</category><category>postgresql</category><category>sqlalchemy</category></item></channel></rss>