HP

Senior Full-Stack Engineer · 10 years

I make business-critical
automation reliable.

For the last five years I've owned the two dashboard products at a US-based e-commerce conversion-analytics SaaS — the client-facing analytics surface used by 130+ enterprise retail clients, and the internal console the business runs on. Postgres schema through BullMQ workers to the React that renders it.

The work I'm known for is the unglamorous kind: distributed locking, crash-resumption, idempotent jobs, and the data-integrity bugs that hide for years because nothing was comparing the values.

Years building for the web
10
Enterprise clients served
130+
Platform re-architecture
3 mozero incidents
Engineers led technically
5

Selected work

Five things I built, and what was wrong before.

Client names and internal systems are kept general. Happy to go into full detail in conversation.

Bulk report generation at scale

Report generation was serial, slow, and lost all progress on a server restart. Approvals were entirely manual, and concurrent runs corrupted each other's external API sessions by fighting over the same credentials.

  • Designed the BullMQ queue architecture — priority scheduling, retry executor, dead-letter handling.
  • Added crash-resumption, so bulk runs survive restarts instead of starting over.
  • Built a rules-driven auto-approval workflow with status history, replacing a manual review step.
  • Fixed the token contention by centralising credential reset behind a recurring refresh cycle.
  • Built a data-matching pipeline reconciling crawled analytics against expected values, with automatic re-fetch on mismatch.
  • BullMQ
  • Redis
  • PostgreSQL
  • AWS S3

Stripping credentials from a crawler

A browser-automation service held every credential it touched — database access, object storage keys, SMTP, platform logins. Any compromise exposed all of it. It also had no concept of session health, so an expired profile failed repeatedly with no diagnosis.

  • Moved every privileged operation behind an authenticated internal API, leaving the crawler holding only a short-lived signed service token.
  • Built browser profile lifecycle management — health status, usage tracking, per-platform assignment, TOTP handling for two-factor logins.
  • Built a daily crawl planner with eligibility resolution, opt-outs and attempt caps, plus a plan/run pair so operators see what a job would do first.
  • Playwright
  • Express
  • JWT
  • Docker

A three-month platform re-architecture

Two dashboard products sat on LoopBack and class-based React. The same metric could show different figures in different views — a recurring client-trust problem.

  • Led the migration to a TypeScript PERN stack with server-driven UI, running the new stack in parallel and moving clients incrementally behind a feature flag — full cutover in 3 months, zero client-facing incidents.
  • Consolidated all metric calculation into Postgres stored procedures, making the database the single source of truth and the front end a pure presentation layer.
  • Shipped stale-build detection and forced-refresh handling to move active sessions onto the new build mid-rollout without version-mismatch errors.
  • Introduced the team's first production monitoring.
  • TypeScript
  • React 18
  • PostgreSQL
  • Feature flags

The dashboard clients actually read

130+ enterprise clients needed to read conversion and revenue KPIs, and every new report configuration required a frontend release to ship.

  • Built a server-driven component system rendering the same metric set as tables, charts or tiles — new report configs ship without a deploy.
  • Designed a Redis-backed, multi-instance SSE fan-out, so an event processed on any API node reaches every connected dashboard. Live updates, no polling.
  • Built a guided product tour engine with DOM-settled anchoring that waits for skeleton loaders to resolve before attaching — turning onboarding from unmeasured into a funnel with visibility.
  • Implemented multi-tenant authorisation with CASL and Redis permission caching, invalidated on role change.
  • React 18
  • Zustand
  • SSE
  • CASL
  • ECharts

How I work

Opinions I've earned the hard way.

The failure path is the feature

Most systems I inherit work fine on the happy path. What breaks them is the second concurrent run, the restart at 80%, the third-party API returning something nobody planned for. I design for those first.

A dry run is not optional

Every destructive job should be able to tell you what it would do without doing it — and that path must never be blocked by a lock, because inspecting a job is exactly what you want while one is running.

Partial work is still work

A job that dies at batch nine of twelve has learned something true about nine batches. Throwing that away means rediscovering it next run. Persist as you go.

Comments explain why, not what

The code already says what it does. What it can't say is which outage caused this constant, or why the obvious approach was rejected. That's the context the next person needs at 3am.

Check the schema, not just the query

A column declared with the wrong precision silently discards data on every write. No error, no warning, just quietly wrong numbers for years. Worth looking when a value seems off but not off enough to notice.

Thin controllers, decisive services

Logic in an HTTP handler is logic you can only exercise over HTTP. Push it into a service and the same code is callable from a cron, a CLI and a test.

Stack

What I reach for.

Backend

Node.js · TypeScript · Express · REST API design · BullMQ · Server-Sent Events · Zod · LoopBack

Data

PostgreSQL — schema design, stored procedures, migrations, query tuning · Redis — caching, pub/sub, distributed locks

Frontend

React 18 · Zustand · TanStack Query · Redux Toolkit · Vite · Tailwind · Ant Design · ECharts · D3

Automation

Playwright · scheduled job design · idempotency · distributed locking · crash-resumption

Infrastructure

AWS — S3, Lambda, CloudFront · Docker · PM2 · CI/CD · New Relic

Auth & integrations

OAuth 2.0 · JWT + refresh rotation · service-to-service auth · CASL · HubSpot · Google Analytics 4 · Shopify

Also: technical lead for five engineers, first-round interviewer across 40+ candidates, and the person who moved the org onto proper task management.

Contact

Available for select freelance and contract work.

Most useful to you if you have a system that's fragile, slow, or quietly wrong — a pipeline that keeps falling over, a job nobody trusts, a migration that's been postponed twice. That's the work I like.

Based in Mumbai, India · UTC+5:30 · comfortable overlapping US and EU hours