| name | gdpr-compliance |
| description | This skill provides comprehensive guidance for implementing and reviewing GDPR-compliant features in Empathy Ledger. |
GDPR Compliance Skill
This skill provides comprehensive guidance for implementing and reviewing GDPR-compliant features in Empathy Ledger.
GDPR Rights Reference
Article 15 - Right of Access
Requirement: Users can request a copy of their personal data
Implementation:
const data = await gdprService.exportUserData(userId)
Article 16 - Right to Rectification
Requirement: Users can correct inaccurate personal data
Implementation:
- Edit profile via profile settings
- Edit stories via story editor
- All changes logged in audit trail
Article 17 - Right to Erasure (Right to be Forgotten)
Requirement: Users can request deletion of their data
Implementation:
Anonymization Process:
- Remove PII from story content
- Replace author name with "Anonymous Storyteller"
- Disassociate from profile (set storyteller_id = null)
- Revoke all active distributions
- Anonymize related media
- Keep anonymized audit trail
Article 20 - Right to Data Portability
Requirement: Users can export data in machine-readable format
Implementation:
- JSON export format
- Includes all user-generated content
- Downloadable via vault dashboard
Consent Management
Consent Capture
interface ConsentRecord {
has_consent: boolean
consent_verified: boolean
consent_method?: string
consent_date?: Date
consent_witness_id?: string
}
Consent Withdrawal
Data Processing Lawful Bases
For Empathy Ledger, we rely on:
- Consent (Article 6(1)(a)) - Primary basis for story sharing
- Legitimate Interest (Article 6(1)(f)) - Platform operation, security
Data Minimization
Collect Only What's Needed
- Essential profile data: name, email, organization
- Story content: as provided by user
- Technical data: minimal logging for security
Retention Limits
- Active data: retained while account active
- Deleted data: fully removed within 30 days
- Anonymized data: kept for aggregate statistics only
- Audit logs: anonymized after account deletion
Implementation Checklist
User Data Export
□ Export includes all user stories
□ Export includes media files
□ Export includes profile data
□ Export includes consent records
□ Export includes activity log
□ Format is JSON (machine-readable)
□ Download is secure (authenticated)
Data Deletion
□ Deletion request creates ticket
□ User receives confirmation email
□ 30-day processing window
□ All stories anonymized or deleted
□ All media files removed
□ Profile data erased
□ Audit trail anonymized
□ Third-party distributions notified
Consent Tracking
□ Consent captured before distribution
□ Consent method recorded
□ Consent can be withdrawn
□ Withdrawal cascades automatically
□ Audit trail for consent changes
□ Re-consent required for new purposes
API Endpoints
Data Rights
GET /api/user/export - Export all user data
POST /api/user/deletion-request - Request account deletion
GET /api/user/deletion-request - Check deletion status
Story-Level GDPR
POST /api/stories/[id]/anonymize - Anonymize specific story
POST /api/stories/[id]/consent/withdraw - Withdraw consent
Audit Access
GET /api/stories/[id]/audit - View story audit trail
POST /api/stories/[id]/audit/export - Export audit report
Database Schema
deletion_requests
CREATE TABLE deletion_requests (
id UUID PRIMARY KEY,
user_id UUID NOT NULL,
tenant_id UUID NOT NULL,
request_type TEXT NOT NULL,
status TEXT DEFAULT 'pending',
requested_at TIMESTAMPTZ,
processed_at TIMESTAMPTZ,
completed_at TIMESTAMPTZ
);
Story Anonymization Fields
anonymization_status TEXT,
anonymized_fields JSONB,
consent_withdrawn_at TIMESTAMPTZ
Services
GDPRService
class GDPRService {
exportUserData(userId: string): Promise<DataExport>
anonymizeStory(storyId: string): Promise<AnonymizeResult>
anonymizeUserData(userId: string): Promise<AnonymizeResult>
createDeletionRequest(userId: string, type: string): Promise<Request>
processDeletionRequest(requestId: string): Promise<void>
scrubPII(content: string): string
}
Code Review for GDPR
When reviewing code, verify:
- Data Collection: Is this data necessary?
- Consent: Is consent captured before processing?
- Access: Can users access their data?
- Rectification: Can users correct their data?
- Erasure: Can users delete their data?
- Portability: Can users export their data?
- Audit: Are actions logged?
- Security: Is data properly protected?