KardPal
Loyalty cards on your phone, with the barcode or QR code ready at the till. Works offline, in 8 languages.

- Client
- my own product
- Work
- PWA
- Technology
- JavaScript with no framework, service worker, PHP, MySQL or MariaDB, Stripe, Playwright tests
- Online
- kardpal.it
What it does
KardPal keeps shop loyalty cards on your phone. You add a card by pointing the camera at the code, from a photo or by typing the number, in 13 formats: from EAN-13 and Code 128 barcodes to QR, Data Matrix and Aztec. At the till the card opens on a white background and the screen stays on as long as needed.
Cards stay on the phone and work without a connection. With an account they show up on all your devices; without one you can export them to a file and import them again, also from another app such as Catima.
The free plan holds up to 20 cards. Premium (€1.99) and Premium Family (€4.99, up to 5 family members) are one-off payments through Stripe: they remove the limit and the ads, add photos of the card and put the nearest shop's card at the top.
How it's built
It's a PWA: it installs from the browser, with no app store. The interface is plain JavaScript with no framework and no build step; a service worker makes it work offline, and code reading uses the browser's own reader, with a WebAssembly fallback where it's missing.
The server is a PHP API with MySQL or MariaDB. There are eight languages (Italian, English, German, French, Spanish, Portuguese, Dutch and Polish), one per file. Automated tests run with Playwright.

A card opened at the till, on a white background 
Three ways to add a card 
Editing a card: code, colour, labels, photos 
The cards in the dark theme
The screens of the software come from test copies filled with made-up data.
