figma guide
Designing affected individual breach notification and communication UI in Figma: Art. 34 notices, channels, and delivery tracking
Design affected individual breach notification UI in Figma with Art. 34 notices, multi-channel delivery, suppression rules, and handoff for privacy and comms teams.
- Published
- Updated
- Aug 19, 2026
- Read time
- 7 min
- Level
- Intermediate
Quick answer
Individual breach notification UI tells affected people what happened, what you did, and what they should do—without exposing other victims or leaking investigation details. Design a notification decision workspace (Art. 34 / state-law triggers), channel-aware templates (email, SMS, in-app, postal), audience segmentation and suppression rules, and delivery tracking with proof of send. Connect to regulatory filing, breach notification, privacy triage, and subprocessor cascade. Start from the Figma guides hub and pair with status page, trust center, and Dev Mode handoff.
Who this is for
- Product designers building privacy ops tooling where legal decides whether—and how—to notify individuals.
- Privacy and comms teams coordinating high-risk breach notices across email, SMS, and in-app surfaces.
- Engineering and support leads who need delivery logs, bounce handling, and suppression before mass send.
Notification decision workspace
IndividualNotificationDecision — Incident VIN-992 · PIN-1044 · Status: Pending legal review
├── Header: High risk to rights? Legal: Likely yes · Regulator notified: FIL-882 submitted · Individual notify: Required
├── Decision checklist:
│ ├── ☐ High risk to rights and freedoms (Art. 34 threshold)
│ ├── ☐ Encryption or technical measures reduce risk below threshold
│ ├── ☐ Subsequent measures taken (password reset, monitoring offer)
│ ├── ☐ Public communication would be more effective (Art. 34(3) exception)
│ └── ☐ State-law thresholds met (CA, NY, etc.) — separate toggle per jurisdiction
├── Audience estimate: 102,400 affected · 98,200 with email · 41,300 with SMS on file · 12,100 postal only
├── Actions: [ Approve notify ] [ Defer pending regulator ] [ Document no-notify rationale ] [ Request comms review ]
├── Linked: [Regulatory filing FIL-882](/designing-regulatory-authority-correspondence-and-breach-filing-archive-ui-in-figma/) · [Cascade worksheet](/designing-subprocessor-breach-notification-and-cascade-impact-ui-in-figma/)
└── Audit: Decision owner · Timestamp · Immutable rationale text · Linked evidence bundle
| Element | Purpose |
|---|---|
| Risk threshold panel | Shows why notify vs no-notify with editable legal rationale |
| Jurisdiction matrix | EU Art. 34 vs US state rules may differ on timing and content |
| Audience counters | Pre-send sanity check—do not show individual names in admin summary |
| Defer path | Some teams wait for regulator acknowledgment before public individual notice |
Verdict: Decision UI fails when “we sent email” is the only record—capture the legal basis for notify, defer, or no-notify before any channel goes live.
Audience segmentation and suppression
AudienceSegmentation — VIN-992 · 102,400 total · 3 segments · 1,240 suppressed
├── Segment A: EU residents · 48,200 · Template: EU Art. 34 · Language: EN + DE + FR variants
├── Segment B: US CA/NY · 22,100 · Template: State breach · Include AG reference if required
├── Segment C: All others · 32,100 · Template: General high-risk notice
├── Suppression rules (applied automatically):
│ ├── Already notified via vendor direct (subprocessor) · 890 · Source: [Cascade impact](/designing-subprocessor-breach-notification-and-cascade-impact-ui-in-figma/)
│ ├── Deceased / invalid contact · 210 · Do not send
│ ├── Duplicate accounts merged · 140 · Single notice per person
│ └── Legal hold on account · 0
├── Manual exclusion: Support tickets referencing incident · Review queue · 12 pending
├── Preview: Sample 5 anonymized records per segment · No PII in design file exports
└── Export: Segment manifest hash for [compliance export](/designing-compliance-exports-and-legal-hold-ui-in-figma/)
Design segment cards with channel availability per cohort—not one template for 102k people with mixed contact data.
Template composer (multi-channel)
NoticeTemplateComposer — Segment A · EU Art. 34 · Draft v3 · Pending comms + legal
├── Required content blocks (regulatory):
│ ├── Nature of breach in clear plain language
│ ├── Categories of data affected · Approximate numbers (range OK)
│ ├── Likely consequences · Measures taken by controller
│ ├── Recommended steps for individual · Contact point (DPO / privacy team)
│ └── Link to FAQ — not raw forensic detail
├── Channel variants (linked components in Figma):
│ ├── Email — Subject line · Preheader · Body · CTA to account security
│ ├── SMS — 160/320 char budget · Short link to notice landing page
│ ├── In-app banner + modal — Logged-in users · Persistent until acknowledged
│ ├── Postal — Print layout · Return address · QR to digital FAQ
│ └── Notice landing page — Public URL · No login required · Version stamped
├── Personalization tokens: {{first_name}} · {{last_four}} · {{reset_link}} · {{monitoring_enrollment}}
├── Approval chain: Legal ☐ · Comms ✓ · DPO ☐ · Executive ☐ (if external PR overlap)
├── Schedule: Send after FIL-882 acknowledgment · Stagger: 10k/hour rate limit
└── Link: [Remediation offers](/designing-breach-remediation-offers-and-credit-monitoring-enrollment-ui-in-figma/) block optional in template
Plain language preview mode shows reading level and flags jargon—privacy notices are not security runbooks.
Delivery tracking and proof of send
DeliveryTracker — Campaign IND-441 · Segment A · Sent 2026-08-26 09:00 UTC
├── Summary: Queued 48,200 · Delivered 47,891 · Bounced 241 · Suppressed 68 · Opened 31,204 · CTA clicked 8,902
├── Bounce handling:
│ ├── Hard bounce → Mark undeliverable · Trigger postal fallback task if required
│ ├── Soft bounce → Retry 3x · Escalate to manual outreach queue
│ └── SMS undeliverable → Email fallback · Log channel switch
├── Acknowledgment (in-app): 12,440 acknowledged · Reminder at 7 days for unacked
├── Proof bundle: Send log · Template version · Segment hash · Approval timestamps
├── Regulator ask: Export "reasonable efforts" report for [FIL-882 thread](/designing-regulatory-authority-correspondence-and-breach-filing-archive-ui-in-figma/)
└── Link: [Audit log](/designing-audit-log-and-security-activity-ui-in-figma/) · [Customer status page](/designing-customer-incident-status-page-and-communication-ui-in-figma/) (high-level only)
| Metric | Why it matters |
|---|---|
| Delivered vs bounced | Demonstrates reasonable efforts to reach individuals |
| Template version | Proves what text was actually sent, not draft v2 |
| Channel fallback | Shows attempt when primary contact failed |
| Acknowledgment rate | In-app notices need persistent UI until dismissed |
Comparison: individual notice vs adjacent tools
| Tool | Focus | This UI adds |
|---|---|---|
| Breach notification | Regulator-first filing composer | Consumer-facing templates and delivery |
| Regulatory archive | Authority threads and FIL-* records | Links IND-* campaigns to FIL-* incidents |
| Subprocessor cascade | Vendor incident impact | Suppression when vendor already notified users |
| Status page | Public incident summary | Never replace individual notice with status page alone |
| Trust center | Evergreen policies | Incident FAQ linked from notice, not generic privacy policy |
Handoff checklist (Dev Mode)
- IndividualNotificationDecision — incident_id, jurisdiction_rules[], risk_assessment, notify_required, rationale, decided_by, decided_at.
- NotificationSegment — segment_id, incident_id, template_id, audience_count, suppression_rules[], channel_plan[].
- NoticeTemplate — template_id, version, channel, locale, content_blocks[], approval_chain[], immutable_at_send.
- NotificationCampaign — campaign_id (IND-*), segment_id, scheduled_at, sent_at, rate_limit, status.
- DeliveryEvent — campaign_id, recipient_hash, channel, event_type (queued/sent/delivered/bounced/opened/clicked), timestamp.
- SuppressionRecord — incident_id, reason, source, count, manifest_hash.
- Accessibility — Email and landing page WCAG contrast; SMS plain language; in-app modal focus trap and dismiss.
Common mistakes
| Mistake | Why it hurts | Fix |
|---|---|---|
| Same copy for regulator and individuals | Confusing and legally risky | Separate templates with plain-language blocks |
| Send before legal decision recorded | Audit gap | Gate send on signed decision workspace |
| Show victim lists in admin UI | Privacy violation in the tool itself | Aggregates and hashed IDs only |
| No bounce fallback | Fails “reasonable efforts” | Postal or alternate channel tasks |
| Link to internal runbook in email | Leaks investigation detail | Public FAQ and account security CTAs only |
| Ignore subprocessor suppression | Double notification | Import cascade suppress list |
| No template version at send | Cannot prove content | Snapshot v3 at campaign start |
| Status page replaces Art. 34 notice | Non-compliance | Status page supplements, not substitutes |
Recommended workflow
- Complete regulatory decision in breach notification and privacy triage before opening individual notify workspace.
- Record notify / no-notify rationale with jurisdiction checklist and link to FIL-* filing.
- Build segments with suppression from subprocessor cascade.
- Draft multi-channel templates; run comms and legal approval; snapshot version.
- Schedule send with rate limits; monitor delivery tracker and bounce queues.
- Export proof bundle into regulatory archive and compliance exports at incident close.
FAQ
When is individual notification not required?
When risk to rights is unlikely after mitigation, or Art. 34(3) public communication is more effective—document the rationale in the decision workspace, do not leave the field blank.
Can we notify before the regulator?
Jurisdiction-dependent. UI should support defer until FIL acknowledgment without blocking template prep and segment review.
In-app only for logged-in users?
Insufficient if email or SMS is available—design multi-channel with in-app as reinforcement, not sole channel.
Link to remediation offers?
Optional CTA block in template composer when legal approves monitoring or credit services.
Public FAQ vs individual email?
Email points to versioned notice landing page; FAQ on status page stays high-level.
Next steps
- Design breach remediation offers and credit monitoring enrollment UI in Figma — post-notice services for affected individuals
- Design regulatory authority correspondence and breach filing archive UI in Figma — link IND-* campaigns to FIL-* threads
- Design breach notification and regulatory reporting UI in Figma — upstream regulator filing shared incident context
- Design subprocessor breach notification and cascade impact UI in Figma — suppression when vendor already notified users
- Design privacy incident severity classification and triage UI in Figma — upstream intake before individual notify decision
§ Keep reading