Nayan RoyIST --:--

SelectedProjects

These are the ones I actually finished. A couple are on npm, one is deployed and running, one is still being built. The ones that went nowhere are not here — there are more of those.

A pattern I only noticed later: nearly all of them exist because I wanted to use them myself. That has been a better reason to start than anything clever I could have planned.

(01)

Bhoomi

Satellite imagery is awkward to serve — the files are enormous and the processing is slow enough that you cannot do it inside a request. This ingests it, hands the heavy work to Redis and RQ workers so requests come back straight away, and speaks OGC API Features and Processes, which means it opens directly in QGIS instead of needing a client written for it. Geometry lives in PostGIS with spatial indexes.

2026deployed on RenderBuilt it
PythonFastAPIPostgreSQLRedisNext.js
(02)

Interlace

Node runs one thread but interleaves await continuations in whatever order it likes, so two requests can race and quietly corrupt state without ever crashing. Your tests pass, CI is green, and you find out months later. Interlace tries to catch that kind of bug without needing an assertion to trip, and hands back a seed and a preemption set so it reproduces on every run. It is still early.

September 2026in progressWorked on the scheduler core
TypeScriptNode.jsJest
(03)

gitto

I kept forgetting git commands, so I made something that takes plain English and gives you the right one. It shows you what it is about to run before it runs it, which has saved me more than once. On npm as @nayanroy/gitto, maintained through v0.2.3.

2026on npm — v0.2.3Built it
TypeScriptNode.jsnpm
(04)

sealpin

A scanner for Model Context Protocol server configs. It looks for tool scopes that are wider than they need to be, and credentials someone hardcoded and forgot about — the two things I most often got wrong myself.

2026on npmBuilt it
Node.jsnpm
(05)

payhub

UPI payments with slightly smarter retries. When a gateway declines, it reads why and sends the retry somewhere else, rather than throwing it back at the one that just said no.

2026Built it
Node.jsREST

Nayan Roy5 projects