Skip to content

Billing tier

tt-blocks has only Free + Pro tiers (no enterprise tier). Pro-only fields are classified by FEATURE_TIERS; Free shops auto-strip Pro fields (tier-strip) to prevent bypass.

AspectFreePro
Unlimited widgets · 11 component types · 7 placements · 4 color schemes
Theme-derived bundles · multi-language translation
8 visibility dimensions, on / off toggle (pages / products / variants / customers / geo / device / schedule / traffic)
customers.authState (logged-in / guest binary)
products.byProduct — specific productsdemo: max 5unlimited
products / variants / customers advanced filters
geo / schedule / traffic (UTM) / device.uaRegex
Hide theme elements + per-widget Advanced CSS

Full comparison: Plans.

Each visibility field is classified into Free or Pro tier in FEATURE_TIERS. When BILLING_ENFORCE=true:

  • Save path: Free shop writes auto-strip Pro fields
  • Load path: When a merchant downgrades from Pro to Free, existing Pro fields remain visible in the editor but don’t take effect on storefront; saving strips them

Enforced by tier-strip-audit.mjs + feature-tier-coverage-audit.mjs.

Only two free fields offer demo behavior:

  • visibility.products.byProduct.include — pick up to 5 specific products (MAX_FREE_PRODUCTS in app/components/display-tab/sections/ProductsModule.jsx).
  • visibility.customers.authState — toggle logged-in / guest (binary, no count quota).

When byProduct exceeds 5, the editor displays “Free quota used up (5 max). Upgrade to Pro for unlimited” + Pro upgrade CTA.

Note: byCollection and variants.* do not have demo quotas — both are entirely Pro-gated.

Merchants can configure Pro fields in Free mode (the editor allows it). On save:

  1. If config doesn’t exceed demo quota → normal save, Pro fields persist
  2. If exceeds quota → upgrade prompt: “Save then upgrade — widget takes effect immediately”
    • Choose “Upgrade” → Shopify billing → upgrade complete → widget renders with full Pro fields
    • Choose “Skip” → demoted to Free quota, excess fields stripped
SwitchField behavior
Free → ProTakes effect immediately; previously-stripped fields in editor_state_json may be recovered
Pro → FreeDowngrade at end of current billing cycle; Pro fields no longer take effect on storefront, but D1 retains them