Skip to content
shadcn.io

shadcn.io is not affiliated with official shadcn/ui

Podcast Season Grid Profile Block for React

A podcast host profile as a season grid: three seasons by up to ten episodes shaded in four weights by downloads or length, a triangle on each season's best, and a band with the picked episode's guest, date, length, downloads and its season's average.

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

Show a podcast as seasons of episodes, with no player, with this podcast season grid profile for React with Base UI. A compact header holds the title and one sentence, and the hairline frame under it opens on the host: initials, name, the show and a badge that counts the days since the latest episode from a fixed date. A pair of buttons weighs the grid by downloads or by length. The grid is a native table with the seasons down the side and the episodes across, and each cell is a radio that prints its number and takes one of four weights of foreground by how that episode ranks among all of them; each season's best wears a triangle. Picking a cell (with a click or the arrow keys) fills the band under the grid: the episode's title, its guest or "Solo, with the host", its date (counted weekly from the season's first episode), its length, its downloads and the average of its season, all worked out from the typed rows. On a phone the grid scrolls sideways inside its own region with the season names held in place. It's built from Toggle Group, Avatar, Badge and Guides, with a native table and CSS only. The host, the show, the guests and the numbers are invented. For a podcast host's page, a creator's season overview or any profile that compares episodes at a glance.

FAQ

How do I fill it with my own episodes?

Edit the three season arrays (ONE, TWO, THREE) in the Ark file: each row is [title, guest, seconds, downloads], and a season has a name and the day its first episode aired. Everything else is worked out from them: the grid's columns come from the longest season, the weights from each episode's rank among all, the dates from the season's start plus a week per episode, and the averages from the rows. Leave the guest empty for a solo episode.

How are the four weights chosen, and is colour the only signal?

Every episode is ranked by the figure you chose (downloads or length) and the ranks are cut into four equal steps, so there are always about as many cells at each weight. The weights are tints of the foreground colour, never a hue, and every cell prints its own number, so no meaning rests on shade alone. The best episode of each season carries a triangle in the cell and ", season best" in its spoken name.

How do I use the grid with a keyboard or a screen reader?

The cells are native radios in one group named "Episodes, by season", so Tab enters the grid at the picked episode and the arrow keys step through the episodes in order, picking each as you go. A screen reader hears the season, the episode, its title and its figure ("Season 2, episode 3: Switchboard, 21.3K"). The blank cells where a season ran short hold nothing and are skipped. The two weighing buttons are a Toggle Group: the arrow keys follow the layout's direction there.

How does it look on a phone?

The grid is wider than the screen, so it scrolls sideways inside its own region while the season names stay at the start; the next columns peek in as the affordance. The picked episode's band, its three figures and the status line sit under it. Nothing else changes: the same table and the same radios are used at every width.

What stays local, and how do I wire it to real data?

Everything. Weighing, picking and the averages change what is on the page and the polite status line, and nothing is sent or fetched; there is no player, no waveform and no chapter list, and nothing plays. To wire it up, replace the typed arrays with your host's stats (a server component can pass them in), keep the helpers that derive the weights, the dates and the averages, and keep the status line.

Is it accessible?

The grid is a real table with a caption that says what its cells show, th cells for the seasons and the episode numbers, and radios with full names. The status line is a polite live region present from the start and it speaks the weighing and the pick, not every arrow press twice. Focus is a visible double ring on the picked cell, the entrance is a CSS fade that stops under reduced motion, and the logical classes keep it correct in a right-to-left layout (the numbers stay left to right).

  • Pro

    A radio presenter profile as the station's weekly programme: Monday to Sunday by hour as a table of shows that span their hours, a line at the fixed now, the show on air named, a card for each picked show, and day tabs on a small screen.

  • Pro

    A musician profile as a discography: a cover band of four drawn typographic covers over the musician, an accordion of albums, and for the open album its tracks with lengths, stream bars scaled to its top track and a star on the most streamed.

  • Pro

    Podcast Show Notes About

    Press and recognition

    Show notes for a podcast hosting company's own show: a scrolling vertical list of eight episodes at the start and the chosen episode's notes at the end, with a summary, chapters drawn to scale and listed with time stamps, and a Listen link.

  • Pro

    A music listener profile with top artists by range: a start cell with the listener and facts from the history, and a segmented control that re-ranks ten artists in place with plays, a share bar and the move against the period before as a sign and an arrow.

  • Pro

    A film director profile as a filmography on a year axis: eight films as pickable bars of box office on a fixed axis with a star over award winners, a genre filter that dims the other films, and rows for the picked film's budget, earnings, awards and collaborators.

  • Pro

    An animator profile as a frame scrubber: a drawn stage worked out from the frame number, a slider through 96 frames at 24 a second with the timecode and shot name, shots as buttons that jump to their first frame, and the credits.