Skip to content

Case study · Premium tableware and home linen, direct to consumer retail

Malacca Tables.

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, and all 65 pages now carry the full catalogue in plain HTML that AI assistants can read.

Home page of malacca.es: the headline Un pedacito de Asia en tu mesa beside a table set with blue and white porcelain, a blue glass and an embroidered napkin.

At a glance

Client
Malacca Tables
Sector
Premium tableware and home linen, direct to consumer retail
Year
2026
Live site
malacca.es
Stack
ViteReactTypeScriptTailwind CSSshadcn/uiReact RouterTanStack QuerySupabasePostgreSQLDenoVercelGitHub ActionsNode.jsResendSearch ConsoleMeta Ads
Malacca Tables on a phone

01 · Malacca Tables

The challenge.

After two years selling online on WordPress and WooCommerce, the brand wanted to take the next step: a store of its own, built to grow. The brief was shipping priced from the real carrier tariffs, every price and product claim stated exactly, and a catalogue that AI assistants can read. That last point shaped the work: GPTBot, ClaudeBot, PerplexityBot and OAI-SearchBot do not run JavaScript, so the new store had to carry every product in plain HTML.

For example: 38 Spanish and English routes prerendered as static HTML. Santo Domingo Bay

02 · Malacca Tables

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.

A woman on a sofa with a laptop on her knees on a rainy afternoon, browsing the Malacca Tables shop: the headline Un pedacito de Asia en tu mesa, the blue table set and the guest selector.
Recreated scene with the project's real screen

For example: 11 modules delivered in Phase 1. Elite Smart Build

03 · Malacca Tables

The result.

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.

characters of body text readable by AI crawlers across 65 URLs, up from zero
105,212
routes pregenerated at build time with their own metadata and JSON-LD
65
products migrated, across 19 series and 9 categories
24
product variants verified one by one against the old catalogue
93
catalogue images regenerated as WebP at three widths
137
references in the live product feed for Google Merchant Center and Meta
92

For example: 2 languages live on the site, Spanish and English. Global Dynamic Security Group

04 · Malacca Tables

How we did it.

For example: 100 / 100 / 100 Lighthouse mobile: accessibility, best practices, SEO. KD.tech

The starting point

The brand had been selling online for two years on WordPress and WooCommerce and wanted a store of its own, built to grow. 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 brief went beyond looks. Shipping priced from the real carrier tariffs, every price shown exactly as charged, and every claim about the product and the payment backed up.

One goal set the order of work: the whole catalogue had to be readable by AI assistants. GPTBot, ClaudeBot, PerplexityBot and OAI-SearchBot do not run JavaScript, so every one of the 65 pages had to carry its text in the HTML itself.

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. Order confirmations leave from the client's own subdomain.

Five multi-agent audit passes reviewed the new store before launch, every finding verified adversarially, and more than 70 were resolved before the shop opened, with pricing, the cart and VAT checked order by order.

FAQ

Questions about this project.

How long does a WooCommerce migration like this take?
This rebuild ran from the end of July 2026 to the domain switch on 27 August 2026. The store was live on a preview domain within the first week; the rest of the time went on shipping rules, payments, photography and five audit passes. Polargate starts this kind of project with a paid, fixed-price Discovery Sprint, so the scope and the schedule are agreed before any code is written.
Can you migrate our catalogue straight from the live shop?
Usually yes. We moved this catalogue without touching the WordPress back office, by reading products, variants, prices and images out of the public WooCommerce Store API and checking every record against the live shop. 24 products, 93 variants, 19 series, 9 categories and 137 images came across that way. If a shop hides that API, the fallback is a crawl of the public pages plus a manual reconciliation.
Why does my shop show up in Google but not in ChatGPT or Perplexity?
Most often because the pages only exist after JavaScript runs. Google renders JavaScript; most AI crawlers do not. The fix is real HTML generated at build time for every route, as on all 65 URLs of this shop, plus a guard in the build so the text cannot disappear unnoticed.
Can you connect the shop to our own bank instead of Stripe?
Yes. This store charges through the client's own bank virtual terminal over the Spanish CECA protocol, not Stripe or Redsys. The amount is re-read from the order on the server, the signature is verified, repeat notifications are idempotent, and the acknowledgement back to the bank measured between 268 and 710 milliseconds in production against a 25 second limit. The payment layer is abstracted, so Redsys or Stripe can sit behind the same interface.
Will we be able to update products and stock ourselves afterwards?
Yes. The team manages orders, products, prices, stock, series, shipping rules and messages from an admin panel, and stock can also be synchronised from the logistics warehouse file: the first run synchronised 49 references. The prerendered pages refresh every morning through a scheduled job, so catalogue edits reach search engines and AI crawlers without anyone triggering a deploy by hand.

For example: 536/536 translation keys present in each of the three languages. Estepona Golf

Next project

Santo Domingo Bay.

Hospitality: convention resort, casino and private beach

We rebuilt a Caribbean resort's website as static HTML

For example: 22 public routes prerendered as static HTML. Hotel Marien

Get started

Tell us what you want to build.

Websites, apps, custom systems and AI for companies that need them in production in weeks. Fill in the form or book a 30 minute call: a senior engineer answers within 48 business hours with a first take on scope, timeline and price.

What do you need?
Budget
When

At least ten characters.

Answer in writing within 48 business hours. No newsletter, no automatic sequence.

Rather answer the full brief?

First step

Discovery Sprint

Two weeks to close scope, architecture and price before anything is built.

No price list. You get a private quote, in writing, after a short call.

Then, to build, always at a fixed price

Not ready yet?

AI-native digital studio for mid-market companies

POLARGATE, S.L. · CIF B24895005
Calle Electrónica 6, 28027 Madrid, Spain