ProjectR Docs
Screen MapDashboard

Content: campaigns, carousel, avatars

Dashboard: every screen, state and flow in Content: campaigns, carousel, avatars.

16 screens and overlays, 64 states, 3 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

Marketing campaign publish

Step 1
Marketing Campaigns (Web)
Marketing campaigns list
New Campaign
Step 2
Wireframe

Create Marketing Campaign

Success

Campaign created

Toast Campaign created successfully

Needs data: Needs specific backend rows, a role, or a submitted write on a disposable record

Create form with type, schedule and publish switch
Save
Step 3
Wireframe

Marketing Campaigns

Edge

Four-state status

Draft, Scheduled, Expired, Published badge with status filter

Needs data: Needs specific backend rows, a role, or a submitted write on a disposable record

List shows draft, scheduled, live and ended
Publish
Step 4
Wireframe

Publish or Unpublish campaign

Needs data: Needs a campaign whose publish changes the app view

Confirm dialog when the app view changes
Confirm
Step 5
Campaign Detail (Web)
Read-only detail
Edit
Step 6
Wireframe

Edit Campaign

Success

Campaign updated

Toast Campaign updated successfully

Needs data: Needs specific backend rows, a role, or a submitted write on a disposable record

Edit form saves and returns to the list

Branches and edge cases

Errorfrom step 2
Wireframe

Create Marketing Campaign

Error

Description needed for action

Description is required for action campaigns

Not captured yet

Action type needs a description
Errorfrom step 2
Wireframe

Create Marketing Campaign

Error

Content needed for info

Content is required for info campaigns

Not captured yet

Info type needs content
Errorfrom step 2
Wireframe

Create Marketing Campaign

Error

Duplicate slug

Campaign with slug x already exists

Needs data: Needs specific backend rows, a role, or a submitted write on a disposable record

Duplicate slug
Edgefrom step 3
Wireframe

Publish or Unpublish campaign

Edge

Skipped when no visible change

Publish or unpublish runs immediately with a toast otherwise

Needs data: Needs specific backend rows, a role, or a submitted write on a disposable record

No visible change: runs immediately
Gatefrom step 3
Delete campaign (Web)
Delete
Emptyfrom step 3
Marketing Campaigns, No campaigns (Web)
No campaigns
Flow diagram
Step 1
Content management (Web)
Content management index redirects to Carousel
Redirect
Step 2
Carousel Management (Web)
Slides table with placement tabs
New Slide
Step 3
Wireframe

Create Slide

Success

Slide created

Toast Carousel slide created successfully

Needs data: Needs specific backend rows, a role, or a submitted write on a disposable record

Create slide form, rules depend on placement
Save
Step 4
Wireframe

Carousel Management

Error

Reorder rollback

Optimistic reorder rolls back with a toast on error

Not reachable on a device: Needs a server error, crash, race or code change

Drag to reorder; rolls back on error
Click a row
Step 5
Edit Slide (Web)
Edit slide form

Branches and edge cases

Emptyfrom step 2
Carousel Management, No slides yet (Web)
No slides yet
Gatefrom step 2
Delete Carousel Slide (Web)
Delete a slide
Errorfrom step 3
Wireframe

Create Slide

Error

Server soft failure toast

Display order N already in use, or videoUrl required for video

Needs data: Needs specific backend rows, a role, or a submitted write on a disposable record

Display order in use
Errorfrom step 3
Wireframe

Create Slide

Edge

Hero needs navigation

home_hero requires navigationType and a valid target format

Not captured yet

Home hero needs navigation
Errorfrom step 3
Wireframe

Create Slide

Error

Image required

Image is required

Not captured yet

Image required
Errorfrom step 5
Wireframe

Edit Slide

Error

Duplicate order refused

Display order N is already in use for placement p

Needs data: Needs specific backend rows, a role, or a submitted write on a disposable record

Duplicate order refused
Flow diagram

Avatar catalogue

Step 1
Avatar Catalog (Web)
Avatar catalogue card grid
New or Edit
Step 2
Avatar form (Web)
Avatar form dialog
Save
Step 3
Avatar Catalog, Reorder arrows disabled (Web)
Reorder arrows swap sort order
Delete
Step 4
Wireframe

Delete avatar?

Success

Avatar deleted

Toast Avatar deleted

Needs data: Needs specific backend rows, a role, or a submitted write on a disposable record

Unused avatar is deleted

Branches and edge cases

Emptyfrom step 1
Wireframe

Avatar Catalog

Empty

Empty catalogue

Card with Seed 30 Defaults button

Needs data: Needs specific backend rows, a role, or a submitted write on a disposable record

Catalogue empty: Seed 30 Defaults
Gatefrom step 1
Overwrite existing avatars? (Web)
Seed Defaults on a non-empty catalogue
Errorfrom step 2
Wireframe

Avatar form

Error

Slug exists

Avatar slug already exists

Needs data: Needs specific backend rows, a role, or a submitted write on a disposable record

Slug already exists
Errorfrom step 2
Wireframe

Avatar form

Error

Image required

Avatar image is required

Not captured yet

Image required
Edgefrom step 4
Wireframe

Delete avatar?

Edge

Archived when in use

Avatar is in use, so it was archived

Needs data: Needs specific backend rows, a role, or a submitted write on a disposable record

Avatar in use: archived
Flow diagram

Screens and states

Content management

Content management (Web)
Redirect/dashboard/content-management

Content management

Redirect to the carousel section.

src/app/dashboard/content-management/page.tsx

Entry

  • Sidebar parent item

Exits

  • Redirect → /content-management/carousel

Avatar Catalog

Avatar Catalog (Web)
Screen/dashboard/content-management/avatars

Avatar Catalog

Manage the mobile avatar catalogue.

src/app/dashboard/content-management/avatars/page.tsx

Entry

  • Sidebar Content > Avatars

Exits

  • New Avatar or Edit → form dialog
  • Delete → confirm dialog
  • Seed Defaults → confirm or seed
  • Arrows → swap sort order

States · 7

Loading
Card skeletons · 8 card skeletons while loadingsrc/features/content-management/avatars/components/avatar-catalog-manager.tsx
Error
Query error alert · Destructive Alert with the error stringsrc/features/content-management/avatars/components/avatar-catalog-manager.tsx
Empty
Empty catalogue · Card with Seed 30 Defaults buttonsrc/features/content-management/avatars/components/avatar-catalog-manager.tsx
Edge
Filtered no-result · Grid renders empty with no messagesrc/features/content-management/avatars/components/avatar-catalog-manager.tsx
Gate
content:update to view · Stricter than view; dashboard role cannot open the pagesrc/app/dashboard/content-management/avatars/page.tsx
Success
Server message toast · Every mutation toasts result.messagesrc/features/content-management/avatars/components/avatar-catalog-manager.tsx
Edge
Reorder arrows disabled · Up disabled on first card, down on lastsrc/features/content-management/avatars/components/avatar-catalog-manager.tsx

Captured states

Avatar Catalog, Reorder arrows disabled (Web)
Reorder arrows disabled

Avatar form

Avatar form (Web)
DialogAvatarFormDialog

Avatar form

Create or edit an avatar (slug, name, character, image, order).

src/features/content-management/avatars/components/avatar-form-dialog.tsx

Entry

  • New Avatar
  • Card Edit

Exits

  • Save → closes, toast
  • Cancel → closes

States · 4

Error
Slug format · Use lowercase kebab-case; slug read-only when editingsrc/features/content-management/avatars/components/avatar-form-dialog.tsx:20
Error
Slug exists · Avatar slug already existspackages/backend/convex/avatarCatalog.ts:67
Error
Image required · Avatar image is requiredsrc/features/content-management/avatars/components/avatar-form-dialog.tsx:20
Edge
Default sort order · sortOrder defaults to max + 10src/features/content-management/avatars/components/avatar-form-dialog.tsx

Delete avatar?

Delete avatar? (Web)
DialogAvatarDeleteAlert

Delete avatar?

Confirm delete; avatars in use are archived instead.

src/features/content-management/avatars/components/avatar-catalog-manager.tsx

Entry

  • Card Delete

Exits

  • Delete → toast
  • Cancel → closes

States · 2

Edge
Archived when in use · Avatar is in use, so it was archivedsrc/features/content-management/avatars/components/avatar-catalog-manager.tsx:343
Success
Avatar deleted · Toast Avatar deletedsrc/features/content-management/avatars/components/avatar-catalog-manager.tsx:343

Overwrite existing avatars?

Overwrite existing avatars? (Web)
DialogAvatarSeedOverwriteDialog

Overwrite existing avatars?

Confirm re-seeding defaults over existing avatars.

src/features/content-management/avatars/components/avatar-catalog-manager.tsx

Entry

  • Seed Defaults with non-empty catalogue

Exits

  • Confirm → resets defaults, adds missing
  • Cancel → closes

States · 1

Edge
Seeds immediately when empty · No dialog when the catalogue is emptysrc/features/content-management/avatars/components/avatar-catalog-manager.tsx

Marketing Campaigns

Marketing Campaigns (Web)
Screen/dashboard/content-management/campaigns

Marketing Campaigns

List campaign pages shown in the mobile app.

src/app/dashboard/content-management/campaigns/page.tsx

Entry

  • Sidebar Content > Campaigns
  • Create or edit redirects

Exits

  • New Campaign → /campaigns/new
  • View → /campaigns/[id]
  • Edit → /campaigns/[id]/edit
  • Publish or Unpublish (admin)
  • Delete → confirm dialog

States · 7

Loading
Skeletons · loading.tsx plus card skeleton while loadingsrc/app/dashboard/content-management/campaigns/loading.tsx
Error
Route error · Something went wrong! Failed to load marketing campaigns. Try againsrc/app/dashboard/content-management/campaigns/error.tsx
Error
Query error alert · Destructive Alert inside the cardsrc/features/content-management/campaigns/components/campaign-listing.tsx
Empty
No campaigns · No marketing campaigns found. Create your first campaignsrc/features/content-management/campaigns/components/campaign-table.tsx:36
Edge
500 campaign cap · Info alert: showing the first 500 campaigns; older not listedsrc/features/content-management/campaigns/components/campaign-table.tsx:13
Edge
Four-state status · Draft, Scheduled, Expired, Published badge with status filtersrc/features/content-management/campaigns/components/campaign-table-toolbar.tsx:28
Edge
Publish confirm conditional · Dialog only when the click changes what the app shows nowsrc/features/../hooks/convex/use-content.ts:311

Captured states

Marketing Campaigns, No campaigns (Web)
No campaigns

Publish or Unpublish campaign

Wireframe

Publish or Unpublish campaign

Needs data: Needs a campaign whose publish changes the app view

DialogCampaignPublishConfirm

Publish or Unpublish campaign

Confirm a publish change that alters what the app shows now.

src/features/content-management/campaigns/components/campaign-detail-view.tsx

Entry

  • Row menu or detail Publish/Unpublish

Exits

  • Confirm → publish state changes
  • Cancel → closes

States · 1

Edge
Skipped when no visible change · Publish or unpublish runs immediately with a toast otherwisesrc/features/../hooks/convex/use-content.ts:311

Delete campaign

Delete campaign (Web)
DialogCampaignDeleteConfirm

Delete campaign

Confirm hard delete of a marketing campaign.

src/features/content-management/campaigns/components/campaign-columns.tsx

Entry

  • Row menu Delete

Exits

  • Confirm → row removed
  • Cancel → closes

States · 1

Edge
No soft state · Delete removes the row outrightsrc/features/content-management/campaigns/components/campaign-columns.tsx:60

Create Marketing Campaign

Create Marketing Campaign (Web)
Screen/dashboard/content-management/campaigns/new

Create Marketing Campaign

Create a campaign page with live mobile preview.

src/app/dashboard/content-management/campaigns/new/page.tsx

Entry

  • New Campaign button

Exits

  • Cancel → list (unsaved dialog)
  • Submit → /campaigns

States · 9

Edge
Slug follows title · Slug auto-generates until editedsrc/features/content-management/campaigns/components/sections/settings-section.tsx
Error
Duplicate slug · Campaign with slug x already existspackages/backend/convex/content/mutations.ts:559
Edge
Schedule hint · Published, but scheduled... or its window has ended...src/features/content-management/campaigns/components/sections/settings-section.tsx:28
Error
Hero image required · Hero image is requiredsrc/features/content-management/campaigns/utils/campaign-schema.ts
Error
Description needed for action · Description is required for action campaignssrc/features/content-management/campaigns/utils/campaign-schema.ts
Error
Content needed for info · Content is required for info campaignssrc/features/content-management/campaigns/utils/campaign-schema.ts
Error
Link format · Link must be an app path (/) or URL (http/https)src/features/content-management/campaigns/utils/campaign-schema.ts
Edge
No end-after-start check · endsAt versus startsAt is not cross-checked in the schemasrc/features/content-management/campaigns/utils/campaign-schema.ts
Success
Campaign created · Toast Campaign created successfullysrc/app/dashboard/content-management/campaigns/new/page.tsx:19

Campaign Detail

Campaign Detail (Web)
Screen/dashboard/content-management/campaigns/[id]

Campaign Detail

Read-only campaign with schedule and status.

src/app/dashboard/content-management/campaigns/[id]/page.tsx

Entry

  • List title or View

Exits

  • Back to list
  • Edit → /[id]/edit
  • Publish or Unpublish → confirm

States · 4

Loading
Detail skeleton · Skeleton and loading.tsxsrc/app/dashboard/content-management/campaigns/[id]/loading.tsx
Error
Could not load this campaign · ErrorEmptyState on query errorsrc/app/dashboard/content-management/campaigns/[id]/campaign-detail-view.tsx:83
Edge
Missing doc redirects · Toast Campaign not found then redirect; not-found.tsx never reachedsrc/app/dashboard/content-management/campaigns/[id]/campaign-detail-view.tsx:59
Edge
Conditional cards · Content, Description, Features, Benefits, CTA show only when presentsrc/app/dashboard/content-management/campaigns/[id]/campaign-detail-view.tsx

Edit Campaign

Edit Campaign (Web)
Screen/dashboard/content-management/campaigns/[id]/edit

Edit Campaign

Edit a marketing campaign with the same form as create.

src/app/dashboard/content-management/campaigns/[id]/edit/page.tsx

Entry

  • Detail Edit
  • List menu Edit

Exits

  • Cancel → list
  • Submit → list

States · 4

Loading
Form skeleton · Skeleton while loadingsrc/app/dashboard/content-management/campaigns/[id]/edit/edit-campaign-view.tsx
Edge
Missing doc redirects · Toast Campaign not found and redirectsrc/app/dashboard/content-management/campaigns/[id]/edit/edit-campaign-view.tsx:16
Error
Slug re-checked · Slug uniqueness is re-checked server side on updatepackages/backend/convex/content/mutations.ts:684
Success
Campaign updated · Toast Campaign updated successfullysrc/app/dashboard/content-management/campaigns/[id]/edit/edit-campaign-view.tsx
Delete Carousel Slide (Web)
DialogCarouselDeleteAlert

Delete Carousel Slide

Confirm deleting a slide.

src/features/content-management/carousel/components/carousel-listing.tsx

Entry

  • Row menu Delete

Exits

  • Delete → toast
  • Cancel → closes

States · 1

Success
Slide deleted · Toast Carousel slide deleted or the server messagesrc/features/content-management/carousel/components/carousel-listing.tsx:105

Create Slide

Slide detail

Edit Slide

On this page