Privacy Policy
ChessSnap | chesssnap.app Effective date: 2026-05-04 Last updated: 2026-05-24
1. Introduction
ChessSnap is a mobile and web application that lets chess players photograph handwritten scoresheets and convert them into digital PGN files using AI recognition. We take your privacy seriously. This policy explains what personal data we collect, why we collect it, how we store and protect it, and what rights you have over it.
This policy applies to:
- The ChessSnap web application at chesssnap.app and www.chesssnap.app
- The ChessSnap iOS application distributed through the Apple App Store
When we refer to "ChessSnap," "we," "us," or "our," we mean the data controller described in Section 2. When we refer to "you," we mean any person who uses the app or visits our website.
2. Who We Are (Data Controller)
Data Controller: Scop Düsseldorf, Germany
Contact for privacy matters: hello@chesssnap.app
If you are located in the European Union, you have the right to lodge a complaint with a supervisory authority. The lead supervisory authority for ChessSnap is the Landesbeauftragte fur Datenschutz und Informationsfreiheit Nordrhein-Westfalen (State Commissioner for Data Protection and Freedom of Information of North Rhine-Westphalia), Kavalleriestr. 2-4, 40213 Düsseldorf, Germany, poststelle@ldi.nrw.de.
3. What Data We Collect
3.1 Account and Authentication Data
When you create an account or sign in, we collect:
- Email address -- provided directly by you, or obtained from Google or Apple when you use OAuth sign-in.
- Hashed password -- if you register with email and password. We never store your password in plain text. Password hashing and storage are handled by Supabase Auth.
- OAuth identity tokens -- temporary tokens issued by Google or Apple to confirm your identity. These are processed by Supabase Auth and are not stored by us in their raw form.
- Full name and profile picture URL -- returned by Google OAuth if you sign in with Google. We store the name to pre-populate your player profile. We do not store the profile picture beyond your session.
- Internal user ID -- a UUID generated by Supabase to identify your account across our systems. This is not your email and is never shown to you in the UI.
Legal basis (GDPR): Performance of a contract (Article 6(1)(b)). Creating an account is necessary to save and sync your chess games. If you use the app without signing in, no account data is collected.
3.2 User Settings and Preferences
For signed-in users, we store in our database:
- Player profiles -- the name(s) you assign to scoresheets, and the notation language you have selected (e.g., German, English). You may create up to 1 profile on the free tier and up to 5 on the Pro tier.
- Notation language -- the chess notation language setting (e.g., "de" for German piece letters).
- UI language -- your chosen interface language (e.g., "en," "de," "zh"). Stored in our database to help us understand which languages are actually used, so we can prioritize translation work.
- Email addresses for PGN export -- your own email address and, optionally, a coach email address, if you enter them in Settings. These are used only to send PGN files when you tap "Send Email."
- Subscription status -- whether you have an active ChessSnap Pro subscription, the expiry date, and a Stripe customer ID. Written by our payment webhook after a successful purchase.
- Scan count -- the number of scoresheets you have scanned in the current calendar month, used to enforce the free-tier monthly limit of 5 scans.
These settings are also cached in your browser's localStorage for offline access and are synchronized with our database when you are connected.
Legal basis (GDPR): Performance of a contract (Article 6(1)(b)) for settings necessary to provide the service (notation language, scan count). Legitimate interests (Article 6(1)(f)) for the UI language statistic, which helps us allocate translation resources without identifying individual users.
3.3 Chess Games
When you scan a scoresheet or import a PGN, we store:
- Recognized chess moves -- the move list as identified by the AI, in PGN/SAN notation. No position data beyond what is derivable from the move sequence.
- Corrected chess moves -- the final, user-verified move list after your review.
- Game metadata -- player names (white, black), event name, date, and round number, as printed on or read from the scoresheet.
- Game status -- whether the game is a draft or completed.
- Timestamps -- when the game was created and last updated.
Games are stored both in localStorage on your device and, for signed-in users, in our database, synchronized bidirectionally. Deleted games remain in a soft-delete recycle bin for 30 days, after which they are permanently removed by an automated database job.
Legal basis (GDPR): Performance of a contract (Article 6(1)(b)). Storing games is the core purpose of the service.
3.4 Scoresheet Photos
When you scan a scoresheet:
- Thumbnail images -- a compressed JPEG version of your photo (maximum 1000 pixels on the longest side, quality 72%) is generated server-side and stored in your browser's localStorage and, for signed-in users, in a private Supabase Storage bucket named
score-sheets. - Storage path -- the path
{user_id}/{game_id}/{page_index}.jpgis recorded in the games database so we can retrieve your photos across devices. - Full-resolution image (temporary) -- the original photo is sent to our server, resized to a maximum of 2000 pixels for AI recognition, then discarded. We do not permanently store the full-resolution original.
Access to scoresheet photos is restricted by row-level security policies: each user can only access their own files.
Photos in the recycle bin are retained for up to 30 days alongside the associated game. When a game is permanently deleted, its photos are also deleted from Supabase Storage.
Legal basis (GDPR): Performance of a contract (Article 6(1)(b)).
3.5 Handwriting Learning Data
To improve recognition accuracy over time, we store:
- Correction history -- when you correct an AI recognition error (e.g., "Ld3" corrected to "Bd3"), we record the original AI output, your correction, the timestamp, and the game ID.
- Learned patterns -- aggregated statistics derived from your correction history, such as which character substitutions occur repeatedly across multiple games.
This data is stored in localStorage and, for signed-in users, in the handwriting_profiles database table, scoped to your account and player profile. It is used exclusively to improve the AI recognition prompt for your future scans. It is never used for training third-party AI models.
Legal basis (GDPR): Performance of a contract (Article 6(1)(b)) and legitimate interests (Article 6(1)(f)) in providing a service that improves with use.
3.6 Payment Data
On the web version, ChessSnap Pro subscriptions are processed by Stripe. When you subscribe:
- You are redirected to a Stripe-hosted checkout page. Your card number, billing address, and other payment details are entered on Stripe's page and processed entirely by Stripe. ChessSnap never receives or stores your card details.
- We store in our database: your Stripe customer ID, the subscription expiry date, and whether the subscription is set to cancel at the end of the billing period.
- Stripe sends us a webhook notification when a payment is completed or a subscription changes, which we use to activate or deactivate your Pro access.
On the iOS application, ChessSnap Pro subscriptions are handled exclusively through Apple In-App Purchases (IAP). Apple processes payment and subscription management. ChessSnap does not receive your Apple ID or payment method details. Subscription status is communicated to us through Apple's receipt validation APIs and Apple Server Notifications V2.
Legal basis (GDPR): Performance of a contract (Article 6(1)(b)).
3.7 Usage Analytics
We collect lightweight behavioral events to understand how people use the app and where they encounter friction:
- Feature usage events -- when you use a specific feature (e.g., start a scan, export PGN, flag a move, open the paywall). Recorded with your internal user ID when signed in, or with an anonymous session ID before sign-in, plus event type and small metadata (e.g., number of moves, which step you were on).
- Flow events -- when you start, complete, or abandon a multi-step review flow, including how long it took and a brief breadcrumb of the last actions taken.
- Rage-click signals -- if you tap the same button 3 or more times within 5 seconds, a single signal is recorded to help us identify confusing UI elements.
These events are stored in the feature_events table in our database and are viewable only by the ChessSnap administrator. They are not shared with any advertising platform. If you sign in after using ChessSnap anonymously, events from the same anonymous session may be linked to your account so we can understand whether onboarding and first-use flows worked.
Legal basis (GDPR): Legitimate interests (Article 6(1)(f)) in improving the application based on real usage patterns, without collecting identifiable behavioral data for advertising.
3.8 Error Reports and Diagnostics
- Client-side errors -- if the app crashes or throws an unhandled error in your browser, the error message, stack trace, page URL, and browser user-agent string are sent to our
client_errorsdatabase table. No user ID is attached to these reports. - Sentry crash reports -- we use Sentry (ingest.de.sentry.io, hosted in the EU) for crash monitoring. Sentry captures the error message, stack trace, browser and OS version, and the URL where the crash occurred. We have configured Sentry to use a 10% trace sample rate. User IDs sent to Sentry are the same internal UUID used in our database, not your email address. Session replay is disabled.
- Scan metrics -- per-scan telemetry stored in
scan_metricsandscan_jobs: duration of the recognition request, number of images, number of moves recognized, notation language, whether a recognition cache was hit, any error message from the AI provider, which AI model was used, and for signed-in users the internal user ID needed to connect the scan to the account. - Recognition cache -- a SHA-256 hash of your uploaded image(s) and recognition parameters is stored in a
scan_cachetable. If you upload the same photo again, we return the cached result without calling the AI again. The hash cannot be reversed to reconstruct your image.
Legal basis (GDPR): Legitimate interests (Article 6(1)(f)) in maintaining the stability and reliability of the service.
3.9 In-App Feedback
If you submit feedback through the Settings screen, we collect:
- Your feedback message (up to 4,000 characters).
- The feedback type (bug, suggestion, or other).
- Your email address -- automatically included if you are signed in; optionally provided if you are not signed in.
- The page URL you were on when submitting feedback.
- Your browser user-agent string.
This data is stored in our feedback database table and is used only to respond to and act on your feedback. A notification email is sent to our team inbox (hello@chesssnap.app) via Resend.
Legal basis (GDPR): Legitimate interests (Article 6(1)(f)) in receiving and responding to user feedback to improve the service.
3.10 Server Logs
Our hosting provider, Vercel, collects standard HTTP server logs including IP addresses, request paths, HTTP status codes, and timestamps. These logs are used for security monitoring and infrastructure management. Vercel's data processing is governed by their Data Processing Agreement. Vercel infrastructure is deployed in regions including the United States and European Union; the specific region that serves a given request depends on the request's origin.
Legal basis (GDPR): Legitimate interests (Article 6(1)(f)) in operating a secure and reliable service.
3.11 Approximate Country of Use
When you submit a scan, we record a 2-letter ISO country code (for example "DE" or "US") derived from your request IP address by our hosting provider, Vercel. The country code is stored on the same row as the scan record (scan_jobs for signed-in users, scan_metrics for anonymous users). We do not store the IP address itself on the scan record.
This data is used solely to build an aggregate view of where ChessSnap is used, so we can prioritize translations and marketing for the regions where we have real users. Resolution is country-only, never city or precise location. The country code is never combined with personal data for advertising and is never sold to third parties.
Legal basis (GDPR): Legitimate interests (Article 6(1)(f)) in understanding the geographic distribution of users to inform product and language-prioritization decisions, with no individual identification.
4. How We Use Your Data
We use your personal data for the following purposes:
| Purpose | Data used | |---|---| | Providing the core service (AI recognition, game storage, sync) | Account data, photos, game data, handwriting profiles | | Personalizing AI recognition to your handwriting | Handwriting corrections and learned patterns | | Sending PGN exports by email | Email address(es) from Settings, PGN game data | | Processing and managing your subscription | Payment data, Stripe customer ID | | Enforcing the free-tier monthly scan limit | Scan count | | Improving the application | Usage analytics, error reports, scan metrics | | Responding to feedback and support requests | Feedback submissions | | Security and abuse prevention | Server logs, Supabase Auth session data | | Communicating service changes (where required) | Email address |
We do not use your data for advertising, profiling, or selling to third parties.
5. Third-Party Processors
We work with the following subprocessors. All subprocessors are bound by appropriate data processing agreements.
5.1 Supabase (Supabase, Inc.)
Purpose: Database storage (PostgreSQL), file storage (scoresheet photos), and authentication (email/password, Google OAuth, Apple OAuth).
Data transferred: All user data described in Section 3 (account, games, handwriting profiles, photos, settings, analytics, error logs, feedback).
Location: Supabase stores data in the AWS eu-central-1 region (Frankfurt, Germany) by default for projects on the supabase.co platform. Our project is hosted on the Supabase managed cloud.
Basis for transfer: Supabase, Inc. is a US-based company. Transfers are covered by Supabase's Standard Contractual Clauses (SCCs) under GDPR Article 46(2)(c).
Link: https://supabase.com/privacy
5.2 Anthropic, PBC (Claude API)
Purpose: Primary AI recognition of handwritten chess notation from scoresheet photos. Anthropic's Claude Sonnet 4.6 has been the primary OCR provider since 2026-05-07. Data transferred: Compressed JPEG images of your scoresheets (resized to a maximum of 2000 pixels), the notation language, and AI-adapted handwriting hints derived from your correction history (no direct personal identifiers). Retention by Anthropic: Anthropic does not use API inputs or outputs to train its models. Inputs and outputs are retained only as needed to deliver the response and detect abuse, per Anthropic's Commercial Terms of Service and Usage Policy. Location: Anthropic's AI infrastructure is operated from the United States. Basis for transfer: Standard Contractual Clauses under GDPR Article 46(2)(c) as part of Anthropic's Data Processing Addendum. Link: https://www.anthropic.com/legal/privacy
5.3 Google (Gemini API)
Purpose: Fallback AI recognition for scoresheet photos. Google's Gemini models are used when the primary provider (Anthropic) is unavailable. Gemini was the primary OCR provider before 2026-05-07; since that date it serves as a backup. Data transferred: Compressed JPEG images of your scoresheets (resized to a maximum of 2000 pixels), the notation language, and AI-adapted handwriting hints derived from your correction history (no direct personal identifiers). Retention by Google: Google does not use data submitted through the Gemini API to train its models, and does not retain API inputs after generating a response, per the Gemini API Terms of Service and Google Cloud Data Processing Addendum. Location: Google's AI infrastructure is operated from the United States and other Google-operated regions. Basis for transfer: Standard Contractual Clauses under GDPR Article 46(2)(c) as part of Google Cloud's Data Processing Addendum. Link: https://ai.google.dev/gemini-api/terms
5.4 Stripe, Inc.
Purpose: Payment processing for ChessSnap Pro subscriptions (web version only). Data transferred: Your email address (to pre-fill the checkout form), your internal user ID (stamped in Stripe metadata to link payments to your account). Payment card details are entered directly on Stripe's hosted checkout page and are never transmitted to ChessSnap. Location: Stripe is a US-based company with infrastructure in multiple regions. Basis for transfer: Standard Contractual Clauses under GDPR Article 46(2)(c). Link: https://stripe.com/privacy
5.5 Apple, Inc. (iOS)
Purpose (iOS only): In-App Purchase processing and subscription management. Data transferred: Subscription purchase receipt data is exchanged between the iOS device and Apple's servers. ChessSnap receives only a subscription status signal and an Apple original transaction ID linked to your account, not your Apple ID or payment method. Location: Apple operates globally, with infrastructure in the United States and other regions. Link: https://www.apple.com/legal/privacy/
5.6 Resend (Resend, Inc.)
Purpose: Transactional email delivery (PGN export emails, password reset emails, feedback notifications). Data transferred: Recipient email address, email subject and body, PGN file as an attachment. For feedback notifications: feedback message, your email if provided, your browser user-agent, and the page URL. Location: Resend is a US-based company. Basis for transfer: Standard Contractual Clauses under GDPR Article 46(2)(c). Link: https://resend.com/legal/privacy-policy
5.7 Sentry (Functional Software, Inc.)
Purpose: Crash reporting and error monitoring.
Data transferred: Error messages, stack traces, browser and OS version, page URL, and your internal user ID (UUID, not your email). Session replay is disabled.
Location: We have configured our Sentry project to use the EU ingest endpoint (ingest.de.sentry.io), which routes and stores data within the EU.
Basis for transfer: Sentry is a US-based company. Transfers are covered by Sentry's SCCs. By using the EU endpoint, EU-origin crash reports are stored in Sentry's EU data region.
Link: https://sentry.io/privacy/
5.8 Vercel, Inc.
Purpose: Web application hosting and serverless function execution. Data transferred: HTTP request data including IP addresses, request paths, and standard server log fields. Location: Vercel operates infrastructure globally. Edge functions may run close to the user's location; serverless functions run in the region configured for the project. Basis for transfer: Vercel is a US-based company. Transfers are covered by Vercel's Data Processing Agreement including SCCs. Link: https://vercel.com/legal/privacy-policy
6. International Data Transfers
ChessSnap is operated by a data controller based in Germany (EU). Most data is stored within the EU (Supabase on AWS Frankfurt, Sentry EU endpoint). However, some processing involves transfers to the United States and other countries:
- Anthropic Claude API: Your scoresheet images are processed on Anthropic's infrastructure in the United States as part of primary OCR. Covered by Anthropic's Standard Contractual Clauses.
- Google Gemini API: When the primary provider is unavailable, your scoresheet images may be processed on Google's infrastructure, which may be located in the United States. Covered by Google Cloud's Standard Contractual Clauses.
- Stripe: Payment processing involves servers in the United States. Covered by Stripe's Standard Contractual Clauses.
- Resend: Email delivery infrastructure is in the United States. Covered by Resend's Standard Contractual Clauses.
- Vercel: Serverless functions may execute in US regions. Covered by Vercel's Data Processing Agreement.
In all cases, transfers are conducted under appropriate GDPR safeguards (Article 46), specifically Standard Contractual Clauses approved by the European Commission, which require the recipient to protect personal data to EU standards.
7. Data Retention
| Data category | Retention period | |---|---| | Account data (email, auth credentials) | Until you delete your account | | Player profiles, notation settings | Until you delete your account | | Chess games (active) | Until you delete the game or your account | | Chess games (soft-deleted) | 30 days in the recycle bin, then permanently deleted | | Scoresheet photos | Same as the associated game | | Handwriting correction history | Until the underlying game is permanently deleted, or until you delete your account | | Scan metrics (no PII) | Indefinite (used for admin monitoring only) | | Feature events (usage analytics) | Not currently subject to an automated purge; data is reviewed periodically | | Client error logs | Not currently subject to an automated purge | | Feedback submissions | Not currently subject to an automated purge | | Stripe customer ID, subscription status | Until you delete your account; Stripe retains its own records per its legal obligations | | Sentry crash reports | Governed by Sentry's retention policy (default 90 days for resolved issues) | | Vercel server logs | Governed by Vercel's log retention policy | | Recognition cache (image hashes) | Indefinite (hashes only; not reversible to images) |
When you delete your account (see Section 9), all personal data in our database is deleted. Data in Supabase Storage (photos) is also deleted. Some residual data may remain in Sentry, Vercel logs, or Stripe records for the period specified by those services' own retention policies.
8. Your Rights Under GDPR
If you are in the European Economic Area (EEA), you have the following rights under the General Data Protection Regulation:
Right of access (Article 15): You can request a copy of the personal data we hold about you.
Right to rectification (Article 16): You can correct inaccurate data. For most data (player names, email, notation language), you can do this directly in the app Settings.
Right to erasure / "right to be forgotten" (Article 17): You can request deletion of your personal data. See Section 9 for how to delete your account and all associated data.
Right to data portability (Article 20): You can export your chess games as PGN files at any time using the Download or Email functions in the Library. You can also export your handwriting correction profile from the Settings screen (Test Profile section, for administrator accounts). If you need a full structured export of your account data, contact us at hello@chesssnap.app.
Right to restriction of processing (Article 18): You can request that we restrict how we process your data while a dispute about accuracy or lawfulness is resolved.
Right to object (Article 21): You can object to processing based on legitimate interests (Articles 6(1)(f)), such as usage analytics. If you object, we will stop processing for that purpose unless we have compelling legitimate grounds.
Right to withdraw consent: Where processing is based on your consent, you can withdraw it at any time without affecting the lawfulness of prior processing. Note that most of our processing is based on contract or legitimate interests, not consent.
Right to lodge a complaint: You have the right to complain to a data protection supervisory authority. In Germany, this is the Landesbeauftragte fur Datenschutz und Informationsfreiheit Nordrhein-Westfalen (see Section 2 for contact details).
California residents (CCPA): California residents have the right to know what personal information we collect, to request deletion, to opt out of the "sale" of personal information (we do not sell personal information), and not to be discriminated against for exercising privacy rights. To exercise these rights, contact us at hello@chesssnap.app.
9. How to Exercise Your Rights
In-app options:
- Edit your data: Player names, notation language, email addresses, and UI language can be changed in Settings.
- Delete individual games: Tap the delete icon in the Library. Games enter a 30-day recycle bin and are then permanently deleted.
- Export your games: Use the Download or Email functions in the Library or Result screen.
Account deletion: To delete your account and all associated personal data, send an email to hello@chesssnap.app with the subject line "Delete my account" from the email address registered to your account. We will delete your account, games, handwriting profiles, photos, and settings within 30 days and confirm by email.
We are working on an in-app account deletion flow and will update this policy when it is available.
Other requests: For data access, portability requests beyond in-app exports, objections to processing, or any other privacy inquiry, contact hello@chesssnap.app. We will respond within 30 days.
10. Cookies and Local Storage
Cookies
ChessSnap uses the following cookies:
| Cookie name | Purpose | Duration | Type |
|---|---|---|---|
| chesssnap_ui_lang | Stores your chosen UI language so the server can render the app in your language on the first request. | 1 year | Functional |
| Supabase auth session cookie | Maintains your login session. Set by Supabase Auth on the supabase.co domain. | Session / as configured by Supabase | Strictly necessary |
We do not use advertising cookies, tracking cookies, or third-party analytics cookies.
localStorage (browser storage)
ChessSnap stores the following data in your browser's localStorage. This data remains on your device and is not automatically sent to our servers. It is synchronized to the cloud only when you are signed in and connected.
| Key prefix | Contents |
|---|---|
| chesssnap_games | Your chess game list (moves, game info, status) |
| chesssnap_game_images_{id} | Compressed scoresheet thumbnail images for each game |
| chesssnap_handwriting / chesssnap_handwriting_{playerId} | Handwriting correction history and learned patterns |
| chesssnap_players | Your player profile(s) (name, notation language) |
| chesssnap_active_player | The currently selected player profile ID |
| chesssnap_notation_lang | Your notation language setting |
| chesssnap_ui_lang | Your UI language setting |
| chesssnap_my_email | Your email address for PGN exports (if you have set one) |
| chesssnap_coach_email | Your coach's email address for PGN exports (if you have set one) |
| chesssnap_scan_count | The number of scans used in the current month |
| chesssnap_subscription | Your subscription expiry date |
| chesssnap_last_user_id | The internal user ID of the last signed-in user, used to detect account switches and clear stale local data |
| chesssnap_login_pending | Temporary flag set during the OAuth sign-in flow |
| chesssnap_onboarding_v2_shown | Flag indicating whether the onboarding carousel has been shown |
| chesssnap_done_warning_dismissed | Per-game flag indicating whether you have dismissed the "Review Recommended" warning |
| chesssnap_player_profile_reviewed | Flag indicating whether the player profile welcome dialog has been shown |
To clear all localStorage data, you can sign out of the app (which removes user-specific data) or clear your browser's site data for chesssnap.app in your browser settings. On iOS, you can delete the app to remove all locally stored data.
11. Children's Privacy
ChessSnap is designed to help chess players digitize their scoresheets. While the app is commonly used to manage games played by children in youth chess tournaments, the app is not directed at children under 13, and we do not knowingly collect personal data directly from children under 13.
Children's games are typically managed by a parent, guardian, or chess coach who creates and uses the account. The player profiles created in the app (which store only a name and notation language preference) do not require, and should not contain, additional personal data about a minor beyond a first name or pseudonym.
If you are a parent or guardian and believe that your child under 13 has created an account and provided personal data without your consent, please contact us at hello@chesssnap.app. We will delete the account and associated data promptly.
12. Security
We implement the following measures to protect your personal data:
- Encryption in transit: All data transmitted between your device and our servers is encrypted using TLS/HTTPS.
- Encryption at rest: Supabase encrypts data at rest in its managed database and storage infrastructure.
- Row-level security: Database tables are protected by Supabase row-level security policies that ensure each user can only access their own data.
- Storage isolation: Scoresheet photos are stored in a private bucket with access policies that restrict each file to the user who uploaded it.
- Authentication: Account access is protected by Supabase Auth. We support Google OAuth, Apple OAuth, and email/password authentication. Passwords are hashed by Supabase and never stored in plain text.
- No card data: Payment card details are handled entirely by Stripe on their PCI-compliant infrastructure. We never receive or store card numbers.
- Session integrity: On sign-in, we check whether the current local data belongs to a different account and clear stale data before loading the new session, preventing cross-account data leakage on shared devices.
No security measure is perfect. If you discover a security vulnerability, please report it to hello@chesssnap.app.
13. Changes to This Policy
We may update this Privacy Policy from time to time to reflect changes in the app, applicable law, or our practices. When we make material changes, we will update the "Last updated" date at the top of this document.
For significant changes affecting your rights or how we use your data, we will notify you by email (if you have an account) or by displaying a notice in the app.
Your continued use of ChessSnap after a policy update constitutes acceptance of the updated policy.
14. Contact
For any privacy-related question, request, or complaint:
Email: hello@chesssnap.app Subject line: Privacy Inquiry
Mailing address (data controller): Scop Düsseldorf, Germany
Lead supervisory authority (Germany): Landesbeauftragte fur Datenschutz und Informationsfreiheit Nordrhein-Westfalen Kavalleriestr. 2-4, 40213 Düsseldorf poststelle@ldi.nrw.de https://www.ldi.nrw.de
ChessSnap is a free service for youth chess, built independently in Düsseldorf.