figma guide

Designing customer incident status page and communication UI in Figma: components, subscriptions, and updates

Design customer-facing incident status page UI in Figma with component health, incident timelines, email/SMS templates, subscriptions, and postmortem publishing for SaaS teams.

Published
Updated
Jul 27, 2026
Read time
9 min
Level
Intermediate

Quick answer

Customer incident status page UI is how SaaS teams earn trust during outages—clear component health, honest timelines, subscription options, and postmortems without leaking internals. Design a public status page with component groups and history; an incident composer synced to internal war room state; subscriber notification templates (email, SMS, webhook); and a postmortem publish flow with redaction. Start from the Figma guides hub and pair with BCP/DR planning, breach notification, post-incident review, inline alerts, and Dev Mode handoff.


Who this is for

  • Product designers building trust centers, public status pages, and in-app incident banners for B2B SaaS.
  • Design system teams aligning operational status colors, incident severity badges, and timeline components with badges, toasts, and navigation.
  • Engineering and comms teams implementing war-room-to-public sync, subscriber delivery, and redacted postmortem export.

Status page hub (public + admin)

StatusAdmin — acme.status.example.com
├── Public preview: All systems operational · 3 components degraded history (90d)
├── Active incident: INC-PUB-2026-041 · Investigating · Last update 4m ago
├── Actions: [ New incident ] [ Maintenance window ] [ Publish postmortem ] [ Preview subscriber email ]
├── Tabs: Components · Incidents · Subscribers · Templates · Settings
└── Sync: War room INC-2026-0891 · Comms mode: Customer-facing only
SurfacePurpose
Public status pageComponent health, active incidents, history
Incident composerDraft updates; approval before publish
Subscriber managementEmail/SMS/webhook preferences
TemplatesPre-approved copy blocks by severity
SettingsCustom domain, branding, RSS/Atom

Verdict: Admin composer is downstream of internal war room—never the source of truth for technical state. Sync status labels: Investigating → Identified → Monitoring → Resolved.


Component groups and health states

ComponentList — Customer-facing
├── API (Critical) · Operational · Uptime 99.97% (90d)
├── Dashboard (Critical) · Operational
├── Webhooks (High) · Degraded performance · Linked INC-PUB-041
├── File exports (Medium) · Operational
├── EU region (Critical) · Maintenance scheduled 2026-08-02 02:00 UTC
└── [ Reorder ] [ Group under "Platform" ] [ Hide internal-only ]
StateColor tokenPublic copy
OperationalSuccess / green”All systems operational”
DegradedWarning / amber”Experiencing degraded performance”
Partial outageError / red”Partial outage”
Major outageError / red (bold)“Major outage”
MaintenanceInfo / blue”Scheduled maintenance”

Map internal BCP service tiers to public components—customers do not need 47 microservices exposed.

Use semantic color tokens for light/dark status page themes.


Public incident timeline

PublicIncident — INC-PUB-2026-041 · Webhooks degraded
├── Status banner: Degraded · Started 2026-07-27 14:22 UTC · Duration 47m
├── Timeline:
│   14:22 — Investigating increased webhook delivery delays
│   14:41 — Identified issue with outbound queue worker
│   15:02 — Fix deployed; monitoring recovery
│   15:09 — Resolved; deliveries returning to normal
├── Affected: Webhooks only · API and Dashboard unaffected
├── Subscribe: [ Email ] [ SMS ] [ RSS ] [ Slack webhook ]
└── Postmortem: Not yet published
ElementUI detail
Status headerCurrent phase + start time + duration (live updating)
Update entriesNewest first or oldest first—pick one; sticky setting
Affected componentsMulti-select chips; auto from war room
Impact scopePlain language; no internal hostnames
Subscribe CTAsAbove fold on mobile
Maintenance vs incidentDistinct page template—scheduled banner style

Each published update triggers subscriber notifications—show pending send queue in admin.


Incident composer (internal → public)

IncidentComposer — Draft update #3
├── Linked war room: INC-2026-0891 · Internal phase: Monitoring
├── Public status: Monitoring · Map: Internal Monitoring → Public Monitoring
├── Message (plain language): We deployed a fix and are watching webhook delivery rates.
├── Affected components: [x] Webhooks · [ ] API · [ ] Dashboard
├── Notify: [x] Email subscribers · [x] SMS (Critical only) · [ ] Webhook
├── Approval: Required from Comms lead · Legal review: Not required
└── [ Schedule publish ] [ Publish now ] [ Save draft ]
GuardrailWhy
Approval gatePrevents engineer raw notes going public
Redaction lintFlag internal IDs, employee names, CVE detail
Template snippets”Investigating”, “Identified”, standard impact phrases
Drill mode lockWhen BCP drill active—block real sends
Breach splitData breach uses regulatory comms—separate workflow
RollbackUnpublish or amend with correction notice

Composer shows side-by-side preview: admin draft vs public render (mobile + desktop frames).


Subscriber and notification preferences

SubscribeModal — Public
├── Email: user@company.com · Verify via OTP
├── SMS: +1 *** *** 4521 · Critical incidents only
├── Webhook: https://hooks.customer.com/status · JSON payload docs
├── Preferences: All incidents · Only components I use · Critical only
└── Unsubscribe link in every message — CAN-SPAM / GDPR footer
SubscriberAdmin
├── Total verified: 12,402 · SMS: 891 · Webhooks: 234
├── Segment: Enterprise customers · Auto from account tier API
├── Rate limit: Max 1 SMS/customer/hour unless Major outage
└── [ Test send ] [ Export subscriber audit log ]
ChannelDesign note
EmailSubject line pattern: [Acme Status] Webhooks — Monitoring
SMSShort URL to status page; no technical detail
WebhookJSON schema versioned; link webhooks admin docs
RSS/AtomFor power users and status aggregators
In-app bannerReuse inline alert on logged-in app

Verification flow pairs with email OTP UI patterns.


Maintenance windows

MaintenanceComposer
├── Title: Database index upgrade — EU region
├── Schedule: 2026-08-02 02:00–04:00 UTC · Reminder 24h and 1h before
├── Expected impact: Dashboard read-only; API writes queued
├── Components: EU region · Dashboard (read-only badge)
├── Public listing: Scheduled maintenance (not incident)
└── Auto-resolve: Publish "Completed" at end time unless extended

Maintenance uses blue/info styling—distinct from red incident banner to reduce alert fatigue.

Extension flow: convert to incident if maintenance overruns—preserve timeline continuity.


Postmortem publish flow

PostmortemPublish — from PIR INC-2026-0891
├── Source: Executive summary v2 (Legal approved)
├── Redaction preview: Internal names removed · Vendor names generalized
├── Sections: Summary · Timeline · Root cause (customer-safe) · Remediation
├── Publish to: Status page history · Email all subscribers · Trust center PDF
├── Schedule: Publish 2026-07-28 10:00 UTC (after peak traffic)
└── [ Legal approval ✓ ] [ Comms approval ✓ ] [ Publish ]
SectionCustomer-safe rule
SummaryBusiness impact in plain terms
TimelinePublic updates only—no internal war room entries
Root causeSystem category (config, capacity, third party)—no blame
RemediationWhat customers should expect next
ExcludeIndividual names, exact exploit detail, pre-patch vulnerability

Import from PIR executive summary—never raw RCA tree.


In-app status integration

SurfacePattern
Global bannerActive Major outage only—link status page
Component badgeSettings → “Service health” with same component list
API status headerOptional X-Status: degraded docs for developers
Support widgetPrefill incident ID for support tickets
Trust centerHistorical uptime + postmortem archive

Use responsive frames for mobile banner height—do not cover primary nav actions.


Integration with internal security ops

Internal moduleCustomer status usage
War roomSource incident phase; comms lead role publishes
BCP/DR runbookStep “Update status page” with composer deep link
Breach notificationSeparate regulated disclosure—do not merge with availability incident
PIRFeed postmortem publish
Audit logWho published each public update
Notification prefsAlign marketing vs operational email categories

Security incidents without customer impact may stay internal-only—composer shows “No public incident” toggle with default off for data-only events until Legal approves.


Status page templates by audience

TemplateTonePairs with
Developer API SaaSTechnical component names, webhook detailAPI keys
Business app SaaSFeature names (Reports, Billing)Account dashboard
Multi-tenant B2BRegion + tenant-agnostic messagingSSO
Marketplace / platformSeller + buyer impact sectionsVendor risk
Enterprise trust centerUptime SLAs, postmortem PDF archiveSecurity posture

Pick one primary template—avoid mixing developer jargon with consumer copy on same page.


Handoff checklist (Dev Mode)

  • Component schema — public name, internal ID, tier, display order.
  • Incident lifecycle — public phase enum and war room mapping table.
  • Update object — timestamp, message markdown subset, affected components.
  • Notification payloads — email HTML, SMS length, webhook JSON v1.
  • Approval roles — comms required; legal conditional on breach flag.
  • Redaction rules — regex list for composer lint warnings.
  • Drill mode — global flag blocking external sends.
  • Accessibility — status colors not sole indicator; screen reader labels for timeline.
  • Uptime calculation — formula tooltip on public history charts.

Common mistakes

MistakeWhy it hurtsFix
Public updates ahead of internal syncContradictory messagesWar room phase drives composer defaults
Too many componentsCustomer confusionGroup into 5–9 public components
Technical jargon in SMSPanic, support floodLink to status page; plain language
No subscribe on mobileUsers refresh Twitter insteadSticky subscribe CTA
Publishing raw PIRLeak internals, legal riskRedacted postmortem flow
Missing maintenance distinctionCry-wolf on incidentsSeparate maintenance template
No approval on first publishEngineer mistake goes liveComms approval gate
Breach on status page onlyRegulatory gapsRoute to breach workflow
Forgetting in-app bannerLogged-in users unawareMajor outage banner component
No audit trailTrust disputesLog publisher + diff in audit log

  1. Design public status page with component health, incident timeline, and subscribe CTAs.
  2. Build incident composer with war room sync, approval, and redaction lint.
  3. Create notification templates for email, SMS, and webhook channels.
  4. Add maintenance window flow distinct from incident styling.
  5. Wire postmortem publish from PIR executive summary with Legal gates.
  6. Spec in-app banner and trust center links in Dev Mode.

FAQ

Status page vs breach notification?

Status page covers availability and performance customers experience. Breach notification covers personal data exposure with regulatory timelines—different templates, approvers, and archives.

How much detail in public root cause?

Category-level (misconfiguration, upstream provider, capacity)—enough to be credible, not enough to aid attackers. Full detail stays in internal PIR.

Sync with war room?

War room Comms lead role gets composer access; phase changes suggest draft update text—human approves before send.

SMS for every update?

Default Critical/Major only or user opt-in—rate limit to prevent alert fatigue.

Uptime percentages?

Show 90-day rolling unless SLA defines otherwise; tooltip explains calculation and excluded maintenance.


Next steps

Share on X

§ Keep reading

Related guides.