Screen Map
Gaps found while mapping
Bugs and missing states the screen inventory surfaced, by app.
These came out of reading every screen for its states. Each is a static read of the source at the commit the map was generated from; confirm on a device before fixing.
Mobile app
- Develop has no Home notification prompt; it is offered after an order. The feature branch moves it to Home.
- Deleted or suspended accounts arriving via Google, Apple or mid-session are signed out with no message.
- Social sign-in errors show raw SDK strings; phone errors are normalised to friendly copy.
- Restart App on the crash screen, and automatic critical recovery, sign the user out.
- Quiz resume restores answers but not the step; beauty profile and Home card use different completion checks.
- No forced update or maintenance mode exists; both update prompts can be dismissed for 7 days.
- Offline search, marketing, avatar and beauty profile screens show a loader or nothing, with no error state.
- Rejected deep links are silent; sign-in code and details screens cannot be deep linked.
- Most browse, PDP, search and wishlist copy is hardcoded English, so ms and ar locales stay English.
- Shop and PDP error states never render (error is always null); crashes fall to error boundaries.
- PDP quantity stepper allows 99 but each add silently clamps to 10 with no message.
- Out of stock PDP shows greyed buttons only. No Sold out label or Notify me.
- Resume checkout button does not resume; it returns early with the lock toast.
- Shopify close, error and present failures are silent; no toast, bag just unlocks.
- Buy now has no sign-in guard or completion callback; guests get Checkout failed.
- No-voucher users cannot reach the promo input; Shop lists sold out, Search hides it.
- Refund, partial refund and void never reverse stamps or shake vouchers; only orders/cancelled does
- Cancelled orders keep their +N Activity row and a stamp row that still says You earned N stamps
- No push or inbox notice for shipping, delivery, refund, cancel, stamps or vouchers; only order_confirmation
- Shipped orders with no tracking number can never be marked received and stay Shipped
- Checkout-attributed orders show in the list but fail Mark as received and Reorder with Order not found
- Rate & Review opens the first item's product page; hasReviewed is hard-coded false
- Push tap ignores hasDetailContent, so detail notices only open from the inbox row
- Unlinked or shipping-phone-only orders are invisible; voucher expiry reminder has no cron caller
- Most Profile copy is hardcoded English; Bahasa Malaysia only translates menu rows and a few features.
- Delete Account says data is permanently removed, but the backend only soft-deletes; success false is ignored.
- Joined date in ProfileHeaderCard never renders because Profile omits createdAt.
- Remove-from-bag has no confirmation, while address delete, block user and mark received do.
- Voucher list error view and 10 of 12 LoyaltyEmptyState types are unreachable today.
- App update is dismissible for 7 days; no force update, maintenance screen or global offline banner exists.
- select-avatar title differs between layout and screen, and its empty state tells users to ask an admin.
- Two toast stacks (HeroUI toast and flash-message) are in use, so toast styling varies. Static read only, not device-verified.
- Capture audit 2026-10-30: test-account names, emails and phone numbers are approved for screenshots; voucher and referral codes remain masked during import.
- Observed on dev during capture: wishlist heart can navigate to the product instead of showing the removed toast; iOS notification-preference and invalid-promo toasts can render behind native sheets.
- Observed on dev during capture: closed-account OTP verification can remain on Checking code while signed out underneath. Account creation can show a notification pre-prompt; the prior no-notification-ask description is inaccurate.
- Capture continuation 2026-10-30: device connection recovered; 35 Android and two iOS screenshots captured sequentially, visually reviewed and imported. Failed captures were excluded.
- Capture continuation 2026-10-30: Android invalid-promo error toast was not visible over the native voucher sheet in two attempts. Signup details appeared after OTP but the cold-relaunch capture timed out; that branch remains unverified. QR claim outcomes need camera QR input unavailable in current device controls.
- Capture cleanup 2026-10-30: QA addresses restored (two, original default), reviewer unblocked, Nur Demo active, temporary developer phone restored, details-test profile fields restored and onboarding marked offered. Address and beauty row ids/timestamps changed; an empty routine list may now be explicit. Android permission fixtures reset. iOS simulator notification permission remains denied for the captured blocked state.
Dashboard
- Route gate is client only. No middleware; Convex is the real boundary.
- Suspended or banned staff keep the full shell. Server returns empty data, no dedicated screen.
- Notification writes are admin-only twice over: AdminOnly wraps Send, Schedule, Save draft, flow and template actions in the UI, and every write mutation calls requireAdminAccess. A dashboard user can read Messages, Flows and Templates but not change them.
- Webhook buttons gate on admin; the matrix says super_admin and is never read.
- Order detail for dashboard role shows Order not found toast and redirects, never AccessDenied.
- /dashboard/users/new and /dashboard/ratings/[id] have no inbound links. Users/new is an explainer.
- Sign-up lands apps users on AccessDenied with an empty sidebar. No pending-approval screen.
- Raya and Pool code generation is paused (GENERATION_PAUSED); Create pool is a dead end that still creates the campaign.
- Raya delete dialog says permanent but only deactivates; pool detail has the honest two-mode dialog.
- Issuing with Shopify writes off still shows Issued voucher X, but no Shopify code exists.
- ShopifyWriteBanner is missing on revoke, reissue, template edit and sync, Award Stamps and Delete Voucher.
- Award stamps limits disagree: dialog 10, popover 5, backend 100; awards can mint live Shopify codes.
- Template Use in Campaign and Quick Actions Sync do nothing; the campaign form loadTemplate is a stub.
- Both not-found.tsx files for campaigns and carousel are dead; views toast and redirect instead.
- access-control maps /duit-raya but the real route is /raya-campaign; the route-to-feature map misses it.