Restaurant · Offline-First · Desktop

A POS that runs
when the internet doesn't.

Restaurant floors can't wait for a spinner. Our client needed a point-of-sale that would take orders and print receipts even when the WiFi flaked, sync when it came back, and be nearly impossible to pirate. We shipped an Electron app with local SQLite, thermal printing over QZ Tray, and server-signed license keys.

100 %
Offline-capable
HMAC
SHA-256 signed licenses
PHP 8.3
NTS bundled inside
SHA-512
OpenSSL request signing

The restaurant client had been through two web-based POS systems that both did the same thing: the moment the connection flaked, the interface froze. Orders couldn't take. Receipts couldn't print. The floor staff started keeping paper again.

The requirement was blunt: the system runs when the internet doesn't. Orders take. Receipts print. Everything syncs when the connection comes back. The staff never has to know there was a problem.

A secondary requirement: the software has to be hard to pirate. Not impossible — nothing is impossible — but hard enough that copying the installer to a friend's terminal doesn't give them a working POS. Small restaurants are a common target for software sharing, and the client's business model doesn't survive it.

Electron shell with local SQLite as the source of truth. Orders take. Receipts print. Everything happens on the local machine first. When the connection comes back, the system syncs delta records to the cloud — nobody has to think about it.

Bundled PHP 8.3 NTS + Composer inside the app for the escpos-php thermal library. Bundling PHP is unusual for a desktop app, but it's the right call — the thermal-printing ecosystem lives in PHP and Node bindings for escpos-php are patchy. Ship the engine that works.

QZ Tray as the WebSocket bridge to the thermal printer. QZ Tray runs as a system service on Windows and speaks the raw ESC/POS protocol the printer needs. We scripted the self-signed cert trust step so setup doesn't need IT support — the operator clicks through in ninety seconds.

License keys follow the format AXCEL-XXXX-XXXX-XXXX-CCCC — four groups of four characters plus a four-character checksum. Keys are HMAC-SHA256 signed on the server at activation, and every subsequent API call from the app to the license server is signed with OpenSSL SHA-512. Copying the installer to another machine gets you a warning, not a working POS. Rotating the license SECRET revokes every clone in the field within one activation cycle.

What we built it with.

Desktop Shell
Electron
Cross-platform desktop with a familiar web frontend.
Node.js
The Electron runtime, plus lightweight IPC.
SQLite
Local source of truth. Orders and receipts survive network failures.
Printing & Backend
PHP 8.3 NTS (bundled)
Runs escpos-php inside the app — no external PHP required.
Composer + escpos-php
Battle-tested thermal library. ESC/POS output that printers actually accept.
QZ Tray
WebSocket bridge to the thermal printer. Handles the raw protocol.
Security & Licensing
HMAC-SHA256
License key signing at activation. Format AXCEL-XXXX-XXXX-XXXX-CCCC.
OpenSSL SHA-512
Every API request to the license server is signed. Replay attacks fail.
VC++ Redistributable
Bundled with installer so nothing's missing on first run.

The intelligence layer.

Claude Sonnet 4.6
Development pair — Electron packaging, PHP bundling strategy, HMAC signing, sync-queue design

From brief to production.

Phase 1 Local-First Shell
Electron + SQLite. Orders take offline. Local sync queue defined.
Phase 2 Thermal Printing
PHP 8.3 NTS + escpos-php bundled. QZ Tray integration with scripted cert-trust step.
Phase 3 License Signing
HMAC-SHA256 key format. OpenSSL SHA-512 request signing to the license server.
Phase 4 Windows Installer
VC++ Redistributable bundled. Installer signed. Setup ninety seconds without IT.
Pre-Release Debug Cleanup + SECRET Rotation
Remove debug log lines from api/queue.php. Rotate license SECRET before next production release.

What shipped.

Deployed
In Production
Live in the restaurant. Thermal printing reliable across Windows installs. Sync layer stable.
Offline-safe
Never Blocks
SQLite as source of truth. Orders and receipts survive any network outage.
Signed
Hard to pirate
HMAC-SHA256 licenses + OpenSSL SHA-512 request signing. Copy-paste attacks fail
Next release
Ready
Debug log cleanup and license SECRET rotation pending before the next production build.
"
The internet drops, the POS keeps going. Staff don't even notice. When it comes back, everything syncs. That's the difference between the old system and this one.
R
Restaurant Manager
AXCEL POS deployment

Building something similar?

If your problem lives at the intersection of AI, product, and real business constraints, let's talk.

Trusted Worldwide — Long-Term Partnerships Built on Trust and Results

Take it from leading businesses around the world. Time and time again, our clients experience the quality, speed, and reliability of our AI solutions and automation services, leading to long-term partnerships with AXCEL.

Ready to Automate and Scale Your Business?

We design and deploy AI solutions that streamline operations and accelerate growth.

WhatsApp