Changelog.
Track all updates, improvements, and fixes to Reward Loyalty v5.
💡 Always test updates in a test environment before updating production. See Staging Installation for setup instructions.
Version 5.4.0
June 22, 2026
New
Help & support for partners
Partners can now reach you without leaving the dashboard, and you answer right inside Reward Loyalty. A Help & support entry in the partner account menu opens a support centre with their past messages and a short form: pick a topic, add a subject, write the message. The partner's business, plan, language, time zone, and app version are attached for you, so you get the context to help without asking for it.
Every message, and every website contact-form message, lands in Support tickets in the admin. Open a ticket to read the thread, set its status and assignee, reply, or leave an internal note the sender never sees. Your reply is emailed to the sender and, for partner messages, shows up in their dashboard thread where they can reply back. Email here goes one way: the system sends messages out but does not receive email back. It works on every plan.
See Help & support for partners, and Support tickets for operators.
Improved
A clearer offline screen
When you open the app without a connection, the offline screen now matches the rest of the app and shows every kind of saved card in one searchable, filterable list: loyalty cards, stamp cards, vouchers, and prepaid passes. Tap any card to show its QR code full-screen at the counter. Point balances are easy to read, and the offline screen and the "you're offline" banner now appear in your language. Your staff get a matching screen when the counter drops offline, in their language too.
Official WooCommerce branding
The WooCommerce integration page now uses WooCommerce's official logo and brand purple, and every label on it names WooCommerce.
One consistent partner dashboard
Every partner page now opens the same way. My Plan, Invite businesses, and Help & support join the analytics, email campaigns, integrations, and batch pages with a shared header: a breadcrumb back to your dashboard, an icon, a clear title, a one-line subtitle, and the same comfortable page width. Forms and conversation threads step into a focused column but keep the same breadcrumb and header, so moving through the dashboard feels like one product.
Safer page titles
Text you or your partners enter, like a support subject or a loyalty card name, now shows as plain text wherever it appears. This closes a security gap where a crafted name could have run code in someone else's browser.
A reimagined email composer
Composing a campaign now feels like writing an email. The whole composer lives on one calm screen: a To line where you pick your audience and watch a live recipient count, a From line that shows how the email appears in members' inboxes, a subject line, and your message, with preview and send right there. There is no separate review step, because nothing is hidden: what you see is what sends.
Clearer campaign and referral metrics
The Email Campaigns list now opens with the same metric tiles as your analytics dashboards: total campaigns, recipients reached, delivered, and what is sending right now (which lights up only when a send is in flight). The Invite businesses page gains an activation rate tile, so you can see at a glance how many of the businesses you invited launched a program.
Filter transaction history by product
You can now filter the four transaction histories (loyalty points, stamps, voucher redemptions, and prepaid pass visits) to a specific card, voucher, or pass. Pick one (or several) from the Filters panel to focus the ledger before you read or export it. This works the same on the admin dashboard, where the histories span every business: there each option is labelled with the business that owns it, so two businesses' same-named products stay separate choices. See Data Export & Ledger History.
Lists remember where you were
Open a record to view or edit it and click Back to list, and you return to the page, page size, filters, sort, and search you left. Saving an edit keeps your place too. On lists that have no detail page (like Members), clicking a row no longer runs a surprise search that hid every other row. Now it does nothing.
Version 5.3.0
June 21, 2026
New
Invite businesses (partner referrals)
Enabled partners get a personal invite link to bring other businesses onto the platform. Share the link, and every business that signs up through it appears on your scoreboard as Joined, then Active once they launch a program. Rename your code to something memorable. The operator turns this on per partner, reads a platform-wide funnel with plan and paying status, and grants rewards by hand. It is a scoreboard, not a contract: no rights are derived from it, and there is no automatic commission.
See Invite businesses.
Remember a list's filters
Turn on Remember filters for this list in the Filters panel and your filters come back the next time you open that list. It is saved per person and per list, the web address still shows exactly what is filtered, and Clear all stops it.
See Data Export & Ledger History.
Improved
Refined data lists and record pages
Every dashboard list is now a polished data grid. The column header stays put as you scroll, and the actions column stays pinned in view behind a clear divider with its buttons centred. Rows carry quiet striping and lift on hover, and pagination floats in a tidy control at the foot. On phones each row stacks into a clean card with aligned labels, so wide histories never scroll sideways. Opening a record shows a redesigned page: a summary header with the record's image or avatar, then an easy-to-scan list of details where image previews sit left-aligned in a soft frame. Light and dark mode stay crisp throughout.
See Data Export & Ledger History.
Faster search across every list
Tap the search icon to open a focused search box. As you type, you see matching records, each with a headline value beside it (a transaction's points or a card's view count), so near-identical rows are easy to tell apart. Pick a result to open that record, or press Enter on your own text to filter the list. Filters open in a clean centred panel that fits any screen size. The Filters and Export buttons are now compact icons with tooltips and an active-filter count, so the page title stays in view.
See Data Export & Ledger History.
Clearer names and icons for the history lists
Each program's history list reads Transaction History in the sidebar, and the admin sees the platform-wide ledgers named by type, such as Point Transactions and Voucher Transactions. Each list now carries its own type icon in place of a single generic one, so they are easier to tell apart at a glance.
See Data Export & Ledger History.
Member tier on staff and admin lists
The tier column already on the partner Members list now appears on the staff and admin member lists too. Staff see the tiers in their own business, and admins see every active tier a member holds across all businesses.
See Membership Tiers.
A refreshed partner sign-up page
The page a new business sees when creating an account is now a calm, full-screen layout with no footer, the same style as the login page. The sign-up form sits on one side, and an interactive plan comparison fills the other. Step through the tiers to see the price and exactly what each plan includes before you create your account.
See Partner Registration.
Analytics pages rebuilt as dashboards
Open a loyalty card, stamp card, voucher, or prepaid pass and you land on a performance dashboard. A row of metric tiles leads with page views and its trend for the period, then the numbers that matter for that program, from points issued and redeemed to passes sold and visits used. Headline tiles carry a small trend line. A donut shows the split that counts, such as claimed against unclaimed rewards, or used against remaining voucher uses. The loyalty charts run the full width of the page, and the header always names the period you are viewing. The partner and admin Activity Log analytics use these same tiles, so every analytics page reads the same way.
See Loyalty Analytics and Prepaid Pass Analytics.
The latest activity on every card
Each card analytics page ends with a Recent Activity feed. It lists the most recent events for that card, who did what and when, with a link to the full history.
Analytics charts match your brand
Every analytics chart takes its colour from your brand, so a white-label site shows its own colours with no setup. Bar charts gained a dashed average line and value labels on shorter ranges, so totals and above-average periods are easy to read.
Fixed
Batch codes apply your template's eligibility rules
Generate a batch from a template limited to new members or to first voucher use, and every code in the batch now enforces that limit at the counter. Before, a batch dropped those rules and let anyone redeem. Tier restrictions stay off batch codes on purpose, because a batch goes out to a wide audience rather than one tier.
Language picker count reads right in every language
The language switcher built its count using English grammar, so other languages came out wrong (for example "4 taals" in Dutch). It now uses each language's own word, such as "4 talen" or "4 Sprachen".
Cleaner analytics bars
On some date ranges the bar charts drew tall, thin bars with tops so rounded they looked like half-pipes. The rounding is now small and even, so bars read as bars on every range.
Switching theme closes the account menu
The account menu at the bottom of the sidebar now closes after you switch between light and dark mode, instead of staying open.
Version 5.2.0
June 19, 2026
New
Tier-exclusive vouchers, delivered to the wallet
Restrict a voucher to membership tiers on its Targeting tab. Eligible members get it in My Cards with an email, it never shows in public browsing or on the homepage, and it stays theirs to use even after their tier changes.
See Advanced Targeting & Eligibility Rules.
Filter any list with the new Filters panel
Every management list has a Filters button next to Export. Stack conditions across event type, status, number, date, tier, plan and more, see them as removable chips, and export what you filter.
See Data Export & Ledger History.
See and filter members by tier
The Members list shows each member's tier, and you can filter to members who hold a specific tier.
See Membership Tiers.
Fixed
Stamps and prepaid-pass visits count as recent activity
The email "inactive members" audience, win-back and birthday rewards count a stamp, a voucher redemption or a prepaid-pass visit as activity, matching the member list, so a stamps-only or pass-only member keeps counting as active while they keep coming in.
See Win-Back Rewards and Email Campaigns.
Batch vouchers don't use up your voucher limit
A batch of codes, and the birthday and win-back copies, don't count against your plan's limit. Only your template vouchers count.
See My Plan.
Voucher redemption amounts show as money
The Discount, Purchase and Final columns on the voucher redemption history show your currency instead of raw minor units. Exports keep the precise value.
Table tooltips keep linked names separate
Hovering a cell with several linked items shows each name on its own, with its own tooltip.
Improved
Manage the vouchers in your wallet
Remove any voucher from My Cards, including ones delivered as a tier reward, and add it back later. When a voucher can't be redeemed you see a clear reason in place of the QR code, and Google Wallet follows the same rule.
See Adding Vouchers to My Cards.
"First voucher use only" voucher option
Limit a voucher to members who have never redeemed a voucher at your business. Regular purchases don't count.
See Advanced Targeting & Eligibility Rules.
My Plan shows your member usage
The My Plan page shows how many members have interacted with your business next to your plan's included allowance, so you can see when it's worth upgrading. Passing the allowance never blocks new members.
See My Plan.
Clearer analytics charts
Analytics bar charts show clean, even columns with well-spaced date labels across loyalty cards, vouchers, prepaid passes and stamp cards.
Cleaner demo banners
The demo-mode notice has a calmer look and shows across the member app, partner backend, staff dashboard and admin.
Configure plan limits and features from the environment
Operators can set any plan value, resource limits, feature flags, names or prices, from .env or the host environment with PLAN_<TIER>_<SETTING>, without editing the protected config/plans.php. They can also set a plan's name and description per language, so members see the right name in their own language.
See Billing.
Version 5.1.0
June 18, 2026
New
Member segmentation builder
Partners can now save a named audience and reuse it. A segment is a set of rules about how members behave: last visit, number of visits, amount spent, points balance, lifetime points, tier, prepaid-pass state, an unredeemed voucher, or a birthday this month, combined with AND. Build one under Member Segments: stack rules and watch a live count of matching members update as you go. A segment evaluates against the people who have interacted with your business, so it can never reach someone you could not already see.
Saved segments work in two places. On the member list, filter to a segment to see who it matches right now. In email campaigns, choose a saved segment as the audience instead of rebuilding the same rules each time. Counts update live, so a segment reflects today's members every time you open it.
Two config/plans.php keys gate the feature by plan:
'has_member_segments' => true, // plan includes the feature
'max_member_segments' => 10, // saved segments per partner, -1 = unlimited
Fresh installations ship with vouchers-style defaults: off and a limit of 0 on the free tier (Bronze), then on with limits of 3, 10, and unlimited on the paid tiers (Silver, Gold, Platinum).
Upgrade note: config/plans.php is a protected file, so updating keeps your plan configuration and does not add these keys. Existing installs keep working untouched: the feature stays off and the limit is 0 on every plan until you add them. Add both keys to each plan with the defaults above, or grant the feature per partner under Partners → Permissions without editing the file.
See Member Segments for the full guide.
Partner sign-up notifications
When a business finishes signing up and verifies its email, the platform now sends two emails. The new partner gets a warm welcome that points to their first setup steps and links to their dashboard. You, the operator, get a notification with the new business's details and a link to it in the admin, so you can follow up with a personal welcome.
Turn each one on or off under Settings → Onboarding: "Email me when a partner signs up" and "Send new partners a welcome email" both default to on. The notification goes to your APP_ADMIN_EMAIL, or the main admin address when that is not set. Demo installs send neither.
See Partner Registration and System Settings.
Prepaid passes on the API
Prepaid passes now work through both the Agent API and the REST API, alongside loyalty cards, stamp cards, and vouchers. Partner integrations create and manage pass products and run the whole counter flow: sell a pass to a member, scan one or more visits, undo the last visit, and look up the passes a member holds. Members read the passes they hold and each pass's history through their own key. Access uses a dedicated passes permission, the per-plan pass limit, and a write:passes scope on the Agent API, and the published tool definitions and API specs list the new operations so integrations find them.
See the Agent API and REST API reference.
Prepaid pass visit history
Every prepaid pass now has its own visit history, opened from the member list. It shows the pass as a card above a timeline of each visit, correction, and expiry, matching the other history pages. Staff get one overview page where they record a visit and, after a miscount, delete the most recent visit to hand it back to the member. Partners and admins get the same history and Delete last visit for oversight, without having to be the staff member who served that visit. Removing a visit posts its own ledger entry, so the history always shows what happened.
See Selling and Scanning for the visit flow.
A clearer member list
The partner member list shows a member's loyalty cards, stamp cards, and vouchers as compact pills you can click, with the full name on hover. A new Prepaid Passes column shows the passes a member holds with you, and each pill opens that pass's visit history. Columns for a program you do not run stay hidden.
Choose active languages from .env
You can now set which languages are active in one place. List the locales you want in a single APP_ACTIVE_LOCALES environment variable, instead of editing a file in each language folder. Only the listed languages appear in the language selector, in locale URLs, and in browser and cookie detection. That covers the member, partner, staff, and admin areas, the Agent API, and the WooCommerce customer-email language. While it is set, it overrides each language's own config.php flag, and because it lives in .env your choice survives every update.
APP_ACTIVE_LOCALES="en_US,nl_NL"
Leave it empty to keep the previous behavior, where each lang/<locale>/config.php decides with its own active flag. Matching is forgiving: en-us and en_US count as the same, and demo installs still show every language.
Upgrade note: Optional and backward-compatible. Installs that do not set APP_ACTIVE_LOCALES keep working as before. To switch to the new approach, add the variable to your .env with the locales you want active, and include your APP_LOCALE in the list. See Languages & Translations.
More phone country codes
The phone number picker now covers France's overseas departments: Guadeloupe (+590), Martinique (+596), French Guiana (+594), Réunion (+262), and Mayotte (+262), each with its own flag and local name, so members in those regions can enter their number with the right code.
Fixed
Member sign-in stays on the member side
Signing in as a member no longer drops you on the staff login page. You stay in the member area and return to the page you came from. The same fix covers one-time code sign-in for every account type.
Staff stamp and voucher API operations
Staff stamp and voucher API operations now check the staff member against their assigned club, fixing a server error when adding stamps or redeeming a voucher through the API.
Cursor on a card's own page
The cursor no longer shows a clickable hand on a card's own page when there is nothing to tap. Card lists keep the pointer, since tapping there opens the card's page.
Has Voucher email campaign audience
The Has Voucher audience now works. Targeting holders of a specific voucher no longer returns a server error, and the audience correctly lists members who hold that voucher unredeemed.
Prepaid-pass-only members in email audiences
Email campaign audiences now include members whose only connection to a business is a prepaid pass. These members were previously missing from every audience despite appearing on the member list. They now count toward All members and derived audiences.
Voucher access for the staff who redeemed it
Opening a voucher from the member list no longer shows an access error for the staff member who handled the redemption, even when the voucher belongs to another club. Vouchers they had no part in stay protected.
Read-only cards on history and analytics pages
Read-only cards on history and analytics pages no longer look clickable. They sit still on hover with a normal cursor, in dark mode too. Cards that link to a page keep their full hover.
Prepaid-pass product page card width
The prepaid-pass product page shows its card at the same width as the owned pass page, so a pass looks the same before and after a member buys it.
Version 5.0.0
June 16, 2026
The upgrade guide covers moving a Reward Loyalty 4 install onto 5.
New
Prepaid passes
A fourth program type beside points, stamps, and vouchers: passes your staff sell at the counter. A product sets a visit count (a 10-wash card) or unlimited visits within a 1 to 366 day window (a monthly unlimited), plus a price and your usual card design. The customer pays at your till; the platform records the price for receipts and reports.
- Selling. One scan-and-confirm flow from the customer's screen, price prefilled. New customers need no lookup: pick the pass, confirm the price, and show a single-use code to scan. A printable product QR opens a public page where members get a "Buy at the counter" code.
- Using. Staff scan the pass and tick off visits, with one-tap undo. The wallet gains a "Your Passes" section with the remaining count, a history page, a branded email receipt, an expiry reminder, and an optional Add to Google Wallet button that stays current. A sold pass snapshots the product, so later edits never change what a member paid for.
- Insight. Each product gets an Analytics page (views, passes sold with revenue, visits used, active and expired) and an exportable Transaction History. Passes show up in the partner dashboard, plan usage, and the admin ledgers.
A daily task closes lapsed passes and sends reminders, running with cron, on portal traffic without cron, or by hand from Health Center. It is plan-gated like vouchers and ships in all twelve languages, with additive migrations only.
Upgrade note: config/plans.php is a protected file, so the update keeps your plan config and does not add the new has_prepaid_passes / max_prepaid_passes keys. The feature stays off until you enable it: add the two keys, or grant it per partner under Partners → Permissions. Upgrading From an Earlier Version shows the exact lines.
See Prepaid Passes for details.
Public Listing homepage
A fourth homepage layout for operators whose product is a place—shopping districts, malls, associations. It presents every published program (loyalty cards, stamp cards, vouchers, and prepaid passes) in one dense directory with autocomplete search, type filters, and results that load as you scroll. Programs sort by Newest (the default), Ending soon (by each program's end date, with evergreen prepaid passes last), or Name (A–Z). It shows only what the existing homepage permission already publishes, so businesses stay isolated. When this layout is active, newly self-registered partners get homepage publishing enabled so they can publish their own programs right away; existing partners are never changed, and admins can override the permission per partner. Choose it under Settings → Homepage.
See Homepage Layout for details.
Install the staff dashboard (PWA)
The staff counter dashboard now installs to a phone or tablet like an app. Staff add it to the home screen and it launches full screen with its own Staff icon — separate from the customer app — so the address bar is out of the scanner's way and the scan, issue, and redeem screens load instantly all shift.
- Faster. The app shell and the QR scanner are cached, so moving between screens is instant and the scanner does not re-download each time.
- Steadier. Lose signal mid-shift and a staff reconnect screen takes over, refreshing itself the moment the connection returns, in place of the browser's error page.
- Honest about limits. Issuing stamps, selling passes, and redeeming rewards still need a connection — every action is recorded on the server. The install makes the dashboard quicker and more resilient; it does not record sales offline.
The customer app's own installable experience is unchanged. See Staff Operations for how to install.
WooCommerce integration (early access)
Connect a WooCommerce store to a loyalty card so every order earns points through that card's rules, on the same balance customers collect at your counter. No WordPress plugin: paste the store URL and a REST API key pair, and the platform verifies them and registers the webhook itself. A read-only key still connects, with copy-paste steps for adding the webhook by hand.
- Earning. Orders award points on "processing" (right after payment, the default) or only on "completed", switchable per store. A new billing email gets a loyalty account and a welcome; existing members get points and a notification. Welcome bonus on the first order, refunds reverse points, and a status change never awards twice.
- Redeeming. A balance turns into single-use store coupons. Set the rate, a minimum, an optional cap, and the coupon lifetime, with a live preview. Members redeem from their card page and paste a code tied to their email at checkout; partners can redeem for phone orders.
- Operating. The Overview tab shows webhook status, the last webhook time, and 24-hour processed and failed counts with a hint for the latest failure. Disconnecting removes the webhook and deletes the stored keys.
It stays off until FEATURE_WOOCOMMERCE=true, in all twelve languages.
See WooCommerce for setup and details.
Win-back rewards
Pick one of your vouchers as the win-back gift and choose how many days of silence trigger it (14 to 180, default 60). Members who stop visiting receive a personal, single-use copy in their wallet plus a "we miss you" email branded with your business name. A visit means checkout activity, not a login. Each member gets at most one per absence and qualifies again only after a real visit and a fresh lapse. The sweep skips anyone more than 90 days past the threshold, so turning it on never blasts long-gone members, and it works through large clubs in batches.
The daily run works on any hosting, like the birthday reward: with cron it runs on schedule, and without cron normal portal activity triggers it. Administrators can run it from Health Center → Scheduled tasks, which now lists all three daily tasks. The demo includes a lapsed member whose wallet shows the win-back moment.
See Win-Back Rewards for details.
Dutch language (nl_NL)
Dutch joins as the twelfth language, covering the dashboards, member pages, emails, the installer, and the legal pages. It uses the informal je-vorm and the words Dutch customers know: spaarkaart, stempelkaart, voucher, and strippenkaart for prepaid passes. The demo ships Dutch content too. Set 'active' => true in lang/nl_NL/config.php to show it in the selector.
Birthday hint on the member profile
The birthday field on the member profile now says why it is worth filling in: when a business the member visits offers a birthday reward, the field mentions a gift may be waiting on their day. With one qualifying business the hint names it; with none, the field stays plain. It never points to a business the member does not already know.
Guests land on the login page, not an error
Opening a member page like My Cards while signed out now sends you to the member login and returns you to that page afterward, in place of an access denied screen.
Improved
Consistent card styling across the member wallet
Every card a member holds now looks and behaves the same. They share one layout: the name and key number up top, the description through the middle at a comfortable reading width, and the dates and details along the bottom. Loyalty cards, stamp cards, vouchers, and prepaid passes share one hover shimmer and a soft top-edge highlight that rests between sweeps. On a card's own page, a card with nothing to open stays still while one that still links keeps its hover, and the prepaid pass page matches the others with its Add to Google Wallet button below the details tabs.
Clickable analytics cards and a calmer partner backend
On the Prepaid Passes analytics overview, the whole product card opens its analytics, matching the loyalty, stamp, and voucher overviews. Archived products stay in the list but no longer respond to a click. Across the backend, a card lifts only when there is something to open: a small lift and the hand cursor when it links, flat when it does not.
Plan overview on the billing page
The partner My Plan page opens with a quick summary: the features switched on out of the total, the highest resource usage as a percentage, and how many limits run unlimited. The usage figure turns amber once any limit reaches 80%.
Redesigned platform overview for administrators
The SaaS Overview trades its status table for a donut chart, with each subscription status sized to its share and the partner total in the center. A two-row layout pairs status with the plan mix, and the attention queue with recent registrations. When nothing needs attention, the panel reads as a calm all-clear. The colors follow the app palette and switch with light and dark mode.
Clearer activity log analytics
The activity log analytics dashboards are easier to read. The activity timeline now plots on a real date axis: instead of a cramped row of every day's label turned on its side, it shows a handful of evenly spaced dates with a muted week or month rhythm behind the trend — a dot on each day for short ranges, week lines through a month, month lines across a year. On the administrator dashboard the breakdown rings are larger, so the total in the center sits comfortably even when platform-wide counts run high; the partner view keeps its size. Both adapt across the seven-day to one-year ranges and follow light and dark mode.
A sidebar that adjusts to you
The left navigation collapses to a slim rail of icons to widen your work area. Hover an icon for its label, or open a section to see its pages in a small menu beside the rail. Drag the right edge to set any width, and double-click it to reset. The platform remembers your choice, collapsed or expanded and at the width you chose, and keeps the current section highlighted even when collapsed. Available across the administrator, partner, and staff dashboards.
Clearer, roomier data pages
List and form pages now use the screen with more intent. Tables run the full width, so more columns stay visible without cramped or cut-off text, while create and edit forms sit in a calmer reading column so a field no longer stretches across a wide monitor. The getting-started guide above some lists, such as Agent Keys and Tiers, is now a quieter card with more room and clearer steps; you can still hide it.
Prepaid passes on the homepage, and visibility honors the business permission as it renders
Prepaid passes can now appear on the member homepage alongside cards, vouchers, and stamp cards—set "Visible on homepage" on the pass, the same toggle the other programs use. All four types appear only while the owning business still holds homepage permission: the check runs as the page loads, so removing it—through a plan change or an admin toggle—hides that business's items right away, without touching the per-item settings.
Faster member pages, with a navigation cue
Member detail pages open quickly now. Counting a page view no longer starts a chain of background work and a live wallet-sync call, so a page that used to take about a second feels immediate. Moving between member pages shows an instant top progress bar, and a program's detail page is fetched the moment a visitor hovers or focuses its link, so it is often ready before the click. These prefetches never change a program's view count.
Breadcrumbs on member detail pages
Loyalty cards, vouchers, stamp cards, prepaid passes, and pass templates now carry a short breadcrumb: a home icon back to the homepage, then the current item, so a visitor always knows where they are. A reward keeps its direct back-to-card link, and staff selling a prepaid pass can step back to the pass picker from the price and confirmation screens.
Rewritten legal pages, and a working contact form
The Privacy Policy, Terms of Service, About, and Contact pages ship with copy an operator can publish as-is. They use neutral "this website" wording in place of a brand name, so they read correctly on a single business or a multi-business install. The privacy and terms text matches how the platform actually works — passwordless login, the data it stores, and the in-account tools to download your data, delete your account, or leave one business.
The Contact page now carries a real contact form — name, email, a subject chosen from a fixed list, and message — protected by CSRF, server-side validation, a per-IP rate limit, and a honeypot. Messages go to the system owner: the admin email captured during installation, or APP_ADMIN_EMAIL if you set that override — with the sender as reply-to, so a plain reply reaches them. It is never sent to MAIL_FROM_ADDRESS (an outbound, from address). If no real owner address is available yet, submissions are written to storage/logs/laravel.log instead, so nothing is lost. The privacy, terms, and contact copy now point people to the form and to the in-account privacy tools. The FAQ grows to 26 questions spanning earning, redeeming, passes, tiers, privacy, and getting back into an account. This content ships in all twelve supported languages; the Privacy and Terms translations are machine-assisted, so a native or legal review is recommended before go-live.
Businesses shown by their own name
Members and administrators now see the business name where the account owner's personal name used to appear. Google Wallet passes carry the business as the issuer. Card and stamp search results label each result with the business that runs it, and the privacy page lists the businesses a member belongs to by name. Administrators see the business in the Partner column of the transaction and redemption reports, including their CSV exports.
Member-entered text escaped in management tables
Some computed columns in the partner and admin tables (member, card, and staff names fetched through lookups) skipped the central escaping step, so text a customer entered could reach the page unescaped. Those names render as plain text now, in every partner and admin table, the way every other column already behaved. The one computed column that builds its own control, the point-request share button, keeps doing that on purpose.
Changed
Activate with one Reward Loyalty license key
Reward Loyalty 5 activates with a single license key in the format RL-XXXX-XXXX-XXXX-XXXX. The app verifies the key with the license server, stores the key, status, and support date encrypted on your install, and uses the returned token for update checks. One flow now covers every customer, in place of the earlier marketplace and provider-specific paths. See Why the Price Changed for the licensing model and the upgrade guide for moving a Reward Loyalty 4 install onto 5.
Fixed
Shopify integration management and storefront redemption
The five Shopify management actions (view details, update settings, pause, resume, and disconnect) answered every request with a not-found error from the day the integration shipped. They work now. The storefront widget redeems rewards from the reward catalog again, and the platform checks each redemption against the loyalty card that belongs to the connected store, so a reward from another business cannot be redeemed through it, even with a tampered request. We removed the defunct reward-mappings endpoint; reward discount settings live on the reward itself and are edited from the normal reward screens.
Shared text restored on several screens
The ghost-member purge screen reused three translation keys that already held different text, and its definitions replaced the originals everywhere they appeared. The voucher batch-delete confirmation, the admin and partner member counters, the staff card view, and the partner card form show their intended wording again, in every language. The purge screen keeps its own text under dedicated keys.
Greeting spacing on member pages
The welcome greeting on the member pages showed a stray space before the comma. It is gone now.
Earlier releases: Reward Loyalty 4 changelog and Reward Loyalty 3 changelog.