Tom Sailors
Brief · Anonymized case study

Carrier-Specific Cutoff Ship Promises

I'd build a carrier-cutoff system that compares the current time to the merchant's 2pm CT fulfillment window, then renders dynamic ship promises on the storefront. The PDP shows "Ships today, arrives tomorrow" or "Ships tomorrow, arrives in 2 days" depending on when the customer is browsing. Near checkout, a warning fires when there's less than 15 minutes left to hit that cutoff. Behind the scenes, a Shopify app lets them configure cutoff times per carrier and monitor if fulfillment is slipping.

A mid-market ecommerce merchant using UPS Ground as their primary carrier needed to communicate accurate, time-dependent ship promises to customers. Orders placed before 2pm CT could ship the same day; after that cutoff, they'd ship the next day. The merchant wanted these real ship dates visible on the product page and cart, reducing customer service volume from misaligned expectations.
Four pieces
Shipping

Cutoff Time Calculator

Checks the current time against the UPS Ground cutoff, then calculates which day the order will actually ship and arrive.

Backend service + Liquid snippet
theme/snippets/shipping-cutoff.liquid liquid
{% assign cutoff_hour = 14 %}
{% assign cutoff_minute = 0 %}
{% assign cutoff_tz = 'America/Chicago' %}

{%- capture now_iso -%}
  {{ 'now' | date: '%s' }}
{%- endcapture -%}

{% assign hours_until_cutoff = cutoff_hour | minus: now_iso %}

{% if hours_until_cutoff > 0 %}
  {% assign ship_day = 'today' %}
  {% assign arrive_day = 'tomorrow' %}
{% else %}
  {% assign ship_day = 'tomorrow' %}
  {% assign arrive_day = 'in 2 days' %}
{% endif %}

<div class="shipping-promise">
  <p>UPS Ground: Ships {{ ship_day }}, arrives {{ arrive_day }}</p>
  <p class="cutoff-notice">Order by {{ cutoff_hour }}:{{ cutoff_minute | append: '0' | last: 2 }} CT to ship today.</p>
</div>
This snippet compares current time to 2pm CT; adapt cutoff_hour and cutoff_tz for other carriers or time zones.
Storefront

PDP Ship Promise

Displays the calculated ship-by date prominently on the product page so customers know exactly when they'll receive the item.

Theme section + Liquid
theme/sections/product-template.liquid or theme/snippets/product-shipping-badge.liquid liquid
{% if product.available %}
  {% assign cutoff_hour = 14 %}
  {% assign now_seconds = 'now' | date: '%H' | times: 3600 %}
  {% assign cutoff_seconds = cutoff_hour | times: 3600 %}
  
  {% if now_seconds < cutoff_seconds %}
    {% assign ship_label = 'Ships today' %}
    {% assign delivery_label = 'Arrives tomorrow' %}
  {% else %}
    {% assign ship_label = 'Ships tomorrow' %}
    {% assign delivery_label = 'Arrives in 2 days' %}
  {% endif %}
  
  <div class="product-shipping-badge">
    <strong>{{ ship_label }}</strong> with UPS Ground
    <span class="delivery-window">{{ delivery_label }}</span>
  </div>
{% endif %}
Place this near the price and 'Add to cart' button for maximum visibility.
Checkout

Cart Cutoff Alert

When a customer's cart is nearing the cutoff, shows an inline warning: order now or the ship date moves to tomorrow.

Cart drawer / Liquid
theme/snippets/cart-cutoff-warning.liquid (render in cart drawer or cart page) liquid
{% assign cutoff_hour = 14 %}
{% assign buffer_minutes = 15 %}
{% assign now_hour = 'now' | date: '%H' | plus: 0 %}
{% assign now_minute = 'now' | date: '%M' | plus: 0 %}
{% assign cutoff_total_minutes = cutoff_hour | times: 60 %}
{% assign now_total_minutes = now_hour | times: 60 | plus: now_minute %}
{% assign minutes_remaining = cutoff_total_minutes | minus: now_total_minutes %}

{% if minutes_remaining > 0 and minutes_remaining <= buffer_minutes %}
  <div class="cart-cutoff-warning" style="background: #fff3cd; padding: 12px; border-radius: 4px; margin-bottom: 16px;">
    <strong>⏰ Order in next {{ minutes_remaining }} minutes</strong>
    <p>to ship today. Otherwise, ships tomorrow.</p>
  </div>
{% endif %}
Set buffer_minutes to when you need orders locked in (e.g., 15 min before 2pm CT to give you processing time).
Operations

Cutoff Configuration & Monitoring

Backend dashboard where you set cutoff times per carrier, track fulfillment speed, and pause sales if you're running behind.

Custom Shopify app + Heroku backend
Admin GraphQL explorer graphql
# Admin GraphQL – set and retrieve carrier cutoff metafields
query GetCarrierSettings {
  shop {
    metafield(namespace: "shipping_cutoffs", key: "ups_ground_cutoff_hour") {
      value
    }
  }
}

mutation SetCarrierCutoff($metafields: [MetafieldsSetInput!]!) {
  metafieldsSet(metafields: $metafields) {
    metafields {
      id
      namespace
      key
      value
    }
    userErrors {
      field
      message
    }
  }
}
Use the metafield namespace 'shipping_cutoffs' with keys like 'ups_ground_cutoff_hour' (value: '14'). Store per-carrier cutoff logic in your backend service, poll it from Liquid.

Got a similar problem?

Sketch your build in 30 seconds — voice, type, or attach a screenshot.

Sketch the build →