← COCOFLY
Приватность · версия 0.2.0

Политика приватности COCOFLY

Версия 0.2.0 · сентябрь 2026 · English below

Это описание того, какие данные игра COCOFLY хранит и зачем, написанное тем, кто её сделал. Оно не является юридической консультацией. Если что-то в тексте расходится с тем, что делает код, верен код — он открыт, и ссылки на нужные файлы приведены ниже.

Оператор (controller): сопровождающий проекта (the project maintainer), частное лицо, резидент Кипра (ЕС). Контакт: [privacy@example.com — заменить]. Данные обрабатываются инфраструктурой Cloudflare (Workers, D1, Static Assets) от имени оператора.

1. Игра без входа в аккаунт

По умолчанию COCOFLY ничего не отправляет о вас на сервер, кроме анонимных счётчиков (п. 3). В браузере (localStorage) хранятся:

Эти данные не покидают ваше устройство, пока вы не войдёте в аккаунт. Кнопка «Сохранить файл» выгружает сохранение в JSON на ваш диск; «Начать заново» перезаписывает его. Очистка данных сайта в браузере удаляет всё перечисленное.

2. Аккаунт и облачное сохранение (только если вы вошли)

Вход добровольный и нужен для синхронизации между устройствами и таблицы рекордов. При входе сервер хранит в базе D1:

ЧтоЗачемГде в коде
адрес e-mail, дата подтверждениявход, ссылки подтверждения/сброса пароляapi/migrations/0001_init.sql → users
хеш пароля (PBKDF2-SHA-256, 100 000 итераций, соль); сам пароль не хранитсявходapi/src/util.js
никнейм (2–24 символа, необязателен), язык интерфейсаподпись в таблице рекордовusers.nickname, users.lang
даты создания аккаунта и последнего визита (не чаще раза в сутки)счётчики DAU/WAU в админкеusers.created_at, users.last_seen_at
текущее сохранение игры и до 5 предыдущих версийоблачное сохранение, откатsaves, save_history
профиль режима «Поколения» (≤ 32 КБ JSON)синхронизация библиотеки штаммовprofiles
результаты (режим, очки, дни, поколение, геном, дата) — лучшие 3 на режимтаблица рекордовscores
сессии: хеш токена cookie, срок, строка User-Agent (до 200 символов)поддержание входа, ограничение злоупотребленийsessions
одноразовые ссылки: хеш токена, e-mail, назначение, срокподтверждение почты и сброс пароляmagic_links

Таблица рекордов публична: никнейм, очки/дни/яйца, до трёх символов генома и дата видны всем игрокам. Если не задать никнейм, ваши результаты в неё не попадают. E-mail никогда не показывается.

Сохранение игры содержит только игровое состояние. Текст, который вы вводите в поле «Написать Коко», не сохраняется — он лишь сопоставляется с готовым набором предложений; в сохранение попадает идентификатор предложения и ответ Коко.

2b. Приложение COCOFLY для iPhone (v0.7)

3. Анонимные счётчики событий

Клиент раз в 5 минут (и при уходе со страницы) отправляет на POST /api/events список имён событий с количеством: session, minutes, mode_start_<режим>, suggest_accepted, suggest_refused, tool_<инструмент>, achievement, death_<причина>, login. Сервер прибавляет их к суточным суммам (events_daily: день, имя, счётчик). С ними не хранится ни IP-адрес, ни идентификатор пользователя, ни cookie — это агрегаты вроде «в четверг было 120 сессий». Хранятся 400 дней и нужны, чтобы понимать, какие режимы и инструменты вообще используются. Отдельного «не отслеживать» переключателя нет, потому что персональных данных в этих счётчиках нет.

4. Cloudflare Web Analytics (если включено)

Администратор может включить Cloudflare Web Analytics — счётчик посещений без cookie и без межсайтового трекинга. Тогда страница подгружает static.cloudflareinsights.com/beacon.min.js, и Cloudflare получает стандартные данные запроса (адрес страницы, тип браузера, страна по IP). Это описано в политике Cloudflare (https://www.cloudflare.com/web-analytics/). В открытом коде видно, включено ли это: analyticsToken в ответе GET /api/config.

Единственная cookie — cf_session (строго необходимая): ставится только после входа, HttpOnly; Secure; SameSite=Lax, живёт 30 дней и продлевается не чаще раза в сутки. Она нужна, чтобы не вводить пароль каждый раз. Аналитических, рекламных и сторонних cookie нет, поэтому баннер согласия на cookie не показывается. Выход из аккаунта удаляет cookie и сессию.

6. Технические данные, которые видит сервер

7. Электронная почта

Письма отправляются только двух видов: ссылка подтверждения почты и ссылка сброса пароля. Отправитель — сервис Resend (https://resend.com), который получает ваш адрес и текст письма только для доставки. Ссылки живут 30 минут и работают один раз. Если провайдер почты не настроен, письмо не уходит, а ссылка ждёт в служебной таблице outbox, где её видит только администратор (адрес и ссылка) — доставленные записи удаляются через 30 дней. Рассылок, уведомлений и маркетинга нет.

8. Сроки хранения

ДанныеСрок
локальные данные браузерапока вы их не удалите
аккаунт, сохранение, профиль, рекордыпока существует аккаунт
история сохраненийпоследние 5 версий
сессии30 дней без продления; истёкшие удаляются автоматически
одноразовые ссылки30 минут; удаляются через сутки после истечения
счётчики попыток по IP~48 часов
отправленные письма в outbox30 дней
анонимные суточные счётчики400 дней
резервные копии администратора (экспорт из админки)по усмотрению оператора; см. п. 10

9. Ваши права и удаление аккаунта

Кнопка «Удалить аккаунт и все данные» в окне входа сразу и необратимо удаляет пользователя, сессии, сохранение, историю сохранений, профиль и все результаты (DELETE /api/account). Администратор может сделать то же самое по вашей просьбе. По GDPR у вас также есть право на доступ, исправление (никнейм и язык меняются в игре), ограничение обработки и переносимость — сохранение в любой момент выгружается кнопкой «Сохранить файл», остальное пришлём по запросу на контактный адрес. Жалобу можно подать в надзорный орган вашей страны; для Кипра это Уполномоченный по защите персональных данных (dataprotection.gov.cy).

Обратите внимание: ещё не доставленные ссылки в outbox и одноразовые ссылки не удаляются вместе с аккаунтом, а истекают и вычищаются по срокам из п. 8.

10. Кому передаются данные

Никому не продаются и не передаются для рекламы. Рекламы в игре нет. Обработчики: Cloudflare (хостинг, база данных, опциональная аналитика), Resend (почта), Google Fonts (шрифты). Данные могут храниться в дата-центрах Cloudflare за пределами ЕС; Cloudflare использует стандартные договорные положения ЕС. Резервные копии из админки могут содержать e-mail, никнеймы и сохранения (никогда — хеши паролей); оператор хранит их на своём устройстве и удаляет по мере ненадобности. Данные могут быть раскрыты только если этого потребует закон.

11. Дети

Возрастной проверки нет: игра подходит для любого возраста, не содержит рекламы, покупок и профилирования. Единственное персональное данное, которое мы можем запросить, — e-mail при добровольном создании аккаунта. Если вам меньше 16 лет (или меньше возраста цифрового согласия в вашей стране), попросите родителя или опекуна создать аккаунт с вами или играйте без входа — все функции игры доступны офлайн.

12. Правовые основания (GDPR)

Исполнение договора с вами (ст. 6(1)(b)) — аккаунт, сохранения, рекорды; законный интерес (ст. 6(1)(f)) — безопасность, лимиты, анонимные счётчики, чтобы поддерживать бесплатный сервис; согласие (ст. 6(1)(a)) — вы сами решаете, создавать ли аккаунт.

13. Изменения

Изменения публикуются в этом файле и на странице /privacy.html с новой версией и датой; существенные изменения будут отмечены в объявлении в шапке игры. История версий — в CHANGELOG.md.

Privacy · version 0.2.0

COCOFLY privacy policy

Version 0.2.0 · September 2026

This is a description of what the COCOFLY game stores and why, written by the person who built it. It is not legal advice. Where this text and the code disagree, the code is authoritative — it is open source, and the relevant files are referenced below.

Controller: the project maintainer, a private individual resident in Cyprus (EU). Contact: [privacy@example.com — replace]. Processing runs on Cloudflare infrastructure (Workers, D1, Static Assets) on the controller's behalf.

1. Playing without an account

By default COCOFLY sends nothing about you to the server except anonymous counters (section 3). Your browser (localStorage) keeps:

None of this leaves your device until you sign in. "Save file" downloads the save as JSON to your disk; "Start over" overwrites it. Clearing site data in your browser removes everything above.

2. Account and cloud save (only when you sign in)

Signing in is optional; it enables cross-device sync and the leaderboard. When you do, the server stores in its D1 database:

WhatWhyWhere in the code
e-mail address, verification datesign-in, verification/reset linksapi/migrations/0001_init.sql → users
password hash (PBKDF2-SHA-256, 100 000 iterations, salted); the password itself is never storedsign-inapi/src/util.js
nickname (2–24 characters, optional), interface languageleaderboard labelusers.nickname, users.lang
account creation date and last-seen date (updated at most once a day)DAU/WAU counters in the admin panelusers.created_at, users.last_seen_at
current game save and up to 5 previous versionscloud save, rollbacksaves, save_history
Generations profile (≤ 32 KB JSON)sync of the strain libraryprofiles
scores (mode, points, days, generation, genome, date) — best 3 per modeleaderboardscores
sessions: hash of the cookie token, expiry, User-Agent string (up to 200 chars)staying signed in, abuse limitssessions
one-time links: token hash, e-mail, purpose, expirye-mail verification and password resetmagic_links

The leaderboard is public: nickname, points/days/eggs, up to three genome symbols and the date are visible to all players. Without a nickname your scores are not listed. E-mail is never shown.

A game save contains game state only. Text typed into "Text Coco" is not stored — it is only matched against a fixed list of suggestions; the save records the suggestion id and Coco's reply.

2b. The COCOFLY iPhone app (v0.7)

3. Anonymous event counters

Every 5 minutes (and when you leave the page) the client posts to POST /api/events a list of event names with counts: session, minutes, mode_start_<mode>, suggest_accepted, suggest_refused, tool_<tool>, achievement, death_<cause>, login. The server adds them to daily totals (events_daily: day, name, count). No IP address, user id or cookie is stored with them — they are aggregates such as "120 sessions on Thursday". They are kept for 400 days and exist to show which modes and tools are used at all. There is no separate opt-out switch because these counters contain no personal data.

4. Cloudflare Web Analytics (when enabled)

The administrator may enable Cloudflare Web Analytics — a cookieless visit counter with no cross-site tracking. The page then loads static.cloudflareinsights.com/beacon.min.js and Cloudflare receives standard request data (page URL, browser type, country derived from IP). See https://www.cloudflare.com/web-analytics/. Whether it is on is visible in the open source: analyticsToken in the GET /api/config response.

5. Cookies

The only cookie is cf_session (strictly necessary). It is set only after you sign in, HttpOnly; Secure; SameSite=Lax, lives 30 days and is renewed at most once a day. It exists so you do not have to type your password every time. There are no analytics, advertising or third-party cookies, so no cookie banner is shown. Signing out deletes the cookie and the session.

6. Technical data the server sees

7. E-mail

Only two kinds of e-mail are ever sent: an e-mail verification link and a password reset link. They go through Resend (https://resend.com), which receives your address and the message body solely for delivery. Links are valid for 30 minutes and work once. If no mail provider is configured, nothing is sent and the link waits in an internal outbox table visible only to the administrator (address and link); delivered rows are deleted after 30 days. There are no newsletters, notifications or marketing.

8. Retention

DataKept for
local browser datauntil you delete it
account, save, profile, scoreswhile the account exists
save historylast 5 versions
sessions30 days without renewal; expired ones are purged automatically
one-time links30 minutes; purged a day after expiry
IP-keyed attempt counters~48 hours
sent messages in outbox30 days
anonymous daily counters400 days
administrator backups (admin-panel export)at the controller's discretion; see section 10

9. Your rights and account deletion

The "Delete account and all data" button in the sign-in dialog immediately and irreversibly erases the user, sessions, save, save history, profile and all scores (DELETE /api/account). The administrator can do the same on request. Under the GDPR you also have the rights of access, rectification (nickname and language are editable in the game), restriction and portability — the save can be exported at any time with "Save file"; the rest we will send on request to the contact address. You may complain to the supervisory authority of your country; for Cyprus that is the Commissioner for Personal Data Protection (dataprotection.gov.cy).

Note: undelivered outbox entries and one-time links are not removed together with the account; they expire and are purged on the schedule in section 8.

10. Who receives data

Nothing is sold or shared for advertising. The game has no ads. Processors: Cloudflare (hosting, database, optional analytics), Resend (e-mail), Google Fonts (fonts). Data may be stored in Cloudflare data centres outside the EU; Cloudflare relies on the EU Standard Contractual Clauses. Admin-panel backups may contain e-mails, nicknames and saves (never password hashes); the controller keeps them on their own device and deletes them when no longer needed. Data is disclosed only if required by law.

11. Children

There is no age gate: the game is suitable for all ages and has no advertising, purchases or profiling. The only personal data we may ask for is an e-mail address when you voluntarily create an account. If you are under 16 (or under the age of digital consent in your country), ask a parent or guardian to create the account with you, or play without signing in — every game feature works offline.

Performance of a contract with you (Art. 6(1)(b)) — account, saves, scores; legitimate interest (Art. 6(1)(f)) — security, rate limits, anonymous counters that keep a free service running; consent (Art. 6(1)(a)) — you decide whether to create an account at all.

13. Changes

Changes are published in this file and on /privacy.html with a new version and date; material changes will be flagged in the announcement bar of the game. Version history is in CHANGELOG.md.