Available for freelance work
I connect systems that weren't designed to talk to each other — broker and market-data APIs, messaging platforms, and the glue that keeps scheduled jobs running without silent failures.
Working prototypes, deployed and running right now. Click through and poke at them — these are real services, not screenshots.
Live
Pulls NSE index data server-side and re-renders every 60 seconds — the same mechanism a Google Sheet uses with a time-driven Apps Script trigger.
Building it surfaced the thing that breaks most of these: NSE serves index data to servers reliably, but its per-stock quote endpoints sit behind bot protection that blocks datacentre requests. Worth knowing before you build on them.
Live
A working /api/v1 backend modelling Enterprise → Portfolio → Plant → Block → Asset, with CRUD-shaped reads, consistent JSON error shapes, and a KPI engine computing performance ratio, specific yield and availability from telemetry.
It returns Performance Ratio two ways — uncorrected and temperature-corrected per IEC 61724. On the seeded data those differ by eight points. That gap decides whether a plant looks like it is underperforming, so it belongs in a conversation before the build, not after.
Live
A source PDF with merged category cells, per-group subtotals and a grand total, and the XLSX produced from it by script. Merged cells are unmerged and forward-filled so sort and filter actually work; every subtotal is a live =SUM(), never a pasted number.
Every total is recomputed and reconciled against the figure printed in the PDF — 16 of 16 match. A pasted total agrees until someone edits a row, then it quietly lies.
Live
Headings stay on their own underlined lines, tables come out as aligned columns that still read as tables in a plain editor, and reading order is preserved by sorting blocks on vertical position rather than dumping tables at the end.
Two real bugs found and fixed while building: a merged table cell was being mis-read as a heading and torn out of its table, and tables were rendering out of order. Tested on a Unicode-heavy page — 1,040 lines, 14 tables, right-to-left runs intact.
Utilities I built for problems that kept recurring, left up for anyone to use. No signup, and no upload — they run inside your own browser.
Live
Drop a spreadsheet export and get a column-by-column profile plus a ranked list of what will break the import: ragged rows, duplicate records, numbers stored as text with currency or thousands separators, two date layouts in one column, and text mangled by a wrong-encoding round-trip.
It deliberately refuses to convert a date column when day-first and month-first cannot be told apart from the data — it flags it and leaves it alone. Tools that guess there are the reason "the dates are wrong" bugs survive to production.
Projects built outside client work.
Three Indian brokers — Zerodha Kite, Angel One, and Groww — each expose live market data differently: OAuth redirect flow in one, TOTP-based auth in another, minted-and-refreshed tokens in the third. Different field names, different failure modes.
I built a single adapter layer that normalises all three behind one interface, so the application code doesn't know or care which broker is configured. Adding a fourth broker means writing one class, not touching the app.
Credentials are bring-your-own-key: they live in a local environment file on the user's own machine. Nothing hardcoded, nothing uploaded, no shared secrets.
Reading and sending WhatsApp messages programmatically means handling the linked-device session lifecycle — pairing, session persistence, and reconnecting cleanly when the socket drops.
Built and verified end to end: session linking, structured message logging, and delivery handling. Where a project needs long-term stability rather than a quick script, I'd recommend the official WhatsApp Business Cloud API instead — the setup cost is higher but it won't break on a protocol change.
Testing whether a signal is real, rather than a pattern that happens to fit the sample you tested it on.
A pipeline ingesting six years of minute-level NIFTY options data, computing derived metrics over rolling windows, and validating candidate signals with walk-forward testing on held-out periods. Most of the candidates I tested did not survive that validation — which is the point of running it.
This is data-analysis tooling, not a trading service or investment advice.
CNG station data across India is scattered, and queue times — the thing drivers actually care about — aren't published anywhere.
Seeded 337 stations from OpenStreetMap with a crowdsourced layer for live queue reports. Currently a working front-end prototype with local persistence; the shared backend is the next build step.