$ whoami
click to skip

Sarthak Patel, full-stack developer in Indore, India

Full-stack developer · Indore, IN

↓ scroll

How I build things.

A typical app I ship, and what I've actually done in each box. Hover a node.

  1. BrowserReactNext.jsRedux

    Redux state shared across three interfaces at Alphawizz; SSR and route-level code splitting on the main Next.js app at DigiFlex.

  2. API GatewayExpressNest

    Correlation ID minted here and carried through HTTP and NATS headers in eventbus-services. Zod on every boundary.

  3. User ServiceNodeTSPrisma

    Registers users, writes to Postgres via Prisma, publishes user.registered to JetStream. Never calls the notification service.

  4. PostgreSQLPrisma

    One database per service in eventbus-services. Currently reading about its internals.

  5. Booking ServiceExpressMongoose

    MovieBook: showtime and seat-layout APIs, JWT auth, mock payment that converts a lock into a booking in one step.

  6. MongoDBMongoose

    Bookings, shows and users in MovieBook; documents and sessions in ResumeX; survey rows in program-intel.

  7. Redislocks / TTL

    Seat locks with TTL in MovieBook: SET lock:show:seat session NX PX 12000. Released on payment timeout.

  8. NATS JetStreamdurable consumersacks

    USER_EVENTS stream. Explicit acks, redelivery on consumer death, idempotency key checked before any side effect.

  9. Notification ServiceNodeTS

    Consumes user.registered, records the idempotency key in the same transaction as the side effect, retries with back-off.

  10. DLQdead letters

    After three failed deliveries a message lands here instead of looping forever. Inspectable, replayable.

runs onDocker ComposeVercelGitHub ActionsAWS

Selected work.

8 things I built. Two of them you can poke at without leaving this page.

Personal Assistant Agent desktop screenshot
2026 · AI automation

Personal Assistant Agent

One chat for search, calendar, email, tasks, notes and expenses.

  • n8n
  • Streamlit
  • OpenAI
  • Google APIs
  • Webhooks
Jev Signal desktop screenshot
2026 · Chrome extension

Jev Signal

Ask a YouTube audience one question and get evidence-backed answers from its comments.

  • Chrome Extension
  • Jev
  • YouTube comments
  • AI classification
eventbus-services desktop screenshot
2026 · Backend

eventbus-services

Two services that never call each other. Messages that never get processed twice.

  • TypeScript
  • Express
  • NATS JetStream
  • Prisma
  • PostgreSQL
  • Zod
  • +1
MovieBook desktop screenshot
MovieBook mobile screenshot
2026 · Full-stack

MovieBook

Two people cannot buy the same seat, even if they click at the same millisecond.

  • React
  • Redux Toolkit
  • Express
  • MongoDB
  • Redis
  • JWT
  • +1
ResumeX desktop screenshot
ResumeX mobile screenshot
2025–26 · Full-stack

ResumeX

Fill a form, watch the résumé render live, let a model write the boring parts.

  • React 19
  • Vite
  • Redux Toolkit
  • Tailwind
  • Node.js
  • Express
  • +3
program-intel desktop screenshot
program-intel mobile screenshot
2026 · Full-stack

program-intel

CSV exports in, monthly review in.

  • React (Vite)
  • Node.js
  • Express
  • MongoDB
ott-desktop desktop screenshot
ott-desktop mobile screenshot
2026 · Frontend

ott-desktop

A mobile site, rebuilt for a 27-inch screen.

  • Next.js
  • TypeScript
  • Tailwind
  • Framer Motion
2026 · Full-stack

Crack.AI

An interviewer that asks, listens, and scores.

  • React
  • Node.js
  • Express
  • MongoDB
  • JWT
  • FastAPI
  • +4

Commit history.

2021 → now, as a git graph.

  1. c6e31632021-11

    Enrolled, B.Tech IT — Jabalpur Engineering College

    Four years of DSA, DBMS, OS, and figuring out I liked the web more than the syllabus.

  2. 8d6ce512024-08

    First JavaScript repo

    javascript-tutorial. The start of the JS ecosystem rabbit hole.

    • javascript
  3. 9f9a8912025-01

    Graduated, CGPA 7.8

    And immediately started shipping.

  4. 385475e2025-07

    prime-bid & Chit-Chat

    First real-time apps: a bidding system and a chat app. Learned WebSockets the hard way.

    • websockets
    • node
  5. d9bbb552025-12verify

    ResumeX goes live

    First deployed product with real users.

    • react
    • openai
  6. fc85b082026-04

    Full Stack Developer Intern — Alphawizz

    Real-time order tracking with WebSockets for a delivery app; Redux across three interfaces.

    • react
    • redux
    • websockets
  7. 92387b92026-06

    Full Stack Developer Intern — DigiFlex.ai

    Shared React component package; SSR and code splitting on the main Next.js app.

    • next.js
    • npm
  8. 74d4f2e2026-06

    MovieBook

    Redis seat locks. The project I get asked about most.

    • redis
    • express
  9. 94882e12026-08

    eventbus-services

    NATS JetStream, idempotency, DLQ. First time I built something I would call infrastructure.

    • nats
    • prisma
    • docker
  10. 28b19afHEAD → nowin progress

    now

    Looking for the next hard problem.

    End of timeline

About

Sarthak Patel, waist-up portrait

Building things nobody asked for. Yet.

The tagline is only half a joke. Most of what's on my GitHub started because I wanted something to exist and nobody was going to build it for me.

I build web apps end to end, mostly in TypeScript: React or Next.js on the front, Node and Express behind it, Postgres or Mongo underneath, Redis when something needs to be fast or locked, NATS when two services should not know about each other.

The part I like is when a vague requirement turns into a thing that runs. I care less about which framework wins.

$ cat now.txt
building : eventbus-services v2 (outbox pattern, k8s manifests) # verify
learning : PostgreSQL internals, Go # verify
open to : full-time roles · contract work · pairing on hard problems
location : Indore, IN · IST (UTC+5:30) · remote-friendly
$
Built with
  • React 19
  • TypeScript
  • Vite
  • Tailwind v4
  • GSAP
  • Lenis
  • Vercel
Lighthouse · mobile
Perf
A11y
Best
SEO

run npm run lighthouse to fill these

View source

Last deployed 2026-09-29

© 2026 Sarthak Patel · Indore

⌘K palette/ searchg then s w t a c jumpesc close? this legend