Anonymous pricing display with three layouts. Auto-fetches your published offerings and renders them with your brand kit. No auth required — drop on any marketing page.
AforoPricingCard renders your workspace's published offerings as a pricing card grid. The widget calls Aforo's headless config endpoint on mount, filters to status === 'PUBLISHED', and renders one card per offering with your brand kit colors.
Three layouts to pick from:
horizontal (default) — auto-fit grid, cards 260px wide minimum. Good for marketing pages with 3-4 plans.
vertical — single-column stack. Good for narrow viewports or sidebars.
table — semantic <table> with one column per plan and one row per feature. Good for plan comparison pages with 5+ plans.
A card shows a flat price per period when the offering has one. Otherwise it words the rate plan's usage price, so usage-priced plans no longer fall back to "Contact sales":
Rate plan
Card shows
Pay Per Use or Outcome-Based at $0.02
$0.02 / call
Included Quota, 1,000 free, then $0.50
$0.50 / call after 1,000 free
Percentage at 2.9%
2.9% of transaction value
Graduated or Volume Tiered, lowest tier $0.005
From $0.005 / call
Staircase, cheapest band $100, monthly offering
From $100 / month
Nothing priced
— and the button reads Contact sales
"call" is the billable unit's label; a unit without a label shows as "unit". Sub-cent rates keep their precision rather than rounding to "Free". The card shows the rate plan's base price only: block size, minimum fee and outcome weights are applied on the invoice but not printed on the card.
The featured card gets a 2px border in your primary color plus a "Most popular" badge with both visible text and an aria-label alternative (color is supplementary, not the only signal).
Custom CTA text per offering (e.g. "Start Free Trial" vs "Contact Sales") is a Phase 1 feature. v0.1.x always renders "Subscribe" or your configured default text. Vote up FR-WIDGET-PC-7 in the roadmap if you need this soon.
Anonymous mode only. PricingCard never requires a bridge token — it's designed for marketing pages where the visitor has no identity yet.
Published offerings only. Draft / archived offerings are filtered server-side. Publish from Storefront → Offerings before they appear.
No usage simulator. PricingCard renders the displayed price as configured on the rate plan. Per-plan usage estimators are territory (Phase 1).