Short-code login, mobile verification, and signed card validation.
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
Manage registrations, messaging, user roles, and loyalty operations.
Collect new members with bilingual self-service registration flows.
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.
Public registration
Collect new loyalty members through a bilingual self-service registration view with locale-aware flows and validation.
Admin dashboard
Manage memberships, campaigns, users, communication, and operational actions from an authenticated control surface.
Member QR card
Give members a secure QR-based identity card with verification support and a dedicated login flow.
Strict enough for maintainability, lightweight enough to move fast.
System rules worth keeping
- UUID primary keys on all entities, no auto-increment identifiers.
- Soft deletes and timestamps preserved for traceability.
- All new user-facing strings added to both Finnish and English language files.
- Admin sessions use auth-prefixed keys while member sessions use member-prefixed keys.
- Views stay within layout sections and use the existing Tailwind-plus-custom-class language.
Every entity follows the same persistence pattern for safer growth and less schema drift.
Default locale is Finnish with English kept in sync across interface text and flows.
HMAC-based QR validation protects member card flows from simple tampering.
Typical Kantis delivery flow from schema to member card.
Database first
Create the migration, run it, and preserve the UUID, timestamp, and soft-delete conventions.
Model and controller
Expose fields safely, add hooks if needed, then build controller validation and success/error flash messaging.
Routes and views
Place the feature in the correct portal, extend the right layout, and keep the JavaScript minimal and local.
Translations and styling
Add Finnish and English keys together, then compile Tailwind if the feature introduces new utility coverage.
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.
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.
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.