ProjectR Docs
Screen MapDashboard

Roles and lifecycles

Status, role and lifecycle tables for the dashboard. Red cells are gaps.

Roles and permissions

Page or actionappsdashboardadminsuper_adminEnforced where
Overview and chartsNoYesYesYesProtectedRoute + Convex dashboard
Profile (own)NoYesYesYesoverview.view + self exemption
Orders list, detail, facetsNoNoYesYesorders.view + Convex admin
Update order statusNoNoYesYesPage gate + orderHistory admin
Reprocess order stampsNoNoYesYesAdminOnly + Convex admin
Link orphan order to userNoNoAPI onlyAPI onlyNo UI; API only
Checkout sessions, force expireNoNoYesYesorders.view + Convex admin
Export (orders, users, reviews, audit)NoNoYesYesAdminOnly + exports admin
Users list and detailNoUI blocks, server allowsYesYesusers.view; Convex only dashboard
Edit user profileNoNoYesYesisAdmin + auth mutations
Change user roleNoNoUI hides, server allows apps/dashboardYesUI super_admin; server admin partial
Suspend, activate, restore userNoNoYesYesisAdmin; admin target needs super
Soft delete userNoNoUI blocks, server allowsYesUI super_admin; server admin
Hard delete userNoNoNoYesisSuperAdmin + super_admin server
Bulk edit users (max 500)NoNoYesYesPage gate + auth mutations
Create userNoNoNoInfo page onlyusers.create; page is explainer only
Routine step CRUD, reorderNoNoYesYesusers.update + beauty admin
Loyalty reset progress, revoke voucherNoNoYesYesPage gate + loyalty admin
Support list, detail, reply, statusNoYesYesYessupport.view + Convex dashboard
Ratings list, approve, reject, featureNoYesYesYesratings.view + Convex dashboard
Ratings bulk moderate, deleteNoUI allows, server refusesYesYesNo UI gate; server admin
Pending, Flagged, Blocked, Reports pagesNoUI blocks, lists open on serverYesYesratings.update; lists dashboard on server
Resolve or dismiss reportNoNoYesYesAdminOnly + Convex admin
Notifications: read Messages, Flows, Templates, delivery logNoYesYesYesrequireDashboardAccess (messages.ts, flows.ts queries)
Send, schedule, cancel or delete a messageNoNoYesYesAdminOnly + requireAdminAccess (messages.ts)
Create, edit, activate or delete a flow; install a flow templateNoNoYesYesAdminOnly + requireAdminAccess (flows.ts)
Template CRUD, queue cancel/retry/processNoNoYesYesAdminOnly + requireAdminAccess (mutations.ts)
Webhooks view, deliveriesNoNoYesYeswebhooks.view + Convex admin
Webhook create, edit, deleteNoNoYes, but matrix says super_adminYeshasRole admin; matrix says super_admin
Audit log viewNoNoYesYesaudit.view + Convex admin
SectionItemRouteVisible to
OverviewDashboard/dashboard/overviewdashboard and up
CommerceProducts/dashboard/productsdashboard and up
CommerceOrders/dashboard/ordersadmin and up
CommerceAll Orders/dashboard/ordersadmin and up
CommerceCheckout Sessions/dashboard/orders/checkout-sessionsadmin and up
CommerceVouchers/dashboard/vouchersdashboard and up (Audit child: admin)
CustomersUsers/dashboard/usersadmin and up
CustomersAll Users/dashboard/usersadmin and up
CustomersRoutine Steps/dashboard/users/routine-stepsadmin and up
CustomersLoyalty/dashboard/loyaltydashboard and up (Members, Audit: admin)
CustomersSupport Inbox/dashboard/supportdashboard and up
Content & EngagementReviews & Moderation/dashboard/ratingsdashboard and up
Content & EngagementReviews/dashboard/ratingsdashboard and up
Content & EngagementPending Reviews/dashboard/ratings/pendingadmin and up
Content & EngagementFlagged Reviews/dashboard/ratings/flaggedadmin and up
Content & EngagementUser Reports/dashboard/ratings/reportsadmin and up
Content & EngagementUser Blocks/dashboard/ratings/blockedadmin and up
Content & EngagementNotifications/dashboard/notificationsdashboard and up
Content & EngagementNotifications › Messages/dashboard/notifications/messagesdashboard and up
Content & EngagementNotifications › Flows/dashboard/notifications/flowsdashboard and up
Content & EngagementNotifications › Templates/dashboard/notifications/templatesdashboard and up
Content & EngagementContent Studio/dashboard/content-managementadmin and up (all children admin)
PlatformWebhooks/dashboard/webhooksadmin and up
PlatformAudit Log/dashboard/audit-logadmin and up
FooterDocumentationhttps://docs.theraw.com.mydashboard and up
FooterOperations Manualhttps://docs.theraw.com.my/docs/admindashboard and up
User cardAccount Settings/dashboard/profiledashboard and up (apps sees AccessDenied)

Marketing campaign lifecycle

StateEntered byLeaves toVisible effectSource
DraftCreate or UnpublishPublished, ScheduledNot served to the apptypes/marketing-campaign.ts:73
ScheduledPublished, startsAt in futurePublishedHidden until starttypes/marketing-campaign.ts:73
PublishedPublished, inside windowExpired, DraftServed when start <= now < endBE content/mutations.ts:822
ExpiredPublished, endsAt <= nowDraft, PublishedHidden; endsAt is exclusivetypes/marketing-campaign.ts:73
DeletedDelete confirmnoneRow removed, no soft statecampaign-columns.tsx:60
StateEntered byLeaves toVisible effectSource
InactiveisActive falseActive, ScheduledNot showntypes/carousel.ts:100
ScheduledActive, now < startsAtActiveHidden until starttypes/carousel.ts:100
ActiveActive, inside windowExpired, InactiveShown in placementtypes/carousel.ts:100
ExpiredActive, now > endsAtInactive, ActiveHidden; endsAt is inclusivetypes/carousel.ts:100
DeletedDelete confirmnoneHard deletecarousel-listing.tsx:105
ReorderedDrag handleSamedisplayOrder rewritten per placementcarousel-table.tsx:150

Product lifecycle

StateEntered byLeaves toVisible effectSource
Mirrored productShopify syncOverride existsShown from Shopify dataproduct-listing.tsx:84
Override existsSave All, bulk Featured or BadgeOverride deletedMarketing fields overlay Shopifyproduct-view.tsx:336
Override deletedDelete OverrideOverride existsReverts to Shopify dataproduct-view.tsx:467
Group draftGroup createdGroup publishedNot published to apppublishProductGroup
Group publishedPublish actionGroup draftVisible; republish refusedpublishProductGroup
Group deletedDelete groupnoneHard delete, products unassignedgroup-delete-dialog.tsx:60
Mirrored groupsourceCollectionHandle setUnmirrored via editMembership edits refusedgroup-products-manager.tsx:244

Voucher template lifecycle

StateEntered byLeaves toVisible effectSource
ActiveCreated; ActivateInactive, DeletedCan be issued fromBE mutations.ts create
InactiveDeactivate; Duplicate copyActiveCannot issue or use in poolsvoucher-template-table.tsx
No Shopify nodeCreated or duplicatedNode createdShows No node in tablemutations.ts:1403
Node linkedFirst voucher issuedNode updatedShows SyncedcheckoutActions.ts:1158
Node updatedDiscount edit or SyncSameWrites to Shopifymutations.ts:771
DeletedDelete with no vouchersnoneRefused once vouchers issuedmutations.ts:1625

Issued voucher lifecycle

StateEntered byLeaves toVisible effectSource
ActiveIssue, stamp reward, reissueUsed, Expired, CancelledRedeemableBE dashboard/mutations.ts
UsedCheckout, webhook, appnoneTerminal; no actionsBE dashboard/mutations.ts
ExpiredCron markExpiredVouchersActive, new voucherShopify code removedBE dashboard/mutations.ts:420
CancelledRevoke, Delete, ReissuenoneTerminal; code removedBE dashboard/mutations.ts
ExtendedExtend expiry, future dateActiveExpired voucher reactivatedBE dashboard/mutations.ts:420
ReissuedReissue active or expiredNew Active voucherSource admin_reissue; old code keptBE dashboard/mutations.ts:461

Code pool and Raya campaign lifecycle

StateEntered byLeaves toVisible effectSource
DraftisActive falseScheduled, ActiveHidden from claimsuse-duit-raya.ts:193
ScheduledActive, now < startActiveNot claimable yetuse-duit-raya.ts:193
ActiveActive, inside windowEnded, InactiveClaimableuse-duit-raya.ts:193
Endednow > endInactiveNot claimableuse-duit-raya.ts:193
Provisioning runningprovisionPoolDone, FailedAlert Provisioning codesBE duitRaya/mutations.ts:546
Provisioning failedRun stoppedResumedGenerate remaining (paused)pool-detail-view.tsx:465
Soft deletedDelete or DeactivateActive via EditisActive falseBE duitRaya/mutations.ts:1440
Hard deletedSuper admin, pool detailnoneCodes and jobs removed in batchesBE duitRaya/mutations.ts:1440

Raya claim code lifecycle

StateEntered byLeaves toVisible effectSource
UnclaimedCode generatedClaimedAvailableduitRayaClaimCodes
ClaimedMobile or web claimUnclaimedclaimedBy and Shopify code setduitRayaClaimCodes
ResetReset CodeUnclaimedVoucher deleted; Shopify code freedduitRaya/mutations.ts:813
Reset refusedVoucher already usedClaimedCannot reverse Shopify useduitRaya/mutations.ts
Job pendingStart GenerationProcessingProgress barcodes-view.tsx
Job processingWorker picks upCompleted, Failedprocessed / total livecodes-view.tsx
Job completed or failedWorker endsnoneFailed shows Job failed alertcodes-view.tsx

Loyalty campaign lifecycle

StateEntered byLeaves toVisible effectSource
ActiveCreated; ActivatePaused, DeletedMobile uses window filterBE gamificationLoyalty/queries.ts:229
PausedPause or bulk PauseActiveisActive falsecampaign-table.tsx
Window labelstartsAt or endsAtSameNd left, Ends today, Expired (display only)campaign-columns.tsx:204
DeactivatedAdmin deleteActiveSoft deactivate onlyBE gamificationLoyalty/mutations.ts
Hard deletedSuper admin, no participantsnoneRow removed; refused with participantsBE gamificationLoyalty/mutations.ts

Avatar lifecycle

StateEntered byLeaves toVisible effectSource
ActiveCreated; seededInactive, DeletedOffered in appavatarCatalog.ts:67
InactiveEdit isActive falseActiveHidden from appavatarCatalog.ts:67
ArchivedDelete while in useActive via editShown as Inactiveavatar-catalog-manager.tsx:343
DeletedDelete while unusednoneHard deleteavatar-catalog-manager.tsx:343