Skip to the work

gururaj.dev

Frontend engineer

Gururaj J

I build the component systems other engineers ship on, and the product my customers pay for.

Five years in production frontend, the last two on IBM's Carbon Design System, where I own shared components, upgrade paths, and the docs site that decides whether teams adopt them. Alongside that I run KnotCMS, a Notion to Framer sync with paying customers, where I own onboarding, dashboard, billing, and support myself.

Systems
Carbon / KnotCMS
Surface
Components / Docs / Product
Ownership
Design → API → Implementation → Production

Open to frontend engineering roles on small teams. Product surfaces, design systems, developer tooling.

Bengaluru or remote · UTC +05:30 · 60-day notice · I reply within a day

Production footprint

Carbon Design System · IBM

100+

product teams ship on components I maintain

5,000+

developers served

73K

weekly npm consumers

85%

test coverage · @carbon/react

4

core components owned end to end

6 major upgrades · 0 unplanned breaking changes

Currently shipping

status record

KnotCMS

billing webhooks

Live

Last shipped
4 days ago
Stack
Workers / D1 / Queues
Page updated
Sep 2026 · changelog

01System inspection

Selected work — in depth

System · 01

Live

KnotCMS

Solo product · alongside IBM · since Jun 2026

Notion becomes a Framer CMS, kept in sync. A live product with paying users — auth, billing, webhooks and support are all mine.

Why it matters
I have carried a product from idea to invoices, so I understand the cost of the decisions I ask platform teams to make.
Running now
self-service signup, subscription billing, and a sync that recovers itself when Notion rate-limits.
Architecture
event-driven Workers, D1 for state, KV for sync cursors, queues for retries, OAuth against Notion and Framer.
Hard part
idempotent replay — a webhook can arrive twice, late, or out of order, and the CMS must still converge on one correct tree.

Architecture

Event-driven · Cloudflare

  • External system
  • Sync engine
  • State / retry
  • Product surface

Production failure

problem → diagnosis → change → outcome

  1. Problem7,000 rows
  2. DiagnosisWorkers subrequest fan-out failure
  3. ChangeQueue-based batched invocations
  4. OutcomeReliable synctested to 5,000 rows in ~3 min
TypeScriptWorkersD1KVQueuesOAuthWebhooksRead the case

02Engineering judgment

How I work — four rules

Rule 1: The API is the product

EvidenceCarbon / component API

A component's props outlive its markup. I design the interface first and defend it in review, because every prop is a promise someone else will hold me to.

Rule 2: A breaking change ships with its migration

EvidenceCarbon / platform upgrades

Codemod, lint rule, dual-support window, dated deprecation. If I can't automate the upgrade, the change isn't ready.

Rule 3: Docs are adoption, not decoration

EvidenceCarbon / documentation platform

Nobody adopts what they can't understand alone at 11pm. I measure a component by how few questions it generates.

Rule 4: The flow that technically works can still be broken

EvidenceCarbon / navigation UX

Filtering our side navigation returned the matched page and hid everything beneath it, so anyone searching for a section landed at a dead end. It passed every test. I rebuilt it without waiting for a spec, design adopted it, and our SUPR-Q score went up.

03Timeline

Experience

One timeline, everything on it.

Timeline

3 records

  1. 2026present

    KnotCMS

    Founder & engineer

    concurrent

    Onboarding · Dashboard · Billing · Support

    • Solo
    • Production
    • Paying customers
    • Cloudflare
  2. Feb 2024present

    IBM India · Carbon Design System

    Frontend developer

    Components · Documentation · Navigation · Migrations · CI reliability

    • 5,000+ developers
    • 73K weekly consumers
    • 3,400+ implementations
    • 4 components owned
  3. Sep 2021Feb 2024

    Wipro · Wells Fargo

    Project engineer

    Angular · Enterprise applications · Modernization

    • 5 enterprise apps
    • WebForms → Angular

Toolkit

10, ranked

Every day

5 years+

  • TypeScript
  • React
  • Lit
  • Design systems
  • Storybook
  • PayloadCMS

Reach for

shipped with

  • Next.js
  • Cloudflare Workers
  • Angular
  • MongoDB

Layers

  1. 01UI

    • TypeScript
    • React
    • Lit
    • Design systems
    • Storybook
  2. 02Product

    • Next.js
    • PayloadCMS
    • Angular
    • REST APIs
    • MongoDB
  3. 03Platform

    • Workers
    • D1
    • KV
    • Queues
    • OAuth
    • Webhooks

04Contact

Here's exactly
what happens next

  1. 01

    Send: the team, the problem you're hiring against, and the level. Two lines is plenty.

  2. 02

    I reply within a day with a straight yes or no on fit — no funnel, no recruiter round.

  3. 03

    If it fits: 30 minutes on your platform problems, and I'll come with questions.