Bilingual loyalty platform for Finnish teams

Membership logic built like a premium card.

Kantis is DigiSpell's loyalty program system for Finnish and English operations. It combines public registration, admin campaign tooling, and member QR cards in a CodeIgniter 4 application built for structured growth.

  • CodeIgniter 4, Tailwind CSS v4, MySQL, and UUID-first data modeling
  • Three portals: public registration, admin dashboard, and member QR card
  • Finnish default locale with synchronized English support across the UI
Production fit FI + EN QR signed
Member Portal QR card and identity flow

Short-code login, mobile verification, and signed card validation.

Admin Campaign and membership control

Manage registrations, messaging, user roles, and loyalty operations.

Public Fast registration funnel

Collect new members with bilingual self-service registration flows.

Finnish default locale with English parity
UUID primary keys and soft deletes
Member QR card with HMAC signature
Admin and member session isolation
Tailwind CSS v4 with no JS build step
Registration, dashboard, and member card flow
Three portals

One loyalty engine, three distinct user surfaces.

Kantis splits the experience by responsibility, so customers, staff, and members each get focused interfaces instead of one overloaded dashboard.

01

Public registration

Collect new loyalty members through a bilingual self-service registration view with locale-aware flows and validation.

02

Admin dashboard

Manage memberships, campaigns, users, communication, and operational actions from an authenticated control surface.

03

Member QR card

Give members a secure QR-based identity card with verification support and a dedicated login flow.

Stack + conventions

Strict enough for maintainability, lightweight enough to move fast.

Core stack CI4 + Tailwind + MySQL
Backend

PHP 8.1+, CodeIgniter 4.6+, MVC structure, inline controller validation, and MySQLi-backed persistence.

Frontend

Tailwind CSS v4 compiled from resources, with vanilla scripts in views and no frontend build framework overhead.

Support libraries

jQuery, DataTables, Chart.js, TinyMCE, and html5-qrcode cover admin tables, analytics, messaging, and QR use cases.

System rules worth keeping

  1. UUID primary keys on all entities, no auto-increment identifiers.
  2. Soft deletes and timestamps preserved for traceability.
  3. All new user-facing strings added to both Finnish and English language files.
  4. Admin sessions use auth-prefixed keys while member sessions use member-prefixed keys.
  5. Views stay within layout sections and use the existing Tailwind-plus-custom-class language.
Database style UUID + soft delete

Every entity follows the same persistence pattern for safer growth and less schema drift.

Locale behavior Finnish first

Default locale is Finnish with English kept in sync across interface text and flows.

QR security Signed member cards

HMAC-based QR validation protects member card flows from simple tampering.

Feature workflow

Typical Kantis delivery flow from schema to member card.

01

Database first

Create the migration, run it, and preserve the UUID, timestamp, and soft-delete conventions.

02

Model and controller

Expose fields safely, add hooks if needed, then build controller validation and success/error flash messaging.

03

Routes and views

Place the feature in the correct portal, extend the right layout, and keep the JavaScript minimal and local.

04

Translations and styling

Add Finnish and English keys together, then compile Tailwind if the feature introduces new utility coverage.

Security + operations

Designed for controlled member identity rather than loose profile pages.

Authentication split

Admins use email and password with bcrypt-backed authentication, while members use short code plus mobile for lighter card access.

Data integrity

Short codes avoid ambiguous characters, foreign keys follow consistent naming, and deleted records stay soft-deleted instead of removed.

Content safety

Email campaigns strip UUID-like tokens, file uploads are extension-limited with a 10MB cap, and internal UUIDs stay off public routes unless signed.

FAQ

Questions teams ask before rollout.

Can the system support both Finnish and English members?

Yes. Finnish is the default locale and English is a first-class supported language, with both kept in sync through language files.

How are member cards protected?

Member QR codes are HMAC-signed and should be validated with the helper methods already defined for QR signature checks.

Is there a separate experience for staff and members?

Yes. Kantis separates public registration, admin management, and member-card access into different portals and session scopes.

Does the system fit the existing DigiSpell coding conventions?

Yes. It follows CodeIgniter 4 layouts, session filters, language keys, UUIDs, soft deletes, and Tailwind-based view composition.

Ready to launch

Turn loyalty into a system instead of a spreadsheet.

Kantis gives Finnish businesses a cleaner path from signup to QR identity, admin control, and bilingual customer retention.