My own GDPR Article 30 record of processing, published in full: each data category, purpose, location, retention, legal basis, subprocessor and transfer.
| data_category | purpose | location | retention | legal_basis | client_controller | subprocessors | transfers_outside_eea | security_measures | last_reviewed |
|---|---|---|---|---|---|---|---|---|---|
| Client contact name, email and phone (my own records) | Run the engagement - scheduling, delivery, invoicing | EU-hosted email (Google Workspace, EU region) and accounting records | Duration of engagement plus the statutory accounting retention period | Contract performance / legal obligation - I am controller for this row | N/A - I am controller | Google (Workspace, email); Vercel (website hosting); Calendly (booking); accountant | No - EU regions selected; Google and Calendly are US-headquartered and operate under the EU-US Data Privacy Framework | MFA on every account; EU regions; least-privilege sharing; no client extracts in email | 2026-08-18 |
| Name, email and timezone of anyone who books a call | Schedule an introductory call | Calendly, synced to Google Calendar | Deleted with the calendar entry; Calendly record removed on request | Consent - the person chose to book | N/A - I am controller | Calendly; Google | No - EU-US Data Privacy Framework | MFA; no notes field used for anything sensitive | 2026-08-18 |
| Website visitor requests (IP and user agent, in hosting logs) | Serve the site and diagnose faults | Vercel, cdg1 (Paris) | Short-lived platform logs; I do not export or retain them | Legitimate interests - operating a website | N/A - I am controller | Vercel | No - EU region | No cookies, no third-party requests; CSP with connect-src none on the demos and self on the site pages | 2026-09-14 |
| Website page views (aggregate counts; device identifier derived by Vercel, never exposed to me) | Know which pages are read, so the site can be edited rather than guessed at | Vercel Web Analytics | Vercel platform retention; I hold no copy and cannot export an individual record | Legitimate interests - understanding use of my own website | N/A - I am controller | Vercel | No - EU region | Cookieless; script and beacon served same-origin from /_vercel/insights/; no counter on the demo dashboards | 2026-09-14 |
| EXAMPLE ROW - operator name and employee ID (client source extract) | Join production records to shift data so defect rates can be reported by line | Client tenant, EU region; client-owned storage | Dropped at the minimization step; source extract deleted 90 days after ingest | Determined by the client as controller - I process only on documented instructions | [Client legal entity] | None - runs in the client tenant | No | Encryption in transit and at rest; read-only scoped app registration; access register maintained | 2026-08-18 |
| EXAMPLE ROW - pseudonymised employee ID (hashed) | Count distinct operators per line without identifying individuals | Client tenant, EU region | 90 days, then deleted with the dataset | Determined by the client as controller | [Client legal entity] | None | No | Hashed before storage; no lookup table retained | 2026-08-18 |