shadcn.io is not affiliated with official shadcn/ui
Content Calendar CRUD Block for Radix UI
A team's publishing plan in two bands: ideas without a day and scheduled posts grouped by day, a quick line that adds an idea, a schedule popover that refuses a crowded day, Unschedule, locked published posts and Delete with Undo.
Installation
Overview
Plan what goes out and when, with this content calendar for React with Radix UI. A hairline frame with a plus mark on each corner opens with a Toggle Group of channels, each with its count, that filters both bands. A quick line adds an idea for a channel on Enter, and its Add button is the only Shine Button. One frame of fixed height holds the Ideas band, whose posts have no day, and the Scheduled band, grouped by day and then by channel. Schedule opens a Popover with a date and a channel: the post moves into its day, or the popover names why not, such as "Newsletter already has 2 posts on 20 Oct". Unschedule sends a post back to Ideas, and a published post shows a lock and can't change. Delete covers ideas and scheduled posts and leaves a line in the foot with an Undo. The bands are ruled by Guides, and an Empty state shows when nothing is left. For newsletters, blogs, video and any team that plans before it publishes.
FAQ
How do I fill it with my posts?
Edit START_LINES: each line is a title, a channel, an ISO day (empty for an idea) and yes when it is already published. Channels are listed in CHANNELS, and the limit of posts per channel and day is PER_DAY. The counts on the toggles and the band headings are derived from the list.
What does Schedule refuse?
A missing day, a day on or before the fourteenth of October 2026 and a day on which that channel already has two posts. The reason appears in the popover and the foot, the popover stays open, and nothing moves until the post passes. Changing the channel in the popover re-checks the day.
Why can't I change a published post?
A published post is out. It shows a lock and "Published, cannot change" in place of its buttons, so it can't be unscheduled or deleted. In your app that is a rule on the server too.
What does Undo bring back?
The last change: a scheduled post, an unscheduled one or a deletion. The whole list returns as it was, and focus goes to that post's button. A new change replaces it.