---
title: 'pooq.gr: Migration, Performance and Commerce Engineering'
description: >-
  Took over a live Greek WooCommerce store and rebuilt it across infrastructure, speed, structured data and checkout
  over months of work together, plus the shipping, payment and import tooling behind it.
lang: en
source: https://jimrarras.com/en/projects/pooq-gr/
fetched: '2026-09-19T05:53:17.794Z'
---

Lead Developer

Took over a live Greek WooCommerce store and rebuilt it across infrastructure, speed, structured data and checkout over months of work together, plus the shipping, payment and import tooling behind it.

- **Up to 2x** faster pages

- **14x** faster store API

- **+80%** products one tap from the homepage

- **82** product listings fixed for Google

## Stack

## Links
1. [Home](https://jimrarras.com/en/)
2. [Projects](https://jimrarras.com/en/projects/)
3. pooq.gr: Migration, Performance and Commerce Engineering

faster pages

Up to 2x

faster store API

14x

products one tap from the homepage

+80%

product listings fixed for Google

82

![pooq.gr: Migration, Performance and Commerce Engineering](https://jimrarras.com/images/projects/pooq-gr/hero.webp)

## The situation

pooq.gr is a Greek phone-accessories shop, and most of its customers shop on their phones. It ran on a slow shared server. We have been working together for months: I built its product importer and shipping plugins, I maintain its payment gateway, and in August I took over the whole platform.

## A faster store

I moved the store to its own server and made every page lighter. The wait before a page starts loading dropped by 40 to 51%, which matters most on phones.

Time to first byte (TTFB), on the same endpoints before and after the move
| Measure | Before | After | Change |
| --- | --- | --- | --- |
| Homepage | 1.072 s | 0.611 s | 1.8x faster |
| Product page | 1.101 s | 0.627 s | 1.8x faster |
| Cart | 0.894 s | 0.475 s | 1.9x faster |
| Store API, 100 products | 2.237 s | 0.159 s | 14.1x faster |
| Cart fragments (AJAX) | 0.699 s | 0.342 s | 2.0x faster |

How it works

- **Server:** a dedicated Debian server with OpenLiteSpeed, PHP 8.3, MariaDB and a Redis object cache, deployed over SSH and WP-CLI instead of FTP.
- **Fonts:** icon fonts subset to the icons in use (383 KB to 13 KB) and the Greek typeface self-hosted, with no third-party font requests.
- **CSS and JavaScript:** 15 stylesheets combined into 1, and render-blocking scripts cut from 13 to 6.
- **A steadier page:** layout shift on category pages down from 0.144 to 0.064; the homepage on a phone shortened from 8,609 px to 6,375 px.
- **Importer:** the same REST API that got faster makes bulk imports finish in seconds instead of minutes.

## Easier to shop

Visitors find what they want faster. Homepage tiles lead to where the catalogue actually is, suggestions match the shopper’s phone, and filters show only what makes sense.

![Category listing with filter pills for device, type and colour](https://jimrarras.com/images/projects/pooq-gr/listing.webp)

Search understands Greeklish too: “thiki iphone” finds iPhone cases, and it never ends on an empty page.

![Search results for the Greeklish query thiki iphone, showing iPhone cases](https://jimrarras.com/images/projects/pooq-gr/search.webp)

How it works

- Homepage category tiles redesigned: products reachable from them went from 204 to 367.
- Device-matched cross-sell instead of generic related products, with a compatibility line on the product page.
- Listings with 24 products per page, load more, filter pills and popularity ordering.
- Alt text on 228 product images that had none, a visible keyboard focus ring and larger tap targets.

## Found on Google

Google now reads complete, valid details for every product: price, stock, shipping, returns, and brand where there is one. 82 products Google had flagged are fixed.

Google did not accept category names written only in Greek. It now receives English categories behind the scenes, while shoppers still see Greek.

How it works

- Every product page emits one connected JSON-LD graph: Organization, WebSite, ItemPage, Product with an Offer carrying shipping and the return policy, and a Greek BreadcrumbList.
- The SEO plugin’s graph is extended rather than replaced: brands taken from each product’s brand term (with the house brand on bundles), identifiers on bundles, and supplier-feed internals stripped from 235 products.
- The category problem affected 82 products, because Google appears to accept only category segments containing a Latin letter. It was proven with the Rich Results Test before anything changed.

## Built for Greek commerce

Shipping with ACS and BOX NOW, payments through Piraeus Bank, an importer that brings in supplier catalogues, and an XML feed for the Skroutz marketplace.

## What I built for it

![The importer's review screen, listing demo products with their stock and price changes before they are pushed to WooCommerce](https://jimrarras.com/images/projects/pooq-gr/importer.webp)

### woo-importer

In-house

A TypeScript and React app that turns a supplier's catalogue file into live WooCommerce products: it matches rows to the existing catalogue, fills in images and attributes, and pushes the result through the REST API.

1. CSV
2. Match
3. Scrape
4. Enrich
5. Review
6. Push

- 7 tools in one app
- Multi-supplier
- Bulk REST jobs in seconds

![The ACS Points picker at checkout: a searchable list of lockers and stores beside a clustered map of Athens](https://jimrarras.com/images/projects/pooq-gr/acs-points.webp)

![](https://jimrarras.com/images/logos/acs.webp)

### ACS Courier for WooCommerce

Open source

Vouchers, pickup lists and tracking from the order screen, plus pickup from ACS lockers and stores on a searchable map, with cash-on-delivery rules per point.

- Vouchers, pickup lists, tracking
- ACS Points on a map
- COD rules per point

[Repository ↗: ACS Courier for WooCommerce](https://github.com/jimrarras/wc-acs-courier)

![The custom case builder with a phone model selected and a live preview of an uploaded pattern on the case](https://jimrarras.com/images/projects/pooq-gr/custom-case.webp)

### Custom Case builder

In-house

Customers pick their phone's brand and model, upload a photo and see it on the case before ordering; the design travels with the WooCommerce order.

- 383 device mockups, 11 brands
- Live photo preview
- Pending launch

![The BOX NOW locker widget opened from the checkout, listing nearby lockers beside the map](https://jimrarras.com/images/projects/pooq-gr/boxnow.webp)

![](https://jimrarras.com/images/logos/boxnow.webp)

### BOX NOW Delivery for WooCommerce

Open source

An open-source rewrite of the official BOX NOW integration: locker selection on both checkouts, vouchers and tracking, with ten upstream defects fixed.

- 10 upstream defects fixed
- Per-parcel compartment sizing
- Pending rollout

[Repository ↗: BOX NOW Delivery for WooCommerce](https://github.com/jimrarras/wc-boxnow-delivery)

![The Piraeus Bank option at checkout with Visa, Mastercard, Maestro, American Express, Diners Club, Google Pay and IRIS logos](https://jimrarras.com/images/projects/pooq-gr/piraeus.webp)

![](https://jimrarras.com/images/logos/piraeusbank.webp)

### Piraeus Bank gateway

Maintained fork

A maintained fork of Papaki's Piraeus Bank Paycenter gateway (itself based on emspace.gr's plugin): card, Google Pay and IRIS payments, brand logos at checkout and a verified bank callback.

- HMAC-SHA256 callback check
- Card brand logos
- Protected from upstream overwrites

[Repository ↗: Piraeus Bank gateway](https://github.com/jimrarras/woo-payment-gateway-for-piraeus-bank)

## Safe and easy to run

The database is backed up every night and each backup is checked; a restore was tested for real. Attack traffic is blocked, and every change can be undone.

How it works

- Scanner probes are refused at the web server, and CrowdSec bans abusive traffic through nftables; file changes are monitored.
- Backups with grandfather-father-son retention, verified before old copies are pruned.
- WP-Cron runs from a systemd timer instead of visitor requests.
- Custom code lives in more than two dozen version-controlled mu-plugins, each with its own off switch; every deploy has a backup and a written rollback.

## How I work

- **Measure before and after**, on the same endpoints, and keep the numbers.
- **Extend what is there** rather than replace it.
- **Keep every change reversible**, with a backup and a rollback plan.

- Heartbeat Pharmacy: a full headless replacement of WooCommerce, where this project extends one
- Kleidarakos B2B: headless B2B commerce on Medusa
