> ## Documentation Index
> Fetch the complete documentation index at: https://docs.evomarketing.co/llms.txt
> Use this file to discover all available pages before exploring further.

# Creator notifications

> All notifications sent to creators in the EVO Dialed platform

Creators receive notifications across multiple channels: push notifications (iOS/web), in-app bell notifications, email, SMS, and chat messages.

## Push notifications

Push notifications are sent via APNS (iOS) for real-time alerts. Requires registered device token and user notification settings enabled.

<AccordionGroup>
  <Accordion title="Early viral alert">
    **Kind:** `early_viral_alert`

    **Trigger:** Post reaches 100K views within 48 hours of posting

    **Title:** "100K views in 48h — double down!"

    **Body:** Brand name + post caption (truncated to 80 chars)

    **Recipients:** Creator who made the post

    **Action:** Opens the brand hub overview

    **Code:** `Notifications::EarlyViralAlertNotifier`
  </Accordion>

  <Accordion title="Creative approved">
    **Kind:** `creative_approved`

    **Trigger:** Admin approves submitted creative

    **Message:** "Your draft was approved"

    **Recipients:** Creator who submitted the content

    **Action:** Opens creative approval detail
  </Accordion>

  <Accordion title="Creative needs revision">
    **Kind:** `creative_needs_revision`

    **Trigger:** Admin requests changes on submitted content

    **Message:** "Changes requested on your draft"

    **Recipients:** Creator who submitted the content

    **Action:** Opens creative submission detail
  </Accordion>

  <Accordion title="Handle rejected">
    **Kind:** `handle_rejected`

    **Trigger:** Admin rejects a connected social handle

    **Message:** "Your \[platform] handle was not approved" + reason

    **Recipients:** Creator whose handle was rejected

    **Action:** Opens accounts settings
  </Accordion>

  <Accordion title="Handle approved">
    **Kind:** `handle_approved`

    **Trigger:** Admin approves a connected social handle

    **Message:** Approval confirmation

    **Recipients:** Creator whose handle was approved
  </Accordion>

  <Accordion title="Removed from brand">
    **Kind:** `removed_from_brand`

    **Trigger:** Creator is removed from a brand deal

    **Message:** "You have been removed from \[Brand Name]"

    **Recipients:** Creator who was removed

    **Action:** Opens dashboard
  </Accordion>

  <Accordion title="Brand approved">
    **Kind:** `brand_approved`

    **Trigger:** Creator approved for a brand deal

    **Message:** Brand-specific approval message

    **Recipients:** Creator who was approved
  </Accordion>

  <Accordion title="Brand deal invited">
    **Kind:** `brand_deal_invited`

    **Trigger:** Creator invited to join a brand deal

    **Message:** Deal invitation message

    **Recipients:** Invited creator
  </Accordion>

  <Accordion title="Brand deal published">
    **Kind:** `brand_deal_published`

    **Trigger:** New brand deal published to job board

    **Message:** Deal announcement

    **Recipients:** All eligible creators based on targeting criteria
  </Accordion>

  <Accordion title="Creator hub message (flag acknowledgment)">
    **Kind:** `creator_hub_message`

    **Trigger:** Yellow flag added to creator account, or operator sends hub message

    **Message:** Custom operator message or flag notification

    **Recipients:** Creator with the flag

    **Action:** Opens flag acknowledgment modal on brand hub
  </Accordion>

  <Accordion title="Pipeline status changed">
    **Kind:** `pipeline_status_changed`

    **Trigger:** Brand moved to new pipeline stage (6 active stages only, not onboarding/off\_boarded)

    **Message:** Stage-specific copy

    **Recipients:** All creators on the affected brand

    **Channels:** Email, chat, push, bell
  </Accordion>

  <Accordion title="Campaign paused">
    **Kind:** `campaign_paused`

    **Trigger:** Operator pauses campaign posting

    **Message:** Brand-specific pause message

    **Recipients:** All creators on the affected brand
  </Accordion>

  <Accordion title="App install reward">
    **Kind:** `app_install_reward`

    **Trigger:** Promotional sweep for web-only creators

    **Message:** Coffee offer for downloading the iOS app

    **Recipients:** Creators who have not installed iOS app
  </Accordion>

  <Accordion title="Leaderboard top 3">
    **Kind:** `leaderboard_top_3`

    **Trigger:** Creator places in top 3 on monthly leaderboard

    **Message:** Congratulations message

    **Recipients:** Top 3 winners
  </Accordion>

  <Accordion title="Task assigned">
    **Kind:** `task_assigned`

    **Trigger:** Contract task assigned to creator

    **Message:** Task details

    **Recipients:** Assigned creator
  </Accordion>
</AccordionGroup>

## In-app bell notifications

Bell icon notifications appear in the notification center within the app.

<AccordionGroup>
  <Accordion title="Announcement published">
    **Kind:** `announcement_published`

    **Trigger:** Admin publishes announcement targeting creator's audience

    **Message:** Announcement title and preview

    **Recipients:** Creators matching announcement audience criteria
  </Accordion>

  <Accordion title="Strategy updated">
    **Kind:** `strategy_updated`

    **Trigger:** Brand strategy published or updated

    **Message:** "Strategy updated for \[brand]"

    **Recipients:** All creators on the brand
  </Accordion>

  <Accordion title="Posting cadence changed">
    **Kind:** `posting_cadence_changed`

    **Trigger:** Creator's posting cadence requirement changed

    **Message:** New cadence information

    **Recipients:** Affected creator
  </Accordion>

  <Accordion title="Launch date changed">
    **Kind:** `launch_date_changed`

    **Trigger:** Campaign launch date changed

    **Message:** New date information

    **Recipients:** All creators on the brand
  </Accordion>

  <Accordion title="Campaign completed">
    **Kind:** `campaign_completed`

    **Trigger:** Campaign finishes

    **Message:** Completion message

    **Recipients:** All creators on the brand
  </Accordion>

  <Accordion title="Campaign status changed">
    **Kind:** `campaign_status_changed`

    **Trigger:** Campaign status changes (active/paused/finished)

    **Message:** Status update

    **Recipients:** All creators on the brand
  </Accordion>

  <Accordion title="Weekly report sent">
    **Kind:** `weekly_report_sent`

    **Trigger:** Weekly performance report published

    **Message:** Report link

    **Recipients:** Creator
  </Accordion>

  <Accordion title="Ad code requested">
    **Kind:** `ad_code_requested`

    **Trigger:** Client requests ad code from creator

    **Message:** Ad code request details

    **Recipients:** Creator
  </Accordion>

  <Accordion title="Brand rejected">
    **Kind:** `brand_rejected`

    **Trigger:** Brand deal application rejected

    **Message:** Rejection message

    **Recipients:** Applicant
  </Accordion>

  <Accordion title="Chat mention">
    **Kind:** `chat_mention`

    **Trigger:** @mention in community chat

    **Message:** "\[Sender] mentioned you in #\[channel]"

    **Recipients:** Mentioned creator
  </Accordion>

  <Accordion title="Chat message">
    **Kind:** `chat_message`

    **Trigger:** DM received or thread reply

    **Message:** "\[Sender] sent you a message" or "\[Sender] replied in a thread"

    **Recipients:** Message recipient
  </Accordion>

  <Accordion title="View milestones">
    **Kind:** `post_view_milestone_{threshold}`

    **Trigger:** Post hits view milestone (10K, 50K, 100K, 500K, 1M)

    **Message:** Milestone celebration

    **Recipients:** Creator who made the post
  </Accordion>
</AccordionGroup>

## Email notifications

<AccordionGroup>
  <Accordion title="Auth email (magic link)">
    **Mailer:** `AuthMailer`

    **Trigger:** Sign-in link or password reset requested

    **Recipients:** User requesting authentication

    **Content:** Magic link for authentication
  </Accordion>

  <Accordion title="Rejection letter">
    **Mailer:** `CreatorRejectionMailer`

    **Trigger:** Creator application rejected

    **Recipients:** Rejected applicant

    **Content:** Rejection notice with 60-day reapply window
  </Accordion>

  <Accordion title="Acceptance letter">
    **Mailer:** `CreatorAcceptanceMailer`

    **Trigger:** Priority-source creator accepted

    **Recipients:** Accepted creator

    **Content:** Welcome letter
  </Accordion>

  <Accordion title="Pipeline status change">
    **Mailer:** `BrandPipelineStatusMailer`

    **Trigger:** Brand moved to new pipeline stage (6 active stages only)

    **Recipients:** All creators on the affected brand

    **Content:** Status update for the brand
  </Accordion>

  <Accordion title="Campaign pause">
    **Mailer:** `CampaignPauseMailer`

    **Trigger:** Campaign paused by operator

    **Recipients:** All creators on the brand

    **Content:** Pause notification
  </Accordion>

  <Accordion title="Creative approval result">
    **Mailer:** `CreativeApprovalMailer`

    **Trigger:** Creative approved or rejected

    **Recipients:** Creator who submitted

    **Content:** Review result with next steps
  </Accordion>

  <Accordion title="Announcement">
    **Mailer:** `AnnouncementMailer`

    **Trigger:** Admin publishes announcement with email channel

    **Recipients:** Targeted creators

    **Content:** Announcement content
  </Accordion>

  <Accordion title="App install reward">
    **Mailer:** `AppInstallRewardMailer`

    **Trigger:** Promo sweep job for web-only creators

    **Recipients:** Creators without iOS app

    **Content:** Coffee reward offer
  </Accordion>

  <Accordion title="Invite">
    **Mailer:** `InviteMailer`

    **Trigger:** Creator invited to platform

    **Recipients:** Invitee

    **Content:** Platform invitation
  </Accordion>

  <Accordion title="Contract signed">
    **Mailer:** `ContractSubmissionMailer`

    **Trigger:** Creator signs contract

    **Recipients:** Signer

    **Content:** Signed contract copy
  </Accordion>

  <Accordion title="Credential invite">
    **Mailer:** `CreatorCampaignCredentialMailer`

    **Trigger:** Credentials shared with creator

    **Recipients:** Creator

    **Content:** Login credentials for campaign
  </Accordion>
</AccordionGroup>

## SMS notifications

SMS requires Twilio configured and user has not opted out.

<AccordionGroup>
  <Accordion title="Creative approved">
    **Trigger:** Creative approved by admin

    **Message:** "Your creative was approved"

    **Recipients:** Creator with phone number
  </Accordion>

  <Accordion title="Creative rejected">
    **Trigger:** Creative rejected with revision request

    **Message:** "Changes were requested on your creative"

    **Recipients:** Creator with phone number
  </Accordion>

  <Accordion title="Creative followup">
    **Trigger:** Rejection followup after period

    **Message:** "Please resubmit your creative"

    **Recipients:** Creator with phone number
  </Accordion>
</AccordionGroup>

## Automated chat messages (DMs)

System-sent direct messages from the automated messaging system.

<AccordionGroup>
  <Accordion title="Welcome DM">
    **Template:** `creator_welcome_dm`

    **Trigger:** Creator completes onboarding (15-min backstop job ensures delivery)

    **Sender:** Community Manager (configurable via COMMUNITY\_MANAGER\_BOOKING\_URL)

    **Recipients:** New creator via direct message

    **Content:** Coach introduction and next steps
  </Accordion>

  <Accordion title="Brand placement DM">
    **Template:** `brand_placement_dm`

    **Trigger:** Creator approved for brand placement

    **Content:** Celebration message + expectations
  </Accordion>

  <Accordion title="Inactivity nudge">
    **Template:** `deal_inactivity_nudge_dm`

    **Trigger:** Creator inactive for 24-48 hours

    **Content:** Activity reminder
  </Accordion>

  <Accordion title="Inactivity warning">
    **Template:** `deal_inactivity_warning_dm`

    **Trigger:** Creator inactive for 48-96 hours

    **Content:** Spot warning
  </Accordion>

  <Accordion title="App update reminder">
    **Template:** `app_update_dm`

    **Trigger:** Creator's app version behind

    **Content:** Update reminder
  </Accordion>

  <Accordion title="Removal review message">
    **Template:** `removal_review_message`

    **Trigger:** 3 warnings + 2 days passed

    **Channel:** Brand Hub message

    **Content:** Escalation notice
  </Accordion>
</AccordionGroup>

## Chat system messages

System-generated messages in chat channels.

<AccordionGroup>
  <Accordion title="Creator joined">
    **Type:** `system`

    **Trigger:** Creator joins brand channel

    **Content:** "Welcome to \[brand]! \[name] has joined"
  </Accordion>

  <Accordion title="Creator removed">
    **Type:** `system`

    **Trigger:** Creator removed from brand

    **Content:** "\[name] was removed from this channel"
  </Accordion>

  <Accordion title="Campaign pause alert">
    **Type:** `alert`

    **Trigger:** Campaign paused

    **Content:** "PAUSE ALL POSTING" alert
  </Accordion>

  <Accordion title="Pipeline status alert">
    **Type:** `alert`

    **Trigger:** Pipeline status changed

    **Content:** Status change announcement
  </Accordion>

  <Accordion title="Leaderboard announcement">
    **Type:** `leaderboard`

    **Trigger:** Monthly leaderboard published

    **Content:** Top creators announcement
  </Accordion>

  <Accordion title="Tier upgrade">
    **Type:** `tier_up`

    **Trigger:** Creator advances to higher tier

    **Content:** Tier celebration message
  </Accordion>
</AccordionGroup>

## Code references

| Component               | File                                           |
| ----------------------- | ---------------------------------------------- |
| Notification kinds      | `app/services/notifications/kinds.rb`          |
| Notification dispatcher | `app/services/mc/notification_dispatcher.rb`   |
| Chat notifications      | `app/services/chat/notification_dispatcher.rb` |
| Push delivery           | `app/services/push/apns_client.rb`             |
| Automated messages      | `app/services/automated_messages/catalog.rb`   |
| iOS push handling       | `dialed/Utils/Push/PushManager.swift`          |
