shadcn.io is not affiliated with official shadcn/ui
Job Queue Dashboard Block for React
Six background-job queues in a list with their depth, lag and workers, and for the chosen queue its dead letters grouped by error with a sample payload, a Retry group and a Discard group that asks first, and one Retry all.
Installation
Overview
Clear a backlog of failed jobs in groups instead of one at a time, with this dead-letter panel for React with Base UI. A hairline frame with a plus mark on each corner holds six Belttray queues in a list at the start, each with the jobs waiting, the lag of the oldest one, its workers and how many jobs are dead. Beside it, the chosen queue's dead letters are grouped by the error that killed them, each group with its job count, when it was first seen and one sample payload drawn by Json Text. Retry group puts the jobs back in the queue, and Discard group asks first in an Alert Dialog. Either leaves the group's place held with Undo, so nothing moves, and the totals in the header and the foot update. Retry all is the one primary button and retries what is left in the chosen queue. It's built from Alert Dialog, Json Text, Native Select, Shine Button and Guides. For job runners, support rotations and incident clean-up.
FAQ
How do I fill it with my own queues?
Edit QUEUES for the waiting count, lag and workers of each queue, and GROUPS for the dead letters: a queue, a signature (the error, ideally with variable parts such as ids removed so equal errors group), a count, a firstSeen ISO time and one sample payload. The dead counts, the group totals and the header are worked out from GROUPS and what has been handled.
What do Retry group and Discard group do here?
They change the panel's own state and nothing else. A retried group adds its jobs back to the queue's waiting count and shows "put back in the queue, in this demo"; a discarded group says it was discarded. Undo restores either. No job is queued, run or deleted.
How do I wire it for real?
Make retryGroup call your queue's requeue endpoint for the group's signature, and discardGroup its delete endpoint, and only mark the group handled when the response says it worked. Keep the confirm: a discard can't be taken back on the server.
What stays local?
Everything: the queues and groups are typed, the actions change only what is drawn, and a polite status line in the foot says so after each one ("Nothing was sent").
Can I use it without a pointer?
Yes. The queues are buttons with the chosen one marked aria-current, every action is a named button, the confirm is a real alert dialog, and after a retry or a discard focus moves to that group's Undo. A group whose jobs were handled keeps its place, so the page never jumps under the keyboard.