work · 55 original repos · 15 npm packages

A decade of code,
told in seven case studies.

Each thread spans years and multiple repositories — work shipped with the team at one company, one library that's entirely mine, plus the public OSS that fell out of both. Read the long-form, or scroll for the index.

Case studies

seven long-form
01
2025 — now

A Customer-Facing AI Assistant & API Docs Portal

flagshiptracxnAIdocs portalMCP

A self-serve API documentation portal — with an embedded AI assistant — on top of the company's private-market intelligence APIs. Shipped in 2026, and every week since has gone into making it harder to break. An internal LLM gateway the year before was the warm-up.

  • A self-serve API docs portal on Fumadocs — access-scoped, long-form guides kept in sync with the code, the assistant embedded in it
  • A build-time OpenAPI pipeline feeding both the docs and the assistant's context, so neither drifts from the API
  • An intent router that picks the model per question — multi-model by default, routing cost measured alongside answer cost — across OpenAI, Anthropic, Google, OpenRouter and BYOK, new frontier models absorbed within days
  • Versioned prompt sets, tuned per model tier and assembled per request rather than hand-maintained as one growing file
  • A tool surface — search, schema discovery, entity resolution, docs retrieval, web search, export — under aggregation-first query discipline, plus a skills layer of named, access-gated research workflows invoked inline
  • An answer surface built for reading — streaming markdown legible mid-stream, tables, diagrams, math, charts, voice, replies in the reader's language, and server-side Word / Excel / PDF export as it's read
  • Layered prompt-injection and anti-disclosure defenses, pinned by an evaluation harness and regression tests; selective prompt caching with cost attributed per response
  • Reliability that doesn't demo — concurrency limits, layered timeouts, a graceful answer when the clock runs out, provider errors classified rather than leaked — plus audit-grade logging and post-mortem tooling
  • A read-only MCP server surface so Claude / Cursor / VS Code get the API without a pasted token — architected and first shipped by me, current version co-built — all in compressed months alongside platform, design and data
02
2026

microcharts — Word-Sized Charts for React

own projectOSSlibrarya11ydataviz

106 handcrafted chart types small enough to sit inside a sentence, a table cell, or a streamed AI reply. Zero runtime dependencies, accessible by default, server-component safe. Mine, start to finish — design, code, docs, site.

  • 106 stable chart types across four tiers — core, decision, expressive, frontier — each grouped by the question it answers, not the shape it draws
  • One grammar for all of them: a chart is `data` plus a generated sentence, so a model that has seen one can write them all
  • Measured, not rounded — ~2–7 kB gzip interactive (median 5.0), ~1–4 kB static (median 2.6), budget-gated in CI; 500 server-rendered sparklines in 5.5 ms
  • Zero runtime dependencies — no chart engine, no D3, just SVG; React is the only peer and CI enforces it
  • Static charts are hook-free with zero client JavaScript; interactivity is an opt-in subpath composing the static twin — one contract: hover / arrows activate a unit, click or Enter pins, Escape clears
  • Every chart is an `img` with a natural-language summary built from its own data — accessibility that can't drift; themed through ~two dozen CSS custom properties, `defineTheme` deriving a colour-blind-safe palette and dark twins from one accent
  • Machine surfaces alongside the human ones — llms.txt, llms-full.txt, a catalog.json of every chart's props and data shapes — and a documented no-list (pie, speedometer, battery, waffle, violin), each failing at micro scale, each with a better in-catalog replacement
03
2016 — now

A React Component Library, for a Decade

platformtracxn10y

Started in November 2016. The team has been evolving it ever since — through framework upgrades, build-tool migrations, design-system rewrites, and team turnover.

  • A 12-month PDF viewer rewrite, still landing in pieces — animations, micro-interactions, vertical-scroll mode
  • A cross-stack image-loading rewrite — backend, library and app, moving from a custom React loader to native, DPR-aware URLs
  • A hand-rolled AST codemod for a button-component migration, touching the call-sites the migration needed
  • Storybook upgrades, a Webpack 4 → Vite POC, type-definition cleanup
  • Storybook hygiene, lint conventions, the small things a long-lived library needs
04
2018 — 2026

Performance & Platform

platformperf

Bandwidth, FPS, bundle-size — slow-cooked wins across four years and three repositories, shipped by the platform team.

  • Native browser image loading with DPR-aware URLs — bandwidth down, layout shift down, complexity down
  • react-scan integration in the debugger; an FPS meter; lazy header sliders; Brotli for static assets
  • An esbuild bundler POC; a Puppeteer-based PDF renderer, parallelised and qpdf-compressed
  • Engagement-tracking beacon for the lighter-weight surfaces
05
2017 — 2026

Build Tooling & Force Multipliers

DXOSS

The work that does not show up in feature flags but shows up in how fast every other engineer on the team ships.

  • A hand-rolled AST codemod for a long-lived button migration — same tool, hundreds of call-sites
  • The @ganapativs/* scope on npm — eslint-config-react, eslint-config-react-ts, babel-preset-react, used as team defaults
  • Cursor and Claude Code dev-tooling rules codifying review and AI-pairing conventions for the team
06
2015 — 2024

Mobile & Cross-Platform

mobilebrowser

From the original React Native app in 2015, to a public Chrome Web Store extension nine years later.

  • Helped architect and ship the cross-platform iOS + Android app on React Native + Redux
  • Years later: a full React Native upgrade, plus the iOS app-site-association work
  • A Chrome + Firefox extension build pipeline for the product
  • Priority Browser Extension — a small productivity utility, live on Chrome Web Store and Firefox since May 2024
07
2019 — 2025

Data Ingest & PDF Tooling

databackend

Data pipelines and the document-processing primitives sitting underneath them — built with the data team.

  • A regulatory data-ingestion pipeline — Kafka consumers, resilient fetch orchestration, scheduling
  • XBRL parsing for structured financial filings
  • Hardened network-egress infrastructure for backend services
  • puppeteer-warc — public OSS, captures Web ARChive (WARC) of pages
  • PDFium and PDF-tooling sandboxes that later fed the production PDF viewer rewrite