ClientMaintained2026

pooq.gr: Migration, Performance and Commerce Engineering

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.

Results

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

Stack

  • WordPress / WooCommerce
  • PHP 8.3
  • MariaDB
  • Redis
  • OpenLiteSpeed
  • CrowdSec + nftables
  • systemd
  • TypeScript + React
  • ACS Courier API
  • BOX NOW API
  • Piraeus Bank

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
MeasureBeforeAfterChange
Homepage1.072 s0.611 s1.8x faster
Product page1.101 s0.627 s1.8x faster
Cart0.894 s0.475 s1.9x faster
Store API, 100 products2.237 s0.159 s14.1x faster
Cart fragments (AJAX)0.699 s0.342 s2.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

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
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.

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 ACS Points picker at checkout: a searchable list of lockers and stores beside a clustered map of Athens

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
The custom case builder with a phone model selected and a live preview of an uploaded pattern on the case

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

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
The Piraeus Bank option at checkout with Visa, Mastercard, Maestro, American Express, Diners Club, Google Pay and IRIS logos

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

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
Get in touch

Display preferences

Text

Text size
Line spacing
Letter spacing

Color

Contrast

Motion and images

Reading

Reading aid
No changes