Skip to main content
All Case Studies

Production-Ready Build · Retail Case Study

Mal Ciputra SemarangMal Ciputra Semarang Loyalty Platform

The Mal Ciputra Semarang project is a production-ready loyalty and engagement build combining a Flutter member app, Laravel API, and Filament operations dashboard. Documented capabilities include points, receipt OCR with staff review, rewards, campaigns, tenant content, indoor navigation, and push notifications.

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:

ProblemImpact
No unified member identityScattered records; no digital member card or QR lookup at counters
Points earned only via manual counter processesSlow, inconsistent, and difficult to audit
Campaigns hard to promote in real timeMissed opportunities for push notifications and deeplink-driven engagement
Tenant discovery is passiveShoppers cannot easily search stores or navigate indoors
Redemption fraud / duplicate claimsVoucher abuse without verification codes, stock limits, or counter checks
No audit trail for sensitive operationsLimited 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

LayerChoiceRationale
Mobile AppFlutter 3.11+Multi-platform compilation for Android and iOS with native performance, custom Dijkstra-based indoor routing UI, and localized string rendering.
Admin PanelLaravel Filament 5Rapid dashboard build with pre-built user role management, data tables, and verification screens for receipt approval.
API BackendLaravel SanctumSecure token-based REST APIs with task-scheduling queues for processing point transactions and redemption expiry limits.
Receipt OCRGoogle ML KitFast on-device OCR text extraction from shopping receipts to automatically read merchant names, totals, and transaction numbers.
DatabaseMariaDB / MySQLRelational data mapping for tenant directory, loyalty tier allocations, points ledger, and user audits.
Push NotificationsFirebase FCMDirect 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.