All case studies
Case study · 4x4 parts retailer

4x4AT

Built a custom Magento 2 point-of-sale that unified the trade counter and the website into one stock pool, one ledger, one set of customer records.

Magento 2PHPMagento 2Stripe TerminalPHPUnitMySQLRedisCloudflare
1
Stock pool across all channels
0
Manual VAT corrections per quarter
~£12k
Saved vs commercial POS over 5 years
100%
Test coverage on tax & payment logic
The problem

What needed solving

4x4AT operate both a physical trade counter and a Magento 2 ecommerce store. The two ran on separate systems: Magento for online, a legacy desktop till for the counter. Stock counts diverged by the hour. Customer records didn't match across channels. VAT reporting was a quarterly headache.

Off-the-shelf Magento POS modules were either limited (no salesman attribution, no deposit handling) or expensive (£200+/month per till), and none of them handled the specific tax logic 4x4AT needed for export vs UK sales.

The brief was specific: a POS that lives inside Magento, uses Magento's product catalogue and customer database, takes payment through Stripe, handles deposits, attributes commissions to the right salesman, and produces VAT-correct invoices for both UK and EU customers at the till.

The approach

How the team worked through it

01

Custom Magento 2 module from the ground up

Built as a proper M2 module — admin UI, ACL roles, declarative schema, dependency injection — so it sits alongside the catalogue, orders, and customer modules natively. No iframe hacks, no separate codebase to maintain.

02

Stripe Terminal for in-person payments

Integrated Stripe Terminal SDK for chip-and-PIN, contactless, and Apple/Google Pay. Card readers connect over Bluetooth to the till tablet. Payments captured directly against the Magento order so the source of truth stays in one place.

03

Multi-currency VAT with country-aware logic

Built tax rules that handle UK domestic, EU consumer (with post-Brexit IOSS where applicable), and export-zero-rated, all selectable at the till from a single dropdown. The till knows what each combination means for the invoice.

04

Salesman attribution and commission

Each sale gets attributed to the salesman who rang it through. Custom reporting in admin shows daily and monthly commission totals. No more arguments at month end.

05

Deposit handling for big-ticket items

Customers paying deposits on larger items (winches, full kits) get a real Magento order in 'pending payment' state, with the balance collectable later through the same till or online. Reconciliation is automatic.

06

Full PHPUnit test suite

Tax logic, payment flows, salesman attribution, deposit reconciliation — all covered by automated tests. Updates to the module can be made with confidence, not by crossing fingers.

Got a similar problem?

Free 30-minute call. We'll work out whether Magento Patches can help.