Skip to content
shadcn.io

shadcn.io is not affiliated with official shadcn/ui

Planning Poker Estimation Task List Block for React

A planning poker list: pick 1 to 13 or ? for each story, see the team's votes after you pick, read consensus or the median, and watch the total against the sprint's 26-point capacity.

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

Size a sprint's stories together, with this planning poker to-do list block for React with Base UI. Each story has a row of estimate pills built on Toggle Group, ?, 1, 2, 3, 5, 8 and 13, where ? means you haven't voted. After you pick, the team's three typed votes show: equal votes read "The team agrees on 3", unequal ones list the votes and the median that counts, and a story that counts as 13 adds "Consider splitting this story." The band above totals those medians against the sprint's capacity with a Sliding Number ("21 of 26 points"), says "Over by 3 points" or how much room is left, and counts the stories still on ?. "Sort by points" is an outline button that orders the rows once and leaves them alone while you vote. Guides rule the bands. For backlog grooming and sprint planning.

FAQ

What counts toward the total?

Each story counts as the upper median of the four votes: yours and the team's three. A story you haven't voted on counts as zero and is listed under "to estimate". Change a pill and the total, the room left and the over-capacity line all recompute.

What counts as consensus?

All four votes are the same. Otherwise the row lists the votes in order and says the median is worth a word, which is the nudge to talk before committing. The size of a gap is left to the team; the block only shows it.

How do I change the capacity or the scale?

Change CAPACITY for the sprint's points and PILLS for the scale, for example a t-shirt scale or a Fibonacci scale that stops at 8. The 13 rule is the constant in splitHint.

What stays local, and how do I save for real?

Your picks and the team's votes live in the page, and the team's are typed here, so nothing is shared and it resets on reload. In your app send your pick from pick, hide everyone's votes until all have voted, and reveal them together.

Is it accessible?

Each group of pills is named for its story, the pills are one group with arrow keys, and a status message announces the new total after every pick. Consensus, spread and splitting are words in the row, not colors.

How does it look on a phone?

The pills sit under each story's title and the whole row stays within 320 px; the total band stays at the top above the list.