Skip to content
shadcn.io

shadcn.io is not affiliated with official shadcn/ui

Feature Heatmap Pricing Block for React

A feature heatmap that grades three course-platform plans from 0 to 3 on seventeen features in greys, with the legend in the header row, plan prices and calls to action as the first row, and a plan switch on phones.

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

Go beyond binary checkmarks with this feature heatmap pricing section, for React with Base UI. The headline and one sentence sit on the left of a compact header, and the legend sits on its right: four small swatches, from "Not included" to "Full". Below, one Table spans the page column between its rails, drawn by Guides with a + mark on each corner. Its first row is the plans: names, taglines, prices and Shine Button calls to action, with a Best value Badge, a light tint and the only primary button on the Academy column. Every cell below is a square shaded in a grey from the theme's foreground and numbered from 0 to 3 for how far that plan goes (not included, limited, standard, full), in five groups: Teaching, Selling, Community, Insights and Admin. Hover a row and its squares lift. Below the md breakpoint a Segment Group picks one plan and the heatmap keeps the feature names beside that plan's column. Built with Table, Segment Group, Badge, Shine Button, Guides and Tailwind CSS, with CSS transitions only. Perfect for B2B SaaS with tiered feature depth, course and learning platforms where every plan has the tool but not the depth, and any product whose premium plans unlock more of the same features.

FAQ

How do I change the features, groups and levels?

Edit the arrays at the top of the file. GROUPS holds the sections (Teaching, Selling…), each with its features: a feature has a name and, in levels, a level per plan id from 0 (not included) to 3 (full). PLANS holds each plan's name, tagline, monthly price, call to action and href, and popular for the recommended one. GRADES holds each level's legend label and colors, in level order. Add a plan and TypeScript points at every feature that still needs a level for it.

How do I connect the calls to action to checkout?

Each call to action is already a link: point its plan's href at your checkout with the plan in the address (/checkout?plan=academy), and Campus's at your sales form, then let your server map the plan to your payment provider's price. The link is render={<a href={plan.href} />} on ShineButton, with nativeButton={false}.

Is the heatmap accessible to screen readers and color-blind visitors?

Color is never the only cue: every cell shows its level as a number, and screen readers hear the level's name instead ("Full", "Limited", "Not included"). Plan names are column headers, feature names row headers and each group's name heads the rows under it, so a cell reads as "Academy, Live cohorts, Standard". The table is named by the section's heading, and each call to action says which plan it's for. The legend is a list, and the phone's plan switch is a radio group.

How does the heatmap work on a phone?

Below md the plan switch appears with the recommended plan selected, and the table shows the feature names and that one plan's squares, so the call to action sits in the first screen and nothing scrolls sideways. The legend folds into two rows. The full table and the one-plan table are rendered from the same data and the one not in use is display: none, so assistive technology meets only one.

How are the level colors chosen, and how do I change them?

They are greys from the theme's foreground, so they follow your theme and dark mode and never compete with the one primary button: level 1 is a 10% tint and level 2 a 25% tint, both under the text color, level 3 is the solid foreground with the background as its text, and level 0 is an outline with no fill. Each pairing keeps its digit above WCAG AA contrast. Change a level's tone in GRADES to restyle it; the legend and every cell of that level follow.

When should I use a feature heatmap rather than a comparison table?

Use a heatmap when your plans differ in how deeply they support the same features (limited, standard, full) rather than whether they have them, as when every plan can sell a course but higher plans add bundles, payment plans and affiliates. Use a comparison table when the differences are mostly yes or no, or limits best written as text.

  • Pro

    Feature Matrix Pricing

    Comparison tables

    A feature matrix you can interrogate: search the features, hide the rows every plan shares with a switch, and watch a live count in the table's corner, over four chat plans and twenty-eight features.

  • Pro

    Comparison Table Pricing

    Comparison tables

    Four plans compared feature by feature in one table whose hairlines meet the page rails, with a billing switch, a tinted popular column and, on a phone, a plan switch that keeps the feature column beside one plan.

  • Pro

    A long comparison you fold by group: four API-gateway plans over thirty-four features in five groups, each group a header row you press to open, with one open at first and per-plan counts when closed.

  • Pro

    Feature Diff Pricing

    Comparison tables

    One upgrade shown value by value: the price and call to action in one column, and in the other a ruled ledger with the Free limit struck through beside the Pro value on every row.

  • Pro

    Three virtual-server plans laid out like a technical datasheet on the page column: a column per plan with its size, price and call to action, then grouped rows of monospaced specs on shared hairlines, and a plan switch on phones.

  • Pro

    Feature Unlock Pricing

    Charts and figures

    A field of feature chips for a podcast host: pick Hobby, Show or Network and the chips each plan includes light up, the ones it adds get a stronger outline, and the rest stay locked.