Raya campaign
Dashboard: every screen, state and flow in Raya campaign.
10 screens and overlays, 52 states, 1 flows. Frames show a real screenshot where one was captured and a wireframe card where the state needs data or conditions a device run cannot produce.
Flows
Pools and Raya campaigns (generation paused)
Create New Raya Campaign
Campaign created
Toast Campaign created successfully
Needs data: Needs specific backend rows, a role, or a submitted write on a disposable record
Branches and edge cases
Export claim codes
Exported N codes
Toast Exported N codes successfully
Needs data: Needs specific backend rows, a role, or a submitted write on a disposable record
Export claim codes
Export capped
Warning toast at 10,000 codes; export claimed and unclaimed separately
Needs data: Needs specific backend rows, a role, or a submitted write on a disposable record
Delete Campaign
Copy mismatches behaviour
Says permanent delete but only sets isActive false
Needs data: Needs specific backend rows, a role, or a submitted write on a disposable record
Reset Code
Needs data: Needs a Raya campaign with generated codes
Reset Code
Voucher already used
Server refuses; message toasted
Needs data: Needs specific backend rows, a role, or a submitted write on a disposable record
Reset Code
Code reset
Toast Code reset to available
Needs data: Needs specific backend rows, a role, or a submitted write on a disposable record
Flow diagram
Screens and states
Code Campaigns (Raya)
/dashboard/raya-campaignCode Campaigns (Raya)
Seasonal QR-code campaign editor; same data as Pools.
src/app/dashboard/raya-campaign/page.tsxEntry
- Sidebar
- Pools Code Campaigns link
- Templates Raya campaigns
Exits
- View as Pools → /vouchers/pools
- New Campaign → /raya-campaign/new
- Name or View → /[id]
- Edit, Analytics, Manage Codes
- Delete → Delete dialog
States · 6
src/features/duit-raya/components/campaigns/campaign-listing.tsxsrc/features/duit-raya/components/campaigns/campaign-listing.tsxsrc/features/duit-raya/components/campaigns/campaign-filters.tsxsrc/features/duit-raya/components/campaigns/campaign-listing.tsxsrc/features/../hooks/convex/use-duit-raya.ts:193src/lib/access-control.ts:357Delete Campaign
CampaignDeleteDialogDelete Campaign
Soft deactivate a Raya campaign (copy says permanent).
src/features/duit-raya/components/campaigns/campaign-delete-dialog.tsxEntry
- Row menu Delete
- Detail More menu
Exits
- Delete → toast
- Cancel → closes
States · 4
src/features/duit-raya/components/campaigns/campaign-delete-dialog.tsx:44src/features/duit-raya/components/campaigns/campaign-delete-dialog.tsxsrc/features/duit-raya/components/campaigns/campaign-delete-dialog.tsxsrc/features/duit-raya/components/campaigns/campaign-delete-dialog.tsxCreate New Raya Campaign
/dashboard/raya-campaign/newCreate New Raya Campaign
Set up a QR code voucher campaign.
src/app/dashboard/raya-campaign/new/page.tsxEntry
- New Campaign
Exits
- Back arrow → list
- Cancel → unsaved dialog
- Create Campaign → /raya-campaign/[id]
States · 6
src/features/duit-raya/components/campaigns/campaign-form.tsxsrc/features/duit-raya/components/campaigns/campaign-form.tsx:155src/features/duit-raya/components/campaigns/campaign-form.tsxsrc/features/duit-raya/components/../utils/schemas.ts:11src/features/duit-raya/components/../utils/schemas.ts:11src/features/duit-raya/components/campaigns/campaign-form.tsxRaya campaign detail
/dashboard/raya-campaign/[id]Raya campaign detail
Campaign overview and its claim codes.
src/app/dashboard/raya-campaign/[id]/page.tsxEntry
- List
- Create redirect
- Pools links
Exits
- Back arrow → list
- Edit → /edit
- More → Codes, Analytics, Export, Delete
- Generate More → /codes
States · 6
src/app/dashboard/raya-campaign/[id]/campaign-detail-view.tsxsrc/app/dashboard/raya-campaign/[id]/campaign-detail-view.tsxsrc/features/duit-raya/components/codes/code-table.tsxsrc/app/dashboard/raya-campaign/[id]/campaign-detail-view.tsxsrc/app/dashboard/raya-campaign/[id]/campaign-detail-view.tsxsrc/features/duit-raya/components/codes/code-filters.tsxQR Code Preview
QRCodePreviewDialogQR Code Preview
Show a 256px QR with code and template; download as image.
src/features/duit-raya/components/codes/code-table.tsxEntry
- Code row View QR
Exits
- Download QR Code → image
- Close
States · 1
src/features/duit-raya/components/codes/code-table.tsxReset Code
Reset Code
Needs data: Needs a Raya campaign with generated codes
ResetCodeDialogReset Code
Return a claimed code to available.
src/features/duit-raya/components/codes/code-table.tsxEntry
- Code row Reset Code
Exits
- Reset → toast
- Cancel → closes
States · 4
src/features/duit-raya/components/codes/code-table.tsxsrc/features/duit-raya/components/codes/code-table.tsxpackages/backend/convex/duitRaya/mutations.tspackages/backend/convex/duitRaya/mutations.ts:813Edit Campaign
/dashboard/raya-campaign/[id]/editEdit Campaign
Update campaign details and active flag.
src/app/dashboard/raya-campaign/[id]/edit/page.tsxEntry
- List menu
- Detail Edit
Exits
- Back arrow → detail
- Update Campaign → detail
- Cancel → unsaved dialog
States · 4
src/app/dashboard/raya-campaign/[id]/edit/edit-campaign-view.tsxsrc/app/dashboard/raya-campaign/[id]/edit/edit-campaign-view.tsxsrc/features/duit-raya/components/campaigns/campaign-form.tsxsrc/features/duit-raya/components/../utils/schemas.tsCode Generation
/dashboard/raya-campaign/[id]/codesCode Generation
Start generation jobs and watch progress.
src/app/dashboard/raya-campaign/[id]/codes/page.tsxEntry
- Detail Generate More
- List Manage Codes
- Pool Codes & QR
Exits
- Back arrow → detail
- Start Generation → job started
States · 15
src/app/dashboard/raya-campaign/[id]/codes/codes-view.tsx:220packages/backend/convex/duitRaya/actions.ts:135src/app/dashboard/raya-campaign/[id]/codes/codes-view.tsxsrc/app/dashboard/raya-campaign/[id]/codes/codes-view.tsxsrc/app/dashboard/raya-campaign/[id]/codes/codes-view.tsxsrc/app/dashboard/raya-campaign/[id]/codes/hooks/use-voucher-template-options.tssrc/app/dashboard/raya-campaign/[id]/codes/hooks/use-voucher-template-options.tssrc/app/dashboard/raya-campaign/[id]/codes/hooks/use-voucher-template-options.tssrc/app/dashboard/raya-campaign/[id]/codes/codes-view.tsxsrc/app/dashboard/raya-campaign/[id]/codes/codes-view.tsxsrc/app/dashboard/raya-campaign/[id]/codes/codes-view.tsxsrc/app/dashboard/raya-campaign/[id]/codes/codes-view.tsx:77src/app/dashboard/raya-campaign/[id]/codes/codes-view.tsx:77src/features/duit-raya/components/../utils/schemas.tssrc/app/dashboard/raya-campaign/[id]/codes/page.tsxCampaign Analytics
/dashboard/raya-campaign/[id]/analyticsCampaign Analytics
Overview cards and claims by denomination chart.
src/app/dashboard/raya-campaign/[id]/analytics/page.tsxEntry
- List menu
- Detail More
- Pool More
Exits
- Back arrow → detail
- Export → /[id]/export
States · 2
src/app/dashboard/raya-campaign/[id]/analytics/analytics-view.tsxsrc/app/dashboard/raya-campaign/[id]/analytics/analytics-view.tsxExport claim codes
/dashboard/raya-campaign/[id]/exportExport claim codes
CSV export of claim codes.
src/app/dashboard/raya-campaign/[id]/export/page.tsxEntry
- Detail More Export Data
- Analytics Export
- Pool Advanced export
Exits
- Back arrow → detail
- Export CSV → browser download
States · 4
src/app/dashboard/raya-campaign/[id]/export/export-view.tsxsrc/app/dashboard/raya-campaign/[id]/export/export-view.tsxsrc/app/dashboard/raya-campaign/[id]/export/export-view.tsxsrc/app/dashboard/raya-campaign/[id]/export/export-view.tsx










