Overview
Mal Ciputra Semarang is a production-ready loyalty and engagement build designed as an integrated three-part system: a Flutter mobile app (Android & iOS) for mall visitors and members, a Laravel Filament web admin for mall management and counter staff, and a Laravel REST API backend with Sanctum authentication.
The product unifies membership, points earning and spending, rewards redemption, lucky draws, mall content (promotions, events, articles, tenant directory), QR-based engagement, receipt-based points with counter verification, indoor navigation, and push notifications in a single system. Members register, view a digital member card, earn points via receipt submission and QR scans, redeem rewards, join lucky draws, browse mall content, navigate to tenants indoors, and receive timely push messages. Mall staff configure loyalty rules, manage campaigns and content, verify redemptions and receipts at counters, run lucky draws, and broadcast notifications—all from one admin panel.
Business Problem
Shopping malls compete for footfall and repeat visits. Visitors expect a single digital channel for promotions, loyalty benefits, and store discovery. Without a dedicated platform, mall management faces several operational gaps:
| Problem | Impact |
|---|---|
| No unified member identity | Scattered records; no digital member card or QR lookup at counters |
| Points earned only via manual counter processes | Slow, inconsistent, and difficult to audit |
| Campaigns hard to promote in real time | Missed opportunities for push notifications and deeplink-driven engagement |
| Tenant discovery is passive | Shoppers cannot easily search stores or navigate indoors |
| Redemption fraud / duplicate claims | Voucher abuse without verification codes, stock limits, or counter checks |
| No audit trail for sensitive operations | Limited visibility into receipt approvals, redemptions, and lucky draw runs |
Solution
We built a full-stack loyalty platform scoped for single-mall deployment with bilingual support (English and Bahasa Indonesia).
Mobile app (members & guests):
- Six-tab navigation: Home, Lucky Draw, Promo, Events (What's On), Tenant Directory, and Profile
- Guest browsing of public content without registration; low-friction member registration with digital member card and QR
- Receipt scan workflow: camera/gallery capture → on-device OCR (Google ML Kit) → review → submit → pending counter verification with QR/code → points credited on staff approval
- Universal QR scanner for instant point earning, deeplinks to promos/events/rewards/tenants, and claim-based purchases
- Rewards catalog with voucher codes and counter fulfillment verification
- Lucky draw campaigns with point-based ticket entry
- Promotions, events, and articles with tenant-linked content and native share
- Searchable tenant directory with indoor wayfinding to store locations
- Indoor navigation with floor maps, graph routing, QR "you are here" positioning, and step-by-step guidance
- Push notification inbox with unread badges and deeplink routing
- Settings for language (EN/ID), theme, and terms & conditions
Web admin (Filament):
- Dashboard with membership stats, operations queue (pending purchases and redemptions), OCR quality metrics, and charts
- Loyalty management: users, member tiers, purchases, point transactions, rewards, redemptions, promotions, lucky draw campaigns, and QR codes
- Verify Redemption page for counter staff to look up members and mark vouchers fulfilled
- Content management: tenant categories, tenants, banners, articles, events, and push broadcast campaigns
- Indoor navigation assets: floors, graph nodes/edges, and physical QR markers
- App settings for program rules and read-only admin audit logs
Backend & integrations:
- Laravel REST API with Sanctum Bearer tokens, role-gated staff endpoints, and scheduled jobs for point expiry, redemption expiry, and pending receipt TTL
- Firebase Cloud Messaging for push delivery and Firebase Analytics for usage tracking
- Configurable loyalty rules: points per currency unit, tier multipliers, receipt age limits, image deduplication, and verification code expiry
Implemented Loyalty Capabilities
- Unified member experience — Registration, digital member card, tier progress, and points ledger in one mobile app.
- Structured points economy — Receipt-based earning with counter verification, QR instant earn, tier multipliers, and automated expiry jobs.
- Operational trust — Counter-assisted receipt review, voucher verification at desk, stock and limit rules, OCR risk signals, and admin audit logs.
- Campaign reach — Push notifications with deeplinks, home banners, QR campaigns, and in-app surfaces across promos, events, and lucky draws.
- Tenant visibility — Searchable directory with bilingual listings and indoor navigation from QR positioning to store destination.
- Centralized operations — Single Filament admin for loyalty configuration, content publishing, notification broadcasts, and staff workflows.
Technical Implementation Logic
| Layer | Choice | Rationale |
|---|---|---|
| Mobile App | Flutter 3.11+ | Multi-platform compilation for Android and iOS with native performance, custom Dijkstra-based indoor routing UI, and localized string rendering. |
| Admin Panel | Laravel Filament 5 | Rapid dashboard build with pre-built user role management, data tables, and verification screens for receipt approval. |
| API Backend | Laravel Sanctum | Secure token-based REST APIs with task-scheduling queues for processing point transactions and redemption expiry limits. |
| Receipt OCR | Google ML Kit | Fast on-device OCR text extraction from shopping receipts to automatically read merchant names, totals, and transaction numbers. |
| Database | MariaDB / MySQL | Relational data mapping for tenant directory, loyalty tier allocations, points ledger, and user audits. |
| Push Notifications | Firebase FCM | Direct real-time campaign triggering and deeplink-driven in-app routing. |
Frequently Asked Questions
What is included in the production-ready build?
The Flutter app, Laravel API, Filament dashboard, membership, points, receipt review, rewards, content, campaigns, navigation, and notifications.
Is a public launch verified?
Not from the reviewed materials. The page does not claim adoption, footfall, or realized business results.
Technology Used
Flutter 3.11+ mobile app (GoRouter, Dio, BLoC/Riverpod, gen-l10n for EN/ID), Laravel backend with Filament 5 admin panel, Laravel Sanctum authentication, Spatie Media Library for images, Google ML Kit on-device OCR, Firebase Cloud Messaging and Analytics, MariaDB/MySQL datastore, graph-based indoor routing (Dijkstra), and scheduled Laravel jobs for points, redemptions, and receipt expiry.
