React Deployment Pipeline

What passed, what's running, what's waiting on a human — and the one button that puts production back the way it was. A release board reduced to the four things you actually need at 2am.

Deploy v3.4.1

Awaiting approval

a1c92f0· h.kursun

BuildPassed1m 22s
TestsPassed2m 26s2,481 passed
StagingPassed39s
Prod gateAwaiting approval
ProductionPending
Prod gate is waiting on approvalfrom Release captain.

Installation

npx shadcn@latest add "https://kelvinui.com/registry/deployment-pipeline.json"

Props

PropTypeDescription
versionstringVersion being deployed
commitstringCommit SHA
authorstringWho triggered it
stagesPipelineStage[]{ id, name, status, durationMs?, approver?, detail? }
liveVersionstringWhat's live now — enables rollback
onApprove(stageId: string) => voidFired when a gate is approved
onRollback() => voidFired on rollback

Gates are a status, not a button somewhere else

gate is a first-class stage status. A pipeline paused for human approval is neither running nor failed, and showing it as either is how releases get forgotten mid-flight. It renders amber with an inline Approve button, and a banner names who is holding it — approving marks the gate passed and starts the next pending stage.

The header status is derived, in priority order: failed beats awaiting approval beats in progress beats deployed, so the most urgent state always wins. When a pipeline fails, the banner says which stage broke and reassures you what production is still running — the second half of that sentence is the one that lowers a pulse rate.

Rollback is deliberately always available whenever liveVersion is set, styled as a destructive-hover outline rather than a primary button: reachable in one click, never the thing you hit by accident.

New components every week

Get the week's new Kelvin UI components and templates in one short email. No spam, unsubscribe anytime.