← All tests

Loyalty Customer App — Phase 3 (dev)

Phase 3 of the NIX Loyalty Platform: the customer-facing mobile app that members download after a cashier prompts them at the counter. Built with Expo SDK 57 (React Native) — one codebase, per-tenant white-label builds. This is the loyalty/spin app (no in-app ordering or payment in v1): phone + OTP onboarding, a points wallet, the gamified Spin, a browse-only menu, a rewards wallet, and a member QR shown at the till to earn & redeem.

Redesigned to match Narong's Figma (cart-block prototype) — warm latte-cream surfaces, maroon hero with a gold points-progress bar, an SVG prize wheel, photo-forward cards, and a floating center-elevated tab bar. 15/15 end-to-end checks passed on expo-web via Playwright against the loyalty backend on the demo tenant (spin-enabled + Get Coffee maroon theme, so testing stays off the live get-coffee tenant). Repo nix-loyalty-app (e8e5d30).

What the app does: restores its session from a stored member JWT (secure-store on device), calls /me/home for a single-payload home (points, spin badge, promo & seasonal banners, popular menu, nearby stores, recent activity), /menu for the browse catalog, /me/spin-chances + POST /spin/spin for the never-zero draw, the Reward Shop (/shop + /shop/redeem — spend points for a coupon), /me/coupons for the wallet, and a member QR modal for the counter. Per-tenant white-label theme drives the hero color; the Spin tab auto-hides for tenants where spin is flagged off. v1 scope kept — tiers / ordering / payment / referral appear as visual placeholders only.

End-to-end evidence (expo-web, real UI, local backend + demo tenant):

✓ Login → OTP (dev-log) verified → member JWT issued
✓ Home renders — points hero, spins badge, member-QR modal opens
✓ POS /pos/earn granted 3 spin chances
✓ Spin wheel: 3 chances → spin returns a reward → consumed to 0
✓ Menu grid renders (categories + search)
✓ Reward Shop redeem succeeds → coupon appears in My Coupons
✓ Profile member QR matches member id · logout returns to login
Status: local dev. Verified on expo-web against the local backend on the demo tenant; no store/EAS build cut yet. OTP uses the backend’s dev-log fallback locally. Seed content uses placeholder stock photos. Next: physical-device test via Expo Go / EAS + deploy the P3/P4 backend to Fly.

Screens

Home
Home — maroon points hero, gold progress, seasonal & promo rails, popular menu
Spin
Spin & Win — SVG prize wheel + “SPIN! (3 left)”
Spin reward
Reward reveal — never-zero draw result
Menu
Menu — store selector, search, category chips, photo grid (browse-only)
Reward Shop
Reward Shop — points-priced photo cards + Redeem (affordability-gated)
My Coupons
My Coupons — redeemed & won coupon wallet
Profile
Profile — stats, perks, favorite store, settings, member QR