Vaani
Chrome extension · reads any page aloud
An LLM rewrites a page into natural speech and explains code instead of reading out symbols, with highlighting synced to the voice. It speaks English, Hindi and Hinglish. It has a backend with Google sign-in, usage metering and a shared Postgres cache.
- Chrome MV3
- TypeScript
- Node
- Postgres
- LLM + TTS
Read the case study
- Problem
- Most read-aloud tools spell a page out flatly and read code symbol by symbol, which is hard to follow.
- How I built it
- An LLM rewrites a page into natural spoken teaching and explains code instead of reading symbols, with the text highlighted in time with the voice, in English, Hindi and Hinglish. It is a Chrome MV3 extension with a Node backend, Google sign-in, usage metering and a shared Postgres cache. Speech runs on Azure OpenAI with an OpenAI fallback.
- The hard part
- The extension kept showing an offline message while the user was online. The cause was a dormant MV3 service worker: a message to it got no reply, which the client read as offline. I fixed it with a bounded, online-gated wake and retry that wakes the worker and tries once more.
- Stack
- Chrome MV3, TypeScript, Node, Postgres, LLM and TTS
Omoi
Mobile app · private notes with memory
A private notes app with a biometric vault and AI memory that finds what you meant, not only what you typed. Built for both iOS and Android, with over-the-air updates.
- React Native
- Expo
- NestJS
- Prisma
- Postgres
Vyana
Mobile app · cycle health
A menstrual-health app that is live with real users. I built the Expo app and the Node backend, and I run its production database, releases and incident fixes.
Read the case study
- Problem
- A menstrual-health app that is already live needed its backend hardened before it could carry more.
- How I built it
- I built the Expo app and the Node backend, and I run its production database, releases and incident fixes. I work staging first: every change goes through a staging environment and full verification before any production migration, and I keep restore-verified database backups.
- The hard part
- A backend audit surfaced several reliability risks that I fixed in priority order: a missing unique constraint that allowed duplicate cycle rows, a refresh-token rotation race, database connection pools left unconfigured across replicas, no graceful shutdown on SIGTERM, and per-replica in-process caches that could serve stale data. The daily jobs now run exactly once across replicas using a Postgres lock.
- Stack
- Expo, Node, PostgreSQL, Supabase
Heatwave
Open source · checks AI-written code
A protocol for AI-written code: plan, build, review and prove, with the planner, builder and reviewer kept as separate agents so no agent grades its own work. It works with Claude Code, Codex, Gemini CLI and Cursor.
Read the case study
- Problem
- AI coding agents review their own work, claim things are verified without proof, and start over when a session dies.
- How I built it
- A protocol that splits the work across separate planner, builder and reviewer contexts, so no context grades its own output. Every claim needs real evidence attached, and progress is saved to plain files on disk so any session, even in a different tool, resumes where the last one stopped. No server, no API keys, no dependencies, just markdown and one install script.
- The hard part
- Making one protocol run unchanged across many different agents. It ships adapters for Claude Code, Codex, Gemini CLI, Cursor, Copilot, Windsurf, Cline, Zed and Aider, plus a generic one, and a run started in one tool resumes in another.
- Stack
- Markdown protocol, shell installer, MIT licensed
Rapi Labs
Game studio · casual mobile games
Small, bright mobile games such as Ice Smash, Egg Catcher and Duck Rescue. I handle ads, analytics and store releases. Ice Smash is live on the App Store.
- React Native
- Firebase
- AdMob