Privacy
What we store
- A short-lived anonymous cookie identifies a voter session. - Voter hashes and ballot pseudonyms are derived tokens used only for anti-duplicate voting. - Operational logs store request and route-level events; they do not store raw IP addresses. - Catalog search terms travel in the request URL to return results. Application logs record the route path, not raw `q` values, and application analytics do not retain raw searches. - Turnstile verification uses challenge-only payloads and does not persist, forward, or log raw IP addresses. - Metric events are limited to operational outcomes needed for moderation and reliability, and only on an aggregate basis. - Denominator for results is the total number of accepted votes per matchup.
Retention
- Anonymous voter token: 30 days.
- Ballot pseudonym set: 14 days.
- Raw vote rows: retained for operational review window, then moved to immutable aggregates.
- Vote void evidence/audit trail: retained as documented in operational runbooks.
- Rate-limit state: limited short window for abuse control.
- Consent for all optional analytics or telemetry is opt-in by owner configuration and defaults to disabled.
Vendors
- Hosting and edge: Cloudflare (Pages, Worker, DNS, R2, Turnstile).
- Database: managed PostgreSQL provider.
- Each vendor receives only the fields needed for service operation and follows standard contract terms.
Product metrics, denominator rules, and consent basis
- Approved metric events:
- `competition_state_view`: route visits to duel/archive/winner/template routes for latency and availability monitoring.
- `catalog_request`: aggregate result/no-result and latency counters without the raw query.
- `vote_attempt`, `vote_accept`, `vote_reject`: operational quality signals for integrity and abuse controls.
- `finalization_complete`: finalizer outcomes with round count and elapsed duration.
- `policy_lookup`: policy content access for legal review workflows.
- Denominator rules:
- Voting conversion and completion metrics are based on accepted votes per matchup.
- Duplicate retries, invalid payloads, and challenge failures are excluded from percentage counts.
- Consent basis:
- Operational counters are off by default and require an explicit owner decision.
- Optional analytics/telemetry outside product operations is disabled unless explicitly enabled for an approved purpose.
Rights and disclosure
- No personal accounts.
- No ad tracking.
- No public profile linkage.
- Anonymous voting lowers abuse risk for open voting, but it does not prevent coordinated or cookie-reset manipulation.
- Cross-day voting behavior is not inferred across dates without explicit retention policy changes.
Requests and deletion
- Removal or correction requests are handled through the policy contact path.
- Retention and deletion outcomes are logged with request IDs, actor, and reason.
Abuse and bot controls
- Turnstile or equivalent challenge is required before write actions when configured.
- Rate limits and token entropy checks run on every vote attempt.
- Bot activity is rate-limited, but not blocked by default in a way that prevents ordinary accessible use.