<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Anirudh Vasudevan | Writing</title>
    <link>https://anirudhvasudevan.com/blog/</link>
    <description>Deep dives into the AI products, voice agents, and hackathon builds Anirudh Vasudevan shipped.</description>
    <language>en-us</language>
    <atom:link href="https://anirudhvasudevan.com/blog/feed.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>What Six 3D Web Builds Taught Me About Three.js and R3F</title>
      <link>https://anirudhvasudevan.com/blog/3d-on-the-web-lessons/</link>
      <guid isPermaLink="true">https://anirudhvasudevan.com/blog/3d-on-the-web-lessons/</guid>
      <pubDate>Wed, 21 Oct 2026 12:00:00 GMT</pubDate>
      <description>Lessons from Apartment 4B, Living Photos, Horror POV, Jellyverse, Anirudh's World and FaceTime from Mars on React Three Fiber, Three.js and performance.</description>
    </item>
    <item>
      <title>What Building MCP Servers and Multi-Agent Systems Taught Me</title>
      <link>https://anirudhvasudevan.com/blog/building-mcp-and-multi-agent-systems/</link>
      <guid isPermaLink="true">https://anirudhvasudevan.com/blog/building-mcp-and-multi-agent-systems/</guid>
      <pubDate>Wed, 21 Oct 2026 12:00:00 GMT</pubDate>
      <description>Lessons from LARK, Second Shift, ScreenSense, Super Nova and Director on MCP tool design, agent orchestration, and checking what an agent actually did.</description>
    </item>
    <item>
      <title>Lessons From Building a Dozen Voice AI Agents and Apps</title>
      <link>https://anirudhvasudevan.com/blog/lessons-building-voice-ai-agents/</link>
      <guid isPermaLink="true">https://anirudhvasudevan.com/blog/lessons-building-voice-ai-agents/</guid>
      <pubDate>Wed, 21 Oct 2026 12:00:00 GMT</pubDate>
      <description>What twelve voice AI builds taught me about latency, turn-taking, interruptions, TTS choice, captions, fallbacks, and browser versus server speech to text.</description>
    </item>
    <item>
      <title>How Apartment 4B Bakes an Entire Horror Game Into Static Files</title>
      <link>https://anirudhvasudevan.com/blog/apartment-4b-horror-game/</link>
      <guid isPermaLink="true">https://anirudhvasudevan.com/blog/apartment-4b-horror-game/</guid>
      <pubDate>Sat, 17 Oct 2026 12:00:00 GMT</pubDate>
      <description>Apartment 4B is a browser horror game whose voices, screams and theme music were generated with ElevenLabs ahead of time, so the site never calls an API.</description>
    </item>
    <item>
      <title>Putting a Talking AI Presenter in Any Video With ffmpeg and D-ID</title>
      <link>https://anirudhvasudevan.com/blog/d-id-you-ai-presenter/</link>
      <guid isPermaLink="true">https://anirudhvasudevan.com/blog/d-id-you-ai-presenter/</guid>
      <pubDate>Sat, 17 Oct 2026 12:00:00 GMT</pubDate>
      <description>How D-ID You turns an uploaded video into a narrated MP4 with a circular AI presenter, using ElevenLabs, DeepSeek V3, D-ID Talks and one long ffmpeg filter.</description>
    </item>
    <item>
      <title>InsightEDU: Retrieval in the Browser, Generation in the Cloud</title>
      <link>https://anirudhvasudevan.com/blog/insightedu-browser-retrieval/</link>
      <guid isPermaLink="true">https://anirudhvasudevan.com/blog/insightedu-browser-retrieval/</guid>
      <pubDate>Sat, 17 Oct 2026 12:00:00 GMT</pubDate>
      <description>How my University of Minnesota capstone turned six school-district equity datasets into Plotly dashboards and a chatbot that retrieves in the browser.</description>
    </item>
    <item>
      <title>From a Chatbot for One Elder to RUA, a Caregiver Command Center</title>
      <link>https://anirudhvasudevan.com/blog/rua-product-story/</link>
      <guid isPermaLink="true">https://anirudhvasudevan.com/blog/rua-product-story/</guid>
      <pubDate>Sat, 17 Oct 2026 12:00:00 GMT</pubDate>
      <description>The 0-to-1 story of RUA across five repos: a 2025 Flask chatbot, a privacy proposal, a pure-HTML mockup, a local-first iOS app, and a waitlist site.</description>
    </item>
    <item>
      <title>How ScreenSense Runs a Browser Agent Loop on Amazon Nova</title>
      <link>https://anirudhvasudevan.com/blog/screensense-v2-amazon-nova-agent-loop/</link>
      <guid isPermaLink="true">https://anirudhvasudevan.com/blog/screensense-v2-amazon-nova-agent-loop/</guid>
      <pubDate>Sat, 17 Oct 2026 12:00:00 GMT</pubDate>
      <description>ScreenSense v2 turns a spoken command into a Chrome extension agent loop: screenshot, DOM snapshot, one Nova Lite action, re-observe, repeat until done.</description>
    </item>
    <item>
      <title>Building Second Shift, a Dispatch Agent That Proves Its Writes</title>
      <link>https://anirudhvasudevan.com/blog/second-shift-multi-app-dispatch-agent/</link>
      <guid isPermaLink="true">https://anirudhvasudevan.com/blog/second-shift-multi-app-dispatch-agent/</guid>
      <pubDate>Sat, 17 Oct 2026 12:00:00 GMT</pubDate>
      <description>How Second Shift re-plans a field crew's day across Slack, Sheets, Calendar and Gmail with a CP-SAT solver, then reads every write back to verify it landed.</description>
    </item>
    <item>
      <title>How I Gave Four AI Characters Their Own ElevenLabs Voices</title>
      <link>https://anirudhvasudevan.com/blog/voices-of-the-last-world/</link>
      <guid isPermaLink="true">https://anirudhvasudevan.com/blog/voices-of-the-last-world/</guid>
      <pubDate>Sat, 17 Oct 2026 12:00:00 GMT</pubDate>
      <description>Voices of the Last World is a browser crisis game where two AI minds debate in ElevenLabs voices. Here is the voice, DSP, and LLM fallback design behind it.</description>
    </item>
    <item>
      <title>Building a YouTube Shorts Factory That Posts Every Day</title>
      <link>https://anirudhvasudevan.com/blog/youtube-shorts-factory-automated-pipeline/</link>
      <guid isPermaLink="true">https://anirudhvasudevan.com/blog/youtube-shorts-factory-automated-pipeline/</guid>
      <pubDate>Sat, 17 Oct 2026 12:00:00 GMT</pubDate>
      <description>An unattended pipeline that turns a topic into a published YouTube Short: LLM scripts, Fal.ai images, ElevenLabs voice, Whisper captions, and FFmpeg.</description>
    </item>
    <item>
      <title>How AniBot Streams Answers About Me From a Netlify Function</title>
      <link>https://anirudhvasudevan.com/blog/anibot-portfolio-chatbot/</link>
      <guid isPermaLink="true">https://anirudhvasudevan.com/blog/anibot-portfolio-chatbot/</guid>
      <pubDate>Sat, 03 Oct 2026 12:00:00 GMT</pubDate>
      <description>AniBot is the chat assistant on my portfolio. How it streams gpt-4o-mini tokens through a Netlify Function, why I dropped RAG, and how the blog is built.</description>
    </item>
    <item>
      <title>Building a 3D Village That Is a Pure Function of the Clock</title>
      <link>https://anirudhvasudevan.com/blog/anirudhs-world-deterministic-village/</link>
      <guid isPermaLink="true">https://anirudhvasudevan.com/blog/anirudhs-world-deterministic-village/</guid>
      <pubDate>Sat, 03 Oct 2026 12:00:00 GMT</pubDate>
      <description>How Anirudh's World keeps 20 villagers living on the real clock with no server, using seeded PRNG streams, the drand beacon and a golden-digest test.</description>
    </item>
    <item>
      <title>A Voting Booth You Never Touch, From Face Scan to Thumbs Up</title>
      <link>https://anirudhvasudevan.com/blog/civs-contactless-voting-patent/</link>
      <guid isPermaLink="true">https://anirudhvasudevan.com/blog/civs-contactless-voting-patent/</guid>
      <pubDate>Sat, 03 Oct 2026 12:00:00 GMT</pubDate>
      <description>CIVS is a patented contactless voting kiosk that verifies a voter's face with ArcFace and takes the ballot by hand gesture, built in Python and Flask.</description>
    </item>
    <item>
      <title>The Video Editor You Talk To, Compiled to One ffmpeg Command</title>
      <link>https://anirudhvasudevan.com/blog/director-fal-voice-video-editor/</link>
      <guid isPermaLink="true">https://anirudhvasudevan.com/blog/director-fal-voice-video-editor/</guid>
      <pubDate>Sat, 03 Oct 2026 12:00:00 GMT</pubDate>
      <description>How I built Director, a voice-directed video editor where a LiveKit agent casts characters, renders shots on fal, and edits an ffmpeg timeline by tool call.</description>
    </item>
    <item>
      <title>Faking a 225 Million Kilometer Phone Call to Mars</title>
      <link>https://anirudhvasudevan.com/blog/facetime-from-mars/</link>
      <guid isPermaLink="true">https://anirudhvasudevan.com/blog/facetime-from-mars/</guid>
      <pubDate>Sat, 03 Oct 2026 12:00:00 GMT</pubDate>
      <description>How FaceTime from Mars turns browser speech recognition, gpt-4o-mini and ElevenLabs voices into a push-to-talk call with three AI Mars colonists.</description>
    </item>
    <item>
      <title>How Horror POV Paces Its Ghost With a Director State Machine</title>
      <link>https://anirudhvasudevan.com/blog/horror-pov-director-ai/</link>
      <guid isPermaLink="true">https://anirudhvasudevan.com/blog/horror-pov-director-ai/</guid>
      <pubDate>Sat, 03 Oct 2026 12:00:00 GMT</pubDate>
      <description>Horror POV is a browser horror game where a Director state machine paces the ghost, sanity is read from the light field, and five floors share a collider list.</description>
    </item>
    <item>
      <title>How Jellyverse Makes Dice Wobble Without a Physics Library</title>
      <link>https://anirudhvasudevan.com/blog/jellyverse-jelly-dice-physics/</link>
      <guid isPermaLink="true">https://anirudhvasudevan.com/blog/jellyverse-jelly-dice-physics/</guid>
      <pubDate>Sat, 03 Oct 2026 12:00:00 GMT</pubDate>
      <description>Jellyverse is a four-page browser toy suite built on a from-scratch Three.js rigid-body solver and a GLSL jelly deformer that also drives the shadow pass.</description>
    </item>
    <item>
      <title>How Jungle Safari Hides Every AI Round Trip From a Toddler</title>
      <link>https://anirudhvasudevan.com/blog/jungle-safari-prewarmed-voice-quiz/</link>
      <guid isPermaLink="true">https://anirudhvasudevan.com/blog/jungle-safari-prewarmed-voice-quiz/</guid>
      <pubDate>Sat, 03 Oct 2026 12:00:00 GMT</pubDate>
      <description>Jungle Safari is a toddler animal-sound quiz where every ElevenLabs clip and GPT-4o-mini mascot line is generated ahead of time and cached so nothing loads.</description>
    </item>
    <item>
      <title>How Lark Turns ChatGPT Into a Phone With One MCP Gateway</title>
      <link>https://anirudhvasudevan.com/blog/lark-multi-agent-mcp/</link>
      <guid isPermaLink="true">https://anirudhvasudevan.com/blog/lark-multi-agent-mcp/</guid>
      <pubDate>Sat, 03 Oct 2026 12:00:00 GMT</pubDate>
      <description>How Lark, a Top 10 build at the Y Combinator AI Hackathon, aggregates other MCP servers behind one gateway and a phone-style widget inside ChatGPT and Claude.</description>
    </item>
    <item>
      <title>Walking Into a Photograph with Gaussian Splats and a Cloned Voice</title>
      <link>https://anirudhvasudevan.com/blog/living-photos-gaussian-splats/</link>
      <guid isPermaLink="true">https://anirudhvasudevan.com/blog/living-photos-gaussian-splats/</guid>
      <pubDate>Sat, 03 Oct 2026 12:00:00 GMT</pubDate>
      <description>How I built Living Photos, a Next.js app that turns one photo into a walkable 3D splat scene with a consent-gated ElevenLabs voice inside it.</description>
    </item>
    <item>
      <title>Building a Voice CPA That Only Says What It Can Cite</title>
      <link>https://anirudhvasudevan.com/blog/moss-voice-cpa-yc-hackathon/</link>
      <guid isPermaLink="true">https://anirudhvasudevan.com/blog/moss-voice-cpa-yc-hackathon/</guid>
      <pubDate>Sat, 03 Oct 2026 12:00:00 GMT</pubDate>
      <description>How Tax It Easy, a voice AI CPA built overnight at the Moss x YC hackathon, grounds every spoken number and tax-law answer in cited retrieval.</description>
    </item>
    <item>
      <title>Building RUA, an Offline-First Caregiver App With Provable Math</title>
      <link>https://anirudhvasudevan.com/blog/rua-caregiver-app-offline-first/</link>
      <guid isPermaLink="true">https://anirudhvasudevan.com/blog/rua-caregiver-app-offline-first/</guid>
      <pubDate>Sat, 03 Oct 2026 12:00:00 GMT</pubDate>
      <description>How I built RUA, a SQLCipher-encrypted, no-server iOS caregiver app whose refill math, digest ranking, and label parsing are pure, tested TypeScript.</description>
    </item>
    <item>
      <title>ScreenSense v1: A Hold-to-Talk Chrome Extension Built in 36 Hours</title>
      <link>https://anirudhvasudevan.com/blog/screensense-v1-talk-to-your-screen/</link>
      <guid isPermaLink="true">https://anirudhvasudevan.com/blog/screensense-v1-talk-to-your-screen/</guid>
      <pubDate>Sat, 03 Oct 2026 12:00:00 GMT</pubDate>
      <description>How I built a voice-first Chrome extension that screenshots your tab, transcribes your spoken question, and streams a vision-model answer next to your cursor.</description>
    </item>
    <item>
      <title>Teaching ScreenSense to Hold a Conversation While It Clicks</title>
      <link>https://anirudhvasudevan.com/blog/screensense-voice-browser-agent/</link>
      <guid isPermaLink="true">https://anirudhvasudevan.com/blog/screensense-voice-browser-agent/</guid>
      <pubDate>Sat, 03 Oct 2026 12:00:00 GMT</pubDate>
      <description>How I rebuilt ScreenSense as a conversational voice browser agent with Firecrawl page context and ElevenLabs voice, and won Best Voice Agent.</description>
    </item>
    <item>
      <title>Building an AI DJ That Never Leaves Dead Air Between Tracks</title>
      <link>https://anirudhvasudevan.com/blog/spotify-for-hackers-ai-dj/</link>
      <guid isPermaLink="true">https://anirudhvasudevan.com/blog/spotify-for-hackers-ai-dj/</guid>
      <pubDate>Sat, 03 Oct 2026 12:00:00 GMT</pubDate>
      <description>How Spotify for Hackers uses Groq, ElevenLabs and browser-side audio ducking so a voiced AI host bridges every track handoff without a gap of silence.</description>
    </item>
    <item>
      <title>Wiring a Voice-Only Companion to MCP, Groq and ElevenLabs</title>
      <link>https://anirudhvasudevan.com/blog/super-nova-voice-companion/</link>
      <guid isPermaLink="true">https://anirudhvasudevan.com/blog/super-nova-voice-companion/</guid>
      <pubDate>Sat, 03 Oct 2026 12:00:00 GMT</pubDate>
      <description>How Super Nova turns continuous speech into MCP tool calls and on-screen widgets with a hand-written MCP client, regex-first routing, and ElevenLabs TTS.</description>
    </item>
    <item>
      <title>TalkativePDF: Wiring Chat-with-PDF RAG on Next.js and Pinecone</title>
      <link>https://anirudhvasudevan.com/blog/talkativepdf-rag-chat/</link>
      <guid isPermaLink="true">https://anirudhvasudevan.com/blog/talkativepdf-rag-chat/</guid>
      <pubDate>Sat, 03 Oct 2026 12:00:00 GMT</pubDate>
      <description>How I built TalkativePDF, a chat-with-your-PDF app on Next.js 15, Clerk, Firebase, Pinecone and LangChain, and what the code gets right and wrong.</description>
    </item>
    <item>
      <title>Interrogating AI Suspects Out Loud with ElevenLabs Speech Engine</title>
      <link>https://anirudhvasudevan.com/blog/the-missing-angle-voice-mystery/</link>
      <guid isPermaLink="true">https://anirudhvasudevan.com/blog/the-missing-angle-voice-mystery/</guid>
      <pubDate>Sat, 03 Oct 2026 12:00:00 GMT</pubDate>
      <description>How The Missing Angle wires ElevenLabs Speech Engine, Groq and a Gaussian-splat rooftop into a murder mystery you solve by talking to the suspects.</description>
    </item>
    <item>
      <title>Bots Can Click Checkboxes. Can They Speak? Building VoiceCaptcha</title>
      <link>https://anirudhvasudevan.com/blog/voicecaptcha-voice-turing-test/</link>
      <guid isPermaLink="true">https://anirudhvasudevan.com/blog/voicecaptcha-voice-turing-test/</guid>
      <pubDate>Sat, 03 Oct 2026 12:00:00 GMT</pubDate>
      <description>How VoiceCaptcha makes a user speak a one-time phrase, transcribes it with Groq Whisper on a Cloudflare Worker, and scores it with a small fuzzy matcher.</description>
    </item>
  </channel>
</rss>
