
Jay Gadhiya, Full-Stack AI Engineer, Ahmedabad
I make LLM features dependable enough to ship.
Backend first, full-stack when the work needs it. I design the APIs, data models and guardrails that turn unpredictable model output into something a product can build on. Then I see it through to production.
- 2+ yearsbuilding production backends and AI systems
- NowSoftware Developer, Full-Stack & AI at Vibgyor Technologies
- DomainsHealthcare, EdTech and e-commerce
- LatestShipped Yaadi, an offline-first notes app
How I work
Four habits, and the work that shows each one.
Treat model output as untrusted input.
Each provider's response is normalised into one schema before the product uses it. Structured outputs keep the clinical agents' answers in a fixed format.
Shown in
Keep the vendor swappable.
Call sites never name a provider. One environment variable picks OpenAI, Gemini or Bedrock, so when a vendor's pricing or reliability changes, switching is a config change.
Shown in
Make speed a design input.
Response-time goals shaped the schemas from the start of a Spring Boot to FastAPI rewrite. Average API response time fell by about 50%.
Shown in
Own it all the way to production.
Schema, API, auth, tests and deploy: argon2 hashing, refresh-token rotation, 23 pytest tests against mocked AWS, and infrastructure defined in AWS SAM.
Shown in
Selected work
Four systems I built at Vibgyor Technologies, and one I built for myself. Tap one to open it.
Switch between OpenAI, Gemini and AWS Bedrock with one environment variable and zero code changes.
OpenAI
```json
{"criterion": "B2",
"awarded": "2",
"follow_through": true}
```Wrapped in a code fence. The number is a string.
Gemini
Here is the result:
{"criterion": "B2",
"awarded": 2,
"followThrough": "yes"}Prose before the JSON. camelCase key. "yes" instead of true.
Claude on Bedrock
{"criterion": "B2",
"awarded": 2,
"follow_through": true,
"note": "method mark"}An extra key the schema doesn't have.
What the product receives
{"criterion": "B2",
"awarded": 2,
"follow_through": true}One shape, whichever provider answered.
The full story: “I Asked 3 LLMs for JSON. I Got 3 Kinds of ‘JSON’.”
- Problem
- Code that calls one LLM vendor directly ties its cost and reliability to that vendor, and vendor pricing and capabilities keep changing.
- What I built
- One interface over all three providers. Call sites ask for a result and never name a vendor, and every response is normalised into one shape.
- Key decision
- Send non-critical tasks to cheaper models behind the same interface.
- Python
- OpenAI
- Google Gemini
- AWS Bedrock Converse API
Grades answer sheets for 3+ exam boards and replaces hours of manual marking per batch.
(a) Gradient of the line through (1, 3) and (3, 7)
3
0/2
(b) Equation of that line
y = 3x
3/3carried through from (a)
Total
3/5
- Problem
- Teachers spent hours per batch applying mark schemes by hand, and each exam board formats its schemes differently.
- What I built
- Parses question papers and mark schemes straight from PDFs, then grades answer sheets against per-criterion rubrics.
- Key decision
- Follow-through logic, so one early mistake doesn't cost marks twice.
- Python
- FastAPI
- PDF parsing
- LLM-based evaluation
Two real-time clinical agents. The diagnostic agent went through 4 versions.
- Problem
- Clinical intake needs low-latency, stateful sessions that stay grounded in structured clinical data.
- What I built
- A WebSocket diagnostic agent on the OpenAI Agents SDK that maps symptoms to clinical Finding IDs through RAG over a custom vector store. A voice intake agent on the Realtime API for paediatric nutrition assessments.
- Key decision
- Structured outputs, so answers stay in a fixed clinical format that can be stored and used downstream.
- OpenAI Agents SDK
- OpenAI Realtime API
- WebSockets
- RAG
- Vector stores
- AWS Lambda
- DynamoDB
- Cognito
Average API response time fell by about 50%.
Average response time, relative to the original. About half after the rewrite.
- Problem
- Legacy Java Spring Boot services had to move to Python without getting slower or less correct.
- What I built
- Redesigned the database schemas and rewrote the core APIs in FastAPI.
- Key decision
- Response-time goals shaped the schemas from the first draft.
- Python
- FastAPI
- SQL schema design
An installable notes app that works offline and syncs when it can, on a near-zero-cost serverless backend.
- Problem
- A notes app should open and save instantly with no connection, then sync across devices without losing edits.
- What I built
- IndexedDB is the source of truth. A background sync engine reconciles with last-write-wins, tombstones and a clock-skew-safe pull cursor. The backend runs on FastAPI, Lambda, DynamoDB and S3.
- Key decision
- IndexedDB as the source of truth, so notes work offline and the server only keeps devices in step. The API is covered by 23 pytest tests.
- React
- TypeScript
- IndexedDB
- FastAPI
- AWS Lambda
- DynamoDB
- S3
- AWS SAM
- SSM
- pytest
Lab
Things I build for myself, in public.
Yaadi
LiveAn offline-first notes app that syncs when it can, on a near-zero-cost serverless AWS backend.
Toolkit
What I work with. Skills with a dot link to the work where I used them.
Backend
Also used: SQLAlchemy, Pydantic, REST, Redis, APScheduler
AI and LLM
Also used: OpenAI Responses API + File Search, LangGraph, Prompt engineering
Cloud and DevOps
Also used: Lightsail, Firebase, Docker and Docker Compose, GitHub Actions, Cloudflare
Security
Also used: OAuth2 / OIDC, Okta SAML, Refresh-token rotation, Rate limiting
Data and integrations
Also used: PostgreSQL, SQLite, Supabase, Stripe, Authorize.Net, TaxJar
Frontend
Also used: JavaScript
Experience
Oct 2024 to now
Software Developer, Full-Stack & AI
Vibgyor Technologies, Ahmedabad
Built the grading engine, the LLM platform, the healthcare agents and the FastAPI migration above. Also integrated Authorize.Net and TaxJar into an e-commerce SaaS backend with 10+ modules, deployed with Docker Compose on AWS Lightsail.
Jan to Aug 2024
Python Developer Intern
TRooTech, Ahmedabad
Built FastAPI features with strict Pydantic validation, added OAuth2/OIDC and Okta SAML sign-in, and optimised SQL queries for API performance.
2020 to 2024
B.E. in Information Technology
New LJ Institute of Engineering and Technology
Building something on LLMs that has to work every time? Let's talk.
Based in Ahmedabad, IST / UTC+5:30