design scarecrow · §11 pricing plugin

Pricing blocks

How marketing sites render live offers from tangible.one — and how much a marketer can customise at each step. Data below is real: SearchSync's two offers, pulled the way the plugin will pull them (cron → cached options → server render). Prices re-validate at checkout, so everything on this page is display-only trust.

The customization ladder

Four tiers. Each tier is a superset of the previous, and Julia never edits PHP. The answer to "spitting JSON or a hidden DOM element feels wrong": correct — the plugin exposes offers as a server-side data source (shortcode presets and Loops & Logic tags). The only DOM contract is one data-tgbl-price attribute for PPP hydration.

Tier 0 · drop-in

[tangible_pricing product="searchsync"]

Default layout, all public offers, done. A product page is one shortcode.

Tier 1 · presets

[tangible_pricing product="searchsync"
  layout="cards|rows|table|strip|featured|slider"
  theme="inherit|tui|dark|tangible-one"
  offers="starter,creator" highlight="creator"]

Pick layout, theme, which offers (and their order), which one gets the halo.

Tier 2 · copy overrides

[tangible_pricing product="searchsync" layout="cards"]
  [offer id="starter" label="Solo"
    blurb="For one production site" cta="Start searching"]
  [offer id="creator" badge="Best value"]
[/tangible_pricing]

Text, order, badges — everything editorial — without touching structure. Prices stay live.

Tier 3 · full custom (L&L)

[tangible_pricing product="searchsync"
  template="searchsync-pricing-v2"]

Points at a template post (post type the plugin registers) written in Loops & Logic. Julia owns the entire DOM; the plugin owns the data. See the tag vocabulary below.

Theming · TUI tokens, not brand paint

The blocks ship structural CSS only — every colour, radius and font is a --tui-* custom property with a stock-TUI fallback. A theme is nothing but a token override block: the same CSS Julia's theming playground emits from its "Copy CSS" button. So the default look is stock TUI, tangible.one is one preset among several, and theme="inherit" emits no tokens at all — on a TUI-built site the page's own theme cascades straight in (TUI tokens sit at :where() zero specificity), and on a classic WP site a ~10-line bridge maps vars the theme already exposes. The two "site" entries below use real values sampled from the live sites.

What a theme IS

/* playground "Copy CSS" output = a shippable theme */
.tgbl-pricing {
  --tui-theme-primary-base: oklch(0.52 0.19 268);
  --tui-color-bg-surface: oklch(0.977 0.01 260);
  --tui-radius-md: 8px;
  …
}

Julia tunes knobs in the playground, copies the block, and that is the theme. No plugin release needed for a new look.

What inherit does on a classic WP site

/* the whole bridge, e.g. launchpad's theme.json vars */
.tgbl-pricing {
  --tui-theme-primary-base: var(--wp--preset--color--primary-500);
  --tui-color-fg: var(--wp--preset--color--gray-900);
  --tgbl-font-body: var(--wp--preset--font-family--nunito-sans);
  …
}

On a TUI-built site even this is unnecessary — the page's tokens are already in the cascade. Fonts inherit by default either way.

Preset · layout="cards"

The default layout. The switcher above is Tier-1's theme= attribute — same DOM, different tokens.

Starter

For one production site.

$79 /year

  • 1 site activation
  • Algolia + Meilisearch
  • One year of updates
  • Standard support
Most popular

Creator

For freelancers & agencies.

$149 /year

  • 5 site activations
  • Algolia + Meilisearch
  • One year of updates
  • Priority support

Also included in Creators' Club — every Tangible plugin, one licence.

PPP hydration demo: visitor country (from /cdn-cgi/trace) → JS rewrites only [data-tgbl-price] nodes; no-JS visitors see base prices; checkout re-validates.

Preset · layout="table"

For feature-heavy products; rows come from offer metadata, not hand-written HTML.

Starter Creator Popular
Price$79/yr$149/yr
Site activations15
Algolia + Meilisearch
Updates1 year1 year
SupportStandardPriority
Get Starter Get Creator

Preset · layout="strip"

Compact, for docs pages and blog posts — the "by the way, this is buyable" module.

Tangible SearchSync

Instant, typo-tolerant search for WordPress · from $79/yr

Preset · layout="featured" offers="creator"

One offer, hero treatment — landing pages that sell exactly one thing.

Preset · layout="rows"

Scales vertically, so it's the workhorse for 3–6 offers. SearchSync really has two — Freelance and Agency below are illustrative padding to show the shape.

Starter

1 site · Algolia + Meilisearch · standard support

$79/yr

Choose

Freelance *

3 sites · Algolia + Meilisearch · standard support

$99/yr

Choose

CreatorMost popular

5 sites · Algolia + Meilisearch · priority support

$149/yr

Choose

Agency *

15 sites · Algolia + Meilisearch · priority support

$299/yr

Choose

Preset · layout="slider"

Our tiers differ by seats, not features — so any number of tiers collapses into one question. This is also the honest cure for "too many offers" when the count comes from a seat ladder. (Agency/Studio illustrative.)

How many sites? 1

151550

Starter

1 site activation · standard support

$79/yr

Get Starter

When there are too many · the overflow policy

Not a carousel on desktop — ever. Purchase options hidden behind swipes don't get compared and don't get bought. The plugin's policy: cards wrap on desktop (fine to ~6); past 4 the editor nudges toward rows/table or curating with offers=; and a seat ladder should be a slider instead. On mobile, the same DOM becomes a scroll-snap row — all offers reachable, zero JS — which is the only "carousel" we ship.

Desktop: 6 offers wrap

Solo *

1 site

$49/yr

Choose

Starter

1 site + priority index

$79/yr

Choose

Freelance *

3 sites

$99/yr

Choose

Creator

5 sites · priority support

$149/yr

Choose

Agency *

15 sites

$299/yr

Choose

Studio *

50 sites

$599/yr

Choose

Mobile: same DOM, scroll-snap row (framed at phone width)

Starter

1 site

$79/yr

Choose

Creator

5 sites

$149/yr

Choose

Agency *

15 sites

$299/yr

Choose

Studio *

50 sites

$599/yr

Choose

* illustrative tiers — SearchSync ships two offers; the padding exists to stress the layouts.

Tier 3 · the Loops & Logic data source

The plugin registers a loop type over its cached offer data. A pricing template is a normal L&L template post — Julia changes text, order, and content with the tools she already knows, and the render is server-side (full-page-cache safe, nothing hidden in the DOM).

<Loop type=tangible_offer product=searchsync>
  <div class="my-price-card">
    <h3><Field name /></h3>
    <p class="price">
      <span data-tgbl-price data-offer="{Field slug}" data-base="{Field amount}">
        <Field price_formatted />
      </span> / <Field interval />
    </p>
    <p><Field activation_limit /> site<If check="{Field activation_limit}" not_value=1>s</If></p>
    <a href="{Field checkout_url}">Buy <Field name /></a>
  </div>
</Loop>
FieldExample (SearchSync Creator)Notes
nameSearchsync Creatordisplay name from the offer
slugsearchsync-creatorstable handle for offers= / overrides
amount / price_formatted14900 / $149cents + pre-formatted
intervalyearbilling interval
activation_limit5from the offer's policy
checkout_urlhttps://tangible.one/checkout?offerId=…UTM/affiliate params forwarded automatically
visibilitypublichidden offers only render when asked for explicitly
included_in (loop)creators-clubbundles whose grants cover this product — the upsell slot

Build notes (the boundaries)

Painted all artifacts