shadcn.io is not affiliated with official shadcn/ui
Timeline Tiers Pricing Block for React
Tenure discounts for a managed hosting plan on a vertical timeline beside a headline and a call to action that stay in view: each stop from day one to year five shows its discount, the price it brings and what it unlocks.
Installation
Overview
Reward long-term customers with this timeline tiers pricing section. On large screens the headline and the section's call to action sit in a column on the left and stay in view while the timeline scrolls past on the right, split by one hairline that meets the page's rails; on phones they stack above it, with the button first. A vertical line runs past four stops, Day 1, Year 1, Year 3 and Year 5+, each a round node beside a row divided from the next by a hairline. Every row shows the discount at that stop, the plan's price with the original struck through, and the benefits the stop unlocks. The visitor's current stop has a filled node, a tinted row and a You are here outline Badge, and the one filled button, a Shine Button, is the section's call to action. The section sits on the page's drafting lines, drawn by Guides: rails that continue into the blocks above and below, and a rule along its top edge with a plus on each crossing. Built with Badge, Guides, Shine Button and Lucide icons, with CSS transitions only. For loyalty programmes, tenure discounts, anniversary rewards and any pricing that improves the longer a customer stays.
FAQ
How do I change the stops, discounts and prices?
Edit STOPS at the top of the file: each stop has a name, the node's short abbr, a tagline, its discount in percent and the benefits it unlocks. BASE_PRICE is the plan's monthly price before any discount ($40, so the stops read $40, $36, $32 and $28), and each stop's price is worked out from it and rounded to whole units, so changing either keeps the struck and current prices right. PLAN names the plan and CTA is the button's label and link.
How do I mark where a signed-in customer is?
CURRENT holds the id of the stop to mark. Work it out from the customer's account age where the page renders, and pass it in instead of the fixed value: that stop gets the filled node, the tinted row and the You are here badge, and its list item carries aria-current="step", so screen readers announce it as the current step. For visitors who aren't signed in, point it at the first stop or at none.
How do I apply the discounts in billing?
The section only displays them. In your payment provider, create a coupon or price per stop and have a scheduled job (or your subscription webhook) move each customer to the next one on their anniversary. Keep STOPS and those prices in one place, such as a shared config, so the page never promises a discount the invoice doesn't give.
How does the timeline adapt to small screens?
The timeline is one column of rows at every width. Below the lg breakpoint the headline and button stack above it instead of sitting beside it, and the divider between them becomes a rule, so the call to action is on the first screen. Inside a row, the discount and the price sit side by side from sm up and stack below it, the discount figures step down from text-5xl to text-4xl, and the unlocks drop to one column. Nothing scrolls sideways, down to 320 px.
How does it read with a screen reader?
The stops are an ordered list, so they're announced in order with their count, and each row's name is an h3. The nodes and the line are decorative and hidden. Each discount is read as "10% off" rather than its minus sign, Day 1 reads "None yet" instead of the dash, and the struck price is read as "Regular price $40, now" before the new one.
When should I use a tenure timeline instead of tiered plans?
Use the timeline when the price changes over time for the same plan: loyalty discounts, anniversary rewards, price locks. Its line reads as a journey that parallel cards can't show. When customers choose between plans at one moment, use plan cards such as Three Columns Pricing, and for discounts tied to a commitment chosen up front, a commitment or contract-length layout.
Related
- Pro
Milestone Discount Pricing
Discounts and offersA slider-driven rate card for usage that gets cheaper at milestones: slide to a monthly volume and the label count rides the thumb, four rate zones show the current one, and the estimate and the next milestone update.
- %Pro
Committed Spend Discount Pricing
Billing switchesFour big commitment chips, $500 to $50k a month, and in the same row the discount each earns at display size, over every unit's committed price against its on-demand price, with the call to action beside the result.
- Pro
Step Up Pricing
Charts and figuresAn upgrade path drawn as a staircase: four tiers as steps rising along the line, each as tall as its price, with name, price and button on its tread and what it adds in its riser.
- Pro
Annual Savings Pricing
Billing switchesThree plans that show what yearly billing saves: each plan's head holds two bars, twelve monthly payments against one yearly payment, with the saving printed in the gap, under a monthly and yearly switch.
- Pro
Volume Discount Pricing With a Descending Chart
Seats and teamsPer-seat pricing that falls across four team-size brackets, drawn as a descending bar chart beside compact rows with the saving on each bracket and a call to action per row.
- Pro
Bundle Deal Pricing
Discounts and offersTwo products priced alone beside a bundle of both: the bundle leads on a raised card with the sum of the parts struck through, the bundle price at display size, and a list of features that collapses on phones.