Run the front officev4.1.1

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

Try the live demoNo sign-up. The demo resets itself, so click anything.

What it does

Points from the till

Your till sends each sale with the card code, and your program's rate decides the points. A retried sale is never counted twice.

Redeem at the till

The till sends the card code and the reward; it is redeemed if the balance covers it. A retried request redeems once.

Balances you can replay

A balance is the sum of the ledger, never a stored number. Entries are never edited; a mistake is corrected with an opposite entry.

No points spent twice

A redemption re-reads the balance inside the lock before committing, so points cannot be spent twice.

Customers join by phone

Put the poster by the till. Customers scan it, type their name and show their new card.

VIP tiers

Regulars earn more, with tiers set by what each customer earned in the last 12 months.

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, and the ledger filters and exports by shop.

Refunds take points back

A refund removes the points it earned, once, and never takes a balance below zero.

The customer card

One screen shows the balance and its history. It also shows what it buys now and what the next reward needs.

Points or stamps

Points per amount spent or stamps per visit, over one ledger, with rewards priced in the same unit.

Roles at the counter

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.

Is it right for you?

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

Smile.ioEssential $15 per month (Standard $79/mo, Growth $199/mo, Plus $999/mo annual, Enterprise on request); a free tier covers 200 monthly orders

4 months of Smile.io costs what Loyalora costs once.

Read Sep 3, 2026 · source
LoyaltyLionClassic $199/month, including 500 orders per month; Advanced and Plus are quote-only

1 month of LoyaltyLion costs what Loyalora costs once.

Read Sep 3, 2026 · source

The 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

Own It 4.1Client installations and your other toolsOct 4, 2026

For Loyalora, 4.1 makes two changes that every app gets. What’s new in 4.1 →

Own It 4.0It updates and backs itself upSep 29, 2026

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 →

Own It 3.3Rewards redeemed at the tillSep 27, 2026

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 →

Own It 3.2Points straight from the tillSep 26, 2026

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…

Own It 3.1It writes to the people you serveAug 20, 2026

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.

Single license$59
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 license
  • No reselling, redistributing or sublicensing the source
  • Not for offering it to other people as a hosted service
Buy the Single license, $59
Extended license$129
Unlimited sites you own or operate, plus up to 10 client installations (white-label included) · Agencies, and anyone running it on more than one site.
  • 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
Buy the Extended license, $129

Every download carries the full terms as LICENSE.txt. The complete wording is on the terms page.

After you buy

Updates

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.

Help

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

If it isn’t right

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

If we disappear

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?
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's own balance, to that customer, when you press Email balance on their card after switching 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?
It holds no card numbers and processes no payments. Your till can send each sale through the API, once per sale, and Loyalora's own rate decides the points; a refund takes them back. It integrates with no e-commerce platform.
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.1+ with PDO and MySQL/MariaDB or SQLite, on any Apache, nginx or Caddy host. No Composer, no build step, no data leaving your server.
Is Loyalora a subscription?
You buy it once and own that copy. There is no subscription, no per-user fee and nothing that renews — the license tier decides how many sites you may run it on, not how many people use it. The product page says it plainly: no monthly fee, no order ceiling, no stored balance to be rate-limited.
Loyalty platforms charge per member or per order. How does this compare?
Neither is metered here. The points are a replayable ledger rather than a stored balance, so there is no number to be capped. It is not a marketing suite — it does not send campaigns. Our terms only.
What exactly do I get for the money?
The download is the complete PHP source with the database schema. Read it, change it, keep it. If we vanished tomorrow the copy on your server keeps working, because nothing in it phones home to us.
Can I get the points ledger out?
Yes. Customers and the ledger each export as CSV, plus a CSV audit trail. Because the balance is derived from the ledger rather than stored, the export is the whole truth of it.
Better together
Retail Suite: Vendra, Restock, Tokora, Warrantora and Loyalora
POS with inventory, reorder forecasting, and a queue/token display — the front of a shop, self-hosted.
5 tools for$209
$355 separatelySave $146
Better together
Front-Desk Suite: Visitora, Membora, Helpora and Loyalora
Sign-in, membership, loyalty and the request queue — the counter where an organization meets everyone it deals with, bought once.
4 tools for$159
$266 separatelySave $107

Covered in these guides

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

Loyalora$59 once
Demo Buy