Smart Retail

What started as a single feature became a standalone product, generating more revenue than the platform it was built for.

14 autonomous duty-free lockers deployed across 7 international airports.
Configuration-driven architecture with zero-touch provisioning.

I designed and built every layer, from backend to the native app running on the units, and installed them on-site myself.

PHPSymfonyReactHTMLCSSJavaScriptTypeScriptJavaREST APIsMySQLAWS Elastic BeanstalkAWS EC2AWS S3AWS RDSAWS Route 53AWS SNSAWS IAMAWS CloudWatchDockerNginxJenkinsGitHub ActionsBashPowerShellSendinblueValina 3CSixt PaymentsGit / GitHub
14 lockers

deployed across 7 international airports

£420k

in revenue through fully automated vending

8,000+

pre-order self-collections per year

World's 1st

digital duty-free vending machine

first-locker-in-lebanon

How It Started

Inflyter was a digital duty-free platform where travellers ordered products online and collected them at the airport. We wanted to add autonomous collection: Amazon-style lockers where customers could pick up their orders using a QR code, no staff interaction required.

The locker hardware came from an external supplier who also provided a basic web application to manage the workflow, the only option at the time. I had already built the entire Inflyter platform single-handedly (backend, two native iOS apps (B2C and B2B), cloud infrastructure) and was still maintaining all of it while managing client and supplier relationships, so building custom locker software wasn't yet feasible.

The supplier's app proved the concept, but it was designed as a generic locker management tool, not a platform we could extend with custom features. The codebase was unstable, difficult to extend or debug, and the interface wasn't suited for client-facing use.

After deploying two lockers in Beirut, it was clear: the concept worked, but we needed custom software to scale it.

geneva-vending-machine

Rebuilding From Scratch

I made the call to rebuild the entire system from scratch in PHP with Symfony, the stack I could move fastest in at the time, rather than try to extend a codebase that wasn't designed for what we needed.

The rebuild wasn't just a rewrite. It was a fundamental rethink of how the system worked:

Smart allocation to replace the supplier's random compartment assignment

Configuration-driven architecture so every unit could self-configure from the backend

Hardware abstraction layer to decouple business logic from physical devices

Offline-first collection with API calls queued and replayed on reconnection, and live connectivity monitoring for vending

Visual back office mirroring the physical locker layout with real-time status

Zero-touch deployment automating the full on-site provisioning process

Each of these became a core pillar of the platform.

Site Initialisation screen (SITE INITIALISATION with ID and IP fields)

Smart Allocation

The supplier's system assigned compartments randomly: a small perfume could block a large compartment meant for bulkier items, wasting capacity.

I built a reservation engine that calculated order volume from known product dimensions and allocated the optimal compartment, or combination of compartments, to fit it. This was a bin-packing optimisation problem at its core: maximise locker capacity while guaranteeing every order fits. It measurably improved daily throughput per locker.

Site Initialisation screen (SITE INITIALISATION with ID and IP fields)

Configuration-Driven Architecture

The system was designed so product behaviour was driven by configuration, not code. A single locker could operate as a vending machine, a collection point, or both, determined entirely by what the backend returned.

When a new unit was installed, it ran a self-initialisation process: connect to the backend, identify itself, pull its full configuration (compartment layout, product catalogue, operating mode, branding, allowed workflows), and set itself up accordingly. No manual configuration on the device.

The same mechanism handled ongoing changes: switching a unit from collection-only to vending, updating the product catalogue, reassigning compartments, all done from the back office with no on-site visit, no code deployment, no downtime.

This level of abstraction is what made deployments fast and repeatable, and the white-label SaaS vision viable. The platform didn't need to be rebuilt for each new client or use case. It just needed a new configuration.

inside-of-a-locker

Hardware Abstraction Layer

Each locker contained hardware from different suppliers, none of which spoke the same protocol: touchscreen, payment terminal, barcode scanner, passport scanner, receipt printer, router, PCBs controlling the compartment lock solenoids, infrared presence sensors, a security camera, and speakers.

I designed a hardware abstraction layer that sat between the application logic and the physical devices. The application worked with clean, uniform commands ("open compartment 4," "verify passport," "print receipt") while the abstraction layer handled the specifics of each device underneath. If we needed to swap a payment terminal or barcode scanner for a different model, only the adapter changed. The business logic never had to be touched.

Site Initialisation screen

Zero-Touch Deployment

I was responsible for the full on-site deployment: assembling the units, wiring the hardware, configuring every component, testing every function end-to-end, and training local staff before handoff.

Each installation meant setting up a complete Windows environment from scratch, usually on unreliable airport networks or hotspots, and under tight time constraints. We couldn't afford weeks on-site, so everything had to work within days.

That's what led me to build a deployment script that automated the full setup: application installation, database configuration, environment lockdown, auto-update and crash recovery. What used to take a full day of manual configuration became a fast, repeatable process. Security was critical. These machines sat in public terminals, so the environment had to be hardened against both misuse and failure. The automation handled all of it.

geneva-vending-machine_Large

World's First

When airport retail stores faced restricted hours and closures during COVID, we saw an opportunity: if the locker could handle autonomous collection, why not autonomous purchasing?

I extended the API and backend to handle stock management, inventory, and direct-sale transactions, and designed the changes to the Windows application to support product browsing and purchasing, none of which existed before. We deployed the world's first digital duty-free vending machine in Geneva, then Luxembourg. The vending machines quickly started generating more revenue than the Inflyter app itself.

Smart Retail was no longer a feature. It was a product.

The collection experience

Marketing photoshoot at Lima Airport, Aelia Duty Free. The customer scans their QR code, enters their PIN, and collects their order. The entire process takes less than a minute.

Customer approaching the locker, tapping Touch to Start on the screen
Close-up of customer entering 6-digit PIN on touchscreen interface
Customer reaching into opened compartment to collect their order
Customer holding collected Aelia Duty Free bag, smiling

Design by Studio F·A·Porsche

As the locker network expanded to luxury duty-free operators in the Middle East, the standard industrial design no longer matched the retail environment. Studio F.A. Porsche was commissioned to reimagine the locker as a premium piece of airport furniture.

Studio F·A·Porsche cylindrical locker concept, full unit with integrated touchscreen kiosk and champagne-gold finish.
Close-up of the locker's touchscreen and surrounding cylindrical modules showing the Inflyter interface.
Top-down view of the cylindrical locker compartments with gold-rimmed lids.
Detail of the integrated kiosk with angled PIN pad display and ambient lighting.
Open locker compartment with interior LED ring light and green LED status strip.

Deployed across 7 international airports

Planning the locker workflow on a whiteboard at the supplier's factory in China

China: Planning the locker workflow with the supplier

Debugging the system in the supplier's factory

China: Debugging the system in the supplier's factory

Factory workers packing the first locker for shipping to Beirut

China: Supervising the packing of the first locker for Beirut

Locker installation in progress in a live Beirut terminal

Beirut: installation in a live terminal

Debugging in the live terminal in Beirut

Beirut: Debugging in the live terminal

Locker shell in the factory before assembly

China: empty shell before assembly

Reviewing locker blueprints on-site in Bahrain

Bahrain: reviewing locker blueprints on-site

Configuring the locker during installation in a Bahrain terminal under construction

Bahrain: configuring during installation

First boot of the locker in a Bahrain terminal still under construction

Bahrain: first boot under construction

Finished locker installed and operational in Bahrain airport

Bahrain: 2nd locker installed and operational

Smart retail locker deployed at Larnaca airport, Cyprus

Cyprus: Larnaca airport

Lima locker ready for shipping from the factory

Lima: locker ready for shipping

Vending machine installed airside at Luxembourg airport with Luxair on the tarmac

Luxembourg: vending machine airside

Collection locker installed landside at Luxembourg airport

Luxembourg: landside collection point

PCB board controlling compartment lock solenoids

PCB controlling the compartment lock solenoids

Representing the company at the TFWA summit in Cannes, 2019

TFWA Cannes 2019: representing the company with the mini locker