Privacy Policy
Effective: 28 May 2026 · Version 1.2 (updated 6 October 2026)
This Privacy Policy explains what personal data 9ty Football (“9ty”, “we”, “us”) collects when you use our mobile and web applications, how we use it, who we share it with, and the rights you have under the EU General Data Protection Regulation (GDPR).
1. Who we are (Data Controller)
Daniel Sheccoury — operating 9ty Football as an individual.
Postal address: (see Impressum)
Contact: 9tyfootball@gmail.com
We do not currently have a Data Protection Officer (DPO) — under Art. 37 GDPR a DPO is not required at our current scale. You can reach us at the email above for any privacy-related question.
2. What data we collect and why
We collect the following categories of personal data. For each, we list the data, the purpose, and the legal basis under Art. 6 GDPR.
2.1 Account and profile data
- Data: email address, display name, profile photo (optional), preferred language, password (handled by Supabase as a one-way hash — we never see your password in plain text).
- Purpose: create and authenticate your account, identify you to other members of your squad.
- Legal basis: performance of contract (Art. 6(1)(b)).
2.2 Squad and game data
- Data: squad membership, player skill rating (1.0–5.0 set by your squad admin), match signups, drafted teams, match events (goals, assists, fouls, cards, substitutions), per-match performance mark, minutes played.
- Purpose: deliver the core product — letting your squad organise matches, draft balanced teams, and keep statistics.
- Legal basis: performance of contract (Art. 6(1)(b)).
2.3 Chat messages and photos
- Data: messages you post in your squad's chat thread, photos you attach, message reactions, timestamps.
- Purpose: deliver the squad chat feature so squad members can coordinate.
- Legal basis: performance of contract (Art. 6(1)(b)).
- Visibility: messages and photos in a squad chat are visible to all members of that squad. We do not read, mine, or analyse chat content for any purpose other than delivering and storing it.
2.4 Voice-event capture (optional feature)
When you use the in-game “Voice Event” button to log a match event by speaking:
- Your phone's microphone records a short audio clip (typically 3–7 seconds, hard-capped at 30 seconds).
- The clip is uploaded over HTTPS to our backend (the
transcribe-voice-eventSupabase Edge Function, EU region). - The backend forwards the audio to OpenAI's Whisper API for speech-to-text transcription. OpenAI processes the audio per its API data-usage policy (no training on API submissions) and does not retain audio sent via the API beyond what is needed to return the transcript.
- The audio is not stored anywhere after the transcription returns — neither on the device, in our database, nor in object storage. It exists only in flight.
- The resulting transcript (e.g. “Goal Marco minute 47”) is then passed, together with your current squad roster, to Anthropic's Claude Haiku model so it can be turned into a structured event (goal/assist/card + player + minute). Anthropic does not retain API submissions for training.
- The structured event is then saved to your squad's match log under your account.
Why server-side transcription: on-device speech recognition is unreliable across Android phones and OEMs. Switching to server-side Whisper gives consistent quality at the trade-off of sending audio off-device. The trade is documented here so you can make an informed choice about using the feature.
Legal basis: performance of contract (Art. 6(1)(b)) — the voice button is a feature of the service you are using. The feature is optional; if you do not press the button, no audio is captured or uploaded.
2.5 Match recap (Claude AI)
After a match's stats are entered, 9ty can optionally generate a short AI-written match recap using Claude Haiku. We send your match event log, player stats, and roster (no chat content, no photos) to Anthropic so the model can produce the recap text. The generated recap is then posted to your squad's chat thread. Squad members can read it but it is not shared outside the squad.
Legal basis: performance of contract (Art. 6(1)(b)).
2.6 Activity / wearable data (optional integration)
If you connect your Strava account, we ingest the following metrics from activities that overlap your match window: total distance, duration, average speed, max speed. We do not import your full GPS track or heart-rate data. The Strava connection uses OAuth — you grant and revoke access in Strava's settings at any time.
- Legal basis: consent (Art. 6(1)(a)) — you explicitly grant Strava access; you can revoke it from your phone or from Strava's connected-apps page.
2.7 Payments (optional, only if you subscribe)
9ty's paid tiers (e.g. Admin Pro) are processed by Stripe. Stripe handles your card details directly — 9ty never sees or stores your card number. From Stripe we receive only: customer ID, subscription status, last 4 digits of your card (for display), invoice history.
- Legal basis: performance of contract (Art. 6(1)(b)) + legal obligation under tax law for invoice retention (Art. 6(1)(c)).
If you subscribe through the Apple App Store or Google Play, Apple or Google processes the payment as the seller under its own privacy policy; we never see your payment details. We use RevenueCat to confirm those purchases: it receives your internal 9ty user ID and the store’s purchase records (product, dates, transaction ID, country and price) and tells us whether your Pro plan is active.
2.8 Anonymous usage analytics (opt-in)
If you tap “Allow analytics” on the consent screen, we use PostHog (EU region, Frankfurt) to record screen views and tap counts on key buttons. This is anonymised behavioural data — never chat content, never photos, never identifying information beyond your internal user ID. You can revoke this at any time from Me → Settings → Anonymous usage analytics. No analytics events are sent until and unless you opt in.
- Legal basis: consent (Art. 6(1)(a)).
2.9 Crash reports and error logs
When the app crashes or hits a server-side error, we capture the technical context (stack trace, screen route, OS version, anonymised user ID) via Sentry (German region) so we can diagnose and fix the bug. We do not capture chat content or photo contents in error reports.
- Legal basis: legitimate interest (Art. 6(1)(f)) — maintaining a working, secure product.
2.10 Push notifications
If you allow notifications, we store a push token (Apple APNS or Google FCM) so we can notify you about new games in your squad, last-slot reminders, new chat messages, and post-match payment reminders.
- Legal basis: consent (Art. 6(1)(a)) — granted via the OS permission prompt; revocable from your phone's settings.
3. Who we share data with (Processors)
We use the following service providers (Auftragsverarbeiter under Art. 28 GDPR). Each is bound by a Data Processing Agreement and processes data only on our instructions.
| Processor | Purpose | Region |
|---|---|---|
| Supabase | Database, authentication, storage | EU (Frankfurt) |
| PostHog | Analytics (opt-in only) | EU (Frankfurt) |
| Sentry | Crash reporting | Germany |
| Stripe | Payment processing | Ireland (EU) / USA |
| RevenueCat | In-app purchase validation (App Store / Google Play) | USA (SCCs) |
| Anthropic | AI (voice transcript → event; match recap) | USA (Standard Contractual Clauses) |
| OpenAI | Speech-to-text (Whisper) for voice events; automatic safety check of chat messages and photos (Moderation API, nothing stored) | USA (SCCs) |
| Strava | Activity import (only if you connect it) | USA (SCCs) |
| Apple / Google | Push notifications | Various (SCCs) |
| Vercel | Hosting for the admin web app | USA (SCCs) |
| Expo / EAS | Mobile app builds and delivery | USA (SCCs) |
Where data is processed outside the EU, transfers are protected by Standard Contractual Clauses (Art. 46 GDPR) as published by the European Commission.
4. Retention
- Account data: retained until you delete your account. After deletion, residual references in shared records (your old chat messages, match events) are anonymised within 30 days.
- Voice-event audio: not stored — see §2.4.
- Stripe invoices: retained for the period required by German tax law (currently 10 years per §147 AO).
- Analytics events: retained by PostHog for 7 years (their default); you can shorten this in their settings.
- Crash reports: retained by Sentry for 90 days.
5. Your rights under GDPR
You have the right to:
- Access (Art. 15): request a copy of the personal data we hold about you.
- Rectification (Art. 16): correct inaccurate data.
- Erasure / Right to be forgotten (Art. 17): request deletion of your account and associated data.
- Restriction (Art. 18): limit how we process your data while a dispute is resolved.
- Portability (Art. 20): receive your data in a machine-readable format.
- Object (Art. 21): object to processing based on legitimate interest.
- Withdraw consent (Art. 7): at any time, where the legal basis is consent (analytics, Strava integration, push notifications).
- Lodge a complaint with a supervisory authority. In Austria (the operator's place of establishment), this is the Datenschutzbehörde (DSB), dsb.gv.at. You may also lodge a complaint with the supervisory authority of your own EU country of residence.
To exercise any of these rights, email 9tyfootball@gmail.com. We respond within 30 days as required by Art. 12(3).
6. Children
9ty Football is intended for users aged 16 or older. We do not knowingly collect data from users under 16. If you believe a child under 16 has an account, please contact us and we will delete it.
7. Security
We use industry-standard technical and organisational measures (Art. 32 GDPR): TLS for all data in transit, encryption at rest in Supabase, row-level security policies that prevent users in one squad from reading data in another squad, JWT-based authentication with PKCE for the mobile app, and crash + access logging for anomaly detection.
8. Changes to this policy
We may update this policy. Material changes will be flagged in the app on next launch. The version and effective date at the top of this page indicate when it last changed.
9. Contact
For any privacy question or to exercise the rights above, email 9tyfootball@gmail.com.