I build the infrastructure other engineers' systems need to survive contact with reality — crash recovery, exactly-once execution, and the tooling to see what an AI agent is actually doing when it's wrong. Then I ship the whole thing live, alone, end to end.
M.Sc. Software Engineering · VU Amsterdam & University of Amsterdam, 2025 · AWS Certified Solutions Architect – Associate · Software Engineer Intern at Mendix (Siemens), 2023
Lull is a mental-health app built to a standard most side projects skip entirely: every health field is AES-256-GCM encrypted before it reaches the database, Postgres row-level security is enforced on every table, PII is stripped from anything an LLM sees or returns, and every AI call is routed through zero-data-retention providers only. The crisis-detection layer runs in English, Hindi and romanized Hinglish simultaneously, because a person in crisis doesn't code-switch to match the UI language — and it's verified with a red-team suite that runs 40+ adversarial prompts against the live model in CI, not just unit tests of the regex.
Next.js 16 TypeScript Postgres RLS AES-256-GCM OpenRouter WebGL Web Audio i18n
Most people are building agents. I've been building what the agents run on — the boring, load-bearing parts: what happens when a worker dies mid-task, how you watch one from the outside, what it actually costs. Every link below is live; I checked each one before writing this sentence.
Durable Agent Engine — An LLM agent runner that survives being killed mid-task.
No Redis, no managed queue — Postgres SKIP LOCKED claims and reclaims work so nothing is silently lost. Proven with a chaos test that kill -9s workers on purpose, mid-run.
Node.js PostgreSQL WebSocket Docker
→ live · source
Terrain — How much does it actually cost an agent to work in your codebase? Terrain finds the static-analysis issues already sitting in a repo, hands a sample to a real coding agent one at a time in isolated git worktrees, verifies every fix mechanically, and reports the dollar/token/hour cost of fixing the rest — a number instead of an opinion.
TypeScript Git worktrees Static analysis
→ live · source
Relay — Multiplayer AI agent sessions: one shared live workspace where anyone with the link watches the agent stream token by token, interrupts it mid-sentence, and takes or hands off control — closer to a live Google Doc than a solo chat window. An append-only, sequence-numbered event log makes a join an hour in replay exactly what everyone else already saw, with no gaps.
TypeScript WebSockets Event sourcing
→ live · source
AgentScrub — A scrubbable timeline for Browser Use agent runs: drag across a completed run like a video and see, at every step, the screenshot the agent looked at, the action it took, and the reasoning it gave — side by side, instead of buried in a flat log.
TypeScript Browser automation
→ live · source
| Project | What it does | Stack |
|---|---|---|
| Verdict | Tells you whether a prompt change really made your LLM agent worse, or whether you're looking at sampling noise — paired two-level bootstrap over cases, a measured noise floor, no verdict without enough power | TypeScript PostgreSQL Vitest |
| PantryChef | Tracks a kitchen's pantry, ranks saved recipes by what's actually on hand, and hands the busywork to a tool-calling agent with a real fallback chain across three free-tier models | React Router v8 Prisma Postgres |
| Anchor | Notes that never lose a keystroke on any device, even offline — every edit saved locally first, merged automatically on reconnect | Yjs (CRDTs) IndexedDB ProseMirror |
| Aria | WCAG accessibility auditor — pairs axe-core with a vision model on the rendered page to catch the contrast and layout failures rules alone miss |
Next.js Drizzle ORM Puppeteer |
| OSS Finder | Ranks GitHub projects by how likely a first-time contributor's PR is to actually get merged | React 19 Redux Toolkit Clerk |
| Project | Contribution | Status |
|---|---|---|
| tiptap (38K★, 16.8M weekly downloads) | Fixed a crash open for seven months — the Link extension crashed instead of erroring gracefully when configured with an undefined class attribute |
Merged |
| tiptap | Fixed a bug silently stripping bold/italic from nested lists, traced to a hardcoded parser value | Merged |
Backend — Node.js, Express, PostgreSQL (RLS), MongoDB, GraphQL, WebSockets, field-level encryption AI / agents — OpenRouter, tool-calling agents, durable execution, agent observability, i18n-safe prompting Frontend — React, Next.js, TypeScript, Redux Toolkit, Tailwind CSS Infra & testing — Docker, GitHub Actions, AWS, Fly.io, Render, Vercel, Vitest, Jest
Based in Muscat, Oman. Open to remote roles worldwide, or on-site in Bengaluru — backend, AI infrastructure, and founding engineer roles.




