Skip to content
K.D. Vassiliou Group
WorkRetail and e-commerceA Cyprus specialist retailer

A point of salethat shares onecatalogue withthe web store

Replaced an off-the-shelf point of sale plugin with a terminal built for the business, and rebuilt the storefront so changes can be rehearsed first.

Line drawing of a shopfront, a till, a stockroom and a laptop store, all wired to one catalogue
Illustration of the problem · not a client screenshot
Client
A Cyprus specialist retailer
Sector
Retail and e-commerce
Status
In use · counter and web store
Year
2026
Stack
  • WordPress
  • WooCommerce
  • PHP
  • React
  • TypeScript
  • NestJS
  • PostgreSQL
  • Redis
  • Docker Compose

A Cyprus specialist retailer sells the same age-restricted stock over the counter and online, and was running its till on a third-party point of sale plugin it could not change. We took over the storefront and replaced the till.

The challenge

Two problems with one cause. The store's customisations — age verification, the way prices are displayed, an express checkout for a local courier — lived inside a theme nobody could safely edit, so every change was made directly on the live site. And the point of sale was an off-the-shelf plugin: when it disagreed with WooCommerce about stock or an order there was nothing to fix, only a support ticket to file.

What we built

First, a local copy of production that genuinely matches it: the full WordPress file tree and a database export running in containers, so the site comes up on a laptop with the same data, the same caching plugin and the same PHP version. On top of that, a visual comparison harness that screenshots the local site and the live one at desktop, tablet and mobile widths and reports where they differ, so a theme change can be shown to be the only change.

Then the till. The retailer's own behaviour moved out of the theme into a plugin of its own, separate from presentation. In its place we wrote a point of sale terminal: a React application served from inside WordPress, declaring compatibility with the high-performance order tables and writing real WooCommerce orders. Selling at the counter therefore moves the same stock as selling online, with no synchronisation step between two systems.

The terminal has since been rebuilt as a standalone service — a Node API over PostgreSQL with Redis, and a browser terminal against it — so the counter keeps working when the website does not, with cashier sessions, inventory movements and a log of what has been pushed back to the store.

The outcome

The retailer owns its checkout. Stock is one number rather than two that drift apart, cashiers work in a screen built for a counter rather than a web admin, and any change to the storefront can be rehearsed against a copy of production first. The off-the-shelf plugin it was working around is no longer in the stack.

Next projectAutomotive

A fitment finder over a four-level parts catalogue

A WooCommerce storefront where the shopper starts from their bike and ends at the right part, with no part numbers involved.

Read the case

Want one ofthese for yourbusiness?

Tell us what is slow, manual or broken, and we will scope it.

Tell us what is slow or broken, when you need it, and your budget range.