figma guide

Designing proof of deletion and audit trail UI in Figma: receipts, downstream jobs, and regulator-ready logs

Design proof of deletion and audit trail UI in Figma with completion receipts, downstream job tracking, immutable audit entries, and handoff for GDPR erasure verification.

Published
Updated
Aug 15, 2026
Read time
7 min
Level
Intermediate

Quick answer

Proof of deletion UI gives users and auditors verifiable evidence that data was erased—not just that a request was submitted. Design a deletion job tracker with per-system status, an immutable audit trail (who triggered what, when, and which legal basis applied), and a completion receipt (PDF or signed token) once downstream processors confirm. Start from the Figma guides hub and pair with erasure requests, consent withdrawal, compliance exports, audit log, and Dev Mode handoff.


Who this is for

  • Product designers closing the loop on erasure UX after the request wizard ends.
  • Privacy and compliance teams needing regulator-ready deletion evidence without manual spreadsheets.
  • Engineering teams wiring multi-service deletion pipelines with observable status.

Deletion evidence hub (admin overview)

DeletionEvidenceHub — Acme App · 14 open jobs · 3 awaiting subprocessor ACK
├── Header: Completed this month 892 · Failed 2 · Avg completion 4.2 days
├── Actions: [ Export audit bundle ] [ Retry failed jobs ] [ Subprocessor SLA report ]
├── Tabs: Active jobs · Completed · Failed · Audit trail · Receipts
├── Alert: DEL-8821 · CRM delete failed · Retry 2/5 · Owner: platform-team
├── Filters: Request type · User ID · Scope · Legal basis · Date range · System
└── Link: [Erasure wizard](/designing-right-to-erasure-and-deletion-request-ui-in-figma/) · [DSAR portal](/designing-data-subject-access-request-and-gdpr-portal-ui-in-figma/) · [Retention](/designing-data-retention-policies-and-auto-deletion-ui-in-figma/)
SectionPurpose
Active jobsIn-flight erasure with per-downstream status
CompletedJobs with proof issued and retention of receipt metadata
FailedRetry queue, escalation, and user communication templates
Audit trailImmutable log of every deletion-related event
ReceiptsIssued certificates linked to completed jobs

Verdict: Proof fails when the user sees “deleted” but backups or subprocessors still hold data—track every system explicitly.


User-facing deletion job tracker

DeletionTracker — Request DEL-8821 · Submitted 2026-08-10 · Status: In progress
├── Summary: "We're deleting your account data from our systems."
├── Progress bar: 4 of 6 systems complete
├── System rows:
│   ├── ✅ Primary database · Completed 2026-08-11 · job_db_441
│   ├── ✅ Object storage (avatars) · Completed 2026-08-11 · job_s3_882
│   ├── ✅ Email provider · Completed 2026-08-12 · job_mkt_019
│   ├── ⏳ Analytics warehouse · In progress · ETA 24h
│   ├── ⏳ CRM · Pending subprocessor confirmation
│   └── ⬜ Backup rotation · Scheduled after primary delete
├── Exceptions (if any): "Billing records retained 7 years per tax law" · Link [retention policy](/designing-data-retention-policies-and-auto-deletion-ui-in-figma/)
├── When complete: [ Download proof of deletion ] · Email confirmation
└── Support: [Contact privacy team] · Reference DEL-8821

Users need granular status, not a single spinner that disappears after 30 seconds.


Proof of deletion receipt

DeletionReceipt — DEL-8821 · Issued 2026-08-14
├── Header: Certificate of deletion · Acme App
├── Subject: User u_441 · Request submitted 2026-08-10 · Completed 2026-08-14
├── Scope deleted:
│   ├── Profile, preferences, content uploads
│   ├── Marketing identifiers and consent records (see [withdrawal](/designing-consent-withdrawal-and-downstream-deletion-ui-in-figma/))
│   └── Session and device tokens
├── Retained (legal exception):
│   ├── Invoice INV-9921 · Tax retention until 2033 · Basis: legal obligation
│   └── Fraud case FC-771 · Legal hold · Link [compliance exports](/designing-compliance-exports-and-legal-hold-ui-in-figma/)
├── Downstream confirmations:
│   ├── db_primary · ack_at 2026-08-11T14:02Z · hash a3f9…
│   ├── s3_media · ack_at 2026-08-11T14:05Z · hash b7c2…
│   └── crm_vendor · ack_at 2026-08-13T09:11Z · vendor_ref VND-441
├── Signature block: Issued by privacy-ops@acme.com · Receipt ID RCP-8821 · Verify at /privacy/verify/RCP-8821
├── Download: PDF · JSON (machine-readable) · Link [portability format](/designing-data-portability-and-machine-readable-export-ui-in-figma/)
└── Do not include: Remaining PII of other users · Internal system hostnames in user PDF

Receipts should be downloadable, verifiable, and scoped—not a generic “we processed your request” email.


Immutable audit trail entries

AuditTrail — Filter: deletion · Last 30 days
├── 2026-08-14T09:00Z · receipt_issued · DEL-8821 · actor: system · RCP-8821
├── 2026-08-13T09:11Z · subprocessor_ack · crm_vendor · job_crm_8821 · ack_ref VND-441
├── 2026-08-12T16:44Z · job_completed · analytics_warehouse · job_wh_771
├── 2026-08-11T14:05Z · job_completed · s3_media · objects_removed 42
├── 2026-08-11T14:02Z · job_completed · db_primary · tables: users, profiles, prefs
├── 2026-08-10T11:22Z · erasure_requested · user u_441 · scope: full_account · reauth: passkey
├── 2026-08-10T11:20Z · identity_verified · method: passkey · session s_882
└── Export: [Compliance bundle](/designing-compliance-exports-and-legal-hold-ui-in-figma/) · Immutable · No edit/delete in UI

Pair with security audit log patterns but separate privacy deletion events for clarity.


Downstream job orchestration (design reference)

SystemDelete methodProof signalUser-visible?
Primary DBHard delete + tombstoneRow count + timestampYes
Object storageKey purgeObject list hashYes
Search indexDocument removalIndex refresh ackOptional
Analytics warehouseUser ID pseudonymize or purgeWarehouse job IDYes
Email/CRM vendorAPI delete contactVendor confirmation refYes
BackupsCrypto-shred / rotationNext rotation dateYes (delayed row)
CDN cacheTTL expiryCache purge jobUsually hidden

Design failed-state rows with retry count and support escalation—not silent retries forever.


Admin failed-job recovery

FailedJob — DEL-8821 · CRM vendor · Error: 503 timeout · Retry 2/5
├── Impact: User tracker shows "CRM · In progress" · Do not issue receipt yet
├── Actions: [ Retry now ] [ Escalate to vendor ] [ Manual attestation ] [ Notify user delay ]
├── Manual attestation (rare): Upload vendor ticket · Legal sign-off · Creates audit entry
├── User comms template: "Deletion taking longer than usual · We will email when complete"
├── SLA breach: >30 days · Auto-escalate to DPO · Link [DSAR SLA](/designing-data-subject-access-request-and-gdpr-portal-ui-in-figma/)
└── Never: Mark complete without ack · Hide failure from audit trail

Comparison: proof types by audience

AudienceNeedsUI surface
End userSimple completion + PDF receiptDeletion tracker + download
DPO / privacy teamFull job log + exceptionsEvidence hub
RegulatorExport bundle + ROPA linkCompliance exports
SubprocessorAPI ack + reference IDVendor portal (out of scope—document in handoff)
SecurityTamper-evident logAudit log integration

Handoff checklist (Dev Mode)

  • DeletionJob — job_id, request_id, system_name, status, started_at, completed_at, error_code, retry_count.
  • DeletionReceipt — receipt_id, request_id, scope_deleted[], scope_retained[], issued_at, verify_url, pdf_url.
  • AuditEntry — event_type, actor, timestamp, request_id, metadata (immutable, append-only).
  • SubprocessorAck — vendor_id, external_ref, ack_at, job_id.
  • UserTracker — visible_systems[], progress_percent, completion_message, receipt_available.
  • LegalException — retention_basis, data_category, expiry_date, link_to_policy.
  • Accessibility — progress announced to screen readers; status not color-only; receipt download labeled.

Common mistakes

MistakeWhy it hurtsFix
Instant “deleted” toastDownstream still processingJob tracker until all acks
No receipt after completionUser cannot prove erasureIssue RCP-* certificate
Editable audit logRegulator distrustAppend-only admin view
Receipt lists internal hostnamesInformation leakUser PDF uses plain system names
Missing legal exceptions on receiptMisleading proofExplicit retained-data section
Same receipt for partial deleteWrong scopeScope-specific certificates
Failed job hidden from userSLA breach surpriseDelay notification template
No verify URLReceipt forgery concernsPublic verification endpoint design

  1. Extend erasure wizard (erasure UI) with post-submit tracker link.
  2. Map downstream systems from ROPA—one row per processor.
  3. Design user tracker with per-system status and exception callouts.
  4. Design receipt template (PDF + JSON) with scope, exceptions, and verify link.
  5. Build admin evidence hub with failed-job recovery and export bundle.
  6. Wire immutable audit trail—separate privacy deletion events from security log.
  7. Test completion path in Dev Mode with mock job states.

FAQ

Is proof required for every erasure?

GDPR does not mandate a PDF, but documented completion helps demonstrate compliance—especially for DSAR and regulator inquiries.

Issue a narrow receipt for consent records and marketing identifiers deleted—not a full account certificate.

Retained data must appear on the receipt with basis and expected retention end—never imply full deletion when hold applies.

Backup deletion timing?

Show scheduled backup rotation as a delayed row with expected date—users understand backups lag primary delete.

Regulator export?

Bundle receipts + audit trail + ROPA activity refs via compliance exports—one-click from evidence hub.


Next steps

Share on X

§ Keep reading

Related guides.