> ## 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.

# Admin notifications

> All notifications sent to EVO admins and staff

Admins receive notifications through the in-app bell, push notifications, Slack alerts, and the OpsAlerts dashboard.

## Push notifications

<AccordionGroup>
  <Accordion title="Early viral alert (Creative Director)">
    **Kind:** `admin_early_viral_alert`

    **Trigger:** Creator's post reaches 100K views within 48 hours

    **Title:** "\[Creator Name] is going viral — \[Brand Name]"

    **Body:** "100K views under 48h" + post caption

    **Recipients:** Assigned Creative Director for the brand, brand operator

    **Action:** Opens campaign creators view

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

  <Accordion title="Contract completed">
    **Kind:** `admin_contract_completed`

    **Trigger:** Creator completes contract placement target

    **Message:** "\[Creator Name] completed contract for \[Brand]"

    **Recipients:** Brand operator

    **Action:** Opens contract detail for renewal decision
  </Accordion>

  <Accordion title="Client request submitted">
    **Kind:** `admin_client_request_submitted`

    **Trigger:** Client submits request via client hub

    **Message:** Request details

    **Recipients:** Assigned brand operator
  </Accordion>
</AccordionGroup>

## In-app bell notifications

<AccordionGroup>
  <Accordion title="Creator posting behind">
    **Kind:** `admin_creator_posting_behind`

    **Trigger:** Creator falls behind on posting cadence

    **Recipients:** Brand operator/CD
  </Accordion>

  <Accordion title="Campaign posting behind">
    **Kind:** `admin_campaign_posting_behind`

    **Trigger:** Campaign overall falls behind on posting

    **Recipients:** Brand operator/CD
  </Accordion>

  <Accordion title="Creator metrics behind">
    **Kind:** `admin_creator_metric_behind`

    **Trigger:** Creator's metrics below threshold

    **Recipients:** Brand operator
  </Accordion>

  <Accordion title="Creator cadence flagged">
    **Kind:** `admin_creator_cadence_flagged`

    **Trigger:** Creator's posting cadence triggers flag

    **Recipients:** Brand operator
  </Accordion>

  <Accordion title="Brief overdue">
    **Kind:** `admin_brief_overdue`

    **Trigger:** Creative brief submission overdue

    **Recipients:** Assigned admin
  </Accordion>

  <Accordion title="Approval backlog">
    **Kind:** `admin_approval_backlog`

    **Trigger:** Creative approval queue backlogged

    **Recipients:** Admins with approval permissions
  </Accordion>

  <Accordion title="Weekly report due">
    **Kind:** `admin_weekly_report_due`

    **Trigger:** Weekly report due soon

    **Recipients:** Assigned admin
  </Accordion>

  <Accordion title="Weekly report overdue">
    **Kind:** `admin_weekly_report_overdue`

    **Trigger:** Weekly report past due

    **Recipients:** Assigned admin
  </Accordion>

  <Accordion title="Sync run incomplete">
    **Kind:** `admin_sync_run_incomplete`

    **Trigger:** Metrics sync job failed

    **Recipients:** Admin team
  </Accordion>

  <Accordion title="Creator sync failing">
    **Kind:** `admin_creator_sync_failing`

    **Trigger:** Individual creator's social sync failing repeatedly

    **Recipients:** Admin team
  </Accordion>

  <Accordion title="Creator community onboarded">
    **Kind:** `creator_community_onboarded`

    **Trigger:** Creator completes onboarding

    **Recipients:** Community Manager
  </Accordion>

  <Accordion title="Handle needs approval">
    **Kind:** `handle_needs_approval`

    **Trigger:** Creator connects new social handle

    **Recipients:** Admins with handle approval permissions
  </Accordion>

  <Accordion title="Strategy update requested">
    **Kind:** `strategy_update_requested`

    **Trigger:** Strategy update requested

    **Recipients:** Assigned strategy admin
  </Accordion>

  <Accordion title="Strategy approved">
    **Kind:** `strategy_approved`

    **Trigger:** Strategy approved

    **Recipients:** Strategy submitter
  </Accordion>

  <Accordion title="Strategy rejected">
    **Kind:** `strategy_rejected`

    **Trigger:** Strategy rejected

    **Recipients:** Strategy submitter
  </Accordion>

  <Accordion title="Strategy due soon">
    **Kind:** `strategy_due_soon`

    **Trigger:** Strategy due date approaching

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

## OpsAlerts dashboard

Separate from bell notifications, surfaced on the admin alerts dashboard at `/team/alerts`.

<AccordionGroup>
  <Accordion title="Creator posting behind">
    **Kind:** `admin_creator_posting_behind`

    **Trigger:** Creator behind on posting cadence

    **Severity:** Warning

    **Action:** Review creator's posting status
  </Accordion>

  <Accordion title="Campaign posting behind">
    **Kind:** `admin_campaign_posting_behind`

    **Trigger:** Campaign overall behind on posting

    **Severity:** Warning

    **Action:** Review campaign creators
  </Accordion>

  <Accordion title="Creator metric behind">
    **Kind:** `admin_creator_metric_behind`

    **Trigger:** Creator's performance metrics low

    **Severity:** Warning

    **Action:** Review creator performance
  </Accordion>

  <Accordion title="Creator cadence flagged">
    **Kind:** `admin_creator_cadence_flagged`

    **Trigger:** Creator's posting cadence triggers flag

    **Severity:** Warning

    **Action:** Review and acknowledge or escalate
  </Accordion>

  <Accordion title="Brief overdue">
    **Kind:** `admin_brief_overdue`

    **Trigger:** Creative brief overdue

    **Severity:** Warning

    **Action:** Follow up on brief submission
  </Accordion>

  <Accordion title="Approval backlog">
    **Kind:** `admin_approval_backlog`

    **Trigger:** Approval queue backlogged

    **Severity:** Warning

    **Action:** Clear approval queue
  </Accordion>

  <Accordion title="Sync run incomplete">
    **Kind:** `admin_sync_run_incomplete`

    **Trigger:** Metrics sync failed

    **Severity:** Error

    **Action:** Investigate sync failure
  </Accordion>

  <Accordion title="Creator sync failing">
    **Kind:** `admin_creator_sync_failing`

    **Trigger:** Creator's social sync failing

    **Severity:** Warning

    **Action:** Check creator's connected accounts
  </Accordion>

  <Accordion title="Contract completed">
    **Kind:** `admin_contract_completed`

    **Trigger:** Contract hit placement target

    **Severity:** Info

    **Action:** Review for renewal decision
  </Accordion>

  <Accordion title="Client request submitted">
    **Kind:** `admin_client_request_submitted`

    **Trigger:** Client filed request via hub

    **Severity:** Info

    **Action:** Review and respond to request
  </Accordion>
</AccordionGroup>

## Daily ops digests

Aggregated daily summaries for operational awareness.

<AccordionGroup>
  <Accordion title="Performance digest">
    **Kind:** `admin_ops_digest_performance`

    **Trigger:** Daily scheduled job

    **Recipients:** Ops admins

    **Content:** Performance summary across brands
  </Accordion>

  <Accordion title="Cadence digest">
    **Kind:** `admin_ops_digest_cadence`

    **Trigger:** Daily scheduled job

    **Recipients:** Ops admins

    **Content:** Cadence compliance summary
  </Accordion>

  <Accordion title="Approvals digest">
    **Kind:** `admin_ops_digest_approvals`

    **Trigger:** Daily scheduled job

    **Recipients:** Ops admins

    **Content:** Pending approvals summary
  </Accordion>
</AccordionGroup>

## Slack alerts

Internal Slack notifications for operational awareness.

<AccordionGroup>
  <Accordion title="Sync health alert">
    **Trigger:** Social media scraping fails or credits depleted

    **Channel:** Configured via `SCRAPE_SYNC_SLACK_WEBHOOK_URL`

    **Recipients:** Rafael, Brandon (one-shot per outage, re-arms on recovery)

    **Code:** `Metrics::CreditsAlert`, `Metrics::SyncSlackReporter`
  </Accordion>

  <Accordion title="Sync run status">
    **Trigger:** Scrape run starts or finishes

    **Channel:** Sync webhook

    **Content:** Run status, stats, duration
  </Accordion>

  <Accordion title="Daily metrics report">
    **Trigger:** Daily scheduled job

    **Channel:** General Slack

    **Content:** Summary stats across all campaigns

    **Code:** `Metrics::SlackDailyReportJob`
  </Accordion>

  <Accordion title="Strategy published (client Slack)">
    **Trigger:** Strategy published for brand with connected Slack

    **Channel:** Client's connected Slack workspace

    **Content:** Strategy summary

    **Code:** `Brands::StrategySlackUpdate`
  </Accordion>

  <Accordion title="Weekly report (client Slack)">
    **Trigger:** Weekly report sent for brand with connected Slack

    **Channel:** Client's connected Slack workspace

    **Content:** Report link

    **Code:** `WeeklyReports::Sender`
  </Accordion>
</AccordionGroup>

## Code references

| Component          | File                                          |
| ------------------ | --------------------------------------------- |
| OpsAlerts service  | `app/services/ops_alerts/`                    |
| Notification kinds | `app/services/notifications/kinds.rb`         |
| Slack client       | `app/services/integrations/slack_client.rb`   |
| Sync reporter      | `app/services/metrics/sync_slack_reporter.rb` |
| Credits alert      | `app/services/metrics/credits_alert.rb`       |
| Admin signals      | `app/services/admin_signals/`                 |
