The speed hiding in your theme code.
An AI trained on our theme playbook reads a copy of your theme and finds the fixes that move Core Web Vitals. A Whoosh engineer checks every one. You preview, you publish.
- Free while in beta
- Only ever a copy of your theme
- A person reviews every change
Product page LCP: the first gallery image is the largest thing on the page, but every slide loads eager with high priority, so it competes with the one shoppers see first. Keep the first eager, make the rest lazy.
snippets/product-gallery.liquid
{%- for media in product.media -%} {%- render 'media', image: media, image_loading: 'eager' -%} {%- if forloop.first -%} {%- assign loading = 'eager' -%} {%- else -%} {%- assign loading = 'lazy' -%} {%- endif -%} {%- render 'media', image: media, image_loading: loading -%}{%- endfor -%} Early days, said up front
We are running this by hand on a small number of stores, and we do not yet know how big the gains will be. What we can tell you is what it looks for, what it changes, and what those changes usually do. Every change is made on a copy of your live theme. You check the copy, and it only becomes your live theme if you publish it.
Some of the biggest speed wins live inside the theme itself.
Whoosh already makes your store faster from the moment a shopper arrives, by ordering your apps, deferring scripts and preloading the next page. Theme Optimisation adds a new layer: the theme's own code, where a few decisions made the day the theme was built have quietly cost time on every page load since.
What Whoosh does
Speed without touching your theme
- Loads the apps shoppers see first, defers the rest
- Keeps chat widgets, trackers and review tools off the critical path
- Preloads the next page, and its hero image, before the tap
- Measures real-user speed and ties it to conversion
- Proves the lift with a permanent A/B test, not guesswork
What Theme Optimisation adds
Speed from inside the theme
- Which image is the Largest Contentful Paint, and how early the browser hears about it
- Eager or lazy, decided per image, across the whole store
- Scripts and stylesheets that block the first paint
- Reserved space for logos, heroes and sliders, so the page does not jump
- Development bundles and third-party code shipped to every visitor
Nothing Whoosh does today changes. This adds to it: the work a developer used to do by reading every Liquid file by hand, written down and run by an AI, with our engineers checking every change.
The same fixes keep coming up.
Every one of these is a real finding from the beta, with the store's name removed.
The hero image found late
The browser only hears about the biggest image after parsing the whole page. Fix: a preload hint on the first slide, and only the first.
Usually moves: LCP
Everything set to load at once
A dozen gallery images competing with the one shoppers see first. Fix: the first eager, the rest lazy.
Usually moves: LCP, mobile data
Scripts and fonts in the way
A script without defer and a third-party font holding up the first paint. Fix: defer, preconnect, swap.
Usually moves: First paint, INP
A page that jumps
A logo and a slider with no reserved size, so the layout shifts as they load. Fix: explicit sizes.
Usually moves: CLS
Dead weight for every visitor
A development build in production and a B2B script loaded for everyone. Fix: the production build, and gate the rest.
Usually moves: INP, download size
Nothing, on purpose
Already handled? It says so. Built by JavaScript and not fixable in theme code? It flags it instead of guessing.
Usually moves: Nothing
Where we expect the difference, and where we do not know yet.
LCP
Biggest changeHow long until the biggest image appears
On themes with the problems above we would expect a few hundred milliseconds on mobile, and over a second where the image was waiting on JavaScript.
CLS
Big changeHow much the page jumps while it loads
Where a page jumps, reserving sizes for logos, sliders and images usually takes the shift close to zero. The page stops moving under a shopper's thumb.
INP
Smaller, but realHow quickly a tap gets an answer
Less script on the main thread helps. How much depends on what else the page is running.
Before: the theme mentions the image late
After: a preload hint in the first bytes
How much? It depends on how late your theme finds its own image.
A browser cannot download an image it has not heard about. Many themes only mention the hero after the whole page has parsed, and some only after their JavaScript has run. A preload hint moves that to the first few bytes. The gap between the two LCP lines is the gain.
The honest part
Expectations from how browsers work, not results we can promise yet. Some themes are already in good shape, and we will say so. And every change is made on a copy of your live theme first. You check the copy, and nothing reaches a shopper unless you publish it.
Why a few hundred milliseconds matter
+8.4%
retail conversions per 0.1s faster (Google)
+9.2%
higher order value per 0.1s faster (Deloitte)
It reads your theme the way our best engineer would.
Because that is who taught it. It knows Shopify themes: Liquid, sections and snippets, the image_tag filter, and how the hero, the collection grid and the product gallery each decide which image is the Largest Contentful Paint. Two years of hand-tuning themes, written down.
Three checks, in order
- 1
The AI proposes an exact change, with its reasoning.
- 2
A Whoosh engineer picks which ones are worth making, and applies them to your copy.
- 3
You check the copy and publish it as your live theme when you are happy with it.
Shopify-specific, down to the filter
It knows a preload hint belongs on the first slide only, that a collection's first product card is its LCP, and that one shared media snippet often feeds every image on the store. It targets the exact line.
Every change comes with its reasoning
Each suggestion says what it found, why it matters and what changes, as a before-and-after. If it cannot be explained in plain English, it does not get made.
It knows when to leave things alone
If your hero is already preloaded, it says so and moves on. If a grid is built by JavaScript and cannot be fixed in Liquid, it tells us instead of guessing.
Five steps.
Your live theme is not one of them.
Three of the five are yours, two are ours, and none of them touch your live theme.
- 1
Opt in You
One reply from us. Nobody on your side touches code.
- 2
Duplicate your live theme You
In your Shopify admin: Themes, then Duplicate. One click. That copy is the only theme we touch, and your live theme stays exactly as it is.
- 3
The AI reads every file of the copy Whoosh
Layouts, sections, snippets, assets. It maps what loads first on the home, collection and product pages, and what is holding each one back.
- 4
Our engineers review and apply Whoosh
We check every suggestion, keep the ones that matter, and apply them to your copy as small, readable changes.
- 5
Check the copy, then decide You
Open the copy in Shopify's theme preview and check everything: pages, cart, your phone. When you are happy, publish it as your live theme. Until then, your live theme is untouched.
Current theme
Your theme
Live. Not touched.
Theme library
Copy of your theme
Made by you. 7 changes staged by us.
You make the copy yourself in Shopify (Themes, then Duplicate) and it sits in your theme library next to the live theme. Check it, share the preview link with your team, and publish it as your live theme when you are happy with it. The original is still there if you ever want it back.
Built so the worst case is "nothing changed".
The changes are to how the theme loads, not to what it shows.
Only the copy you made
Every change lands on the duplicate you created. Your design, content and settings stay as they are.
You check the copy first
Shopify's own theme preview shows you the copy before any shopper sees it. Test it on your phone, check the cart, compare pages.
Publishing is your call
When you are happy, publish. If not, do not. The original is still in your library, so going back is one click.
Opt in, opt out
Say no and nothing happens. Say yes, then change your mind, and we stop. No questions.
Exciting, early, and honest about both.
Free while in beta
Pricing comes later, inside the Whoosh app. Beta stores hear first.
Work in progress
Slow and careful rather than fast and wrong. Some suggestions we will decline ourselves.
We might say no
If your theme is already in good shape, we will tell you. That is a good outcome.
For stores on Whoosh
Open to stores already running Whoosh, and to partners with a client on it.
Stop at any point
Say the word and we stop. Nothing on your store changes.
Questions we get asked first
How much faster will my store be?
Honestly, we do not know yet for your theme, and we would rather say so than guess. The expectations above come from how browsers work. What we can promise is the order things happen in: every change goes on a copy of your live theme first, you check the copy, and nothing goes live until you publish it.
Will it change my live store?
Not unless you publish the copy. Every change is made to a duplicate you create in your theme library. You preview it, and it only goes live if you publish it yourself.
What if a change breaks something?
You would see it on the preview before any shopper does. Tell us and we fix it or drop it. The original theme is still in your library, so you can always publish that again.
Do I need a developer?
No. If you have one, they are welcome to read every change: each one is a small, plain diff with an explanation. If you do not, we walk you through what was found.
What does it cost?
Nothing while it is in beta. When it moves into the Whoosh app it will be priced as part of the app, and beta stores hear first.
Something else on your mind?
Ask below, or email admin@getwhoosh.ai.
Want your theme looked at?
Tell us which store and we reply personally, including if we think it is not worth doing yet. Partners: tell us which client you have in mind and we will loop them in with you.
- Free while in beta
- Only a copy of your theme
- Stop at any point
Prefer email? admin@getwhoosh.ai
Thanks, we have it
We have down and will reply to personally, including an honest "not yet" if that is the answer. Nothing happens on your store until we have talked.