Skip to content
shadcn.io

shadcn.io is not affiliated with official shadcn/ui

Outcome-Based Pricing Block for React

Outcome-based pricing for an AI support agent: a display-size price per resolved conversation with the call to action under it, and an estimator that sets a monthly volume against what the same volume costs in seats.

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

Sell on results instead of seats with this outcome-based pricing section for React with Base UI. A compact header holds the headline and one sentence; below it a ruled band splits into two cells. On the left, the price of one resolved conversation is a display-size figure with three ticked terms under it (the first 50 resolutions free, hand-offs to your team free, no seats and no minimum) and the Shine Button link, the section's only primary element. On the right, a Slider sets the conversations resolved a month, and two bars, drawn in foreground tones, put the Hollis bill beside what the same volume costs on a per-seat plan, itemised, with one line saying which side is cheaper and by how much. Every figure rolls to its new amount with Sliding Number. On a phone the button moves to a bar at the foot of the section with the live monthly total beside it. The section sits on the page's lines, drawn by Guides: side rails, a rule along its top with a + on each crossing, and the band ruled above and below with a + at each corner. Built with Slider, Sliding Number, Shine Button, Guides, Lucide icons and CSS transitions only. For AI agents and chatbots, support automation and any product priced per outcome.

FAQ

How do I change the price, the free allowance and the seat plan?

RATE is the price of one resolved conversation in dollars and FREE the resolutions each month that cost nothing. SEAT_PRICE and SEAT_CAPACITY describe the per-seat plan it is set against: what a seat costs a month and how many resolved conversations one seat covers. MIN, MAX and STEP set the slider's range, and FACTS fills the ticked terms.

Is the comparison with seats fair?

It is worked out, not claimed. Outcomes cost the conversations past the free ones times the rate; seats are bought whole, so a seat that is part empty still costs its full price. That makes outcomes cheaper whenever seats would run partly empty and seats cheaper at volumes that fill them exactly, and the line under the bars says which one is cheaper at the volume you chose, including when it's the seats. Replace the two seat constants with your competitor's real figures.

What does a screen reader hear as the slider moves?

The slider is labelled "Resolved conversations a month" and reads its value in words ("600 resolved conversations a month"). A polite live region carries the sentence under the bars ("You save $102 a month, 17% less than seats"), so the rolling digits aren't read one by one. The bars are decorative; their amounts are text beside them.

Where does the call to action go?

"Start free" is a real link. It's a ShineButton with render set to an a element and nativeButton={false}. Point it at your sign-up route. It's the only primary button, and the slider is drawn in your foreground colour so the two don't compete.

How does it look on a phone?

The two cells stack. The call to action leaves the left cell and sits in a bar at the foot of the section with the conversations and the live monthly total, so the button and the price stay in view while you move the slider. Both buttons are in the page, one hidden at a time with display, so a screen reader meets only the one you see.

What counts as resolved?

That's your product's definition, not the block's: this copy says a conversation is billed only when the agent resolves it, and that hand-offs to your team cost nothing. Write the same rule down next to the price, whatever it is: how a resolution is confirmed, and whether a customer reopening a conversation is billed twice.

  • Pro

    An ROI calculator for a workflow-automation tool: sliders for team size and hours saved a week feed one display-size figure, the net savings a month, with the value of the time, the seat cost and the return under it.

  • Pro

    A usage-based bill calculator for a search API: a slider over monthly search volumes sits in one short band, and a meter of what the plan covers and what is billed as overage rolls the estimated bill beside it.

  • Pro

    Seat-type pricing with a stepper for each type: Full, Collaborator and Viewer seats at different prices, a stacked bar of the seat mix, a live monthly total and, on a phone, a sticky total bar.

  • Pro

    Pay As You Go Pricing

    Usage and credits

    Usage pricing for a serverless platform as rate rows: each billable resource with its free allowance, its starting rate at display size and the two volume steps that lower it, with one call to action in the header.

  • Pro

    A bill estimator for an LLM gateway: choose a model, type the tokens in a prompt and a completion and the requests a day, and the monthly cost rolls to its amount beside a meter splitting the month's tokens into input and output.

  • Pro

    A receipt that prices itself, for a webhook-delivery service: number steppers for seats, events and days of history drive a live bill that stamps the cheapest plan and itemises what goes past its allowance.