KQ-1737 · SIGN/OFF/ROUND

Sign-off Round

An approval round on a document: every reviewer's verdict lands as a stamp in its slot on the document's header, dropping from 1.4× and a little more turned onto its resting tilt on springs.recoil — the two small bounces of a hand stamp — while the header sinks 1.5px and springs back on springs.snap, a ring of ink spreads under it and the thock is heard at touch-down. Changes requested stamps in muted red whatever the accent and needs a comment; its stamp is a button that brings the comment into view. The progress rail fills a segment per verdict on springs.glide, and when the last stamp lands the round completes: the rail takes the outcome's colour and the chip rolls to Signed off or Changes requested. Reviewers are a list in tab order with Approve, Request changes and Remind as real buttons.

KQ-1737 · SIGN/OFF/ROUND

Basin plan pricing changev3

Kenji Ito · updated 2 h ago

1 of 4 signed
Waiting on Noor, Tomas and Priya

Reviewers · 1/4

  1. Ines MarlowFinance

    Approved · 50 min ago

  2. Noor HaddadProduct · you

    Waiting

  3. Tomas BrandtSupport

    Waiting

  4. Priya RamanLegal

    Waiting

Summary

Move the Basin plan from $18 to $22 per seat for new workspaces from 1 December. Existing workspaces keep $18 for twelve months.

Why now

A Basin seat costs 31% more to serve since the storage change. At $22 the plan's margin returns to where it was a year ago.

What changes

New sign-ups see $22 on the pricing page. Annual plans keep two months free. Invoices for existing workspaces do not change.

Risks

Trial conversion may dip for a quarter, and support will hear from teams close to renewal. The renewal email carries the twelve-month promise.

1 of 4 signed · waiting on Noor, Tomas, Priya

Install

One command — the source lands in your repo. Or copy it from the Code tab.

$ pnpm dlx shadcn@latest add @kinetiq/sign-off-round

Props

document
SignOffDocument
default defaultSignOffDocument
The document: { title, version, owner, updated, sections: { heading, body }[] }.
reviewers / defaultReviewers
SignOffReviewer[]
default — / defaultSignOffReviewers
Reviewers in tab order as { id, name, role, verdict: "pending" | "approved" | "changes", comment?, at? }, controlled or initial; a verdict that arrives after the first paint lands as a stamp.
onReviewersChange
(reviewers) => void
default —
Fires with every reviewer after a verdict is recorded here.
viewer
string | null
default "noor"
The reviewer the visitor is: only their row offers Approve and Request changes, the rest offer Remind. null records verdicts for anyone (a facilitator).
onApprove
(reviewerId) => void
default —
A reviewer approved.
onRequestChanges
(reviewerId, comment) => void
default —
A reviewer requested changes, with the required comment.
onRemind
(reviewerId) => void
default —
Remind was pressed for a reviewer who has not answered.
onComplete
(outcome: "approved" | "changes") => void
default —
The last verdict landed — from the press that made it, or once after the host's update that did.
stampStyle
"round" | "rect" | "initial"
default "round"
A round seal with the verdict on an arc, a rectangular rubber stamp with the date, or a circled monogram with a verdict badge.
density
"compact" | "regular" | "roomy"
default "regular"
Stamp size (52/60/68px, smaller below a 30rem container), row padding and type.
accent
string
default "var(--success)"
Approval ink, the rail and Approve — any CSS colour, taken at a fixed lightness so the ink reads in both themes. Changes requested stays muted red.
remindCooldownMs
number
default 4000
How long Remind rests (aria-disabled, reading Reminded) after a press, in ms.
now
number | Date
default defaultSignOffNow
The moment relative times count from; new verdicts are dated with it.
status
"ready" | "loading" | "error"
default "ready"
Loading shows skeleton stamps, reviewers and text; error shows Try again.
onRetry
() => void
default —
Try again was pressed after the round failed to load.
height
number
default 540
The surface's height in px; the document and reviewers scroll inside it.
sound
boolean
default false
Play the thock of a stamp the visitor pressed, at touch-down (lower for changes requested).
disabled
boolean
default false
Read only: verdicts show; nothing can be stamped or reminded.
className
string
default —
Classes for the surface.