← thoughts/e-commerce

47 plugins down to 27: rebuilding an 8-language store in 48 hours.

Page builders and translation plugins rot e-commerce stores from the inside. Here is how we replaced a bloated WooCommerce setup with 23 custom code templates and a zero-query 8-language pipeline in two days.

25 October 20267 min readby the Qann team

When an e-commerce store has been running for three or four years, it usually looks fine on the surface and is rotting underneath.

Each time the founder wanted a new landing page, someone installed a page builder add-on. Each time they entered a new European country, someone installed a translation plugin. Each time checkout conversion dipped, someone bolted on another script.

By the time we audited the Druid Nutrients store (druidnutrients.com), it was running 47 active WordPress and WooCommerce plugins on top of an outdated visual theme. Page loads dragged, the checkout fought Dutch buyers trying to pay with iDEAL, and the multilingual plugin's database tables had fractured so badly that strings were rendering in the wrong language across Europe.

The conventional agency proposal for a mess like that is a 12-week redesign project with wireframes, moodboards, and another bloated theme.

We rebuilt the entire storefront in code and deployed it to production in 48 hours.

Speed and quality are not opposites. Slow builds are usually the result of layers that shouldn't be there in the first place.

01Step 1: Deleting the page builder and writing 23 custom templates

Visual page builders (Elementor, Divi, WPBakery) exist so agencies can bill design hours without writing code. The cost is paid by the store owner on every single page view: deeply nested DOM trees, megabytes of unused CSS and JavaScript, and layouts that break whenever a plugin updates.

We stripped the visual builder out completely and wrote 23 custom PHP templates directly in version-controlled code, deployed over SSH:

  • A StoryBrand (SB7) narrative homepage structured to convert growers: hero, live stats, the problem, the guide, the three nutrient lines (Berkana, Jera, Uruz), social proof, stakes, an interactive nutrient dosage calculator, and the brand manifesto.
  • Dynamic colour-coded product templates that shift accent tokens per product line without loading separate stylesheets.
  • A custom journal and knowledge taxonomy with data callout shortcodes, comparison tables, and auto-generated tables of contents parsed from <h2> headings.

Because every template is plain PHP, HTML, and scoped CSS, there is nothing for a visual editor to corrupt and zero page-builder overhead in the browser.

02Step 2: 1,827 strings across 8 languages with zero database queries

Multilingual WooCommerce stores almost always die in the database. Standard translation plugins (WPML, Polylang, TranslatePress) intercept every page render and run dozens or hundreds of extra SQL JOIN queries to fetch translated post meta and UI strings.

On Druid Nutrients, the existing translation plugin's pipeline was not just slow; it was broken. Strings were failing to resolve across English, Dutch, German, Spanish, French, Italian, Czech, and Polish (EN, NL, DE, ES, FR, IT, CS, PL).

Instead of wrestling with the plugin's database tables, we bypassed them completely:

  1. We extracted all 1,827 translatable strings across the theme, product pages, dosage calculator, and checkout into structured JSON dictionaries per locale.
  2. We wrote a lightweight custom PHP gettext filter that loads the active locale's JSON dictionary into memory once per request.
  3. Database queries added for translation: zero.

When a grower in Germany or Poland loads a product page or runs the nutrient calculator, the server reads from a deterministic JSON file on disk in sub-millisecond time. And when the team wants to update a translation, it is a single line in a tracked file rather than a hunt through five WordPress admin screens.

03Step 3: Engineering an iDEAL-first checkout that WooCommerce didn't want to allow

For a Dutch e-commerce brand, iDEAL is not an "alternative payment method." It is how the majority of customers pay. Yet default WooCommerce checkouts bury payment method selection below the fold inside clunky accordion boxes that reload via slow AJAX calls.

We re-engineered the checkout template from scratch:

  • iDEAL-first default state for Dutch traffic, paired with Stripe cards, Klarna, and PayPal for DE, BE, UK, and pan-European buyers.
  • Preloaded Stripe.js in <head> so card inputs mount instantly instead of popping in two seconds after the customer scrolls down.
  • Custom radio controls, clean VAT-inclusive pricing (21% BTW), and automatic shipping zone calculation across NL/DE/BE, Europe, and the UK.

04Step 4: Six JSON-LD schema types for search and AI answer engines

A fast store still needs to be understood by Google and AI answer engines (ChatGPT, Perplexity, Gemini). Before the rebuild, the site had zero structured data markup.

We wired six server-rendered JSON-LD schema types directly into the templates:

  1. Organization
  2. Product (with SKU, availability, and EUR offer pricing)
  3. Article (across all 8 rewritten journal guides)
  4. BreadcrumbList
  5. FAQPage (paired with accessible HTML accordions)
  6. HowTo (for cultivation feeding schedules)

05The before-and-after scorecard

| Metric | Before Rebuild | After 48-Hour Code Rebuild | |---|---|---| | Active Plugins | 47 | 27 (20 plugins removed) | | Page Builder Overhead | Visual builder on every page | 0 (23 custom PHP templates in code) | | Languages Supported | 1 working (broken translation tables) | 8 (EN, NL, DE, ES, FR, IT, CS, PL) | | Translation SQL Queries | Dozens per page view | 0 (1,827 strings via JSON gettext filter) | | Structured Data (JSON-LD) | 0 schema types | 6 schema types (Organization, Product, Article, BreadcrumbList, FAQPage, HowTo) | | Build & Deploy Time | Months of agency drift | 48 hours of active engineering |

You can inspect the live build in our Druid Nutrients case study, or see how we scope fixed-fee Websites and E-commerce rebuilds.

- Qann Commerce, Tallinn / Eindhoven / Mumbai

Written by the Qann team · Tallinn · Eindhoven · Mumbaishare on linkedin

$ ./rebuild_my_store

Store slow
and brittle?

Send us your URL. We'll tell you what's slowing it down, which plugins can go, and what a clean rebuild takes.