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.
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 explorergraphql
# 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.