metatroncubeswdev 365e45406a Bundle Offers Shopify app: discount function, admin, storefront, deploy stack
Rust discount function (one automatic discount evaluating all offers in priority
order, parity with the Odoo engine), React Router admin with Polaris, theme app
extension and app proxy pages, webhooks incl. GDPR, managed-pricing limits, and
a Docker Compose stack (Postgres + Caddy HTTPS) for a single VPS.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 21:35:58 -04:00

32 lines
1.3 KiB
Plaintext

{%- comment -%} F12: grid of all running offers (place on any page, e.g. a "Bundles" page). {%- endcomment -%}
{%- assign data = app.metafields.bundle_offers.storefront.value -%}
{%- assign country = localization.country.iso_code -%}
<section class="bo-section" {{ block.shopify_attributes }}>
{%- if block.settings.heading != blank -%}<h2 class="bo-section__title">{{ block.settings.heading }}</h2>{%- endif -%}
{%- assign shown = 0 -%}
<div class="bo-grid">
{%- for offer in data.offers -%}
{%- if offer.cc.size > 0 -%}{%- unless offer.cc contains country -%}{%- continue -%}{%- endunless -%}{%- endif -%}
{%- assign shown = shown | plus: 1 -%}
{% render 'bo-card', offer: offer %}
{%- endfor -%}
</div>
{%- if shown == 0 -%}
<div class="bo-empty">
<p>{{ 'bundle_offers.grid.empty' | t }}</p>
<a class="bo-button" href="{{ routes.all_products_collection_url }}">{{ 'bundle_offers.grid.continue' | t }}</a>
</div>
{%- endif -%}
{%- if data.brand -%}<p class="bo-powered">Bundles by <a href="https://apps.shopify.com/bundle-offers" rel="nofollow">Bundle Offers</a></p>{%- endif -%}
</section>
{% schema %}
{
"name": "Bundles grid",
"target": "section",
"settings": [
{ "type": "text", "id": "heading", "label": "Heading", "default": "Bundle offers" }
]
}
{% endschema %}