registry
@automindzsheets 01–77shadcn 4.x
SHEET 37

Pricing Compare

block / payments

A feature-comparison matrix whose columns are derived from the pricing config, with a pinned feature column, a sticky header row and the tier CTAs repeated at the bottom.

type
block
files
2
registry deps
badge, button, skeleton, @automindz/stripe-checkout, @automindz/render-link
npm deps
lucide-react

installs

  • lib/automindz/compare.ts
  • components/automindz/pricing-compare.tsx
  • Columns derived from lib/automindz/pricing.ts — no second tier list
  • null is “not applicable”, and never renders as a cross
  • A real <table>: scope=col/row, one rowgroup header per group
  • Narrow, the feature column pins; wide, the header row does
  • Config/matrix drift is named on the page, in development only

Edit the feature matrix in lib/automindz/compare.ts. It holds only the matrix: the tiers, names, prices and Price IDs come from lib/automindz/pricing.ts (installed by @automindz/stripe-checkout), and the columns are derived from it at render time — never restate a tier list here. Keys in values are tier ids from that config; in development the component names any that have drifted apart. null means *not applicable to this tier* and renders as a dash, which is not the same as false and must not be used for it. Pass interval from the same toggle that drives your pricing cards. If your page has a sticky nav, set stickyOffset (or --automindz-compare-top) to its height or the tier names park under it. onSelect overrides the checkout call; renderLink swaps in next/link for a contact-sales tier.

Variations

one state per section

01

The full matrix

Twenty-four rows across five groups, and every column — name, price, badge, Price ID, which tier is promoted — read from lib/automindz/pricing.ts. Scroll the page and the tier names pin; narrow the window and the feature column pins instead while the tiers scroll under it.

fluid
Compare AutoMindz plans
Feature
Starter
$19 / month
GrowthMost popular
$49 / month
Enterprise
Custom pricing
Usage
SeatsUp to 3Up to 20Unlimited
Projects1UnlimitedUnlimited
Price per extra project$9 / monthNot applicableNot applicable
API requests50,000 / month1,000,000 / monthCustom
Overage rateCharged once the monthly request allowance is used.$2 per 10,000$1 per 10,000Not applicable
Collaboration
RolesOwner and memberOwner, admin, memberCustom roles
Guest accessRead-only collaborators who do not take a paid seat.Not includedIncludedIncluded
Comments and mentionsIncludedIncludedIncluded
Approval workflowsNot includedNot includedIncluded
Security
Single sign-onGoogle, Microsoft and GitHub.Not includedIncludedIncluded
SAML / OIDCNot includedNot includedIncluded
SCIM provisioningNot includedNot includedIncluded
Audit logNot included90 daysUnlimited, exportable
Data residencyNot includedEU or USEU, US or self-hosted
Support
Support channelCommunity forumEmail and chatDedicated Slack channel
First response targetBest effort1 business day1 hour, 24/7
Guided onboardingNot includedIncludedIncluded
Dedicated success managerNot includedNot includedIncluded
Uptime SLANot included99.9%99.99% with credits
Developer
REST APIIncludedIncludedIncluded
API rate limit60 / minute600 / minuteCustom
Webhooks with replayNot includedIncludedIncluded
Sandbox workspaceNot includedIncludedIncluded
Terraform providerNot includedNot includedIncluded
Choose a plan
Contact sales

02

Tick, cross, dash

The distinction every comparison table gets wrong. A cross means withheld; a dash means there is nothing here to withhold — a price per extra project on a plan with unlimited projects. Each glyph carries sr-only text (“Included” / “Not included” / “Not applicable”), so no row reads as its label and then silence.

fluid
Included, not included, not applicable
Feature
Starter
$19 / month
GrowthMost popular
$49 / month
Enterprise
Custom pricing
Included, not included, not applicable
Webhooks with replayNot includedIncludedIncluded
SeatsUp to 3Up to 20Unlimited
Projects1UnlimitedUnlimited
Price per extra projectNothing to price where projects are unlimited.$9 / monthNot applicableNot applicable
Choose a plan
Contact sales

03

Yearly interval

The same table with interval="year". Prices change and so do the Price IDs behind the checkout buttons — nothing else in the matrix does, and no Price ID is written down twice. Pair the prop with the toggle over the pricing cards so the two can never disagree.

fluid
Compare plans, billed yearly
Feature
Starter
$190 / year
GrowthMost popular
$490 / year
Enterprise
Custom pricing
Usage
SeatsUp to 3Up to 20Unlimited
Projects1UnlimitedUnlimited
Price per extra project$9 / monthNot applicableNot applicable
API requests50,000 / month1,000,000 / monthCustom
Overage rateCharged once the monthly request allowance is used.$2 per 10,000$1 per 10,000Not applicable
Collaboration
RolesOwner and memberOwner, admin, memberCustom roles
Guest accessRead-only collaborators who do not take a paid seat.Not includedIncludedIncluded
Comments and mentionsIncludedIncludedIncluded
Approval workflowsNot includedNot includedIncluded
Choose a plan
Contact sales

04

Loading

Skeletons at the real row count, computed from the matrix rather than guessed, so the page does not jump when the prices land. The group headings and the row structure are already correct; only the values are pending.

fluid
Compare plans
Feature
Starter
GrowthMost popular
Enterprise
Usage
Collaboration
Choose a plan

Loading 11 comparison rows.

05

A tier switched off

enabled: false on Growth. PricingTable drops that tier — you cannot buy it. This one keeps the column and blocks the CTA instead, because removing a column silently changes what the other two are being compared against.

fluid
Compare plans
Feature
Starter
$19 / month
GrowthNot available
$49 / month
Enterprise
Custom pricing
Usage
SeatsUp to 3Up to 20Unlimited
Projects1UnlimitedUnlimited
Price per extra project$9 / monthNot applicableNot applicable
API requests50,000 / month1,000,000 / monthCustom
Overage rateCharged once the monthly request allowance is used.$2 per 10,000$1 per 10,000Not applicable
Collaboration
RolesOwner and memberOwner, admin, memberCustom roles
Guest accessRead-only collaborators who do not take a paid seat.Not includedIncludedIncluded
Comments and mentionsIncludedIncludedIncluded
Approval workflowsNot includedNot includedIncluded
Choose a plan

Closed to new sign-ups.

Contact sales

06

Drift, in development

Two failures at once: a Scale tier in the pricing config that the matrix never mentions, and legacy values left behind by a tier that was deleted from it. The panel is development-only — process.env.NODE_ENV is inlined, so it is dead code in a client's production build — and the empty Scale column is exactly what it warns about.

fluid
Compare plans
Feature
Starter
$19 / month
GrowthMost popular
$49 / month
Scale
$199 / month
Enterprise
Custom pricing
Usage
SeatsUp to 3Up to 20Not applicableUnlimited
Projects1UnlimitedNot applicableUnlimited
Price per extra project$9 / monthNot applicableNot applicableNot applicable
API requests50,000 / month1,000,000 / monthNot applicableCustom
Overage rateCharged once the monthly request allowance is used.$2 per 10,000$1 per 10,000Not applicableNot applicable
Collaboration
RolesOwner and memberOwner, admin, memberNot applicableCustom roles
Guest accessRead-only collaborators who do not take a paid seat.Not includedIncludedNot applicableIncluded
Comments and mentionsIncludedIncludedNot applicableIncluded
Approval workflowsNot includedNot includedNot applicableIncluded
Choose a plan
Contact sales

07

Empty matrix

No groups, so nothing renders — not a headed table with no rows under it, which reads as a load that failed. The frame below is empty on purpose.

fluid