Arjun.
I build AI products end to end, from the first call with the client to production. Most recently a multi-tenant voice-AI platform at Qilin Labs, built solo across Python, LiveKit and Next.js: AI agents that place and answer real phone calls over SIP, a streaming STT → LLM → TTS pipeline tuned to 1.3s p50, and the operator console around it. Under that sits five years of shipping web and mobile products across e-commerce, commercial real estate, financial services, sports betting and enterprise Salesforce, usually inside a platform somebody else already runs. I also build Android apps in Kotlin and Compose, developer tools, and @astra-ui-lib/core, published on npm.
Discovery
I start in the room with the people who own the problem. I ask what breaks today, who it breaks for, and what they already tried. Then I write the requirement down and read it back, because the first version is usually wrong in a way only the client can see.
Thin slice, their stack
The first delivery is one narrow slice running in production, not a prototype. I build it on the platform the client already operates — their Salesforce org, their Shopify theme, their LDAP directory, their Drupal site. That puts the integration risk in front of us at the start instead of at handover.
Measure, then hand over
Then I measure the number the client cares about and tune against it: call latency, discarded speech, publish time, test coverage. The engagement ends with their team owning the code, with tests, documentation and a walkthrough, so nothing waits on me being available.
A production voice-AI platform I built end-to-end as the sole engineer: operators configure AI phone agents that place and answer real calls over SIP, driven by a real-time STT → LLM → TTS pipeline with a RAG knowledge base and per-call transcripts, dispositions, and latency metrics. Company project: details generalized, no client data.
An operator configures a working phone agent themselves. No engineer joins the loop to onboard a new tenant.
- Real-time voice pipeline tuned for human turn-taking latency
- Inbound & outbound SIP calling per tenant
- RAG knowledge base for grounded, tenant-specific answers
- Post-call review: transcripts, dispositions, latency metrics
A full-stack EdTech platform I led as lead engineer across three coordinated apps: a React admin/supervisor web app, an Expo + React Native mobile app with on-device answer-sheet scanning, and a FastAPI microservice that grades scanned answer sheets with Claude vision (OCR, scoring, async callback), all on a shared Supabase backend. Client project: details generalized, no client data.
A supervisor marks a whole class from a phone instead of by hand. A teacher keeps the final say on every score the AI assigns.
- Three apps (web, mobile, AI service) on one shared Supabase backend
- On-device camera document scanning with OpenCV cropping
- Async AI evaluation: Claude-vision OCR + scoring via callback
- Human-in-the-loop supervisor review, score override, reports
A local Figma MCP server I built that gives an AI coding agent full-fidelity read access to a live Figma file, plus verify_node, an oracle that renders the agent's generated code in headless Chromium and pixel-diffs it against the real design, turning “looks right” into a pass/fail gate. ~15k LOC TypeScript across a 4-package monorepo; 35 MCP tools; fully local.
An agent’s UI either passes against the real Figma node or it fails. Nobody signs off on “looks about right”.
- 35 MCP tools: design IR, tokens, components, screenshots, coverage
- verify_node: render + pixel / SSIM / a11y diff vs the live Figma node
- Local SQLite + FTS5 cache with delta-sync (sub-50ms search)
- Browser Figma via a plugin↔WebSocket bridge, no Desktop, no cloud API
A guided wizard leading into an AI chat, then a live configuration stage with custom drag-to-rotate physics and drag-to-reorder slots. Ships as a single React bundle mounted into an established Shopify OS 2.0 theme, so the store’s existing theme kept working untouched. Client project: details generalized, no client data.
A shopper configures a product and adds it to the cart without leaving the store. The existing theme kept working, so nothing had to be re-platformed.
- Guided wizard into an AI chat, then a live configuration stage
- Custom drag-to-rotate physics and drag-to-reorder slots
- One React bundle mounted into a live Shopify OS 2.0 theme
- Zustand and TanStack Query for configurator state and data
Other work
Client platform work, a reverse-engineering project, and my own AI tooling. Shorter write-ups; the four above are the deep ones.
Decoded the proprietary BLE protocol of my Gixxer SF 150's instrument cluster from scratch (GATT walk on the live bike, decompilation, runtime hooking), then built REDLINE, a Kotlin/Jetpack Compose Android app that pushes Google Maps navigation to the cluster with live telemetry and ride analytics. 14k LOC, 205 tests, fully on-device.
- Decoded all 7 BLE frame types from live captures + decompiled source
- Google Maps → cluster navigation, replacing the stock app
- Live telemetry dashboard, ride analytics, GPX/CSV export
- Evidence-based RE: every hypothesis verified, wrong turns logged
A commercial real-estate platform for a brokerage: indexable native listings with map clustering and multi-field search, OTP-verified lead capture, six gated deal calculators, and a broker-editable Sanity Studio so the team publishes without a developer. 17 routes, 41 tests. Client project: details generalized, no client data.
Brokers publish and edit listings without a developer. Every lead arrives email-verified, straight into the team’s own sales process.
- Indexable listings with map clustering and multi-field search
- OTP-verified lead capture feeding the brokerage’s sales process
- Six deal calculators gated behind the lead wall
- Broker-editable Sanity Studio, so publishing needs no developer
An employee intranet with real-time direct and group messaging, presence and read receipts, a company news feed, events, and shared resources. Authenticates against the operator’s existing LDAP directory, so nobody managed a second set of credentials. Client project: details generalized, no client data.
Staff sign in with the credentials they already have. IT never had a second directory to administer.
- Real-time direct and group messaging with presence and read receipts
- Company news feed, events and shared resources
- LDAP authentication against the existing corporate directory
- Dockerised deployment
Three private tools I built for my own daily work: a Python command-line suite covering tickets, timesheets and attendance behind one daily snapshot; a self-hosted ticket tracker fronted by a TypeScript MCP server, so an AI agent reads and writes tickets by number; and a governor that paces spending across two AI coding budgets, routing bulk work onto free capacity. Each one started as a measurement before it became an automation.
- Six commands on the PATH for tickets, timesheets and attendance
- One snapshot: clocked in, hours vs target, open tickets, what is due
- MCP server so an agent addresses tickets by number, not a browser
- Budget governor that ranks engines by headroom and routes bulk work
AI & Voice
Backend & Data
Client platforms & integration
Web
Mobile & devices
Testing & delivery
How I turned my laptop wallpaper into a self-updating daily agenda: a designed poster rendered from HTML via headless Chrome, wired into Hyprland, with a self-cleaning quote feed.
How I reverse-engineered my motorcycle's Bluetooth instrument-cluster protocol with a GATT walk, JADX, and Frida, then built REDLINE, an Android app for it.
How I built figma-connect and verify_node: a local tool that renders an AI agent's generated code and pixel-diffs it against the live Figma design.