Software stack

The stack behind the two products.

Phoenix is a Laravel 12 ERP with a Vue staff interface and a MariaDB ledger. Receipts is a Flutter app. The till connects to Receipts with a Bearer key. Custom data services use a separate toolkit, listed on the services page.

Phoenix

Product page
ApplicationPHP 8.3 and Laravel 12, split into modules
Modulesnwidart/laravel-modules, one package per area of the business
Staff interfaceInertia.js 2, Vue 3, Tailwind CSS 3, Vite 6
DatabaseMariaDB. Money is stored as decimals and calculated with bcmath
Staff sign-inEmail and password, Microsoft Entra ID, Google, or LDAP
API accessLaravel Sanctum for staff tokens, and a separate shop token for customers
PermissionsSpatie permissions, scoped to each company
ShopWhite-label storefront, Payfast and EFT, installable PWA, Capacitor 6 app
ReportingApache Superset, embedded in the staff interface
DocumentsPDF output for the documents the ledger produces
TestsPest 4

One installation can host several companies. Each company has its own data, users, roles, branding, and web address.

Receipts

Product page
AppFlutter and Dart 3.12, Material 3
Phones and desktopAndroid, iOS, and Windows
Navigationgo_router
StateProvider
Sign-inThe receipts server address from the retailer, token kept in secure storage
AlertsFirebase Cloud Messaging and local notifications
Loyalty cardsOne card per shop, added to Apple Wallet or Google Wallet
Till connectionHTTPS JSON API. The till sends a Bearer key and looks up a card, email, or phone
Paper fallbackA photo of a paper receipt stays on the phone

The phone app and Phoenix do not share a customer database. The till key selects the retailer.