$ cd ~/work && ls -la
Things I've built & shipped
Open-source contributions, personal hardware & tooling projects, and platforms I've led at work — serving from a handful of e-ink pixels to millions of users.
// open source
Open Source
Merged pull requests across axios, mobx, vue, pinot and grafana.
Grafana Loki - PR #23175
Fixed sharded approx_topk queries failing to parse on the querier in Grafana Loki. When approx_topk is sharded, the shard mapper rewrites it into downstream __count_min_sketch__ sub-queries that the query-frontend serializes to LogQL and re-parses on the querier — but __count_min_sketch__ was never registered in the LogQL lexer or grammar, so the querier rejected it with a syntax error surfacing as an HTTP 400. Registered __count_min_sketch__ as a vector operation in the lexer (functionTokens) and grammar (vectorOp), regenerated syntax.y.go with the pinned goyacc, and added a regression test asserting every downstream sub-query round-trips through String() → ParseExpr(). Fixes #23150.
go · grafana loki · logql · goyacc · open source
MobX - PR #4659
Fixed a regression introduced by the lazy @computed work in #4639: isComputedProp returned false for a lazily-decorated computed property before its first read, because the ComputedValue is no longer created until the getter is first accessed. The check now also consults the admin's lazyComputedKeys_ so a decorated computed reports correctly as a computed property even before it has been materialized.
typescript · mobx · decorators · open source
MobX - PR #4658
Extended the lazy-decorator work from #4639 to the 2022.3 @observable accessor decorator (requested by the maintainer). The accessor init callback no longer eagerly constructs an ObservableValue for every decorated field on every instance; instead it registers a factory on the admin's new lazyObservableKeys_ map, and materializeLazyObservable_ instantiates the ObservableValue on first read/write/observe via getObservablePropValue_, setObservablePropValue_, and getAtom. isObservableProp checks lazyObservableKeys_ so fields still report as observable before first read, and the post-read hot path stays a single Map lookup. Benchmarks on a 50k-instance × 10-field class show construction allocation roughly halved (~224 MB → ~119 MB) for sparse-access workloads. Full suite green (1043 passing) and type checks clean. Closes #4616.
typescript · mobx · decorators · performance · open source
MobX - PR #4639
Made the 2022.3 @computed decorator lazy in MobX core. ComputedValue is now created on first read of the decorated getter instead of eagerly during instance construction, so getters that are never accessed on a given instance no longer allocate. Threaded the laziness through getObservablePropValue_, setObservablePropValue_, getAtom, and isObservableProp so existing call sites Just Work. Closes #4616.
typescript · mobx · decorators · open source
Axios - PR #10822
Fixed the Node http adapter clobbering a user-supplied Host header when forwarding through a proxy. axios was unconditionally rewriting options.headers.host to the request URL's hostname:port, making it impossible to route a proxy to a virtual host that differed from the request URL. The fix only sets the default Host header when the caller has not already provided one (case-insensitive match on host/Host/HOST). Closes #10805.
javascript · node.js · http · axios · open source
Vue DevTools - PR #1094
Fixed an overlay-injection crash in the Vue DevTools Vite plugin under strict Trusted Types CSP. With `require-trusted-types-for 'script'` enforced, assigning a plain string to script.src (a Trusted Types sink) was blocked before the app's own default policy could register, since the overlay is injected via head-prepend and runs ahead of the entry module. The fix wraps the overlay URL through a named vue-devtools TrustedScriptURL policy when window.trustedTypes is available, with a plain-string fallback otherwise. Closes #1086.
javascript · vue · vite · trusted types · csp · open source
Vue Core - PR #14758
Fixed silent dropping of valid runtime prop types in defineProps when a Vue ref-wrapper type appears in a union and the vue import cannot be resolved by the SFC compiler (e.g. the type lives in a separately-built consumed package). resolveTypeReference was throwing inside inferRuntimeType, the top-level catch collapsed the whole branch to UNKNOWN_TYPE, and the resulting filtering dropped real types like Array — producing "Invalid prop: type check failed" warnings at runtime for valid values. The fix catches the resolution failure locally inside the TSTypeReference case and adds built-in fallbacks for Ref, ShallowRef, ComputedRef, WritableComputedRef, MaybeRef<T>, and MaybeRefOrGetter<T>, mirroring existing handling for Promise / Date / Map. Closes #14729.
typescript · vue · compiler-sfc · open source
Vue Core - Issue #14729
Reported a regression in defineProps<T>() runtime type inference after upgrading Vue from 3.5.21 to 3.5.31: a union involving MaybeRef<OptionItem[]> lost its Array branch in the generated runtime props, so passing arrays triggered "Invalid prop: type check failed" warnings even though the source TS type allowed them. Provided a minimal reproduction and isolated the regression to SFC type-to-runtime inference for ref-wrapper unions; tracked and fixed by PR #14758.
vue · compiler-sfc · typescript · bug report · open source
LilyGo EPD47 - PR #183
Fixed an infinite loop bug in the LilyGo EPD47 font renderer caused by invalid UTF-8 bytes (e.g. bare 0xB0). next_cp() would stall forever when utf8_len() returned 0 for a continuation byte. Added a guard to skip bad bytes and return U+FFFD, preventing the hang and undefined behaviour.
c · esp32 · utf-8 · embedded · open source
LilyGo EPD47 - PR #181
Fixed ESP32 Arduino core 3.x (IDF 5.x) compatibility for the LilyGo 4.7" e-paper display library. Resolved 5 build/runtime issues: missing esp_attr.h and gpio_struct.h includes, RMT TX driver rewrite for IDF 5 driver_ng API, JPEG feed_buffer type mismatch, and uninitialized LCD clock source causing runtime panic.
c · esp32 · esp-idf · embedded · open source
Grafana Backup Tool - PR #5
Open source contribution to Grafana Backup Tool, for backing up and restoring Grafana dashboards, datasources, and other configurations. Contributed improvements and enhancements to the project.
grafana · backup tool · open source
Grafana - PR #118246
Open source contribution to Grafana, the open source analytics and monitoring platform. Contributed improvements and enhancements to the project.
grafana · go · typescript · open source
Grafana Backup Tool - PR #302
Open source contribution to Grafana Backup Tool, a tool for backing up and restoring Grafana dashboards, datasources, and other configurations. Contributed improvements and enhancements to the project.
grafana · backup tool · open source
Apache Pinot - PR #14663
Open source contribution to Apache Pinot, a real-time distributed OLAP datastore. Contributed improvements and enhancements to the project.
java · apache pinot · open source
// personal — hardware & tooling
Personal Projects
Hardware firmware and developer tooling I build on the side.
LilyGo EPD47 Property Display
Custom firmware for LilyGo 4.7" e-paper display (EPD47-S3) that shows property information with Hindi date, moon phase, and touch-triggered jokes. Built with C for ESP32-S3.
c · esp32 · e-paper · embedded
Grafana Backup DB
Schema-agnostic MySQL/SQLite backup tool — auto-discovers tables, exports rows as JSON, compresses into timestamped archives. Works for Grafana or any MySQL database. Multi-database support, batch row fetching, and manifest file in every archive.
python · mysql · sqlite · backup
// at work — angel one · betterworks · mygate
At Work
Platforms I designed, architected and led at Angel One, BetterWorks and MyGate.
Research Analyst (RA) Marketplace
Designed, documented, and launched the Research Analyst Marketplace, leading a team of 8+ engineers. Onboarded 30+ RAs with a user base of 60 lakh clients; scaled to millions of concurrent users.
go · vue.js · vuetify · mongodb · aws · microservices
Sub-Broker Admin Dashboard
Architected and delivered the Sub-Broker Admin Dashboard (Vue.js, Vuetify, Go backend) for 3+ lakh users, owning design, scalability, and release. Reduced repo bundle size by 88% (10MB → 1.2MB) with code splitting, CDN assets, and lazy loading.
vue.js · vuetify · go · aws · docker
Customer Support Experience Platform
Built the Customer Support Experience platform (Golang + Svelte.js) for 700+ agents, including backend orchestrator. Developed and scaled an in-house chatbot UI from 0 → 6 lakh+ users with standardized conversational UI framework. Migrated Salesforce tickets to in-house CX Support Portal, saving ₹4 Cr annually.
go · svelte.js · mongodb · rabbitmq · aws
Survey and Poll Analytics Tool
Designed and developed survey and poll analytics tool; migrated JavaScript → TypeScript. Optimized APIs with MongoDB aggregation + caching; integrated Highcharts for analytics. Built reusable frontend components with ATOMIC design and backend integrations.
typescript · react · mongodb · highcharts · node.js · express
Task Auto-Assignment Tool
Developed internal task auto-assignment tool with Nest.js (location + workload balancing). Optimized image upload pipeline with S3 pre-signed URLs and improved API latency with RabbitMQ + MongoDB indexing. Deployed a highly available MongoDB cluster for fault tolerance.
nest.js · mongodb · rabbitmq · aws s3 · docker