LoyaloraSelf-Hosted Loyalty & Rewards Register: Points, Rewards, Redemptions
Self-hosted points register with a ledger you can replay: no stored balance, no order ceiling, no monthly fee.
No sign-up, no password — the demo opens already signed in, on sample data.
- Full PHP source included
- Instant download + licence key
- It never phones home
- Compare vs SaaS pricing →
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
What you get
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.
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.
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.
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.
You enter what happened — the amount spent, the visit — and the programme rate decides, in integer arithmetic that always rounds down. No screen, endpoint or assistant tool accepts a points figure directly.
Points per amount spent, or stamps per visit, with rewards priced in the same unit.
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.
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.
- Roles with email invitations and a last-admin guard
- Two-factor sign-in with recovery codes
- Append-only audit trail across browser, API and agent
- CSV import with a mandatory dry run
- Backup and restore with a diff
- Optional single sign-on (OIDC)
- Installable to a phone home screen
The 3.1 wave gave the catalogue a way to reach the other side of the transaction: counterparty email through your own SMTP server, calendar feeds your own calendar subscribes to, attachments filed where the paperwork belongs, and export presets other people's software imports. Every outbound path ships switched off, runs on your own credentials, and can never break the thing that triggered it. This app gained no new outbound path in 3.1 — its pass rewrote the honest-limitations list against the shipped code instead, which is the more useful change when the product was already complete.
See it running — right now, on sample data
No sign-up, no password — it opens already signed in, and resets itself. Click around freely.
Open the live demoIs Loyalora right for you?
Before the price, not after it: what Loyalora deliberately does not do. We publish this on every product because the wrong purchase costs you more than the price.
- 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, no till integration, no e-commerce or storefront widget — points are recorded, not awarded automatically from a sale
- Holds no card numbers and processes no payments
- No tiers or VIP levels in 1.0 — one programme, one earning rate, a reward catalogue
- One business per installation
Still the right fit? See the price → · Not sure — see who should stay with the SaaS →
Pricing — one-time, yours forever
- ✔ Full source included — PHP you can read and change
- ✔ No subscription. One payment, yours forever
- ✔ It never phones home
- ✔ Your data stays on your server
- ✔ 14-day refunds — we’d rather refund than argue
- ✔ Offline test suite in the box — run it before you rely on it
- ✔ If we ever stop: after 1 year the domain limit lifts, after 3 years your copy relicenses to MIT — it’s in the licence
Not ready to own it? Ownware Cloud runs selected apps from $12/month — and after 12 paid months the perpetual self-host licence is yours.
Read before you buy — what the zip looks like inside
loyalora/
README.md · QUICKSTART.txt · LICENSE.txt
app/
index.php · router.php · config.sample.php · Dockerfile
src/ the classes — plain PHP 8, no framework, no Composer
controllers/ every route handler
views/ every screen
tests/ the offline test suite — run it yourself: php tests/run.php
bin/ packaging · seeding · maintenance scripts
API.md the REST + webhook + MCP reference
Nothing is obfuscated or encoded. What you read is what runs.
What the same job costs rented
Every figure is read from the vendor’s own pricing page and carries the date it was read.
Essential $15 per month (Standard $79/mo, Growth $199/mo, Plus $999/mo annual); a free tier covers 200 monthly orders
4 months of Smile.io equals the one-time $59.00.
Source, read 2026-08-22 →Classic $199/month, including 500 orders per month
1 month of LoyaltyLion equals the one-time $59.00.
Source, read 2026-08-22 →The full table — every competitor, what each does better than us, and who should stay with them: Loyalora vs renting →
Which licence do I need?
It comes down to how many installations you need. Running your own business on one site is the Single licence. Building or running sites for other people — a second domain of your own, or an installation a client keeps — is the Extended licence.
Single licence
One (1) domain or subdomain
One business, running it on one site.
- 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 licence
- No reselling, redistributing or sublicensing the source
- Not for offering it to other people as a hosted service
Extended licence
Unlimited sites you own or operate
Agencies, and anyone running it on more than one site.
- Everything the Single licence grants
- Install it on as many domains as you own or operate — no cap on the number
- Build and hand over one installation per client project
- 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, and the licence you bought is
named on your order and in your buyer portal. The complete wording lives on the
terms page, and the live demo is free for as long
as it takes to decide.
No reviews yet — so here is what we offer instead. Every competitor price on our comparison pages is source-linked and dated, and when a vendor’s price won’t load we say so rather than guess. See the sources for yourself →
After you buy
The four things people ask right before they decide.
Your download link always serves the current build at the time you fetch it — re-download any time from your order page or the buyer portal. No renewal fee to keep what you bought.
Email support for installation and for defects in the code as delivered — a person answers, usually within a day or two. 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 — if something is broken and we can’t fix it, we’d rather refund than argue. EU consumers additionally hold the statutory 14-day right until delivery starts. Refund terms →
Nothing stops. You hold the full PHP source, it runs on your own server, and the software does not phone home — there is no licence check that can fail and no cloud that can be switched off. LICENSE.txt ships inside the zip, so your right to keep running it never depended on this site existing.
Covered in these guides
The obvious way to build a points system is a balance column you add to and subtract from. It is also the way to build one that eventually disagrees with its own history and cannot explain itself to the customer disputing it. The alternative, and the race condition that decides it.
Smile.io, LoyaltyLion, Loyverse and Square Loyalty, quoted from their own pages on 22 August 2026, with the monthly figures multiplied out over three years. One of the four gives the loyalty program away, and we say so plainly.
Questions about Loyalora
Why is there no balance column?
Because a stored total is a second source of truth, and it starts lying the first time anything fails between writing the entry and updating the total. The balance is SUM(points) over the ledger, so the number and its explanation are the same object.
Can it send campaigns or a newsletter?
No, and it is not going to. There are no campaigns, no lists, no segments and no send-to-all. The only message it produces is one customer own balance, to that customer, if you switch it on. A test greps the whole product for a mail-in-a-loop and for campaign, broadcast, bulk-send and segment symbols.
Does it connect to my till or take payments?
No. It holds no card numbers, processes no payments and integrates with no point-of-sale or e-commerce platform. It records what you tell it a customer earned and spent.
What stops two people redeeming the same points at once?
The redemption opens a write transaction and re-reads the balance inside the lock before committing. Checking first and writing after loses that race silently; this does not, on SQLite and on MySQL/MariaDB alike.
Is there a limit on customers or transactions?
None in the software. It is bought once, with no order ceiling, no tier ladder and no per-store meter.
What do I need to run it?
PHP 8.0+ with PDO and MySQL/MariaDB or SQLite, on any Apache, nginx or Caddy host. No Composer, no build step, no data leaving your server.
