Software Engineer · Hyderabad
Been working remotely for UK and European teams for the last couple of years currently at a London climate-tech company, before that a startup in Hamburg.
I write Rust and TypeScript, mostly for systems where getting things wrong is not really an option. Also ship side projects when the day job doesn't keep me busy enough.
When I started building Screenr, I thought the hard part would be the LLM prompting. It wasn't. The hard part was making the system feel like a real conversation — one that remembers context, adapts mid-interview, and doesn't collapse when a candidate does something unexpected.
When I first joined a production TypeScript backend that used dependency injection and a strict adapter layer, my reaction was: why is there so much ceremony for what's basically just fetching data? Six months later I'm the one pushing for these patterns on new projects.
Every time two services need to talk, someone in the architecture meeting says 'Kafka.' Then you're running a broker cluster, managing consumer groups, dealing with schema registries — for what is fundamentally a row change between two databases. We didn't use one.
Rust checks for integer overflow in Debug mode — then turns those checks off in Release mode. Same code, two completely different outcomes at runtime. Here's why Rust does this, and how removing a single branch inside a tight loop unlocks massive performance gains.
Coming back to my staking project after a break, I found the Ethereum ecosystem had moved. Pectra brings account abstraction so users pay gas in USDC, validator limits up to 2048 ETH, flexible withdrawals, and Verkle Trees.
Everyone in the world needs Ether to send Ethereum transactions — a real barrier for new users. Gasless transactions let users interact with dApps without buying ETH first. EIP-2771 is the standardized approach.
Screen recording and sharing platform for enterprise teams. Live product with a paying enterprise client actively using it in production.
Built the full stack — recording engine, chunked upload pipeline, viewer with team permissions, and the admin dashboard.
AI inference infrastructure layer that cut model serving costs by 70%. Routes requests across providers, handles caching, and surfaces per-call cost metrics.
Designed and built the routing layer, response caching, and the cost analytics dashboard. Integrated OpenAI, Anthropic, and open-weight models behind a unified API.
Open-source database migration tool. Predictable, reversible schema migrations with a diff preview before anything runs. Published and used in production.
Wrote the CLI, migration runner, diff engine, and rollback logic from scratch. Designed the configuration schema and published it as an npm package.
Rust CLI that crawls a codebase and reports dead, broken, or redirected links. Zero config. Runs requests in parallel and finishes in seconds.
Wrote the entire tool in Rust — parallel HTTP checker, file crawler, output formatter, and CI integration guide.
One command to stage, commit, and push — with AI-generated commit messages via Ollama, OpenAI, or Anthropic. Published on npm and PyPI.
Built the CLI in Python and TypeScript, integrated three AI providers, added dev time tracking, and shipped it to both npm and PyPI.
Point-of-sale system written in Rust. Handles real payment processing, works offline-first. Built for environments where a network drop cannot stop a transaction.
Architected and built the transaction engine, offline queue with sync-on-reconnect, payment provider integration, and the receipt generation layer.