A homeware shop rebuilt so AI search can read the catalogue
A premium tableware and home linen brand in Madrid moved off WordPress and WooCommerce onto a custom store. Polargate migrated 24 products and 93 variants without admin access, and turned 65 pages that served AI crawlers nothing into pages that carry the full catalogue in plain HTML.

- 105,212
- characters of body text readable by AI crawlers across 65 URLs, up from zero
- 65
- routes pregenerated at build time with their own metadata and JSON-LD
- 24
- products migrated, across 19 series and 9 categories
- 93
- product variants verified one by one against the old catalogue
- 137
- catalogue images regenerated as WebP at three widths
- 92
- references in the live product feed for Google Merchant Center and Meta
The problem
The brand had been selling online for two years through a WordPress and WooCommerce shop and getting almost nothing back from it. Nobody could get into the WordPress admin any more. Shipping was quoted as a flat promise the real carrier tariffs did not support, strike-through prices had no genuine previous price behind them, and several claims about the product and the checkout could not be backed up. The worst part was invisible: all 65 URLs returned zero characters of body text to GPTBot, ClaudeBot, PerplexityBot and OAI-SearchBot, so to an AI assistant the shop had no products at all.
What we built
Polargate rebuilt the shop on its own stack instead of another plugin ecosystem: Vite, React and TypeScript with Tailwind and shadcn/ui, Supabase for Postgres, Storage, Auth and Deno edge functions, and Vercel for hosting. We read the old catalogue out through the public WooCommerce Store API and verified it piece by piece: 24 products, 93 variants, 19 series, 9 categories and 137 images rebuilt as WebP at three widths. All 65 routes are pregenerated at build time with their own metadata and JSON-LD, and three build guards fail the build if any route drops below 400 characters of text.
The outcome
The catalogue is now readable by search engines and AI assistants alike: 105,212 characters of body text across 65 URLs, up from zero, refreshed every morning by a GitHub Actions cron that triggers a Vercel deploy hook. A product feed with 92 references is live for Google Merchant Center, Meta and Pinterest, and a 64 page sitemap is accepted in Search Console. Card payments were verified with a real charge before opening. The shop has not traded long enough to report sales, and Polargate does not publish numbers it cannot attribute.
Stack
- Vite
- React
- TypeScript
- Tailwind CSS
- shadcn/ui
- React Router
- TanStack Query
- Supabase
- PostgreSQL
- Deno
- Vercel
- GitHub Actions
- Node.js
- Resend
- Search Console
- Meta Ads
What we found
The brand had been selling online for two years through a WordPress and WooCommerce shop and getting almost nothing back from it. Nobody could get into the WordPress admin any more, so we read the catalogue out through the public WooCommerce Store API and rebuilt it piece by piece: 24 products, 93 variants, 19 series, 9 categories and 137 images.
The audit turned up problems that had nothing to do with looks. Shipping was quoted as a flat promise the real carrier tariffs did not support. Strike-through prices had no genuine previous price behind them. Some claims about the product and the payment gateway could not be backed up, so they came out.
Then the finding that changed the order of work. On 4 August 2026 we fetched every URL the way GPTBot, ClaudeBot, PerplexityBot and OAI-SearchBot see it. All 65 pages returned zero characters of body text. The shop only existed after JavaScript ran, so to an AI assistant the catalogue was empty.
What we built
We rebuilt the store on our own stack rather than another plugin ecosystem: Vite, React and TypeScript with Tailwind and shadcn/ui, TanStack Query for data, Supabase for Postgres, Storage, Auth and Deno edge functions, and Vercel for hosting. Row level security is enabled and forced on all 25 tables, and prices are re-read on the server before anything is charged.
- All 65 routes are pregenerated at build time, each with its own title, description, canonical, Open Graph tags and JSON-LD. Three build guards fail the build if a route drops below 400 characters, so readability cannot quietly regress.
- The migrated images were regenerated as WebP at three widths. The second photo batch alone went from 80.0 MB of PNG to 11.3 MB, 85.9 percent less.
- Shipping is calculated in Postgres by weight and zone, and the same function answers both the browser estimate and the server that creates the order.
- Card payments run through the client's own bank virtual terminal over the CECA protocol, with the amount re-read server-side, the signature verified and repeat notifications made idempotent.
- The brand's own team runs the shop from an admin panel for orders, products, prices, stock, series and shipping.
How it runs now
The catalogue serves 105,212 characters of readable HTML across 65 URLs, and a GitHub Actions cron triggers a Vercel deploy hook every morning so the prerendered pages follow stock and price changes. A product feed with 92 references is regenerated on each build for Google Merchant Center, Meta and Pinterest. A 64 page sitemap is accepted in Search Console, and the old WooCommerce sitemap, which had been returning errors, is gone. Order confirmations leave from the client's own subdomain.
Five multi-agent audit passes ran before launch, every finding verified adversarially, and more than 70 were fixed. Several of them cost real money: a scene selling black pieces while showing blue ones, an order charging 99 units, a cart duplicating quantities, and a VAT error on the preparation fee worth about 80 euros per 100 orders.
Questions about this project
How long does a WooCommerce migration like this take?
Can you migrate our catalogue if we have lost access to the WordPress admin?
Why does my shop show up in Google but not in ChatGPT or Perplexity?
Can you connect the shop to our own bank instead of Stripe?
Will we be able to update products and stock ourselves afterwards?
Start the engine
Tell us what you are building in a few short questions. A senior engineer answers in writing within 48 business hours, with a first take on scope, timeline and price.