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

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

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

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

woo-importer
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.
- CSV
- Match
- Scrape
- Enrich
- Review
- Push
- 7 tools in one app
- Multi-supplier
- Bulk REST jobs in seconds


ACS Courier for WooCommerce
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

Custom Case builder
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


BOX NOW Delivery for WooCommerce
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


Piraeus Bank gateway
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
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.
Related work
- Heartbeat Pharmacy: a full headless replacement of WooCommerce, where this project extends one
- Kleidarakos B2B: headless B2B commerce on Medusa