KQ-1764 · REQUEST/TRACKER

Request Tracker

A customer's own page for a support request: whose turn it is in words, a bead riding the stages from received to solved, the updates as headed articles and a reply box. A stage change glides the bead on springs.glide with the rail's fill on the same motion value, and the stage it reaches fills with a check drawn on springs.flick; while the request waits on you the bead breathes and the reply box's measured height opens on glide. Replying (Ctrl+Enter) lands your update at the top on glide and passes the turn back with an honest next-reply time, and a solved request asks for a rating in a radiogroup driven by the arrow keys.

KQ-1764 · REQUEST/TRACKER

Request 4812Opened 13 Oct

Export to CSV stops at 10,000 rows

Your turn

Noor is waiting for your reply, Jun. We'll keep this open 7 days.

  1. Received, completed
  2. Investigating, current
  3. Fixing, to do
  4. Solved, to do
  1. Could you send the export log ID?

    Noor, Basinworks· 25 min ago

    In Settings, open Exports, then the last export, and copy its log ID (it starts with EX-). It tells us which server handled it.

  2. Looking into the export limit

    Noor, Basinworks· 13 Oct

    Thanks Jun. I can reproduce the cut-off on workspaces with more than 10,000 rows, so it isn't your file. I've moved this to Investigating.

  3. Request received

    Basinworks· 13 Oct

    We have your request and sent a copy to jun@coldbrook.studio. Replies come here and by email.

investigating · your turn · request 4812

Install

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

$ pnpm dlx shadcn@latest add @kinetiq/request-tracker

Props

stageStyle
"rail" | "segments" | "ladder"
default "rail"
How the stages are drawn: a rail with a riding bead, a segmented bar, or a vertical ladder.
density
"compact" | "cozy" | "roomy"
default "cozy"
Type size, paddings, gaps and ladder rung height.
accent
"cobalt" | "jade" | "amber" | "mono"
default "cobalt"
The bead, the rail's fill, the turn and Send.
request
TrackedRequest
default defaultTrackedRequest
Number, subject, stages, current stage, whose turn (waitingOn), updates, openedAt, responseTarget (minutes) and lastReplyAt. Whatever the host changes is taken; local replies are kept until echoed.
now
number
default defaultTrackerNow
The moment times count from, ms. Never read from the clock.
status
"ready" | "loading" | "error"
default "ready"
Whether the updates have arrived. Loading and error keep the layout.
onReply
(text: string) => void | Promise
default —
A reply was sent. A promise holds Send; a rejection keeps the text and offers Retry.
onClose
() => void
default —
"My issue is solved" was pressed; the bead goes to the last stage.
onReopen
() => void
default —
Reopen request was pressed on a solved request.
onRate
(rating: "poor" | "okay" | "good" | "great") => void
default —
A solved request was rated.
onRetry
() => void
default —
Retry was pressed after the updates failed to load.
company
string
default "Basinworks"
Who is answering.
customer
string
default "Jun"
The customer's first name, used in the turn line.
autoCloseDays
number
default 7
Days a request waiting on you stays open.
pulse
boolean
default true
Let the bead breathe while the request waits on you.
height
number
default 540
Height of the page, px; the updates scroll inside.
disabled
boolean
default false
Nothing can be sent, closed, reopened or rated.
className
string
default —
Classes for the outer surface.