Flow Lab · Shopify demo
Shopify product page fixes: before → after
The small fixes store owners ask for most often, shown on one invented store (North Ridge Outfitters, a Dawn-style product page). Numbers are measured on these two demo pages with the same phone test I'd run on your store.
Product photo file2,400 px PNG → 900 px WebP
Main photo visible on slow 4G, this demo page32.8 s → 0.4 s
Page width on a 390 px phone543 px → 390 px
Before
- Camera-size photos2,400 px PNGs, 2 MB each, the same file for phones and desktops.
- Sale price backwardsCompare-at price lower than the price, so the "discount" looks like a price rise.
- Size chart breaks the layoutA wide table pushes the page to 543 px — the whole page slides sideways.
- Add to cart far downLong text and a dropdown before the button; sold-out sizes not marked.
After
- Right-sized WebP photos900 px and 450 px versions, the phone gets the small one; width and height set, so nothing jumps.
- Correct sale badge$79 with $89 crossed out and "Save $10".
- Size buttons + size guide in a drawerSold-out size crossed out, low stock shown, the table scrolls inside itself.
- Sticky Add to cartAlways under the thumb, with a free-shipping progress bar; delivery and returns next to the price; "Complete the look" for a bigger order.
Bulk product upload, checked before anything is sent
A client's spreadsheet goes through a check first. Here is the real output for a sample file with four typical mistakes — nothing reaches the store until they're fixed.
$ python3 shopify_products.py products-client.csv
3 product(s), 5 variant(s) in products-client.csv
❌ fix the CSV first (nothing was sent):
- row 2: Compare At Price 79.00 must be higher than Price 89.00 (or empty)
- row 4: «trail-runner-shoe» variant ['42'] is listed twice
- row 5: image «http://example.com/img/beanie.jpg» must be a public https:// link
- row 6: Price «1a9» — a number like 19.99
# after the fixes: products are created or updated in one pass through the Shopify Admin API,
# existing variants keep their stock and links; a report lists every product that changed.
Typical 1–3 hour Shopify jobs
SpeedResize and convert product and banner images, lazy-load below the fold, remove unused apps' scripts.
Product pageVariant buttons, correct sale badges, size guides, sticky Add to cart, delivery and returns info.
Mobile layoutFind what makes the page wider than the phone and fix it in the theme, not with a hack.
Upsells"Complete the look", cart cross-sells, a free-shipping bar — with the store's own products.
CatalogueBulk upload or update products from a spreadsheet, with a check and a change report.
Safe changesWork on a duplicate theme, a preview link to check, then publish; the old theme stays as a backup.
Demo on an invented store: products, prices and photos are made up. Measured with a headless phone test (iPhone 390×844, slow 4G 1.6 Mbit/s, 4× CPU slowdown, 3 runs, median) on 28 Sep 2026, pages served locally. A real Shopify page also loads the theme's and apps' scripts, so real numbers will be higher; the photo sizes and the layout fixes carry over as they are.