Jay Gadhiya, smiling, in a checked shirt. Black-and-white portrait.

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.

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.

One grading request, three providers. The responses are illustrative.

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
Read the case study

Lab

Things I build for myself, in public.

  • Yaadi

    Live

    An 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

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

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

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

hello@jaygadhiya.comLinkedInGitHubRésumé (PDF)