High priority fixes: - T0: Profile page now filters comments by namespace (was leaking cross-site) - T1: URI hostnames and namespace names normalized to lowercase (was causing duplicate threads and "stock comments" bug). Includes merge script. - T2: Thread detail API now paginated with SQL-side filtering (was 502 on 267+ reply threads) Features: - T3: GDPR account deletion (tombstone user with scrubbed PII) and data export - T4: Customizable button text and comment labels per namespace - T5: Self-service namespace deletion for owners - T6: @mention notifications with profile links - T7: Webmention receiving endpoint with h-card extraction - T8: Configurable max nesting depth and collapse depth per namespace - T9: AJAX thread title search to prevent duplicates - T10: Browser push notification support (VAPID/service worker) Docs and housekeeping: - T11: Documented thread_uri behavior when moving embeds - T12/T13: Drafted community replies for resolved feature requests - Collapse depth defaults to infinite (load-more disabled unless configured) 364 tests pass, 4 skipped.
2.2 KiB
2.2 KiB
T3: GDPR/CCPA compliance tooling
Status: resolved
Priority: medium
Source: meta a819d4f0-6a65-11e8-927b-040140774501
Filed: 2026-02-01
Problem
Multiple users over 6+ years have asked for tools to help namespace owners comply with GDPR/CCPA data subject requests. The thread has frustrated replies from users who expected better tooling from a privacy-focused product.
Currently, namespace owners can export data via /ns/{namespace}/dump.json (accessible from namespace settings). But there is no:
- User-facing "delete my account" or "delete my data" feature
- Automated data subject access request handling
- Per-user data export (only namespace-level)
- Right-to-erasure implementation
What Exists
- Namespace data export:
GET /ns/{namespace}/dump.json— returns all threads and comments for a namespace in JSON. Accessible to namespace owners from the settings dashboard. Includes author names, IPs, and (for production subscriptions) emails. - Admin scripts:
scripts/merge_duplicate_email_users.pyandscripts/delete_disabled_nodes.pyexist for admin use but aren't user-facing.
Proposed Implementation
Phase 1 (minimum viable):
- Add a "Delete My Account" button to user settings (
/u/settings) that:- Anonymizes all the user's comments (replaces author with "Deleted User")
- Deletes the User record and associated watchers/notifications
- Logs out the session
- Add a "Download My Data" button to user settings that exports all the user's comments as JSON
Phase 2 (nice to have):
3. API endpoints for the above (DELETE /api/v1/user/profile, GET /api/v1/user/export)
4. Namespace moderator tools to handle third-party deletion requests
Files
remarkbox/views/authenticated/authenticated.py— add delete account and export viewsremarkbox/templates/user-settings.j2— add buttonsremarkbox/models/user.py— addanonymize()ordelete_account()methodremarkbox/api/views.py— optional API endpoints
Acceptance Criteria
- Users can delete their own account from settings
- Users can download their own data as JSON
- Deletion anonymizes comments rather than leaving orphans
- Confirmation step before deletion