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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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