Дата вступления в силу: 30 октября 2026 года
Shelfie помогает разложить сохранённые треки по плейлистам в музыкальных сервисах, а ещё — делиться музыкой с друзьями и переписываться с ними. Приложение разработано частным лицом — Иваном Саблиным («разработчик», «мы»).
Главное: войти в аккаунт Shelfie можно, но не обязательно. Без входа приложение работает анонимно, а аккаунт нужен для друзей, переписки и подписки Shelfie Pro. Платёжных данных мы не получаем: подписку оплачивают в App Store или Google Play. Библиотека, токены музыкальных сервисов и планы остаются на вашем устройстве; на сервере хранится только то, без чего не работают аккаунт, друзья и переписка.
| Данные | Зачем | Где хранятся |
|---|---|---|
| Токены доступа к музыкальным сервисам (Spotify, SoundCloud, Яндекс Музыка, Apple Music) | Читать вашу библиотеку и менять её по вашей команде | Только на устройстве, в защищённом хранилище системы |
| Название вашего профиля Spotify, если вход недоступен и вы указали его сами | Показать публичные плейлисты этого профиля | На устройстве; на сервер уходит в составе запроса к сервису |
| Плейлисты и треки вашей библиотеки | Показывать списки и работать с ними без повторных запросов | На устройстве, в локальной базе приложения |
| Ваш ключ Anthropic, если вы ввели его для ассистента | Обращаться к модели от вашего имени, когда встроенный ассистент недоступен | Только на устройстве. Разработчик его не получает |
| Разговор с ассистентом и составленные планы | Продолжать разговор и применять план | На устройстве. Текст запросов уходит поставщику модели — см. ниже |
| Данные | Зачем | Где хранятся |
|---|---|---|
| Анонимный аккаунт — случайный идентификатор, заведённый при первом запуске | Хранить правила умных плейлистов и общие настройки, пока вы не вошли | Firebase Authentication |
| Адрес почты и пароль, если вы входите по почте. При входе через Google или Apple — адрес почты и сведения профиля, которые они передают (у Google — имя и фото) | Вход в аккаунт с любого устройства. Сведения профиля Google и Apple мы не используем и никому не показываем | Firebase Authentication. Пароль хранится только в виде хеша, мы его не видим |
| Ник и аватарка | Чтобы друзья нашли и узнали вас | Google Cloud Firestore и Cloud Storage. Ник найдёт любой, кто введёт его целиком; аватарку видят только те, кто связан с вами дружбой |
| Списки друзей: кого добавили вы, кто добавил вас, кого вы скрыли | Показывать друзей и тех, кто вас добавил | Google Cloud Firestore |
| Переписка с друзьями: сообщения, ответы, реакции, отправленные треки и плейлисты (название, исполнители, код записи, обложка, ссылка на сервис) | Доставлять сообщения и показывать переписку на всех ваших устройствах | Firebase Realtime Database. Читать переписку могут только двое её участников. Хранится, пока автор не удалит сообщение или кто-то из участников не удалит аккаунт |
| Токен уведомлений устройства, его платформа и язык; включены ли уведомления | Присылать уведомления о сообщениях и новых друзьях | Google Cloud Firestore. Доставляют Firebase Cloud Messaging и Apple Push Notification service |
| Правила умных плейлистов: сервис, плейлист, условия отбора, частота проверки | Одни и те же правила на всех устройствах аккаунта | Google Cloud Firestore |
| Статус подписки Shelfie Pro: есть ли она, до какой даты оплачена, какой вариант куплен, тестовая ли это покупка | Поднимать лимиты подписчику на всех его устройствах | Google Cloud Firestore. Сведения о покупках и чеки магазинов хранит RevenueCat |
| Случайный идентификатор установки | Считать частоту обращений к нашему серверу и расход встроенного ассистента, чтобы один человек не исчерпал общие ресурсы за остальных | Google Cloud Firestore, в виде счётчиков. Кроме того, сам идентификатор и платформа (Android, Apple или веб) хранятся в списке установок, чтобы считать их число |
| Система, марка и модель устройства; если приложению не удалось подтвердить свою подлинность в магазине — текст ошибки, которую вернула система | Разбирать, на каких устройствах не проходит проверка подлинности приложения | Google Cloud Firestore вместе со счётчиками установки, не дольше 60 дней, и в журналах сервера, не дольше 30 дней |
| Рекламный идентификатор устройства и сведения о показах роликов | Показывать рекламу с вознаграждением и засчитывать награду за досмотренный ролик | У Google AdMob. К нам приходит только отметка о начисленной награде вместе со случайным идентификатором установки |
| IP-адрес и служебные записи о запросах | Защита от злоупотреблений и поиск неисправностей | В журналах сервера разработчика, не дольше 30 дней |
Идентификатор установки — это случайная строка, заведённая при первом запуске. Она меняется при переустановке приложения. Если вы вошли в аккаунт, в счётчиках установки за день отмечается, какому аккаунту она принадлежит: так разработчик видит, у кого возникла проблема. Эти счётчики хранятся не дольше 60 дней.
Адрес почты и сведения профиля Google или Apple другим людям не показываются.
Приложение обращается к чужим службам, и у каждой своя политика:
Мы не продаём данные, не передаём их рекламным сетям и не используем для обучения моделей.
В версии из магазина приложений долгие действия — разбор библиотеки, раскладка плана, перенос плейлиста — оплачиваются просмотром рекламных роликов. Цена в роликах называется до начала работы, и вы решаете, соглашаться ли. Отказ означает лишь, что действие не начнётся: всё остальное в приложении работает как прежде.
Ролики показывает Google AdMob. Он может использовать рекламный идентификатор устройства и сведения о показах, чтобы подбирать объявления и считать их; правила Google описаны на странице «Как Google использует данные партнёров». Из приложения к нему уходит случайный идентификатор установки — тот самый, по которому считается дневное ограничение, — чтобы награда за досмотренный ролик досталась именно вашей установке.
Живущим в Европейской экономической зоне и Великобритании приложение показывает окно согласия, подготовленное Google. Ваш ответ хранится на устройстве, и изменить его можно там же, где он был дан. Без согласия объявления остаются неперсонализированными.
Отключение сервиса в настройках приложения стирает его токены и прочитанные списки. Удаление приложения стирает всё остальное, что лежало на устройстве, включая ключ ассистента и разговор с ним.
Удалить аккаунт можно в самом приложении: «Настройки» → «Аккаунт» → «Удалить аккаунт». Вместе с ним сразу и насовсем удаляются ник, аватарка, списки друзей (в том числе ваша запись в чужих списках), переписки, токены уведомлений, правила умных плейлистов и наша запись о подписке. Саму подписку отменяют в магазине: удаление аккаунта её не отменяет. Выход из аккаунта ничего не удаляет: в него можно войти снова.
Счётчики обращений на сервере привязаны к случайному идентификатору установки и обнуляются сами каждые сутки. Если не получается удалить аккаунт из приложения или вы хотите, чтобы мы удалили записи, связанные с вашей установкой, напишите на адрес ниже.
Приложение не предназначено для детей младше 13 лет и не собирает их данные осознанно.
Если состав данных изменится, мы обновим эту страницу и поменяем дату вступления в силу. Существенные изменения будут описаны в приложении.
Вопросы и просьбы об удалении данных: ivan.sablin313@gmail.com
Effective date: 30 October 2026
Shelfie helps you sort saved tracks into playlists across music services, share music with friends and chat with them. It is built by an individual developer, Ivan Sablin.
Signing in to a Shelfie account is possible but optional. Without it the app works anonymously; an account is needed for friends, chat and the Shelfie Pro subscription. We never receive payment details: the subscription is paid for in the App Store or Google Play. Your library, music-service tokens and plans stay on your device; the server keeps only what the account, friends and chat cannot work without.
| Data | Why | Where it is kept |
|---|---|---|
| Access tokens for music services (Spotify, SoundCloud, Yandex Music, Apple Music) | To read your library and change it when you ask | On your device only, in the system's protected storage |
| Your Spotify profile name, when sign-in is unavailable and you enter it yourself | To show that profile's public playlists | On your device; sent to the service as part of a request |
| Your playlists and tracks | To show your library without repeated requests | On your device, in the app's local database |
| Your Anthropic API key, if you entered one for the assistant | To send requests to the model on your behalf when the built-in assistant is unavailable | On your device only. The developer never receives it |
| Assistant conversation and generated plans | To continue the conversation and apply a plan | On your device. Request text goes to the model provider — see below |
| Data | Why | Where it is kept |
|---|---|---|
| An anonymous account — a random identifier created on first launch | To keep smart playlist rules and shared settings before you sign in | Firebase Authentication |
| Your email and password, if you sign in with email. With Google or Apple sign-in — your email and the profile details they provide (Google adds your name and photo) | To sign in from any device. We do not use the Google or Apple profile details or show them to anyone | Firebase Authentication. The password is stored only as a hash; we never see it |
| Nickname and profile photo | So that friends can find and recognise you | Google Cloud Firestore and Cloud Storage. Anyone who types your full nickname can find it; the photo is visible only to people linked to you as friends |
| Friend lists: who you added, who added you, whom you hid | To show your friends and the people who added you | Google Cloud Firestore |
| Chats with friends: messages, replies, reactions, shared tracks and playlists (title, artists, recording code, cover, service link) | To deliver messages and show chats on all your devices | Firebase Realtime Database. Only the two participants can read a chat. Kept until the author deletes the message or either participant deletes their account |
| The device's notification token, platform and language; whether notifications are on | To notify you about messages and new friends | Google Cloud Firestore. Delivered by Firebase Cloud Messaging and the Apple Push Notification service |
| Smart playlist rules: service, playlist, filter, check interval | To keep the same rules on every device of the account | Google Cloud Firestore |
| Shelfie Pro subscription status: whether it is active, the date it is paid until, the plan purchased, whether it is a test purchase | To raise limits for subscribers on all their devices | Google Cloud Firestore. Purchase details and store receipts are kept by RevenueCat |
| A random installation identifier | To count requests to our server and built-in assistant usage so one person cannot exhaust shared resources for everyone | Google Cloud Firestore, as counters. The identifier itself and its platform (Android, Apple or web) are also kept in a list of installations to count them |
| Device operating system, brand and model; if the app could not verify itself with the store, the error text returned by the system | To find out on which devices the app integrity check fails | Google Cloud Firestore together with the installation counters, for no longer than 60 days, and in server logs, for no longer than 30 days |
| Device advertising identifier and ad impression data | To show rewarded ads and credit the reward for a completed ad | With Google AdMob. We only receive a note that a reward was granted, together with the random installation identifier |
| IP address and request logs | Abuse protection and troubleshooting | In server logs, for no longer than 30 days |
The installation identifier is a random string created on first launch. It changes when the app is reinstalled. If you are signed in, the daily installation counters note which account it belongs to, so the developer can see who ran into a problem. These counters are kept for no longer than 60 days.
Your email and Google or Apple profile details are never shown to other people.
We do not sell data, share it with advertising networks, or use it to train models.
In the store version, long-running actions — analysing your library, applying a plan, moving a playlist — are paid for by watching rewarded ads. The price in ads is stated before the work begins and you decide whether to accept. Declining only means the action does not start; everything else in the app keeps working.
Ads are served by Google AdMob. It may use your device's advertising identifier and impression data to select and measure ads; Google's practices are described in How Google uses information from sites or apps that use our services. The app sends AdMob the random installation identifier — the same one used for the daily request limit — so that the reward for a completed ad reaches your installation.
If you are in the European Economic Area or the United Kingdom, the app shows a consent form provided by Google. Your choice is stored on your device and can be changed in the same place. Without consent, ads remain non-personalised.
Disconnecting a service in the app's settings erases its tokens and cached lists. Uninstalling the app erases everything else stored on the device, including the assistant key and the assistant conversation.
You can delete your account in the app: Settings → Account → Delete account. This immediately and permanently removes your nickname, profile photo, friend lists (including your entries in other people's lists), chats, notification tokens, smart playlist rules and our subscription record. The subscription itself is cancelled in the store: deleting the account does not cancel it. Signing out deletes nothing: you can sign back in.
Server-side counters are tied to a random installation identifier and reset by themselves every day. If you cannot delete your account in the app, or want records related to your installation removed, write to the address below.
The app is not directed to children under 13 and does not knowingly collect their data.
If the data we handle changes, this page and its effective date will be updated, and significant changes will be described in the app.
Questions and deletion requests: ivan.sablin313@gmail.com