Mobile-first Shopify storefront kit for dropshippers

Ecomlab
Get the kit

Free code vault

Copy, paste, improve your store.

Free Shopify code you can add to your store in a few minutes. See how each one looks, copy the code with one tap, then follow the steps. No sign-up.

  1. 1 of 3

    Real savings badge

    Shows a green “Save ₹200 (20%)” tag next to your price, but only when the product really has a higher compare-at price. No fake “was” prices.

    What it looks like on your store

    Oversized cotton tee

    ₹799₹999Save ₹200 (20%)

    Only shows when the product really has a higher compare-at price.

    Add to cart

    Live preview built from the exact code below.

    Copy the code

    snippets/ls-savings-badge.liquid · 45 lines

    View the code
    {% doc %}
      Conversion Essentials · Savings badge
      Shows "Save ₹200 (20%)" only when the variant really has a compare-at price
      above its selling price. Renders nothing otherwise.
    
      @param {object} variant - The product variant, for example product.selected_or_first_available_variant
      @param {string} [style] - 'amount', 'percent' or 'both' (default)
      @param {string} [label] - Word before the saving, defaults to "Save"
    
      @example
      {% render 'ls-savings-badge', variant: product.selected_or_first_available_variant %}
    {% enddoc %}
    
    {%- liquid
      assign style = style | default: 'both'
      assign label = label | default: 'Save'
      if variant and variant.compare_at_price > variant.price
        assign saved = variant.compare_at_price | minus: variant.price
        assign percent = saved | times: 100.0 | divided_by: variant.compare_at_price | floor
      endif
    -%}
    
    {%- if saved and saved > 0 -%}
      <span class="ls-save" data-ls-save>
        {%- case style -%}
          {%- when 'amount' -%}{{ label | escape }} {{ saved | money_without_trailing_zeros }}
          {%- when 'percent' -%}{{ label | escape }} {{ percent }}%
          {%- else -%}{{ label | escape }} {{ saved | money_without_trailing_zeros }} ({{ percent }}%)
        {%- endcase -%}
      </span>
    {%- endif -%}
    
    {% stylesheet %}
      .ls-save {
        display: inline-flex;
        align-items: center;
        padding: 3px 10px;
        border-radius: 999px;
        background: #e7f6ec;
        color: #12613a;
        font-size: 0.8125rem;
        font-weight: 700;
        line-height: 1.4;
      }
    {% endstylesheet %}

    Add it to your store

    1. In Shopify admin go to Online Store → Themes. Next to your theme click ⋯ → Edit code.
    2. Under Snippets click Add a new snippet, name it ls-savings-badge and click Done.
    3. Delete everything in the new file, paste the code and click Save.
    4. Open the file that shows your product price (usually sections/main-product.liquid) and paste this line just below the price:

      {% render 'ls-savings-badge', variant: product.selected_or_first_available_variant %}

    Tip: duplicate your theme first (⋯ → Duplicate) so you can always go back.

  2. 2 of 3

    Benefit / trust strip

    A neat row of short promises under your Add to cart button, like secure checkout, delivery time and returns.

    What it looks like on your store

    Oversized cotton tee

    ₹799

    Add to cart
    • Secure checkout
    • Ships in 2 days
    • 7-day returns

    Live preview built from the exact code below.

    Copy the code

    sections/ls-benefit-strip.liquid · 128 lines

    View the code
    {%- comment -%}
      Conversion Essentials · Benefit / trust strip
      A row of short, factual reassurances (for example "Secure checkout").
      Only list things your store genuinely offers.
    {%- endcomment -%}
    
    {%- if section.blocks.size > 0 -%}
      <div class="ls-strip ls-strip--{{ section.settings.style }}" style="--ls-strip-gap: {{ section.settings.gap }}px">
        <ul class="ls-strip__list" role="list">
          {%- for block in section.blocks -%}
            {%- if block.settings.text != blank -%}
              <li class="ls-strip__item" {{ block.shopify_attributes }}>
                <span class="ls-strip__icon" aria-hidden="true">
                  {%- case block.settings.icon -%}
                    {%- when 'lock' -%}<svg viewBox="0 0 24 24" width="20" height="20" fill="none" stroke="currentColor" stroke-width="2"><rect x="4" y="11" width="16" height="10" rx="2"/><path d="M8 11V8a4 4 0 0 1 8 0v3"/></svg>
                    {%- when 'truck' -%}<svg viewBox="0 0 24 24" width="20" height="20" fill="none" stroke="currentColor" stroke-width="2"><path d="M3 6h11v9H3zM14 9h4l3 3v3h-7"/><circle cx="7" cy="17" r="2"/><circle cx="17" cy="17" r="2"/></svg>
                    {%- when 'return' -%}<svg viewBox="0 0 24 24" width="20" height="20" fill="none" stroke="currentColor" stroke-width="2"><path d="M9 14L4 9l5-5"/><path d="M4 9h11a5 5 0 0 1 0 10h-3"/></svg>
                    {%- when 'chat' -%}<svg viewBox="0 0 24 24" width="20" height="20" fill="none" stroke="currentColor" stroke-width="2"><path d="M4 5h16v11H8l-4 4z"/></svg>
                    {%- else -%}<svg viewBox="0 0 24 24" width="20" height="20" fill="none" stroke="currentColor" stroke-width="2"><path d="M5 12l5 5 9-10"/></svg>
                  {%- endcase -%}
                </span>
                <span>{{ block.settings.text | escape }}</span>
              </li>
            {%- endif -%}
          {%- endfor -%}
        </ul>
      </div>
    {%- endif -%}
    
    {% stylesheet %}
      .ls-strip {
        padding: 12px 16px;
      }
    
      .ls-strip__list {
        display: flex;
        flex-wrap: wrap;
        justify-content: center;
        gap: 8px var(--ls-strip-gap, 24px);
        margin: 0 auto;
        padding: 0;
        max-width: 1200px;
        list-style: none;
      }
    
      .ls-strip__item {
        display: inline-flex;
        align-items: center;
        gap: 8px;
        font-size: 0.875rem;
        font-weight: 600;
      }
    
      .ls-strip--boxed .ls-strip__item {
        padding: 8px 12px;
        border: 1px solid rgba(0, 0, 0, 0.12);
        border-radius: 10px;
      }
    
      @media (max-width: 749px) {
        .ls-strip__list {
          justify-content: flex-start;
        }
      }
    {% endstylesheet %}
    
    {% schema %}
    {
      "name": "Benefit strip",
      "settings": [
        {
          "type": "select",
          "id": "style",
          "label": "Style",
          "options": [
            { "value": "plain", "label": "Plain" },
            { "value": "boxed", "label": "Boxed" }
          ],
          "default": "plain"
        },
        {
          "type": "range",
          "id": "gap",
          "label": "Space between items",
          "min": 8,
          "max": 48,
          "step": 4,
          "unit": "px",
          "default": 24
        }
      ],
      "blocks": [
        {
          "type": "benefit",
          "name": "Benefit",
          "limit": 6,
          "settings": [
            {
              "type": "select",
              "id": "icon",
              "label": "Icon",
              "options": [
                { "value": "check", "label": "Check" },
                { "value": "lock", "label": "Lock" },
                { "value": "truck", "label": "Delivery" },
                { "value": "return", "label": "Returns" },
                { "value": "chat", "label": "Support" }
              ],
              "default": "check"
            },
            {
              "type": "text",
              "id": "text",
              "label": "Text",
              "info": "State only what your store really offers.",
              "default": "Secure checkout"
            }
          ]
        }
      ],
      "presets": [
        {
          "name": "Benefit strip",
          "blocks": [{ "type": "benefit", "settings": { "icon": "lock", "text": "Secure checkout" } }]
        }
      ]
    }
    {% endschema %}

    Add it to your store

    1. In Shopify admin go to Online Store → Themes. Next to your theme click ⋯ → Edit code.
    2. Under Sections click Add a new section, name it ls-benefit-strip and click Done.
    3. Delete everything in the new file, paste the code and click Save.
    4. Go back to Customize, click Add section, pick Benefit strip and type your own lines. List only what your store really offers.

    Tip: duplicate your theme first (⋯ → Duplicate) so you can always go back.

  3. 3 of 3

    Accessible FAQ accordion

    Tap-to-open questions and answers that also help Google show your FAQs in search results.

    What it looks like on your store

    Frequently asked questions

    How long does delivery take?
    2 to 5 working days across India.
    Can I return it?
    Yes, within 7 days if it's unused.
    Is cash on delivery available?
    Yes, on orders up to ₹5,000.

    Live preview built from the exact code below.

    Copy the code

    sections/ls-faq-accordion.liquid · 166 lines

    View the code
    {%- comment -%}
      Conversion Essentials · Accessible FAQ accordion
      Native <details>/<summary> (keyboard and screen-reader friendly, works
      without JavaScript). Questions without an answer are skipped, and the same
      answered questions are published as FAQPage structured data.
    {%- endcomment -%}
    
    {%- liquid
      assign answered = 0
      for block in section.blocks
        if block.settings.question != blank and block.settings.answer != blank
          assign answered = answered | plus: 1
        endif
      endfor
    -%}
    
    {%- if answered > 0 -%}
      <div class="ls-faq">
        {%- if section.settings.heading != blank -%}
          <h2 class="ls-faq__heading">{{ section.settings.heading | escape }}</h2>
        {%- endif -%}
        <div class="ls-faq__list">
          {%- for block in section.blocks -%}
            {%- if block.settings.question != blank and block.settings.answer != blank -%}
              <details class="ls-faq__item" {% if section.settings.open_first and forloop.first %}open{% endif %} {{ block.shopify_attributes }}>
                <summary class="ls-faq__q">
                  <span>{{ block.settings.question | escape }}</span>
                  <span class="ls-faq__icon" aria-hidden="true"></span>
                </summary>
                <div class="ls-faq__a">{{ block.settings.answer }}</div>
              </details>
            {%- endif -%}
          {%- endfor -%}
        </div>
      </div>
    
      <script type="application/ld+json">
        {
          "@context": "https://schema.org",
          "@type": "FAQPage",
          "mainEntity": [
            {%- assign emitted = 0 -%}
            {%- for block in section.blocks -%}
              {%- if block.settings.question != blank and block.settings.answer != blank -%}
                {%- assign emitted = emitted | plus: 1 -%}
                {
                  "@type": "Question",
                  "name": {{ block.settings.question | json }},
                  "acceptedAnswer": { "@type": "Answer", "text": {{ block.settings.answer | strip_html | json }} }
                }{% if emitted < answered %},{% endif %}
              {%- endif -%}
            {%- endfor -%}
          ]
        }
      </script>
    {%- endif -%}
    
    {% stylesheet %}
      .ls-faq {
        max-width: 760px;
        margin: 0 auto;
        padding: 32px 16px;
      }
    
      .ls-faq__heading {
        margin: 0 0 16px;
      }
    
      .ls-faq__item {
        border-bottom: 1px solid rgba(0, 0, 0, 0.12);
      }
    
      .ls-faq__q {
        display: flex;
        align-items: center;
        justify-content: space-between;
        gap: 16px;
        min-height: 48px;
        padding: 12px 0;
        font-weight: 600;
        list-style: none;
        cursor: pointer;
      }
    
      .ls-faq__q::-webkit-details-marker {
        display: none;
      }
    
      .ls-faq__q:focus-visible {
        outline: 2px solid currentColor;
        outline-offset: 4px;
      }
    
      .ls-faq__icon {
        position: relative;
        flex: none;
        width: 14px;
        height: 14px;
      }
    
      .ls-faq__icon::before,
      .ls-faq__icon::after {
        content: '';
        position: absolute;
        left: 0;
        top: 6px;
        width: 14px;
        height: 2px;
        background: currentColor;
        transition: transform 0.2s ease;
      }
    
      .ls-faq__icon::after {
        transform: rotate(90deg);
      }
    
      .ls-faq__item[open] .ls-faq__icon::after {
        transform: rotate(0deg);
      }
    
      .ls-faq__a {
        padding: 0 0 16px;
      }
    
      @media (prefers-reduced-motion: reduce) {
        .ls-faq__icon::after {
          transition: none;
        }
      }
    {% endstylesheet %}
    
    {% schema %}
    {
      "name": "FAQ accordion",
      "settings": [
        {
          "type": "text",
          "id": "heading",
          "label": "Heading",
          "default": "Frequently asked questions"
        },
        {
          "type": "checkbox",
          "id": "open_first",
          "label": "Open the first question",
          "default": false
        }
      ],
      "blocks": [
        {
          "type": "question",
          "name": "Question",
          "settings": [
            { "type": "text", "id": "question", "label": "Question" },
            { "type": "richtext", "id": "answer", "label": "Answer", "info": "Questions without an answer are hidden." }
          ]
        }
      ],
      "presets": [
        {
          "name": "FAQ accordion",
          "blocks": [{ "type": "question" }]
        }
      ]
    }
    {% endschema %}

    Add it to your store

    1. In Shopify admin go to Online Store → Themes. Next to your theme click ⋯ → Edit code.
    2. Under Sections click Add a new section, name it ls-faq-accordion and click Done.
    3. Delete everything in the new file, paste the code and click Save.
    4. Go back to Customize, click Add section, pick FAQ accordion and add your questions. Questions without an answer stay hidden.

    Tip: duplicate your theme first (⋯ → Duplicate) so you can always go back.

No snippet on its own guarantees more sales. These are building blocks; your product, offer and traffic still decide the result.

Cart

Your cart is empty.

Get the kit