Политика конфиденциальности
Обновлена 10 октября 2026 года
Действует для сайта и приложения — они оба на snapfork.app.
Содержание
Что хранится на сервере
Только то, без чего не работают вход, синхронизация и переписка с разработчиком:
- адрес почты — не открытым текстом, а как результат необратимого преобразования с секретным ключом; восстановить из него адрес нельзя, сравнить с известным адресом можно;
- идентификатор аккаунта у Google или Apple, если вход был через них, — тоже преобразованный;
- сессии: только отпечаток токена из вашей куки, не сам токен, и время вашего входа;
- коды из писем — под хешем, живут десять минут;
- счётчики обращений, чтобы код нельзя было подобрать перебором;
- переписка с разработчиком, если вы ею воспользовались, — см. отдельный раздел ниже;
- незавершённый вход: начатый и не доведённый до конца поток живёт на сервере минуты и уходит сам;
- пополнения баланса распознаваний, если вы им пользовались: сумма, время и идентификатор платежа у продавца, который принимал оплату (номер карты остаётся у него);
- список ваших устройств — только тот случайный признак, который устройство придумало себе само, и когда оно приходило в последний раз. Ни модели, ни системы, ни названия: список отвечает на вопрос «сколько их и живы ли они», и больше ни на какой;
- резервные копии всей базы — раз в час, хранятся до 14 суток, чтобы сбой не унёс аккаунты всех разом. Что в них лежит и сколько, — в разделе «Сколько это хранится».
Где стоит сервер. Сервер, рабочая база и локальные резервные копии работают у хостинг-провайдера Railway (США), в его регионе в Сингапуре. Рабочие данные людей из Европейского союза и Великобритании поэтому хранятся за их пределами. Зашифрованные внешние копии размещаются в Cloudflare R2 с юрисдикцией Европейского союза.
Что происходит с дневником
Дневник питания хранится и у вас, и на сервере — но на сервере он зашифрован. Записи, фотографии-превью, увеличенные копии снимков и вес лежат в хранилище браузера, а их копия уезжает на сервер запечатанной: ключ от неё есть только на вашем устройстве. Сервер видит, что записей стало больше и когда это случилось, — и не видит ни что вы ели, ни сколько, ни сколько вы весите.
Прочитать дневник не можем и мы. Это не обещание вести себя хорошо, а устройство системы: ключа у нас нет. Отсюда цена, которую надо знать заранее — потеряете код восстановления вместе с устройством, и дневник не вернёт никто, включая нас. Восстанавливать будет нечем. Код показывается в настройках, в разделе «Данные»; запишите его и держите отдельно от телефона.
Спорные версии сервер тоже хранит — и это в вашу пользу. Если одну запись успели поправить на двух устройствах, побеждает свежая правка, а проигравшая не выбрасывается: она лежит на сервере месяц, такой же запечатанной, и её видно в приложении. Иначе «оно само исправилось» было бы нашим словом против вашей памяти. Прочитать её мы, разумеется, не можем — она в том же конверте, что и всё остальное.
Картинка профиля — выбранная вами фотография или встроенный зверёк. Она хранится на устройстве и входит в файл вашей резервной копии. На сервер она уезжает, только если вы включили обмен картинкой: у него свой переключатель в разделе «Данные», отдельный от обмена настройками и выключенный, пока вы его не включите. Тогда на сервере лежит одна нынешняя копия — отдельным конвертом, запечатанным вашим кодом восстановления: открыть его могут только ваши устройства. Картинку мы не отправляем ни модели, ни друзьям. Конверт одного размера, будь в нём фото или зверёк: сервер видит только, что копия есть, номер её версии и когда она менялась. Выключение обмена сразу стирает конверт; остаётся служебная запись без картинки — номер версии и время выключения, — по которой другие ваши устройства узнают, что обмен выключен. Удаление аккаунта стирает и её. В резервных копиях сервера стёртое остаётся до 14 суток — см. «Сколько это хранится».
Обмен Health также хранит на сервере служебные данные: публичные ключи проверки телефона, право телефона выполнять обмен, хеши целей и границы версий, состояния операций, отмен и старых переносов. Здесь нет значений Health, системных ID записей, имён устройств или заметок. Данные удаляются с аккаунтом; состояния и операции входят в серверную выгрузку, публичные ключи проверки — нет.
Настройки уезжают на сервер, только если вы включили их обмен. Цели, профиль (имя, пол, год рождения, рост, уровень активности, намерение, темп, целевой вес, что учесть в расчёте и чего вы не едите), цель по воде, доли приёмов, функции дневника, настройки питания, журнал поправки нормы, быстрые действия, единицы, тема открытки и два флажка — скрытая оценка товара и выключенный поиск в открытой базе — едут одним конвертом, запечатанным тем же ключом, что и дневник. Отдельно о том, по чему можно догадаться о вере или здоровье: готовый набор и цели питания (например, «Растительная» или «Без алкоголя»), список того, что вы не едите, и свои слова из настроек питания — стоп-слова и исключения — едут в этом же конверте и так же запечатаны. Включается это отдельным переключателем в разделе «Данные»; до этого настройки лежат только на устройстве. Выключаете там же — и копия на сервере стирается сразу, а обмен выключается на всех ваших устройствах. Сервер видит, что конверт есть, когда он менялся, сколько весит и когда обмен выключили, — и не видит, что внутри. Тема оформления, язык, напоминания, подключение Apple Health и ключ своей площадки распознавания не уезжают никогда: это свойства устройства.
Страна проживания, если вы её выбрали, хранится на этом устройстве. Она едет в файле резервной копии рядом с языком и стирается вместе с остальными личными настройками, когда за устройство садится другой человек. В конверт обмена настроек она не входит, а по IP-адресу и языку интерфейса мы её не определяем. Полем запроса на наш сервер код страны уходит только с запросом распознавания ключом Snapfork и только при включённом флажке «Учитывать страну при распознавании» — транзитом, там он не остаётся (раздел «Куда уходят данные»). Строку «Предложение устройства» в выборе страны приложение считает на самом устройстве — по региону системы, часовому поясу или региону в языковых настройках браузера, — и сама она ничего не выбирает.
Резервная копия в файл по-прежнему делается вами и остаётся у вас — она не зашифрована, и это единственный способ прочитать дневник без кода.
У провайдеров входа мы не запрашиваем ни имени, ни фамилии, ни фотографии профиля — только подтверждение почты. Имя, которое вы сами впишете в профиль, попадает на сервер только в запечатанном конверте настроек и только при включённом обмене настройками; прочитать его мы не можем.
Резервная копия устройства
Это про приложение для iPhone. В App Store его пока нет, и сказанное ниже описывает, как оно будет себя вести, когда выйдет. На сайте такого нет: в браузере ни контейнера приложения, ни такой копии не существует.
Резервная копия iPhone забирает данные приложений в iCloud — так устроена сама копия, а не наше приложение. Попадёт ли в неё дневник, решаете вы, и по умолчанию он в неё не попадает. Вопрос задаётся при первом запуске, а поменять ответ можно в любой момент: настройки → «Данные» → «Копия дневника в iCloud».
Мы описываем здесь механизм, а не исход, и это не уклончивость: после вашего ответа одна и та же фраза «дневник в iCloud» будет правдой у одних читателей и неправдой у других. Скажете «да» — копию делает и хранит Apple по своим правилам, и это её копия, не наша: мы её не видим и открыть не можем. Скажете «нет» или не ответите вовсе — каталог приложения помечен как исключённый из копии, и дневник в неё не едет.
Копии в файл (кнопка «Экспорт JSON») это не касается вовсе: тот файл делаете вы и храните где хотите. Что попадает в него от друзей — в разделе «Друзья».
Ответы о здоровье
В приложении есть раздел «Профилактика» — справочник опубликованных рекомендаций о профилактических обследованиях, отобранных по возрасту, полу и вашим ответам. Эти ответы — данные о здоровье, и обращаемся мы с ними строже, чем с дневником. Раздел открывается только после отдельного согласия на его вводном экране; пока вы не согласились, он не сохраняет ничего.
Что хранится. Где вы лечитесь (страна); курите ли вы, бросили или не курили — с пачка-летами и годом, когда бросили; планируете ли беременность; какие пункты по органам к вам относятся; отметки «сделано» с месяцем и видом теста; отложенные пункты; переключатель «Ничего о снижении веса» и когда вы дали согласие. Из профиля раздел читает год рождения, пол, цель и список «Чего вы не едите», а вес — нет. Диагнозов, семейной истории и результатов анализов раздел не спрашивает и не хранит.
Где. На устройстве, в хранилище приложения. В приложении для iPhone ответы запечатаны ключом, привязанным к этому телефону: из копии его можно восстановить на том же устройстве, но не перенести на другое. В копию iCloud ответы уходят только запечатанными, и на другом телефоне открыть их нечем — там раздел начнётся с чистого листа. В браузере ответы лежат в его хранилище, как дневник.
На сервер — только запечатанными и только по вашему решению. Ответы о здоровье уезжают на сервер, только если вы включили их обмен между устройствами, — и тогда запечатанными ключом, который есть только на ваших устройствах, как дневник и настройки. У этого обмена свой переключатель и своё согласие; по умолчанию он выключен и работает только внутри обмена настроек — но сам обмен настроек его не включает. Если вы указали, что лечитесь в России, ответы не уезжают на сервер и при включённом обмене.
Куда не уходят никогда. Ни в языковую модель, ни друзьям, ни в сведения об устройстве, которые прикладываются к сообщению в поддержку. В файл резервной копии (кнопка «Экспорт JSON») ответы по умолчанию не кладутся: добавить их можно отдельной галочкой — и тогда помните, что этот файл не зашифрован.
Скрыть, выключить обмен, стереть — три разных действия. «Скрыть раздел» убирает его с глаз и ответов не трогает. «Выключить и стереть ответы с сервера» стирает копию на сервере, а другие ваши устройства стирают свои при следующей синхронизации; на этом устройстве ответы остаются. «Стереть ответы на этом устройстве» стирает их здесь, а при включённом обмене при следующей синхронизации — и на сервере, и на других устройствах; вместе с ответами снимается и согласие, и раздел снова начнётся с вводного экрана. Удаление аккаунта уносит серверную копию вместе со всем остальным; сколько живут резервные копии базы, сказано в разделе «Сколько это хранится».
Куда уходят данные
Фотографии еды, упаковки или этикетки уходят на распознавание, и куда именно — зависит от того, чей ключ подписывает запрос. Маршрута два, и выбираете его вы:
- Своим ключом фотография уходит с устройства прямо на
площадку, чей ключ вы вписали, минуя наш сервер. Мы её не видим и не
храним. Площадку выбираете вы; сегодня приложение отправляет снимок на
девять адресов, и других не знает:
- Google Gemini —
generativelanguage.googleapis.com - OpenAI —
api.openai.com - Grok xAI —
api.x.ai - DeepSeek —
api.deepseek.com - Qwen —
dashscope-intl.aliyuncs.com - Mistral AI —
api.mistral.ai - Llama Meta —
api.llama.com - Poe —
api.poe.com - OpenRouter —
openrouter.ai
- Google Gemini —
- Дальше действуют условия площадки, а не наши, и они у всех разные. У Google, например, разница есть даже между уровнями одного ключа: на бесплатном он оставляет за собой право использовать отправленное для улучшения своих продуктов, на платном — нет. Про остальные площадки мы этого не пересказываем: условия меняются без нас, и читать их надо у них. Как получить ключ, написано в настройках приложения рядом с полем ключа.
- Ключом Snapfork фотография проходит через наш сервер — там запрос подписывают — и дальше уходит через OpenRouter, площадку, которая передаёт его провайдеру модели. У нас она не сохраняется: ни файлом, ни копией в журнале; остаётся строка чисел — модель, токены, стоимость; у пришедшего по приглашению, пока оно не засчитано, — ещё и местная дата (см. «Приглашение по ссылке»). Площадке мы в каждом запросе запрещаем маршрут через провайдеров, которые сохраняют переданное.
Приложение начинает с вашего ключа, а на наш переходит только после того, как ваш отказал, — или сразу нашим, если выбранная вами модель не смотрит на снимки. Это умолчание, и выключается оно флажком в настройках — тогда снимок не уходит через наш сервер ни при каких обстоятельствах.
Еда словами и пересчёт по описанию. Когда вы описываете приём пищи текстом, набранный текст уходит на распознавание теми же двумя маршрутами, что и фотография, — чтобы модель оценила калорийность, белки, жиры и углеводы. Когда вы просите пересчитать цифры позиции по её описанию, описание позиции — то, что написано в её названии, — тем же путём уходит модели. С описанием приёма уходят ещё общий вес, если вы его указали, названия продуктов из вашей библиотеки и сколько вы их обычно кладёте (порция в граммах) — по ним модель узнаёт знакомое и оценивает вес; те же названия продуктов из библиотеки вместе с порциями в граммах уходят и с фотографией блюда. К описанию приёма, как и к снимку, приложен язык интерфейса — на нём модель называет блюда. У нас текст не сохраняется, как и снимок: остаётся только строка чисел.
Страна проживания — если вы её выбрали. К фото, этикетке и описанию приёма, вместе с языком интерфейса, прикладывается двухбуквенный код страны: по нему модель узнаёт местные блюда и размеры порций. Ключом Snapfork код страны уходит через наш сервер к площадке распознавания, своим ключом — прямо площадке, минуя нас. Наш сервер пропускает его транзитом: в журнал вызовов, как и при снимке, ложатся только модель, токены и стоимость (у приглашённого — ещё местная дата, см. «Приглашение по ссылке»). С пересчётом и с разбором продуктов по группам страна не уходит, а список «Не ем» не уходит к модели никогда. Выключается это флажком «Учитывать страну при распознавании» в разделе «Распознавание еды».
Строка поиска товара — если вы нажали «Искать в Open Food Facts (интернет)». В приложении есть дверь «Продукты»: она ищет по вашим продуктам и по справочнику товаров, скачанному на устройство, и всё это происходит без сети. Когда товара нет в справочнике, под списком появляется кнопка «Искать в Open Food Facts (интернет)». По нажатию — и только по нему — то, что вы набрали в строке поиска, уходит с вашего устройства в Open Food Facts, минуя наш сервер: мы этой строки не видим и не храним. Ни автодополнения по мере ввода, ни фоновых запросов нет: без нажатия наружу не уходит ничего.
Вместе со строкой не уходит больше ничего: ни записи дневника, ни фотографии, ни ваш вес, ни идентификатор аккаунта — ни один из них приложению для этого запроса не нужен, и он их не прикладывает. Дальше действуют условия Open Food Facts, а не наши. Отключается это флажком: настройки → раздел «Товары по штрихкоду» → «Искать в открытой базе по кнопке»; выключенный, он убирает саму кнопку, и наружу не уходит ничего. Поиск товара по коду с упаковки и поиск по скачанному справочнику в сеть не ходят никогда — ни при включённом флажке, ни при выключенном.
Базу товаров приложение скачивает с нашего сервера файлом страны, а когда доступно мировое ядро — его файлом; адрес называет выбранную базу (например, /products/de.2026-09-24.csv). Название скачанной базы вместе с вашим IP-адресом видят наш сервер и сеть Cloudflare, через которую проходят запросы к snapfork.app. Путь и IP-адрес могут оказаться в журналах Railway. Срок их хранения зависит от настроек провайдеров; его нужно проверить перед выпуском. При установленном ранее срезе приложение может сохранить его страну и предложить обновить именно его. Страновой срез указывает на выбранную страну базы, но это не всегда страна вашего проживания; мировое ядро вообще её не называет. Запрос не несёт куки входа. Приложение не прикрепляет скачивание к аккаунту. Скачивается база только кнопкой в настройках; поиск по ней дальше идёт без сети.
Письма с кодом входа уходят через почтового провайдера, которого выбрал владелец сервиса. Кроме перечисленного здесь, данные не передаются никому: ни аналитики, ни рекламы, ни сторонних скриптов ни на сайте, ни в приложении нет.
В само письмо провайдер добавляет счётчик открытий — маленькую картинку, которая загружается с его сервера, когда письмо открывают. Из этого он узнаёт, что письмо открыли и когда; почтовые клиенты, которые загружают картинки напрямую, показывают ему заодно и адрес, с которого письмо прочитали. Выключить это на нашем тарифе нельзя. Само письмо мы собираем без единой картинки и без единой ссылки.
Счётчик посещений
Сайт считает посещения сам, без кук и без чужих скриптов. В базу попадают суточные числа: страница, язык, откуда пришёл переход. Ни IP-адрес, ни User-Agent не сохраняются ни в каком виде — из них считается ключ с суточной солью, а сама соль не записывается никуда, поэтому сопоставить два дня между собой нельзя даже нам. Заголовок Sec-GPC уважается: с ним не считается ничего.
Переписка с разработчиком
В настройках приложения есть раздел «Поддержка»: можно написать о поломке или о том, чего не хватает, и получить ответ там же. Это переписка, а не форма, — значит, она хранится на сервере: иначе ответить было бы некуда.
Хранится текст ваших сообщений и ответы разработчика, привязанные к аккаунту. Читают их только те, чьи подтверждённые адреса владелец сервиса внёс в список разработчиков: список закрытый, задаётся в настройках сервера, и больше переписку не видит никто. Ни почты, ни имени рядом с ней нет: у сервера их и так нет открытым текстом, а разговор ведётся с дневником, а не с человеком.
Сведения об устройстве прикладываются только по галочке, и перед отправкой показывается ровно тот текст, который уедет: версия приложения и базы, платформа и браузер, язык, размер окна, экран, с которого пишете, и код отказа, если пишете из места отказа, сколько у вас записей и взвешиваний числом, было ли устройство в сети, открыто ли приложение с иконки или во вкладке браузера, включён ли отладочный режим и задан ли ключ площадки — «да» или «нет», никогда сам ключ. Ни одной записи дневника, ни одной фотографии, ни веса, ни данных профиля туда не попадает.
Письмо-уведомление о новом сообщении, которое приходит разработчику, не содержит ни текста сообщения, ни вашего идентификатора: только «в ленте новое сообщение». Содержимое переписки не уходит почтовому провайдеру и не появляется в логах сервера.
Приглашение по ссылке
Приложение выдаёт постоянную ссылку-приглашение. Кто заведёт по ней аккаунт, получит распознавания нашим ключом в подарок, пока у ссылки есть подарки, а вы — свои, когда он распознает еду ключом Snapfork в два разных дня (дни считаем по его местному календарю), пока не выбран предел наград. Больше не меняется ничего: доступа к чужому дневнику не появляется ни у кого.
Для этого приложение с каждым распознаванием ключом Snapfork присылает местную дату устройства. Хранится она только у пришедшего по ссылке — пока приглашение не засчитано и пригласивший не удалил аккаунт, — и не дольше 30 дней. Дату, которой нет ни в одном часовом поясе, сервер не принимает: такой вызов, как и вызов без даты, считается по поясу из остальных дат человека, а без них — по всемирному времени. Если же его даты не сходятся (переезд, устройства в разных поясах, переход часов), весь его счёт идёт по всемирному времени.
Хранится факт, что один аккаунт пришёл по ссылке другого: по какой, когда и заработана ли награда. Это запись о связи двух людей, поэтому она сведена к минимуму и не показывается никому: пригласивший видит только числа — сколько пришло, сколько из них распознали еду ключом Snapfork в два разных дня, сколько распознаваний начислено и сколько подарков у ссылки осталось. Ни имени, ни адреса, ни момента входа. Кто именно принял приглашение, мы не сообщаем: это значило бы рассказать постороннему, что конкретный человек завёл дневник питания.
Сама ссылка несёт код и ничего о вас. Переход по ней счётчик посещений считает как отдельную кампанию — только метку: код в счётчик не попадает, иначе суточные числа превратились бы в таблицу «чьи ссылки работают».
Удаление аккаунта уносит ссылку и запись о том, откуда этот аккаунт пришёл; записи о начислениях остаются обезличенными — по ним считаются пределы того, сколько можно раздать.
В выгрузку «Что о вас хранит сервер» идут ваши ссылки, включая отозванные, как и когда пришли вы и заработана ли награда, только числом — сколько людей пришло по вашим ссылкам и сколько засчитано, ваши начисления и остаток подарков ссылки. Кто кого пригласил, в файле не названо.
Так же ведут себя и записи о пополнениях: при удалении аккаунта они остаются, но перестают называть человека. Причина не в учёте, а в вас: оспорить платёж банк может и через месяц после того, как аккаунт удалён, — и если сумм не останется, ответить на такой спор будет нечем. Остаток при удалении сгорает, и это записывается отдельной строкой: деньги, за которые услуга не оказана, видны как они есть, а не растворяются в выручке.
Друзья
Если вы связаны с другом и разрешили ему видеть свою неделю, с вашего устройства уходит ваша неделя — производная от дневника, два признака в сутки за последние семь дней: записывали ли вы что-нибудь и, если открыли это отдельно, уложились ли в свою цель. Плюс сколько дней подряд записывали. Ни что вы ели, ни сколько калорий, ни ваш вес в неделю для друга не попадают ни при каком согласии. Кроме недели, к другу уходит только то, что вы отправили сами: реплика из готового набора подбадриваний или карточка продукта, о ней ниже. Неделю друга вы видите, только если открыли ему свою неделю, а признак его цели — только если открыли и свою цель; у друга наше приложение показывает ему о вас ровно столько же, сколько вам о нём: неделю друга ваше устройство показывает только при взаимном согласии. Признак вашей цели уходит другу в зашифрованном конверте всякий раз, когда вы открыли ему цель, а показывается ему, только если он тоже открыл вам свою цель.
Согласие спрашивается на каждую дружбу и на каждый уровень отдельно, и мы запоминаем, под каким текстом вы его дали: изменится смысл — спросим заново, а не продлим молча. Отменить можно в любой день, и кнопок две: «перестать делиться» оставляет дружбу, «удалить дружбу» убирает связь и стирает всё, что вы друг о друге видели.
Карточка продукта уходит, только когда вы отправили её сами. На экране друзей можно отправить другу продукт из своей библиотеки. В карточке — название, цифры на 100 г (калории, белки, жиры и углеводы), штрихкод, если он есть, и откуда эти цифры; сахар, насыщенные жиры, соль и клетчатка — только если они с этикетки, со штрихкода или из справочника. Ни веса, ни даты, ни того, когда и сколько вы это ели, в ней нет. Она уезжает запечатанной в том же конверте, что реплика, той же длины и тем же путём, поэтому сервер не отличает карточку от реплики. Что с ней делать, решает друг: в его дневник и библиотеку ничего не попадёт, пока он не сохранит с ней запись, а непринятая карточка исчезает через семь дней. Одному другу можно отправить не больше пяти карточек в сутки — считая назад от момента отправки, а не с полуночи. «Отозвать» затирает конверт на сервере, и карточка уходит с экрана друга при его ближайшем обмене; если он уже добавил продукт, у него он останется. Удаление дружбы стирает карточки между вами на сервере вместе со связью.
Одно исключение — файл копии («Экспорт JSON»): он не зашифрован, и в нём лежит неделя друга — ровно то, что вы о нём видели. Реплик и карточек продуктов в нём нет. Удаление дружбы стирает увиденное и у нас, и на устройстве, но до файлов, которые вы уже сохранили, оно не достаёт: что с ними делать дальше, решаете вы.
Блокировка. Кнопка «Заблокировать» в карточке друга рвёт связь сразу — как «удалить дружбу», вместе с конвертами в обе стороны, — и запрещает вам двоим звать друг друга снова: ни одна ссылка между вами больше не примется. Для этого сервер хранит, кто кого заблокировал и с какого дня, — без причины и без единого вашего слова, — пока вы не разблокируете человека в списке «Заблокированные» на том же экране или пока один из вас не удалит аккаунт. Второй стороне мы об этом не сообщаем: она видит то же, что после «удалить дружбу», — дружба закончена, а ваша ссылка у неё не срабатывает, как устаревшая. Разблокировка дружбы не возвращает: связь заведётся, только когда кто-то из вас примет ссылку другого. В выгрузку «Что о вас хранит сервер» идут и друзья: ваш открытый ключ, связи с днём начала, ваши приглашения и запреты и конверты от вас и для вас — запечатанными, открыть их может только ваше устройство с друзьями или устройство друга. Друг в файле — идентификатор аккаунта, не имя; его ключа, его конвертов другим и запретов, поставленных вам, там нет, как и уровней с согласиями: они на устройстве.
Мы не можем прочитать ни то, ни другое — если ключ настоящий. Содержимое уезжает запечатанным ключом, которого у нас нет, все конверты одной длины, и даже по размеру не понять, сколько внутри дней. Но кое-что мы видим и говорим прямо: кто с кем дружит и с какого дня; ваш открытый ключ; что у вас есть хранилище ключа друзей и когда оно менялось, а пока ждёт просьба сбросить друзей — саму просьбу и её срок и второй шифротекст хранилища той же постоянной длины; когда вы открываете экран друзей — тогда устройство забирает ящик и, если вы открыли неделю, отправляет её, — и когда отправлен или отозван конверт с репликой или карточкой, а если друзья у вас на нескольких устройствах под общим ключом — ещё и когда вы взяли карточку продукта друга или отказались от неё; что приглашения существуют и сколько их. Не видим: что внутри, сколько там и как вы назвали друга. Друг видит, когда ваша неделя обновилась в последний раз, — это момент, когда вы открывали экран друзей.
Оговорка про ключ — не фигура речи. Ключи вы передаёте друг другу через наш сервер, значит теоретически подменить их могли бы и мы. Проверить это можно: тридцать две цифры, посчитанные из обоих открытых ключей, обязаны совпасть у вас и у друга. Мы эту проверку предлагаем, но не требуем, — и пока вы её не сделали, вы полагаетесь на то, что сервер отдал настоящий ключ. Экран дружбы всегда показывает, сверена она или нет.
Если вы синхронизируете дневник, закрытый ключ друзей едет между вашими устройствами тем же путём, что и дневник: в хранилище ключа друзей, запечатанном ключом дневника, которого у нас нет. Там же лежат ваши разрешения, сверки и подписи друзей. Поэтому друзья доступны на всех устройствах, где введён код ключа дневника, отзыв разрешения на одном действует на всех, а сверка общая: цифры второй раз сверять не нужно. Сверка относится ко всему ключу друга, и если ключ уже сверенного друга сменится, ваша неделя ему не уходит, пока вы не сверите цифры заново. Пока ваши друзья не на общем ключе, перейти на него предложит экран друзей: без друзей и непринятых приглашений это можно в любой момент, а когда друзья или приглашение уже есть, переход — как и перенос друзей сюда — меняет ключ, на который уже опираются другие, и потому возможен только сразу после входа в аккаунт. Выпуская новый код, можно сменить и ключ друзей, а в настройках аккаунта — выйти на других устройствах (тоже только сразу после входа): так отключают потерянное устройство. Порядок такой: синхронизируйте остальные устройства, выпустите новый код и выйдите на других. Новый код закроет потерянному устройству новые записи дневника на сервере, смена ключа друзей — новые недели друзей, а выход — доступ к серверу; то, что уже лежит на потерянном устройстве, на нём и останется. Друзья тогда увидят новый ключ и смогут сверить цифры заново. Когда ключ друзей меняется, сервер стирает и то, что лежало для вас под прежним ключом, — недели друзей, реплики и карточки продуктов: новый ключ их не откроет, а друзья положат новые. Если код потерян, друзей можно сбросить кнопкой «Сбросить друзей» — сразу после входа в аккаунт (по коду из почты или через Google либо Apple). Сбросить можно на устройстве, где есть код ключа дневника; если кода нет и там, сперва заведите новый — это новый ключ дневника. Сброс вступает в силу через сутки, если за это время ни на одном устройстве с вашим кодом не откроется приложение при сети: такое устройство снимает просьбу само, даже если экран друзей не открывать, — значит, код у вас есть. После сброса ключ сменится, сверки снимутся, а делиться неделей нужно будет разрешить заново. Закрытая половина ключа друзей в файл копии не идёт никогда; на самом устройстве она лежит в снимке хранилища — в той же базе устройства, что и ключ дневника, — и резервная копия устройства, если вы пустили в неё дневник, уносит её вместе с ключом дневника.
Без синхронизации или без общего ключа друзей ключ лежит на устройстве и никуда не уезжает — ни к нам, ни в файл копии; поэтому на новом устройстве дружбы придётся подтвердить заново. Друзья живут на одном устройстве, и ключ на сервере меняется только в отсутствие друзей и непринятых приглашений или переносом (только сразу после входа в аккаунт) — копией на новом, ещё пустом устройстве или кнопкой «Перенести сюда»: на прежнем они останавливаются («Вернуть сюда»), а делиться неделей нужно разрешить заново.
Сроки и пределы: непринятое приглашение живёт 30 дней и срабатывает один раз; ваша неделя лежит на сервере до следующей и стирается сразу при разрыве и при переезде — когда новое, ещё пустое устройство восстановит копию или вы подтвердите перенос на экране друзей, — а с общим ключом друзей ещё при переходе на него, при смене ключа друзей с новым кодом и когда вступит в силу сброс; реплики живут семь дней; хранилище ключа друзей — до удаления аккаунта; связь — до разрыва или удаления аккаунта. Не больше 50 друзей, и это предел не продуктовый, а наш: чем длиннее список, тем больше связей знает сервер. По той же причине ограничены и приглашения — пять активных одновременно, десять в день. Социальные функции не предлагаются тем, кто указал в профиле возраст меньше 16 лет.
На каком основании
У каждой цели обработки — своё правовое основание по GDPR (ст. 6 и 9):
- Исполнение договора (ст. 6(1)(b)) — то, без чего нет услуги, о которой вы просите: аккаунт, вход и письма с кодом, запечатанная копия дневника, распознавание ключом Snapfork вместе с языком и страной, скачивание базы товаров, переписка с разработчиком, приглашения и механика дружбы: связь, ключи, хранилище ключа друзей, доставка конвертов, запреты повторного приглашения, а также реплики и карточки продуктов — их вы отправляете сами, и согласия на неделю они не требуют.
- Согласие (ст. 6(1)(a)) — обмен настройками: он включается отдельно и отзывается в любой момент тем же переключателем.
- Явное согласие (ст. 9(2)(a)) — ответы о здоровье и их обмен, отзыв — кнопками раздела, и неделя для друга: на каждую дружбу и каждый уровень — своё согласие, отзыв — кнопкой «Перестать делиться».
- Законный интерес (ст. 6(1)(f)) — резервные копии базы, журналы хостинга, счётчик посещений и обезличенные записи о пополнениях для споров о платеже. Возразить против этого можно письмом на адрес ниже (ст. 21).
Жалобу можно подать и в надзорный орган по защите данных своей страны.
Сколько это хранится
Журнал вызовов модели хранится на сервере, пока жив аккаунт.
В серверную выгрузку входит и ваш журнал вызовов модели: день, время, вид запроса, модель, источник оплаты, статус, токены и стоимость в долларах США, а у приглашённого — местная дата, пока она хранится. Снимков, текста запросов и ответов модели в журнале нет; свёртка IP-адреса в файл не входит.
Сессия — до 180 дней с последнего входа. Код из письма — 10 минут. Суточные числа счётчика — бессрочно, но в них нет ничего о человеке. Аккаунт — пока вы его не удалите. Переписка с разработчиком — столько же, сколько аккаунт: она уходит вместе с ним и отдельного срока не имеет. Отдельный срок мы называть не стали намеренно: он был бы обещанием стирать по расписанию, а расписания нет — и обещание врало бы ровно до первой проверки.
Местная дата приглашённого — не дольше 30 дней, а раньше уходит, как только приглашение засчитано или пригласивший удалил аккаунт (см. «Приглашение по ссылке»).
Записи дневника на сервере — пока жив аккаунт. Отдельного срока у них нет, и это решение, а не умолчание. Сервер держит запечатанную копию дневника ради второго вашего устройства — а копия, пропадающая сама, второму устройству и не нужна: вернуть забытое сервером ему было бы неоткуда, и дневник на нём молча оказался бы короче соседнего. Уходят записи вместе с аккаунтом и только с ним: удалите его — и запечатанная копия дневника уйдёт из базы сервера сразу, а из её резервных копий — по мере их ротации; как скоро, сказано в конце этого раздела. Дневник на самом устройстве при этом остаётся вашим и стирается отдельно.
Тридцать дней, которые названы ниже, — не про сами записи, и путать эти сроки не нужно. Тридцать дней живут превью фотографий (и на устройстве, и на сервере), увеличенные копии снимков на сервере и версии записей, проигравшие при синхронизации. Все три вида данных лежат РЯДОМ с записью, а не вместо неё: пропадает картинка или прежняя редакция строки, а сама запись остаётся на месте. Серверные сроки считаются в рабочей базе сервера; в её резервных копиях картинка или версия могут пережить их ещё на срок до 14 суток — см. последний абзац раздела.
Превью фотографий еды — 30 дней. Приложение хранит маленькую копию снимка рядом с записью и удаляет её с устройства через тридцать дней после съёмки. Сама запись остаётся: пропадает только картинка. Этот срок мы называем именно потому, что расписание здесь есть — уборка идёт при каждом открытии приложения и сразу после восстановления из резервной копии, — и проверить его можно, открыв старый день. Исходный файл камеры не сохраняется в дневнике. Вместе с превью запись хранит на устройстве увеличенную сжатую копию на тот же срок. В файл резервной копии, который вы выгружаете, она попадает без шифрования.
Отложенный снимок — на устройстве, не дольше 30 дней. Снимок, отложенный, чтобы распознать его позже, лежит на устройстве целиком, а не превью: пока его не распознали и вы не сохранили запись, и не дольше тридцати дней от съёмки. После срока снимок удаляется, а напоминание о приёме пищи остаётся — записать его можно вручную. Устройство он покидает только в момент распознавания — тем же путём, что и любой другой снимок (раздел «Куда уходят данные»). Полный снимок, отправленный на распознавание, наш сервер не хранит. Если вы сохраните запись, её превью и увеличенная сжатая копия хранятся отдельно, запечатанными вашим ключом, как описано ниже.
На сервере превью живёт по тому же сроку — не дольше тридцати дней. Оно уезжает туда запечатанным, вместе с дневником, чтобы появиться на втором вашем устройстве; открыть его мы не можем, как и записи. Сервер считает срок от дня, когда картинка приехала, а не от дня съёмки: дня съёмки он не знает — тот внутри шифротекста. Поэтому на устройстве превью пропадает первым, а на сервере — следом, и уборка идёт по расписанию, раз в сутки, а не «когда-нибудь».
Увеличенные копии снимков еды — на сервере до 30 дней. Если запись содержит такую копию, приложение отправляет её отдельно от превью, запечатанной вашим ключом. Сервер видит только запечатанный шифротекст; адрес снимка хранится внутри запечатанной записи. Копия появляется на другом устройстве при открытии снимка. Сервер удаляет её раз в сутки, считая срок от приезда, и сразу при удалении аккаунта. В выгрузке аккаунта она идёт тем же запечатанным шифротекстом.
Версии записей, проигравшие при синхронизации, — не дольше тридцати дней. Правя запись, вы заменяете её прежнюю версию; сервер эту прежнюю не выбрасывает сразу, а держит отдельно — чтобы «оно само исправилось» не осталось нашим словом против вашей памяти. Увидеть их и вернуть можно в приложении, в карточке спорных версий. Лежат они запечатанными, как и записи: открыть их не можем и мы. Уборка идёт по расписанию, раз в сутки, — и потому срок здесь мы называем.
Пропасть такая версия может и раньше срока, и сказать об этом честнее прямо: на одну запись сервер держит не больше двадцати их, и двадцать первая вытесняет самую давнюю. Это инженерный предел против убежавшего кода, а не обещание хранить двадцать. Текущей версии записи не касается ни срок, ни предел: она и есть ваш дневник и уходит только вместе с аккаунтом.
Резервные копии базы — до 14 суток. Раз в час сервер копирует свою базу целиком — на случай, если отказ диска или неудачное обновление унесут аккаунты всех разом. Копии за последние 48 часов хранятся по одной на час, более старые — по одной на сутки, а копия старше 14 суток удаляется при ближайшей почасовой ротации. Удаляет копии только работающий сервер: пока он выключен, лежат все, а после включения просроченные уходят сразу. Одна оговорка: самая свежая копия остаётся всегда — даже просроченная, если новые перестали получаться, — до следующей удачной, потому что старая копия полезнее пустого места. В копии лежит ровно то, что было в базе в тот час, и в том же виде. Запечатанное вашим ключом — дневник, превью, настройки, картинка профиля, спорные версии, хранилище ключа друзей — остаётся запечатанным и в копии, и ключа к нему у нас нет; то, что сервер видит открыто, — переписку с разработчиком, кто с кем дружит, — он видит и в копии. Поэтому каждый срок выше — это срок в рабочей базе: всё, что оттуда стёрто — уборкой или вместе с аккаунтом, — остаётся в резервных копиях не дольше 14 суток после этого, кроме названных случаев. Четырнадцать суток — верхняя граница, а не обещание хранить: копия может уйти и раньше, например когда на диске кончается место.
Внешняя копия — плановое истечение через 35 суток. Сервер раз в сутки отправляет резервную копию базы в Cloudflare R2 с юрисдикцией Европейского союза. Архив целиком шифруется до отправки отдельным ключом резервных копий. Плановый срок истечения копии — 35 суток. После истечения R2 удаляет объекты асинхронно, поэтому фактическое хранение может длиться дольше. Данные, стёртые из рабочей базы, остаются во внешних копиях до фактического удаления этих копий.
На 9 октября 2026 года во внешнем хранилище также остаётся копия от 2 октября 2026 года, созданная до включения шифрования архива целиком. Для этой старой копии действует то же правило планового истечения срока.
Удаление
В приложении: настройки → «Удалить аккаунт». Это стирает аккаунт, все его способы входа, все сессии и всю переписку с разработчиком; для входа через Apple заодно отзывается доступ на стороне Apple. Вместе с аккаунтом уходит и то, что сервер хранил ради синхронизации: запечатанная копия дневника, превью фотографий, запечатанная копия настроек, запечатанная картинка профиля, журнал спорных версий и список ваших устройств — в базе сервера от них не остаётся ничего. Так же уходят связи с друзьями, ваш открытый ключ, хранилище ключа друзей, конверты между вами, приглашения в друзья и запреты повторного приглашения. В почасовых резервных копиях всё это ещё лежит до 14 суток, в том же виде, и затем уходит и оттуда (если сервер работал и новые копии делались исправно); как устроены копии, описано в разделе «Сколько это хранится». Суточные числа счётчика посещений остаются: в них нет ничего о человеке, и унести их по аккаунту невозможно — аккаунта в них нет. Дневник на устройстве стирается отдельной кнопкой — он ваш и только ваш, и решать его судьбу мы за вас не будем.
Изменения
Политика меняется вместе с сервисом; дата наверху страницы — дата последней правки. О существенных изменениях сообщаем здесь, а не письмом: адреса, на который можно написать, у сервера нет — только отпечаток адреса.
Связь
Ответственный за данные — тот, кто решает, что здесь хранится, и отвечает за это, — частное лицо, а не компания: юридического лица за Snapfork нет. Это Oleksandr Trifonov. Всё по сервису, включая запросы о собственных данных, идёт на адрес ниже. Что это устройство означает на практике, написано на странице кто за этим стоит.
Вопросы, доступ к своим данным и удаление — через страницу вопросов или письмом на hello@snapfork.app.