Changelog

Follow new updates and improvements to Carrott.

April 28th, 2026

🌟 Membership Cards (Beta)

We've launched a brand-new card type alongside Stamp and Points cards: Membership Cards. This is a major addition that lets businesses run paid or invite-only loyalty programs with recurring billing. Ask support to enable this for your account!

What you can do now:

  • Build tiered memberships with the new card builder β€” define benefits, pricing, and access modes

  • Charge subscriptions through Stripe Connect (monthly or yearly), with promo codes supported at checkout

  • Run invite-only programs β€” customers join in an "awaiting approval" state, and admins can approve or deny from the dashboard

  • Free, paid, and mixed tiers all supported in the same card

  • Customers manage their own billing via a tappable "Manage Billing" link directly on their wallet pass, opening Stripe's Customer Portal where they can switch tiers, change billing intervals, or cancel

  • Active members can re-download their wallet pass at any time without re-paying

For staff:

  • New scanner experience for memberships β€” benefits are the primary action, with swipe-to-confirm to prevent accidental taps, plus a subscription details accordion

  • Auto-logged visits when a membership card is scanned β€” no manual logging required

New "Subscriptions" admin page with full subscriber list, filtering, and a detail drawer that reads live data from Stripe (billing info, activity timeline, "Manage in Stripe" shortcut)


🎯 New: Visit-Based Earning on Points Cards

Points cards now support earning per visit, not just per spend. Useful for "10 points per visit" style programs. Includes:

  • Swipe-to-confirm flow on the scanner for visit earns

  • Optional transaction amount input when scanner settings require it

  • Daily limits enforcement


πŸ” Customer Insights

The customer list and customer drawer have been redesigned with new at-a-glance metrics:

  • Balance, visits, and lifetime value (LTV) now surfaced directly in the customer list

  • Activity timeline in the customer drawer showing recent events

  • New dashboard filter for slicing customer insights by template

  • More accurate "Last Visit" β€” admin actions and membership lifecycle events no longer count as visits

πŸ›‘οΈ Anti-Abuse: Cloudflare Turnstile on Join Forms

Join pages are now protected from bot signups via Cloudflare Turnstile. The widget only appears when interaction is actually required, keeping the form clean for real customers. Form submissions are guarded against double-clicks and stale tokens.


🎨 Join Page Polish

  • Redesigned Open Graph (social share) image with a refreshed look when join links are shared on social media


🌐 Custom Domain Support: joinpass.co

Join links now use the joinpass.co short-domain for a cleaner, more shareable customer experience. Standardized across Stripe checkout return URLs, short-link resolver, and dashboard "copy link" UI.


πŸ—οΈ Card Builder Improvements

  • Duplicate any membership tier with a single click in the builder

  • Earning rules now scoped to applicable card types (no more confusing irrelevant options)

  • Stripe pricing health checks β€” the builder now flags out-of-sync prices and offers a resync action for paid memberships, with a clearer "Verifying…" state that no longer gets stuck

  • Red tab indicator when membership tier/pricing has validation errors

  • Hardened pricing input normalization


πŸ’³ Stripe / Billing

  • Stripe Connect now works on platform-direct subaccounts (previously only available via agencies)

  • "Manage Billing in Stripe" button now appears for platform-direct subaccounts

  • Mobile billing portal navigation fixed β€” opens correctly on phones now

  • Wallet pass billing link β€” customers can tap a link on their pass to manage their subscription

  • Stripe Customer Portal configured for tier switching and billing interval changes


πŸ” Auth Improvements

  • Password reset failures now surface clearly to the user instead of failing silently

  • Auth emails (verification, reset) are scheduled reliably


March 31st, 2026

The Scanner app is now available as a native app on both platforms:

πŸ“± App Store (iOS) πŸ€– Google Play (Android)

The native app gives you the best experience β€” faster scanning, push notifications, and reliable offline support.

Already using the PWA? The native app uses the same login β€” just download, sign in, and you're good to go.

March 30th, 2026

πŸ“Š Dashboard Analytics Fix

  • Fixed an issue where points card activity wasn't showing up on the dashboard β€” visits, redemptions, and repeat visit rates now track correctly across all card types

  • The Top 10 Customers table now shows Visits, Spend, and Redemptions for a cleaner, card-type-agnostic view

πŸ“± Scanner App

  • Fixed a crash that could occur on startup β€” the scanner is now more resilient and recovers gracefully

  • Improved camera permission prompts for a smoother first-time setup

🎨 Card Builder

  • Stamp grids now balance rows evenly β€” 8 stamps show as 4+4 instead of 5+3, and similar improvements for other stamp counts

🧹 Under the Hood

  • Cleaned up deprecated database fields for a leaner, faster backend

  • Fixed several small UI bugs: number input validation, terms checkbox errors, and OTP race conditions

  • Performance improvements: preloaded fonts, edge rendering, and reduced skeleton flicker

March 17th, 2026

Faster join page β€” The page where customers sign up for loyalty cards has been completely rebuilt. It now loads 7x faster and works instantly on any device, with no blank screen while loading.

March 16th, 2026

You can now set rules that control how customers earn stamps and points. These are configured per card template and apply automatically when staff scan a customer's card.

  • Minimum spend β€” Require a minimum purchase amount before a customer can earn. For example, set a $10 minimum so small purchases don't count toward rewards.

  • Daily limit β€” Cap how many times a customer can earn per day. Useful for preventing misuse or repeat visits from stacking up too quickly.

  • Max per scan β€” Limit the maximum stamps or points a customer can receive in a single transaction.

  • Coupon cooldown β€” After a customer redeems a coupon, you can set a waiting period before they can earn again. Staff will see a clear message showing how much time is left.

When a rule is triggered, the scanner shows a plain-language explanation to your staff so they know exactly why a transaction was limited or blocked.

Bug Fixes

  • Fixed an issue where the transaction history screen could freeze or become unresponsive.

  • Fixed a case where the minimum spend rule wasn't being applied correctly for certain coupon types.

  • Various stability improvements to the scanner experience.

March 14th, 2026

Bug Fixes

  • Tier limit validation hotfix: fixed edit mode silently converting unlimited (null) to default numbers, and tier limit fields sending empty strings instead of null

  • Fixed totalCards and totalWalletInstalls to respect the template filter on the customers page

  • Removed default active status filter on customers route

  • Fixed pagination bug and maxUses falsy check (0 was being treated as falsy)

  • Fixed web app references to renamed cardName field in customer search

Performance

  • Refactored getCustomers with parallel queries, single-pass card loop, and shared utils

March 9th, 2026

Smoother CSV Imports

We’ve overhauled the import process to make sure your data gets where it needs to go without the guesswork.

  • Auto-Create Customer Cards: If you’re importing customers who don't have a card yet, the system will now automatically create one for them. No more "silent" data loss.

  • Smart Validation: The importer now checks if your templates are active and alerts you if the data types don't match (e.g., trying to put text into a number field).

  • Negative Value Protection: Imported values are now "clamped" to prevent accidental negative balances.

  • Helpful Hints: We’ve added an info alert inside the import modal to explain exactly how the system handles your data.

Accurate Dashboard Stats

Your data should give you the full picture, not just a snapshot.

  • Real "Cards Issued" Counts: This stat now reflects your entire filtered list of customers, rather than just the people on the first page.

  • Global "Wallet Install" Rates: Like the card stats, your install rate now calculates across your entire customer base for much more accurate reporting.

Bug Fixes & Improvements

  • Subaccount Fix: Resolved an issue where the template selector would appear empty for newly created subaccounts.

  • Improved Column Detection: Fixed a logic error to ensure the system correctly identifies card data, even if the values are zero or empty.

March 7th, 2026

Public API (Beta, Message Support for Access)

  • Public REST API for programmatic access to your loyalty platform

    • Manage customers, cards, and transactions via API

    • Earn points, add stamps, and redeem rewards programmatically

    • Built-in rate limiting, idempotency keys, and comprehensive error handling

    • OpenAPI documentation included

    • Wallet pass generation endpoint for Apple & Google Wallet

    • Feature flag controlled per tier β€” enable via your plan settings

Billing & Plans

  • Agency admins can now access the billing page and generate payment links

  • Tier edits now cascade feature/limit changes to all subscribed subaccounts

  • Confirmation dialog when editing tiers that affect active subscriptions

  • Fixed a race condition when switching between subscription and manual billing modes

  • Fixed billing mode switch not detecting changes to expiry date or custom pricing

  • Hardened webhook handling against race conditions and duplicate events

Card Builder

  • Card type options no longer flash briefly when creating a new card

  • In edit mode, only the card's current type is shown (no switching allowed)

  • Points cards now display available rewards on the card back

  • Inactive templates are now visually dimmed and grouped by status

Customer Management

  • Customer deletion is now properly scoped per-subaccount (no cross-subaccount side effects)

  • Fixed card retention expiry affecting cards across unrelated subaccounts

  • Fixed customer restore not properly clearing archived status

  • "Add Customer" button now correctly enforces your plan's customer limit

Scanner & Cards

  • Fixed rewards display consistency on points and stamp cards

  • Broadcast tips updated with link formatting guidance

Wallet Passes

  • Google Wallet pass generation is now faster with caching

UI & Polish

  • Fixed dark mode flicker on page load

  • Fixed active cards count accuracy

  • Removed "Stripe Ready" badge from billing page

  • Fixed Featurebase chat widget overlapping table pagination

  • Fixed various loading states and race conditions in modals

  • Fixed franchise limit checks and rollout timeout handling

March 1st, 2026

  • Resolved an issue that prevented Google Wallet passes from being generated when no header field was specified.

  • Resolved an issue that blocked Apple Wallet passes from being generated when a customized country code was used on a subaccount.

February 28th, 2026

Promo Codes

  • Added promotion code support to agency and direct business signup flows

Subaccount Regional Settings

  • Added phone country code support across the platform β€” phone inputs now default to the correct country flag based on subaccount/agency config instead of hardcoded GB

  • Fixed currency mismatch in the card builder when agency admins edit subaccount templates (now uses the subaccount's currency, not the agency's)

Welcome Emails

  • Users now receive a welcome email after verifying their account