Skip to content

Components

Pricing Tables That Don't Lie — the Toggle, the Matrix and the Mobile Collapse

Three Components, Three Jobs — and the Per-Month Asterisk That Costs You Trust
Written by Aiden Wood Founder and Lead Design Engineer
💰 🔀 📊

Every pricing page is three decisions wearing a table: how many tiers, monthly-vs-annual, and how much feature detail before the buyer's eyes glaze. Get any of them wrong and the page reads as either thin or sneaky — and sneaky is worse.

Velocity X splits the job across components instead of one mega-table: pricing-table for the tier lineup (pure Astro, zero JS), pricing-toggle for the billing switch, and pricing-feature-matrix when the feature list genuinely needs a grid.

The Money Pattern

The toggle is the only part that needs state, and it's one boolean — not a tab system:

const [annual, setAnnual] = useState(false);

<button role="switch" aria-checked={annual}
        onClick={() => setAnnual(a => !a)}>
  Monthly / Annual <span>save 20%</span>
</button>

<p class="text-4xl font-semibold">
  ${annual ? tier.annualMonthly : tier.monthly}
  <span class="text-sm">/month</span>
</p>
{annual && <p class="text-xs">billed ${tier.annualTotal} yearly</p>}

The honesty rule is the last line: if the big number says "per month" while the card charges per year, say the billed total at the moment the toggle flips — not in a tooltip, not at checkout. The number a buyer is charged should never be a surprise, and "billed annually" in 10px grey is how pricing pages earn chargebacks.

The Catch

Mobile is where feature matrices die. A 4-column comparison grid collapses into hieroglyphics on a phone, and the usual fix — hiding columns — hides the tiers someone came to compare. Re-flow instead: the matrix becomes per-tier stacked cards, every tier still present, features as labelled rows inside each card.

And resist the urge to matrix everything. If every tier has the feature, it's not a comparison row — it's a reassurance line that belongs under the table, not inside it. Matrices earn their complexity only where tiers actually differ.

The Verdict

A pricing section is a trust exercise with a table attached. Big number matches the charge, every tier survives mobile, matrix only where tiers differ — that's the whole discipline. The decided versions live in Velocity X's E-Commerce category, installed as source you own.

Let us make some quick suggestions?

Please provide your full name.
Please provide your phone number.
Please provide a valid phone number.
Please provide your email address.
Please provide a valid email address.
Please provide your brand name or website.
Please provide your brand name or website.