figma guide
Designing privacy notice version management and policy changelog UI in Figma: versions, diffs, and consent linkage
Design privacy notice version management UI in Figma with policy diffs, jurisdiction routing, consent linkage, re-consent triggers, and audit exports for Privacy and Legal teams.
- Published
- Updated
- Aug 05, 2026
- Read time
- 9 min
- Level
- Intermediate
Quick answer
Privacy notice version management is the source-of-truth layer that ties published policy text to consent events, cookie banners, and DSAR evidence—without it, “Policy v3.8” in your consent ledger is meaningless. Design a policy registry with draft → legal review → published states; a side-by-side diff viewer for jurisdiction variants; and consent linkage rules that fire re-consent or banner updates when material changes ship. Start from the Figma guides hub and pair with cookie consent UI, trust center, ROPA activities, DSAR portal, and Dev Mode handoff.
Who this is for
- Product designers building privacy ops consoles where Legal publishes notices and Product needs to know what changed downstream.
- Design system teams standardizing version badges, diff highlights, and “effective date” chips across admin and customer surfaces.
- Privacy counsel and Legal ops who need immutable version history—not a Google Doc with 47 suggested edits and no publish timestamp.
Policy registry hub (internal overview)
PolicyHub — Acme Privacy · 12 active notices · 3 drafts · Last publish Aug 4, 2026
├── Header: Privacy Policy v4.3 · Cookie Policy v2.1 · DPA v1.8 · 6 jurisdiction variants
├── Actions: [ New version ] [ Compare versions ] [ Schedule publish ] [ Export changelog ]
├── Tabs: Notice registry · Drafts · Jurisdiction map · Consent linkage · Audit trail · Reports
├── Alert: Draft v4.4 · Material change flagged · Re-consent rule pending Legal approval
├── Filters: Notice type · Jurisdiction · Status · Effective date · Owner · Material change
└── Link: [Trust center](/designing-trust-center-and-security-documentation-ui-in-figma/) · Consent admin · Cookie consent · ROPA
| Section | Purpose |
|---|---|
| Notice registry | All published and archived privacy, cookie, and subprocessors notices |
| Drafts | In-progress versions with review assignments and diff preview |
| Jurisdiction map | Which variant serves EU, UK, US-CA, US general, etc. |
| Consent linkage | Which policy version IDs attach to consent capture events |
| Audit trail | Who published, when, and what downstream jobs ran |
| Reports | Regulator export; version adoption by surface |
Verdict: Policy version UI must answer “what text did this user see when they consented on June 12?”—if you cannot reconstruct that, consent disputes and DSAR responses fail.
Version detail and diff viewer
PolicyDetail — Privacy Policy · v4.3 · Effective Jul 15, 2026 · Status: Published
├── Metadata: Notice type Privacy · Owner @legal-privacy · Locales en, de, fr
├── Jurisdictions: EU (default) · UK (Schrems footnote) · US-CA (CPRA addendum)
├── Diff vs v4.2 (Jul 1, 2026):
│ ├── §3.2 Analytics · ADDED "session replay for product improvement"
│ ├── §5.1 Retention · CHANGED "90 days" → "180 days" for usage logs
│ ├── §7 Subprocessors · ADDED "Amplitude EU" · Link [DPA hub](/designing-data-processing-agreements-and-subprocessor-management-ui-in-figma/)
│ └── Material change: YES · Triggers: banner update · ROPA review · optional re-consent
├── Linked surfaces:
│ ├── Cookie banner copy block B-12 · Last synced Jul 15 09:00 UTC
│ ├── Signup checkbox label P-05 · Consent purpose Marketing email
│ └── Trust center public page · CDN cache TTL 24h
├── Downstream jobs: CMP sync Complete · 847k users flagged for re-consent review
└── [ View full diff ] [ Rollback (Legal only) ] [ Clone to draft v4.4 ]
| Diff element | UI pattern |
|---|---|
| Section anchors | Jump links matching public notice headings |
| Change type | Added · Removed · Modified · Moved |
| Material flag | Legal toggle with required justification |
| ROPA impact | Auto-suggest activities to review when processing text changes |
| Locale parity | Warning when DE/FR drafts lag EN publish |
Material changes should never publish silently—require checklist: Legal sign-off, DPO ack if processing changed, and downstream surface sync status.
Jurisdiction routing and variant management
JurisdictionMap — Privacy Policy · 4 live variants · 1 draft US-CA update
├── Default: v4.3-en-eu · Serves: EU27, EEA, UK (with UK annex)
├── Variant: v4.3-en-uk · Schrems / ICO wording · Diff 3 paragraphs vs EU
├── Variant: v4.3-en-us-ca · CPRA "Do Not Sell/Share" · Link [privacy settings](/designing-privacy-settings-and-data-management-ui-in-figma/)
├── Variant: v4.3-en-us · General US · No sale opt-out section
├── Routing rules:
│ ├── IP country DE, FR, IT → v4.3-en-eu
│ ├── IP country GB → v4.3-en-uk
│ ├── IP country US + state CA → v4.3-en-us-ca
│ └── Fallback → v4.3-en-us
├── Geo preview: Simulate user in São Paulo → v4.3-en-us · Cookie banner variant C
└── [ Edit routing ] [ Preview public URL ] [ Test consent capture ]
| Routing concern | Design guardrail |
|---|---|
| Wrong jurisdiction served | Preview tool with geo simulation |
| Stale CDN cache | Publish job shows cache purge status per edge |
| Account region vs IP | Document precedence: account region wins for logged-in |
| New state law | Template for CPRA-style addendum without full rewrite |
| Cross-border transfers | Cross-link SCC management when §7 changes |
Jurisdiction variants share a base version number (v4.3) with suffixes—consent records store both policy_version_id and jurisdiction_variant_id.
Consent linkage and re-consent triggers
ConsentLinkage — Privacy Policy v4.3 · 6 linked purposes · 3 capture surfaces
├── Purpose P-03 Analytics · Checkbox + cookie banner · Policy ref §3.2
│ ├── v4.2 consent events: 891k active · No re-consent required (non-material)
│ └── v4.3 material change: retention extension · Rule: inform only, no re-consent
├── Purpose P-05 Marketing email · Signup checkbox · Policy ref §4.1
│ ├── v4.3 change: new subprocessor mention · Rule: none (informational)
│ └── Historical: v3.8 events still valid—immutable ledger
├── Purpose P-09 Session replay · NEW in v4.3 · Rule: require new consent before capture
│ ├── Block: Analytics tags until purpose P-09 live in CMP
│ └── Link [LIA assessment](/designing-legitimate-interest-assessment-workflow-ui-in-figma/) if LI path chosen instead
├── Re-consent campaign draft:
│ ├── Audience: Users with P-03 granted before Jul 15 · Est. 412k
│ ├── Surface: Email + in-app modal · Copy links v4.3 diff summary
│ └── Status: Pending Legal · Cannot send until approved
└── [ Configure trigger rules ] [ Preview campaign ] [ Sync CMP ]
| Trigger rule | Typical behavior |
|---|---|
| New processing purpose | Block capture until purpose registered + consent path live |
| Material retention increase | Inform + optional re-consent depending on Legal |
| New subprocessor (informational) | Trust center update; no re-consent |
| Lawful basis change | Mandatory re-consent or stop processing |
| Minor typo fix | Publish without user notification |
Re-consent UI connects to notification preferences—users who opted out of product email still need in-app notice for material changes.
Draft workflow and legal review
DraftWorkflow — Privacy Policy v4.4 · Status: Legal review · Due Aug 8
├── Authors: @legal-privacy, @product-privacy · Comments: 7 open
├── Review stages: Draft → DPO review → Legal approval → Scheduled publish
├── Checklist:
│ ├── [x] Diff reviewed against v4.3
│ ├── [x] ROPA activities flagged for §3.2 change
│ ├── [ ] DPO sign-off on material change classification
│ ├── [ ] Cookie banner copy updated in staging
│ └── [ ] Trust center preview approved
├── Scheduled publish: Aug 12, 2026 00:00 UTC · Timezone-aware effective date
├── Rollback plan: v4.3 remains archived · CDN revert script attached
└── [ Request DPO review ] [ Comment ] [ Schedule ] [ Abandon draft ]
Parallel drafts should be impossible for the same notice+jurisdiction—show lock banner if another editor holds the draft.
Public trust center integration
TrustCenterSync — Privacy notices · Last sync Jul 15 · 4 public pages
├── /legal/privacy · Serves routed variant · Version badge v4.3 · Effective Jul 15
├── /legal/cookies · Cookie Policy v2.1 · Links [cookie consent UI](/designing-cookie-consent-and-tracking-preference-ui-in-figma/) preferences
├── /legal/subprocessors · Auto-generated from [DPA hub](/designing-data-processing-agreements-and-subprocessor-management-ui-in-figma/)
├── Changelog public section: "Jul 2026 — Extended analytics retention to 180 days"
└── PDF download: v4.3-en-eu.pdf · SHA-256 hash for audit
Public pages show effective date and version—internal admin shows full diff. Do not expose internal material-change flags to customers.
Handoff checklist (Dev Mode)
- PolicyVersion — id, notice_type, version_semver, effective_at, status, material_change, owner_id.
- JurisdictionVariant — id, policy_version_id, jurisdiction_code, locale, public_url, routing_priority.
- DiffSection — section_id, change_type, summary, ropa_activity_ids[], material.
- ConsentLinkage — purpose_id, policy_version_id, section_ref, capture_surface_id.
- ReConsentRule — trigger_type, audience_query, surface, requires_new_consent, status.
- PublishJob — version_id, scheduled_at, cmp_sync_status, cdn_purge_status, completed_at.
- Accessibility — diff viewer supports keyboard nav; change types not color-only.
Common mistakes
| Mistake | Why it hurts | Fix |
|---|---|---|
| Version number only in footer | Consent ledger cannot replay text | Immutable version IDs in admin + public |
| Publish without CMP sync | Banner shows old copy | Publish checklist blocks until sync Complete |
| One global policy for all regions | CPRA/UK gaps | Jurisdiction map with routing rules |
| Material change without ROPA review | Processing drift | Auto-flag ROPA rows when § changes |
| Re-consent blast to all users | Unnecessary fatigue | Rule engine by purpose and change type |
| Diff only in Legal’s email | Product ships wrong copy | In-app diff viewer for all stakeholders |
| No archived PDF/hash | Cannot prove historical text | Store rendered PDF + hash per publish |
| Cookie policy separate from privacy | Broken cross-links | Unified registry with linked notices |
| Effective date in local timezone only | Global SaaS confusion | UTC publish + locale display |
| Rollback without consent impact analysis | Orphaned capture events | Rollback wizard with Legal gate |
Recommended workflow
- Create notice registry with types: Privacy, Cookie, Subprocessors, DPA summary.
- Build diff viewer with material-change flag and ROPA auto-suggestions.
- Configure jurisdiction routing with geo preview and account-region override.
- Wire consent linkage so every capture event stores
policy_version_id. - Define re-consent trigger rules with Legal approval for material changes.
- Sync trust center and CMP on publish with job status dashboard.
- Export version history for compliance audit evidence packs.
FAQ
Privacy policy vs cookie policy versions?
Separate version streams linked in registry—cookie banner references both. A cookie-only change may not bump privacy policy semver.
Link to consent records?
Every grant event stores policy_version_id—admin search by version shows all users who consented under that text.
What counts as a material change?
Legal defines per org—UI provides toggle + justification field. Typical: new purpose, retention increase, new category of recipients, lawful basis change.
DSAR access requests?
Include policy versions user was subject to during account lifetime—export from version registry, not live URL scrape.
PIA/DPIA trigger?
New processing described in policy diff can auto-open DPIA task—mirror ROPA flag behavior.
Next steps
- Design consent records and preference management admin UI in Figma — proof layer tied to policy versions
- Design cookie consent and tracking preference UI in Figma — customer-facing capture surfaces
- Design trust center and security documentation UI in Figma — public notice hosting
- Design records of processing activities and data mapping UI in Figma — processing text alignment
- Design data processing agreements and subprocessor management UI in Figma — §7 subprocessor lists
§ Keep reading