Skip to content
The mobile SDKs are available on request. Email support@grona.ai to get access.

Placements

A placement is a named place in your app where Grona content can appear. Placements describe places, not use cases: cart_top is the top of the basket screen, whatever campaign fills it this week. Use this page to decide which placements to add to your screens before you wire up slot views or decisions.

The catalogue is a fixed set in this version. Every campaign names one of these placements, and a configuration that names any other placement makes that campaign inactive.

Placement Where it typically sits Keyed
home_top At the top of the home screen, above the first content row No
home_feed Between rows of the home screen feed No
plp_inline Inline in a product listing or category page, between product rows No
pdp_below_buy On a product detail page, directly below the add-to-basket button No
cart_line On an individual basket line, one per line Yes, by product id
cart_top At the top of the basket screen, above the lines No
cart_below_lines On the basket screen, below the last line No
checkout_above_pay On the checkout screen, directly above the pay button No
order_confirmation On the order confirmation screen after a purchase No
membership_top At the top of the membership screen No

When you bind a placement, you also pass the current screen (home, categories, search, a category, a product, the basket, checkout, order confirmation, or a named other screen). Audience rules read the screen, for example the product being viewed on pdp_below_buy, so one placement can show different campaigns on different products.

cart_line is keyed: you bind it once per basket line and pass the line’s product id as the key. The SDK evaluates each line separately, so one line can show a substitute while the others show nothing. A substitute decision is valid only on cart_line. Every other placement is bound without a key.

A placement, screen and key together form a screen visit. Events such as eligible and served fire once per campaign and screen visit, not once per redraw. See Events and exposure.

For each placement the SDK walks the campaigns that name it in priority order, highest first:

  1. Campaigns that are disabled, killed, expired, or whose audience does not match are skipped.
  2. The first campaign that passes is assigned an arm. A treatment shopper sees it.
  3. A control or holdout shopper sees nothing from that campaign, and the next campaign in the placement gets its own assignment.
  4. An offer without a valid grant yields to the next campaign in the same way.

A preview pin puts its campaign first. See Assignment and bucketing and Campaign activation and kill switch.

The configuration also caps how many SDK-rendered components show on one screen at once (1 to 10, set per workspace; 3 when the configuration does not set it). When more slots on a screen have content than the cap allows, the lower-priority ones stay empty.

When a placement has nothing to show, its anchor stays in the layout, visible, at zero height. That keeps the control arm measurable and stops your layout from depending on whether Grona has content. The slot view does this on its own. For host-rendered decisions, your app keeps the anchor visible at zero height itself. See Patterns for host-rendered decisions.