Blog
Practical notes on JavaScript tooling, module systems and the platform decisions behind the work we do
-
How to Test Shopify Functions Locally, Then in CI
Test Shopify Functions locally in three layers: Vitest unit tests, Wasm fixture tests with Shopify's test helpers, and replay of real checkout runs.
-
JavaScript Set Methods: union, intersection, difference
JavaScript Set methods like union, intersection and difference ship in ES2025 and Node 22; here is what they accept, return and need from tsconfig.
-
Shopify Translations API: Register and Keep in Sync
The Shopify translations API ties each translation to a digest of the source text: register by locale or market, then re-sync outdated keys.
-
Polaris React to Web Components: Migrate in Slices
Move an embedded Shopify app from Polaris React to web components route by route: React 19 first, then the page shell, forms, save bar and tests.
-
Playwright Sharding in GitHub Actions: One Report
Split Playwright tests across GitHub Actions jobs with --shard, balance them with fullyParallel, and merge the blob reports into one HTML report.
-
Shopify Lighthouse Score: What Actually Moves It
A Shopify Lighthouse score moves on four things: the LCP image, blocking JavaScript, what loads before content_for_header, and layout shift.
-
Shopify Plus vs Advanced: What the Extra Fee Buys
Shopify Plus vs Advanced: Plus costs GBP 1,950 a month to GBP 259, so upgrade for checkout extensions, custom Functions and API limits, not fees.
-
React useActionState: Forms That Keep Their Input
React useActionState returns the last action result, a form dispatcher and isPending, and clears fields on success unless you echo the values back.
-
Shopify Customer Account UI Extensions: Pick a Target
Shopify customer account UI extensions: which target to use, how to build an order action, and how the extension safely calls your own backend.
-
Magento to Shopify Migration: What Ports, What Breaks
Magento to Shopify migration: what ports cleanly, what to rebuild (variants, customer groups, store views) and how to turn url_rewrite into 301s.
-
CSS light-dark(): Dark Mode Without Media Queries
CSS light-dark() returns one of two colours based on an element's color-scheme, so dark mode and theme toggles need no media queries.
-
Shopify Metafield Definitions in TOML: Ship the Schema
Declare Shopify metafield and metaobject definitions in shopify.app.toml so every shop gets the same schema on deploy, and learn the limits that bite.