Running the platform
Privacy and GDPR
When you run a platform, you are the controller of the personal data on it: your players', captains' and staff's. This is what the platform does for you, and what is yours to do.
The legal texts
The privacy policy and the terms (/legal/privacy and /legal/terms, linked from the apps and the website) start
from templates filled from your settings:
- your legal name, address, registration number, tax ID and support email, and your country by name (Settings, General);
- the providers this platform uses, and only those: Mailgun when emails are on, Expo for pushes, Stripe, NETOPIA or PayPal when they take payments, Pusher, S3 storage and Sentry when they are set up;
- how long data is kept (Settings, Privacy, below);
- the minimum age, and whether you ask about news and offers by email.
They are a starting point: have them checked against your country's law. To change one, Settings, Legal documents
starts a version from the template for a language; edit it and publish it. The placeholders in braces
({legal_name}, {processors}, {retention} and the rest) keep being filled in. The lists the template fills in
are in English: in another language's version, write them in that language instead of keeping the placeholder. Or
point the terms and privacy addresses in Settings, General at your own pages.
The processing record
Settings, Processing record is the record of processing activities that GDPR article 30 asks you to keep, filled from the settings: you as the controller, what the platform processes, why and on what legal basis, for how long, who receives it, the processors and where they are, and how it is protected. Review it, add what the platform can't know (your hosting provider, the other services you use), and keep a copy: print it, or save it as a PDF from the browser. Only admins see it.
How long data is kept
Settings, Privacy:
| Setting | Default | What it does |
|---|---|---|
| Close accounts nobody has signed in to for this many months | empty: never | The person is emailed and has 30 days to sign in and keep the account; then it is anonymised like a deleted one. Admins and staff are never closed, and at most 200 accounts are closed a night. |
| Delete notifications after this many days | 365 | The notifications in people's inboxes. |
| Clear availability notes this many days after the game | 30 | "Knee still sore" stays private: the answer stays, the note goes. |
| Delete audit log entries after this many months | 24 | The log of changes made in the admin. |
| How long you keep receipts and payments, in years | 10 | Said in the privacy policy. Receipts and payments are never deleted automatically: accounting law makes you keep them. |
php bin/console app:privacy:retention applies them every night (Scheduled jobs and backups). With --dry-run it counts
what would go and changes nothing.
Requests from people
- A copy of their data: Users or Players, "Export their data": a file of everything held about the person. Each export goes in the audit log.
- Deleting: the person deletes their account in the app or at
/account/delete, or you do it with Players, "Delete their data", or Users, "Delete (anonymise)". Results and tables stay, naming nobody. - Correcting: the person edits their profile in the app; staff edit Players and Users.
News and offers by email
When Settings, Privacy asks about news and offers, sign-up and the app's notification settings ask too, off until the person turns it on, and the answer is kept with its date. Users, "Export who agreed to news" downloads them as a CSV for your newsletter tool, and each export goes in the audit log; the Users list filters by it. The platform itself sends no newsletters.
Tell the app stores too: make the store kit with --marketing (npm run store:kit -- <slug> --marketing in the
app), and its App Privacy and Data safety answers declare the email's use for news and offers.
Age
Accounts are for people of 16 or over: signing up in the app or on the website confirms it, and the terms and the privacy policy say so. Accounts that parents manage for juniors are planned for clubs.
Found a mistake? Tell us.