Skip to content

I work across the whole stack, because that is where products break

Most software fails at the joins: where the screen meets the API, where the API meets the money, where a model meets real input. I build on both sides of each join, so there is nobody to hand the problem to.

  1. 01

    Start from what must never happen

    Before any screen, I write down the sentences the system has to keep true. An order is never delivered without payment. A tenant never sees an address before the visit is confirmed. A model never rewrites a line of dialogue. Those sentences become the architecture.

  2. 02

    One source of truth for each fact

    Totals are computed in one module. Transitions are decided by one state machine. When the website, the bot and the admin panel all call the same code, they cannot disagree about what a customer owes.

  3. 03

    AI is a component, not a product

    A model gets a narrow job, a schema it cannot step outside, and a person downstream wherever it is known to fail. I benchmark before I choose one, and I keep plain rules for anything that has a single right answer.

  4. 04

    Automate the boring, gate the risky

    A pipeline should resume after a crash, record what it did, and stop where a mistake would be expensive. The stopping points are part of the design, not an admission of failure.

  5. 05

    The interface is part of the system

    A state the server would refuse should never be a button someone can press. Interface design and backend design are the same decision made twice, so I prefer to make it once.

  6. 06

    Finished means operable

    Migrations, tests, a release that can roll back, and instructions the next person can follow. A feature without those is a demo.

  7. 07

    Say what is true

    Experiments are labelled experiments. Rule-based estimates are not called AI. A motion comic is not called animation. Clients make better decisions when the status is accurate.

Skills, by the layer they live in

No percentage bars. Each layer lists what I have used on real work and links to where you can see it.

What people see and touch: layout, state, motion, and whether it works on a phone.

Build
React, Next.js, TypeScript, JavaScript, HTML, CSS, Tailwind CSS
Motion
GSAP, ScrollTrigger, Framer Motion, Canvas graphics
Practice
Responsive design, Accessibility, Server-rendered UI

The rules of the business, written once on the server and shared by every screen.

Build
Python, FastAPI, Node.js, REST APIs, Route handlers
Access
Authentication, Role-based access control, Signed links, Rate limiting
Integrations
Stripe, Razorpay, Webhooks, Telegram bots and Mini Apps, Twilio SMS

Where the truth is kept, and the guarantees that stop it being quietly rewritten.

Stores
PostgreSQL, Supabase, SQLite
Design
Schema design, Migrations on live data, SQLAlchemy and Alembic, Row Level Security
Integrity
Append-only ledgers, Database triggers, Idempotency keys, Audit trails

Models used as components: given a narrow job, a schema, and a human check where they fail.

Language
LLM integration, Structured output, Local models with Ollama, Model benchmarking
Generative
ComfyUI workflows, Image and video generation, Inference pipelines
Voice
Text-to-speech, Voice cloning, Per-line fallback chains
Orchestration
Resumable stages, Review gates, Background jobs

Getting it onto a real machine, keeping it there, and changing it without breaking it.

Ship
Git and GitHub, GitHub Actions, Vercel, Cloudflare
Verify
Automated tests, Browser tests, Migration rehearsal, Health checks
Harden
Backups and rollback, Debugging in production, Security reviews

Background

I studied computer science in Mumbai and started out building websites for clients. I later worked in business development, which is where I learned to read a problem from the owner's side of the table. I build software in Dubai now.

Based in
Dubai, UAE
Education
B.Sc. Computer Science, Mumbai University
Languages
English, Hindi, Urdu
Esc

23 results.