u/Commercial-Egg-3615

Why every free shipping bar app I tried broke when I turned on Shopify Markets, and what I ended up building

A few years back I was running a small store, turned on Shopify Markets to sell into EU + UK + US from one store. Suddenly my "free shipping over $75" bar made no sense. A UK customer was seeing $75 (which my store priced as £60ish) and my actual UK free shipping threshold was £50. The bar was actively wrong.

I checked the top free shipping bar apps. Every single one of them stored a single threshold value globally, then either:

a) Showed the same number across all markets, completely ignoring the local currency and the merchant's actual market-specific shipping rules, or
b) Did a naive currency conversion at render time, which would say "free shipping over £58.42" because $75 converted that day

Both are terrible UX. Customers do not trust a number with two decimal places, and merchants do not actually set their free-shipping floors at converted dollar amounts. The real EU threshold is €60 or €75, clean rounded numbers, not converted.

So I shipped one that reads the merchant's per-market shipping zones directly via the Shopify Admin API and lets the merchant set a goal per country or per market. Customer from Germany sees "Spend €15 more for free shipping to Germany" with the correct German threshold. Customer from US sees the US threshold. No conversion math, no wrong numbers.

Technical notes for anyone building in this space:

  1. Shopify Markets and Shopify Shipping zones are not the same object. You can set thresholds at either layer. Most merchants set them at shipping zone level (because that is where they live operationally). The Markets API will not tell you about them. You have to read the shipping profiles separately.
  2. The customer's market is detected client-side via the localization cookie. There is a brief flash on first paint if you render server-side, so I ended up doing the bar render fully client-side after Markets sets the locale.
  3. Currency formatting per locale is its own rabbit hole. Use Intl.NumberFormat with the correct locale string, not the currency code alone. €1.234,56 vs €1,234.56 matters more than you think for trust.
  4. The cart total comparison needs to be in the customer's presentment currency, not shop currency. Easy to get wrong.

Boring problem, useful niche. The free shipping bar category is crowded but almost none of the incumbents handle Markets correctly. If you are building anything in storefront UI, audit how it behaves when you flip Markets on. It is the single most common merchant gotcha I see.

reddit.com
u/Commercial-Egg-3615 — 4 days ago
▲ 2 r/Dropshipping_Guide+1 crossposts

Lightweight Prefetch app using Speculation Rules – looking for feedback from other devs

Hey r/ShopifyAppDev,

I've been maintaining **Prefetch** for a few years now. It's a focused, lightweight app that specializes in making navigation feel instant using:

- Chrome Speculation Rules (prerendering)

- Hover-based prefetch fallback

- Easy Theme App Extension setup (no code changes needed)

Recent updates include:

- Better performance dashboard with real metrics (accelerated pageviews, estimated time saved, hit rate)

- Configurable page types + exclusions

- Core Web Vitals scanner

I'm mostly curious about what other developers are using or building in the speed/performance space right now. Have you tried any of the other prefetch tools (Smart Prefetch, Hyperspeed, etc.)? What’s working well for perceived load time?

App link for anyone interested: https://apps.shopify.com/prefetch

Would genuinely appreciate any honest feedback or suggestions, especially technical ones.

Thanks!

u/Commercial-Egg-3615 — 6 days ago