Loyalora
A loyalty register where every balance is the sum of its history, with points straight from your till.
For shops that run a points or stamp card. Often replaces Smile.io or LoyaltyLion.
Single license $59 · Extended license $129 · paid once, yours for good
What it does
Your till sends each sale with the card code, and your program's rate decides the points. A retried sale is never counted twice.
The till sends the card code and the reward; it is redeemed if the balance covers it. A retried request redeems once.
A balance is the sum of the ledger, never a stored number. Entries are never edited; a mistake is corrected with an opposite entry.
A redemption re-reads the balance inside the lock before committing, so points cannot be spent twice.
Put the poster by the till. Customers scan it, type their name and show their new card.
Regulars earn more, with tiers set by what each customer earned in the last 12 months.
A coffee can earn more than a pastry, at the counter and from the till.
Every entry records its shop, and the ledger filters and exports by shop.
A refund removes the points it earned, once, and never takes a balance below zero.
One screen shows the balance and its history. It also shows what it buys now and what the next reward needs.
Points per amount spent or stamps per visit, over one ledger, with rewards priced in the same unit.
A clerk redeems; only a manager can create or remove points by adjustment, with a typed reason.
Also: a REST API, signed webhooks and an MCP endpoint, under the counter's own roles and guards.
What Loyalora deliberately doesn’t do.
- No marketing of any kind, by design and by test — no campaigns, no mailing lists, no segments, no send-to-all
- No point-of-sale and no e-commerce or storefront widget — points can come straight from your till through the API, once per sale
- Holds no card numbers and processes no payments
- One earning rate per program, with VIP tiers and item bonuses on top, and a reward catalog
- One business per installation, with as many shops as you run
What renting costs instead
4 months of Smile.io costs what Loyalora costs once.
Read Sep 3, 2026 · source1 month of LoyaltyLion costs what Loyalora costs once.
Read Sep 3, 2026 · sourceThe full comparison: every rival, what each does better, and who should stay with them →
Replacing one of these? Smile.io alternative · LoyaltyLion alternative · Loyverse alternative · Square Loyalty alternative
Release history
For Loyalora, 4.1 makes two changes that every app gets. What’s new in 4.1 →
For Loyalora, 4.0 means updates from inside the app: the Updates page checks for a new release with your license key, verifies Ownware's signature, takes a backup and… What’s new in 4.0 →
For Loyalora, 3.3 meant redeeming at the till: your till sends the card code and the reward, a retried request redeems once, and a short balance says how many points… What’s new in 3.3 →
For Loyalora, 3.2 meant points sent straight from your till, customers joining from their own phone (off until you switch it on), VIP tiers, bonus points by item…
Loyalora was built after the 3.1 wave.
What’s in the zip
The tree as the zip ships it — the working leftovers the packager deletes are not listed
- .htaccess
- API.md
- Dockerfile
- LICENSE.txt
- QUICKSTART.txt
- README.md
- assets/
- bin/
- config.sample.php
- controllers/
- deploy/
- index.php
- install/
- manifest.json
- offline.html
- router.php
- src/
- sw.js
- tests/
- views/
src/Qr.php: a real module, the first 24 of 436 lines
Chosen as the largest module in src/ that is not one of the shared cores — this product's own logic, not a file every product carries.
<?php /** * Qr.php — a QR Code encoder, byte mode, error-correction level M, versions 1..10. * * PORTED VERBATIM from 36-assetora/app/src/Qr.php (sprint W3, 2026-09-26) for the customer card QR. * WHY THIS EXISTS AT ALL. The 3.0 signature feature is a printable label sheet: one QR per asset * that opens that asset's page. A label sheet that does not scan is worse than no label sheet — * somebody sticks four hundred of them onto four hundred machines before anyone finds out. So the * encoder is written from ISO/IEC 18004 rather than approximated, and the suite checks it against * an independent reference implementation, matrix for matrix, not by eye. * * WHY NOT A SERVICE OR A LIBRARY. A QR image endpoint would send the customer's asset URLs to a * third party on every label print, and this product is sold on the promise that it talks to * nobody. There is no Composer dependency either: the whole apps is drop-in-and-run PHP. * * SCOPE, deliberately. Byte mode only (a URL is bytes), level M (~15% recovery — the right trade * for a label that will be scuffed but is not on a foundry floor), versions 1..10, which carries a * 213-byte URL (version 10-M holds 216 data codewords, less the 4-bit mode indicator and the * 16-bit character count that versions 10 and up use). Beyond that encode() refuses loudly rather * than silently truncating — a label that quietly lost the end of its URL is the worst outcome. */ declare(strict_types=1); final class Qr
Runs on: Web installer in about two minutes; plain PHP 8.1+ with MySQL/MariaDB (or SQLite for a trial), no Composer and no build step — Docker one-liner included. Tested on PHP 8.3. Or run it in Docker: the Dockerfile is in the zip.
Technical owners can install it with one line and their license key: curl -fsSL https://ownware.io/install.sh | sh -s -- loyalora <your license key>
Nothing is obfuscated or encoded; what you read is what runs. Manual · API · the test run
Which license do I need?
It comes down to how many installations you need. Running your own business on one site is the Single license. A second domain of your own, or sites you build or run for other people, is the Extended license.
- Install it on one domain or subdomain you own or operate
- Change the source however you like for that installation
- Run your own business on it commercially, client work included
- Re-download the current build any time from your buyer portal
- A second site, or an installation you hand to a client as theirs, needs the Extended license
- No reselling, redistributing or sublicensing the source
- Not for offering it to other people as a hosted service
- Everything the Single license grants
- Install it on as many domains as you own or operate — no cap on the number
- Up to ten client installations, one per client project, handed over or hosted for each client; for more, buy another Extended license
- White-label: remove or replace the product name and logo in the screens of client installations
- Still no reselling or redistributing the source itself
- Running it as a multi-tenant service others sign up for needs a SaaS agreement
Every download carries the full terms as LICENSE.txt. The complete wording is on the terms page.
After you buy
The app’s Updates page installs a new release with your license key, with the release’s signature checked and a backup taken first. Your download link always serves the current build. Download again any time from your order page or the buyer portal; there is no renewal fee.
Email support for installation and for defects in the code as delivered: a person reads and answers every message. It does not cover custom development or server administration. What support covers
Refunds are handled by Lemon Squeezy as merchant of record, case by case. EU consumers keep the statutory 14-day right until delivery starts. Refund terms
It keeps running: your server, the full PHP source, no license check that can fail. If no stable release is published for 365 days, the domain limit lifts; after three such years your copy becomes MIT-licensed. The terms have the exact wording: continuity.
Questions
Why is there no balance column?
Can it send campaigns or a newsletter?
Does it connect to my till or take payments?
What stops two people redeeming the same points at once?
Is there a limit on customers or transactions?
What do I need to run it?
Is Loyalora a subscription?
Loyalty platforms charge per member or per order. How does this compare?
What exactly do I get for the money?
Can I get the points ledger out?
Covered in these guides
- What's new in Own It 3.3
- What's new in Own It 3.2
- The Front-Desk Suite: the counter nobody budgets for
- The Retail Suite: what a shop floor actually runs on
- Never Store a Loyalty Balance — Points as a Ledger You Can Replay
- What a Points Program Costs When You Rent It — and the Case Where Free Wins Outright
More about Loyalora
Self-hosted points register with a ledger you can replay: no stored balance, no order ceiling, no monthly fee.
The problem it solves
A loyalty scheme is judged in one moment: a customer at the counter says the balance is wrong, and somebody has to work out which number is true while a queue watches.
Hosted loyalty tools meter by how many orders your business takes, so the bill is indexed to your own growth for as long as you run the scheme. And most of them store a balance as a number, which is exactly the design that eventually stops agreeing with the history behind it.
- Monthly plans priced by order volume, rising as the business does well
- A customer list and a points ledger living in somebody else's account
- A stored balance that drifts from its own transaction history, silently
Every feature
- The customer card. One screen: the balance, the immutable history with a running total behind it, what that balance can be turned into right now, and how many points the next reward still needs.
- A balance is a SUM, never a stored number. SUM(points) over the ledger. There is no balance column and a test asserts the schema has not grown one, so no screen, export, PDF or API response can disagree with the history behind it.
- Entries are immutable. Nothing updates or deletes an entry. A mistake is corrected by writing an opposite entry with a reason, so the register can always answer why a balance is what it is by replaying itself.
- A redemption cannot spend the same points twice. The write transaction re-reads the balance inside the lock before it commits. Proven by racing six real operating-system processes at three redemptions worth of points, on both database engines: exactly three win, the balance lands on zero, never below.
- Points are earned, never typed. You enter what happened — the amount spent, the visit — and the program rate decides, in integer arithmetic that always rounds down. The counter, the API and the assistant take what happened — the amount spent, the visit — and the program rate decides the points. The one exception is a manager's adjustment, which carries a written reason on the ledger.
- Two program kinds over one ledger. Points per amount spent, or stamps per visit, with rewards priced in the same unit.
- A role ladder with the right gap in it. A clerk redeems; only a manager can create or destroy points by adjustment, because an adjustment is points minted from a typed reason. A register where anyone at the till can mint points is not one anyone can defend.
- Works for your AI, not just for you. A REST API with an OpenAPI spec, signed webhooks, and an MCP endpoint, all under the same key, roles and floor-at-zero guards as the counter.
- Points from the till. Your till sends each sale with the card code and Loyalora's own rate decides the points. A retried sale is never counted twice.
- Customers join from their own phone. Put the poster by the till; customers scan it, type their name and show their new card.
- VIP tiers. Regulars earn more: tiers by what they earned in the last 12 months, applied everywhere points are recorded.
- Bonus points by item. A coffee can earn more than a pastry, at the counter and from the till.
- Several shops, one balance. Every entry records its shop; the ledger filters and exports by shop.
- Refunds take the points back. Once, and never below zero.
- Redeem at the till. Your till sends the card code and the reward; the reward is redeemed if the balance covers it, a retried request redeems once, and a short balance says how many points are missing.
- Updates from inside the app. The Updates page installs a new release with your license key: Ownware's signature is checked, a backup is taken first, and the app puts the previous version back by itself if the update is interrupted or the database step or start-up check of the new version fails. It never checks by itself.
- Backups by themselves. Automatic backups, an optional copy to S3-compatible storage you own, and a weekly check that the latest backup reads back. The Health page names anything that needs attention.
- Own It 4.0.1 — fixes and an up-to-date manual. For Loyalora, 4.0.1 fixes an installer that had lost its styling, a rollback that a page opened during an update could stop and a command-line update that ended in an error after putting the previous version back. Its manual, FAQ and QUICKSTART now cover everything 4.0 added, including two Nginx rules that keep the data folder private. Your license covers it: press Check for updates on the Updates page, or download it from your order page.
- Own It 4.0.2 — the installer opens on every host. For Loyalora, 4.0.2 fixes a fresh install on an Apache host: the one-page setup at /install/ looped back to itself and never opened, and now it opens. Your license covers it: press Check for updates on the Updates page, or download it from your order page.
Release notes in full
- Own It 4.1: client installations and your other tools. For Loyalora, 4.1 makes two changes that every app gets. An Extended license bought from October 4, 2026 covers up to ten client installations, one per client project: hand each one over to the client or host it for them, with the client's logo and colors from the app's branding settings. The API reference now shows how to connect Loyalora to Zapier, Make or n8n, using its own webhooks and API key. Your license covers the update: press Check for updates on the Updates page, or download it from your order page.
- Own It 4.0: it updates and backs itself up. For Loyalora, 4.0 means updates from inside the app: the Updates page checks for a new release with your license key, verifies Ownware's signature, takes a backup and puts the previous version back by itself if the update is interrupted or the database step or start-up check of the new version fails. A new install can start with a sample business and remove it in one click; backups run by themselves, with an optional offsite copy and a weekly check that the latest one reads back; and the Health page says whether the install is looking after itself.
- Own It 3.3: rewards redeemed at the till. For Loyalora, 3.3 meant redeeming at the till: your till sends the card code and the reward, a retried request redeems once, and a short balance says how many points are missing. It is the card above.
- Own It 3.2: points straight from the till. For Loyalora, 3.2 meant points sent straight from your till, customers joining from their own phone (off until you switch it on), VIP tiers, bonus points by item, several shops on one balance, and refunds that take the points back. Every REST write now checks the key holder's role. Each change is a card above.
- Own It 3.1: it writes to the people you serve. Loyalora was built after the 3.1 wave. Its one outbound path is a customer's own balance, emailed to that customer when you press Email balance on their card — through your own SMTP, off until you switch it on. It sends no campaigns and no marketing of any kind.
Browse self-hosted: Front-office software