Projects

Things I've built and shipped, plus a few production case studies from work.

6 projects

  • AIFeatured2025

    Chat with PDF

    RAG document QA with source citations. Upload a PDF, ask questions, get streamed answers.

    • Next.js
    • TypeScript
    • Prisma
    • PostgreSQL
    • pgvector
    • Gemini
  • npm packageFeatured2025

    Prod-Alert-Sentry

    Error-monitoring package for Node services, pushing ~500 alerts a day to Slack in production.

    • Node.js
    • TypeScript
    • Slack API
    • npm
  • CampusMatch screenshot
    BackendFeatured2025

    CampusMatch

    Real-time social networking backend with REST APIs and Socket.IO chat.

    • Node.js
    • Express
    • MongoDB
    • Socket.IO
    • GitHub Actions
  • BookMyLawyer screenshot
    Web app2024

    BookMyLawyer

    Lawyer discovery and appointment booking for clients and lawyers.

    • React
    • Node.js
    • Express
    • MongoDB
  • Swiggy API Clone screenshot
    Web app2025

    Swiggy API Clone

    Food-ordering front end driven by live Swiggy APIs.

    • React
    • Redux
    • Tailwind CSS
  • Nike Landing Page screenshot
    Web app2025

    Nike Landing Page

    Responsive product landing page.

    • React
    • Tailwind CSS

From my job

Work case study · VakeelSaab

Call-Status Resolution Engine

Problem. The operations team kept reporting “calls auto-disconnecting”. Telephony webhooks arrived in three incompatible schema versions, sometimes twice, sometimes out of order, and business logic was silently overwriting telephony state.

Approach. Analysed real Exotel call data against a single resolution engine, found 13 production bugs, and replaced ad-hoc handling with one direction-, duration- and DB-aware enum plus a two-stage verification pipeline (sync webhook + async V3 API) and a reconciliation cron.

Result. False disconnect reports stopped. Status is eventually accurate even when webhook delivery fails.

  • NestJS
  • Sequelize
  • Redis
  • Exotel
  • Cron
bugs fixed
13
statuses mapped
20+
false reports after
0
verification
2-stage

Work case study · VakeelSaab

Killing a double-assignment race

Problem. A poll-driven inbound call router occasionally assigned the same call to two agents under load.

Approach. Three layered defenses: an atomic conditional UPDATE agent claim, a guarded assignment write, and a Redis SET NX per-call single-flight lock with cached-response replay. Verified with a harness firing 10 simultaneous claimers against real MySQL.

Result. Zero double assignments. Redis loss degrades to the DB claim instead of failing.

  • MySQL
  • Redis
  • Concurrency
  • Idempotency
layered defenses
3
concurrent claimers tested
10
double assignments
0
Redis-loss degradation
graceful