Privacy Notice
This document was fact-checked against the current codebase, not drafted by a lawyer. It is not legal advice. See the "Status" note at the end for the one item in here worth a paid second opinion; everything else has been verified against the source.
Last updated: 2026-08-30
Jurisdiction: Spain (EU)
Data controller: Miguel Mesa Chica
Contact: miguelmesachica@gmail.com
1. What We Collect
PartyF is a real-time party game platform. You do not need an account to play.
When you use PartyF, we temporarily store:
- Your display name — the name you type when joining a room. This is visible to all other players in that room during gameplay.
- Your game submissions — your answers, responses, and moves within each game. These are broadcast to other players in the room as part of normal gameplay.
- Your points/score — automatically calculated during games and visible to other players.
Important: Your display name is free text that you provide. If you enter your real name or other personal data, that becomes personal data in our system, even though we never ask for it.
Client-side storage: your browser also saves, in localStorage:
- your language preference, indefinitely;
- the last nickname you typed, indefinitely, so you don't have to retype it next
visit — this is cleared only if you clear your browser's storage yourself, not automatically;
- while you're in an active session, your room code/session token/player ID, so you
can rejoin after a refresh without re-entering a room code — this is cleared when you leave or end a session, but a stale copy can remain in your browser's storage until then even after the session itself has expired server-side.
See STORAGE-DISCLOSURE.md for the full technical disclosure.
Feedback you choose to submit: PartyF has an optional in-app "Feedback" link for reporting bugs or suggesting features/games. If you use it, the free-text message you write — and a screenshot, only if you actively choose to attach one — is sent to our error-tracking vendor, Sentry. The form does not show a name or email field, so we don't collect either through it. See §6 for more on Sentry.
Crash reports and product analytics: PartyF sends crash/error reports to Sentry and anonymous product-analytics events (e.g. which screens are viewed, which games are started/ended) to PostHog. PostHog derives an approximate country from your IP address for each event, as it does by default for every PostHog Cloud customer — PartyF's own code never logs or stores your IP address. This is active on the production site (partyf.es) today, not a hypothetical — this notice is written to also cover preview/staging deployments where either vendor may be unconfigured, hence "deployment-dependent" language elsewhere in this section, but for the site you are reading this on, both are on. See §6 for details.
What We Do NOT Collect
- Email addresses
- Phone numbers
- Real-world addresses
- Payment information
- Account passwords
Exception — advertising (see §6): PartyF shows Google AdSense ads, which set their own cookies/device identifiers for ad delivery (and, absent consent, ad measurement) independent of anything PartyF's own code stores. This is disclosed in full in §6, not omitted here as it was in earlier drafts of this notice.
2. How Long We Keep It
All session data is automatically deleted according to strict, enforced time limits:
- Hard cap: Sessions expire after 6 hours of creation, regardless of activity.
- Idle timeout: Sessions are automatically reaped if inactive for 30 minutes. The reaper runs every minute.
- Automatic deletion: We do not retain data after session expiry. Data is not backed up for recovery; it is deleted on expiry.
When you leave a room or the session expires, your data is gone. We have no way to retrieve it, and we do not retain it in any form.
3. Legal Basis
We process this data based on:
- Contractual necessity (GDPR Art. 6(1)(b)): We must store your name and submissions to provide the service.
- Our legitimate interest (GDPR Art. 6(1)(f)): Temporary storage of scores and session state is necessary to operate the game fairly.
Because the data is deleted automatically within hours, the privacy impact is minimal.
4. Where Your Data Lives
Sessions are stored on Google Cloud Run, region europe-west1 (physically located in Belgium). Data at rest and in transit are encrypted.
5. Who Can See Your Data
- Other players in your room: Your name, submissions, and scores are visible to them during gameplay. This is how the games work.
- Us: We can see session data for operational purposes (debugging, user support). We do not sell, share, or use this data for any other purpose.
- Google Cloud: Your data is stored on Google Cloud's infrastructure. Google's Cloud Data Processing Addendum applies automatically to all Google Cloud customers under the Cloud Terms of Service — there's nothing separate to sign or accept for this to apply.
- Sentry and PostHog (only on deployments configured to use them): If you submit in-app feedback, or if this deployment has crash reporting / product analytics enabled, that data is visible to us through Sentry's and PostHog's dashboards, for debugging and product-improvement purposes only. See §6.
We do not share data with any third party for marketing, analytics, or any other purpose.
6. Third-Party Data Transfers
Fonts are self-hosted (10 woff2 subsets bundled with the app) and no third-party font requests are made. Confirmed against the deployed frontend: no fonts.googleapis.com/fonts.gstatic.com references remain in the codebase or the built image.
Error tracking (Sentry) and product analytics (PostHog) — both optional, per deployment. Frontend errors are always logged to your own browser console (console.error). Beyond that, each deployment of PartyF independently decides, at build time, whether to also connect to Sentry and/or PostHog; a deployment with neither configured makes no calls to either vendor.
- Sentry (EU data ingest): When configured, uncaught frontend errors and unhandled
promise rejections are reported to Sentry for debugging. Sentry also powers the in-app "Feedback" link: submitting it sends your typed message (and a screenshot, only if you choose to attach one) to Sentry as a support ticket. The feedback form has no name or email input, so none is collected through it.
- PostHog (EU Cloud): When configured, PostHog collects anonymous product-analytics
events (e.g. screen views, and which games are started/ended) to help us understand how PartyF is used, including an approximate country derived from your IP address — standard PostHog Cloud behavior; PartyF's own code never logs or stores the IP itself. It is initialized with personprofiles: identifiedonly, so no persistent per-person profile is created unless the app explicitly identifies a user, which it does not currently do.
Both are third-party processors operating under their own privacy policies, independent of PartyF. Operational TODO, not a legal question: accept Sentry's and PostHog's Data Processing Agreements in each vendor's own account settings (a checkbox, not a negotiation), and check each vendor's dashboard for its default event-retention window — shorten it there if it's longer than you want disclosed in §8. Resolved 2026-09-01, re-verified against the live production bundle (was flagged as a live gap on 2026-08-30): PostHog's activation is gated behind the IAB TCF consent signal in src/main.ts (initAnalyticsWithConsent), and the deployed production revision confirmed to be running that gate — see STORAGE-DISCLOSURE.md §2.1 for the fix history.
Google AdSense (advertising): PartyF shows ads served by Google AdSense (publisher ID pub-8800374421096613). Google may set cookies or use similar technologies (e.g. device identifiers) on your device to serve and measure ads, and — where you have not restricted it — to personalize them based on your activity. This processing is carried out by Google as an independent controller under its own privacy policy and consent mechanisms, not by PartyF.
For visitors in the EEA/UK, PartyF uses Google's built-in consent tool ("Privacy & messaging", loaded via fundingchoicesmessages.google.com — see index.html) to collect and signal consent before ads are personalized, in line with Google's EU User Consent Policy. You can review or withdraw consent through that message, and separately manage ad personalization at adssettings.google.com.
The legal basis for the ad cookies themselves is consent, not legitimate interest/contract — that's settled under ePrivacy/GDPR for non-essential advertising cookies, not a judgment call, and it's already what the Funding Choices flow above is built to collect. Operational TODO: accept the AdSense Data Processing Terms in the AdSense account dashboard (a checkbox) before this section goes live for a monetizing deployment.
7. Your Rights
Under GDPR and local data protection law, you have the right to:
- Access: Request a copy of the personal data we hold about you. Because our data has a hard 6-hour TTL, requests must be submitted within the session window to be meaningful.
- Deletion: Request deletion of your data. Because we delete all data automatically on session expiry, this right is largely moot, but you may request manual deletion by contacting us.
- Rectification: Request correction of inaccurate data.
- Portability: Request your data in a structured, machine-readable format.
- Object: Object to specific processing (though the minimum processing we do is necessary for the service).
- Lodge a complaint: File a complaint with your local data protection authority.
To exercise these rights, contact: miguelmesachica@gmail.com
8. Data Retention Summary
| Data | Retention | Basis |
|---|---|---|
| Session metadata | 6 hours (hard cap) or 30 min (idle) | Automatic TTL, enforced by Redis janitor |
| Player names | 6 hours (hard cap) or 30 min (idle) | Automatic TTL |
| Game submissions | 6 hours (hard cap) or 30 min (idle) | Automatic TTL |
| Points/scores | 6 hours (hard cap) or 30 min (idle) | Automatic TTL |
| Application/platform logs | Up to 30 days (Google Cloud Logging's default _Default bucket retention) | Legitimate interest — operational monitoring and security (GDPR Art. 6(1)(f)) |
| Error reports & in-app feedback submissions (Sentry, only on deployments configured to use it) | Per Sentry's account-level retention — legal counsel to confirm and, if needed, shorten | Legitimate interest — debugging and product feedback (GDPR Art. 6(1)(f)) |
| Anonymous analytics events (PostHog, only on deployments configured to use it) | Per PostHog's account-level retention — legal counsel to confirm and, if needed, shorten | Legitimate interest — product analytics (GDPR Art. 6(1)(f)) |
9. Contact
For privacy questions or data subject rights requests:
Email: miguelmesachica@gmail.com
Organization: Miguel Mesa Chica (individual operator, not a registered company)
Jurisdiction: Spain (EU)
No dedicated Data Protection Officer is appointed. GDPR Art. 37 requires one only for public authorities, or for large-scale systematic monitoring or large-scale special- category-data processing — PartyF's ephemeral, non-systematic-monitoring processing (§1–§2) doesn't approach that threshold at any deployment scale realistic for this product. Revisit only if the product's data collection changes fundamentally (e.g. persistent accounts, profiling, or special-category data).
10. Changes to This Notice
We may update this notice if our processing changes. Material changes will be published here with a new "Last updated" date.
Status: Nothing here blocks publication. Two concrete follow-ups from this pass: (1) accept Sentry's/PostHog's/AdSense's DPAs in each vendor's dashboard before production use — a checkbox each, not legal work; (2) don't set VITEPOSTHOGKEY on an EEA/UK deployment until PostHog's init is consent-gated (see STORAGE-DISCLOSURE.md §2.1). If you want a paid second opinion on anything, the GPLv3-vs-monetization question in THIRD-PARTY-LICENSES.md is the one genuine business-strategy judgment call in this set of documents — this notice isn't it.