Skip to content
shadcn.io

shadcn.io is not affiliated with official shadcn/ui

Developer Inbox Notification Block for React

A developer inbox as a table: a checkbox, a mono repository name, the title and a reason tag per row, a select-all that shows a mixed state, and bulk Mark done and Unsubscribe with an Undo.

Framework
UI library

Preview

Preview width

Installation

Part of Pro
Pro unlocks the code and one-line install of every Pro button and text effect, plus the MCP for your AI editor.
Have Pro already? Sign in to open it.Opens here as soon as you're Pro.

Overview

Triage a day of review requests in one pass, with this developer inbox for React with Base UI. A compact header holds the title and one sentence over a hairline frame with a plus mark on each corner. The frame holds a native table in a scrolling region of one height: each row has a Checkbox, the repository in mono type, the title (heavier while it is unread) and a reason tag, an outline Badge with a glyph and a word: Review requested, Assigned, CI failed or Release. The header checkbox selects every open row and shows a bar while only some are ticked. The foot counts what is ticked and offers Mark done and Unsubscribe. Done removes the rows, Unsubscribe keeps them and swaps their reason for "Unsubscribed", and Undo puts back exactly what the last action changed, ticked again. With nothing left, an Empty state offers the same Undo. It's built from Checkbox, Badge, Button, Empty and Guides, with a CSS entrance only. For a code-review tool, an issue tracker or any inbox you clear in bulk.

FAQ

How do I fill it with my own notifications?

Edit NOTES at the top of the file. Each has an id, a repo, a num (the pull request or issue number), a title, a reason (review, assigned, ci or release), an ISO at time and whether it was unread when the page opened. The reason tags, the counts in the foot and the select-all state are worked out from that list. Times are shown against AS_OF: today as a clock time, yesterday as a word, older as a weekday and date.

What stays local, and how do I make it real?

Done, Unsubscribe and the ticks live in the page and reset on reload; nothing is sent. In your app, keep done and quiet as server state and send the ids each handler already builds (picked is the list to send), then render from the result. Undo sends the reverse for the ids it remembers. The titles don't open anything here; in your app each one would link to its thread.

How does select all work?

The checkbox in the table header ticks every open row, or clears them if all are ticked. While only some are ticked it shows a bar instead of a tick, which a screen reader hears as mixed. Rows you marked done are gone from the list, so they are never counted. The foot says how many of the open rows are selected.

What does Undo restore?

Exactly the rows the last action touched: for Mark done it brings them back into the list in their original order, and for Unsubscribe it gives their reasons back. Either way they are ticked again, so you can choose another action. Only one step is remembered, and Undo says "Nothing to undo." when there is none. Focus moves to Undo after an action and to the list after an Undo.

Is it accessible?

It is a real table with a caption, column headers and one row per notification, inside a scrolling region that takes the keyboard. Each checkbox is named by its row's title and described by its repository, unread rows say "Unread" before the title, and every state is a word as well as a shape: the reason tag has a glyph and its name, never only a colour. The status line in the foot is a polite live region present from the start.

How does it look on a phone?

The table keeps two columns, the checkbox and the notification. The repository, the reason tag and the time fold under each title as a second line, so a row grows a little taller than on a desktop, and the table still scrolls inside its fixed height. The foot stacks its status line over the three buttons.

  • Pro

    An app window with filters at its start: type checkboxes with counts, priority toggles and an unread switch narrow the list, removable chips show what is on, and an empty result offers Clear.

  • Pro

    A notification centre as a narrow panel: tabs for All, Mentions and Alerts with their own unread counts, rows you press to mark read, a mark all read for the open tab and a clear with an undo.

  • Pro

    An archive of notifications as a table whose auto-delete column is worked out again when you pick a retention period, with a restore per row, an undo, and an alert dialog before it empties.

  • Pro

    An inbox with an unread-only switch and a live count, where a row you read stays in place until you turn the switch off, and zero unread is a designed Inbox zero state.

  • Pro

    Notifications split into Pinned and Recent with a pin on every row and a limit of three: the pinned ones stay on top in the order you pinned them, and at three the other pins say to unpin one first.

  • Pro

    A shared support inbox as an app window: a list of notifications under All, Unread and Archived views, and a reading pane with the sender, the time, the text, a context list and mark read, archive and undo.