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.
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.
The intelligence layer.
From brief to production.
What shipped.
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.
More from the studio.
Building something similar?
If your problem lives at the intersection of AI, product, and real business constraints, let's talk.
