Full-stack engineer. I build things that ship — web, mobile, desktop, and the hardware they talk to.
Chain Labs · India
Most of my work is full-stack TypeScript — Next.js on the front, Postgres behind it. But the projects I like best are the ones that leave the browser: an ESP32 publishing QR scans over MQTT into an Electron app, a .NET MAUI catalogue that has to stay useful with no signal, a set of Solidity contracts that have to be deployed in exactly the right order or they deadlock.
I care about the boring parts — idempotent cron jobs, debounced sensor reads, not trusting the client for a price.
Gym CRM · Electron Vue 3 SQLite MQTT ESP32
A local-first gym management desktop app — members, QR check-in, attendance, finance, GST receipts. The Electron
main process hosts its own MQTT broker and SQLite database over typed IPC, so there's no server to run. A companion
ESP32-S runs camera capture on one core and QR decoding on the other, publishing check-ins over MQTT.
Hard part: the firmware had three FreeRTOS tasks sharing one WebSocket, non-atomic counters across cores, and a null-deref in the decode loop. Fixed by giving a single task sole ownership of the socket.
DeBruycker Charolais · .NET MAUI C# Bun SQLite
An iOS + Android companion app for a live cattle auction — browse the catalogue, filter on pedigree metrics, save
favourites — backed by a Bun service that ingests auction webhooks and serves them over a versioned REST API.
Offline-first: everything caches to on-device SQLite.
Hard part: favourites are client state living in server-synced rows. The sync had to deliberately re-apply them instead of overwriting on every refresh.
ProofMarket · Solidity Hardhat Viem Next.js
A creator-backing protocol on Sepolia — capped ERC20 with votes, ERC721 supporter badges with royalties, a
royalty-aware marketplace, time-based staking, and full Governor + Timelock governance across eight contracts.
Hard part: those eight contracts grant each other roles in a cycle-prone order. Ignition's dependency graph made it explicit at module-definition time — a circular reference deadlocks the deploy instead of failing on a live network.
CQRC · Next.js Upstash RAG — live · code
A support chatbot grounded in whatever you upload — PDF, DOCX, XLSX, or hand-written Q&A pairs. Retrieval is
hand-rolled BM25 over chunks in Redis, no embedding model and no vector DB. It refuses to answer outside the corpus.
Hard part: BM25 recomputes IDF per query term across every chunk, so the Redis pipeline fetches eagerly. Fine for a controlled vocabulary; the trade is that synonyms are invisible to the scorer.
RG Games · Next.js Drizzle Supabase — live · code
Gaming-events booking — browse, reserve, pay. Admins manage events, sessions, players, and leaderboards.
Hard part: two payment providers behind one interface, but their webhook signature schemes are different enough to need separate handlers. Free events bypass order creation entirely and confirm server-side from the DB price — never the client's.
IdLocker · React Native Expo
A fully offline vault for cards, government IDs, and credentials. Biometric unlock, auto-lock on background,
screen capture blocked, no network calls at all.
Hard part: expo-secure-store caps each key at 2 KB, so a vault has to be chunked across multiple entries and reassembled — ordering and partial-write failures are where the corruption lives.
More, with writeups → prathamchudasama.com
Languages
Frontend
Backend & data
AI
Mobile, desktop & embedded
Tooling & platform
Open to interesting problems — prathamchudasama.com



