Cookie and Local Storage Policy

Last updated: 25 July 2026

1. What this document covers

This policy explains what Gigapop stores on your device, and what it reads back from your device, when you use https://gigapop.app (and www.gigapop.app, which serves the same site).

We deliberately do not call this a "cookie policy" only. The law here — Article 5(3) of the ePrivacy Directive 2002/58/EC, as transposed into the national law of each EU/EEA country — is not about cookies specifically. It covers any storing of information on your terminal equipment, and any gaining of access to information already stored there. That includes classic HTTP cookies, but also localStorage, sessionStorage, tracking pixels, and device fingerprinting. This document therefore covers everything Gigapop puts on your device, whatever the technical mechanism.

The separate question of what we then do with that data as personal data — the purposes, the legal bases under the GDPR, who receives it, how long we keep it, and your rights — is answered in our Privacy Policy. The two documents are meant to be read together. Where this one repeats something from the Privacy Policy, the Privacy Policy is the fuller statement.

2. Who is responsible

Gigapop is operated by Ivan Smetanin, a private individual (not a company), established in Kazakhstan. He is the data controller for the processing described here.

Contact for anything in this document, including questions about storage on your device: hi@gigapop.app

Note for the reviewer: Article 13(1)(a) GDPR requires the identity and the contact details of the controller, and a supervisory authority will expect a postal address for a trader selling to consumers, not an email address alone. No postal address is given here or in the Privacy Policy, and none has been supplied to the drafter, so none has been invented. It must be added before publication. The same applies to the statement required under Art. 13(1)(b) — either name a data protection officer or state that none is appointed and why. See §9.21.

We have no establishment in the European Union. Because we offer a paid service to consumers in the EU, in Russian and English, priced in euros, the GDPR applies to us under Article 3(2)(a), and the national ePrivacy rules of the Member States where our users are located apply to what we store on their devices. We are not attempting to argue otherwise.

Note for the reviewer: an EU representative under GDPR Art. 27 has not yet been appointed. This is required for this fact pattern and it must be named here and in the Privacy Policy before launch. See §9.13.

The site is hosted on servers operated by Hetzner in Finland, inside the EU/EEA.

Hosting inside the EEA is not the whole story, however, and we should not present it as if it were. The controller is established in Kazakhstan, which is not covered by an adequacy decision, and the site is administered — including the admin dashboard that displays the traffic figures described in §6 — by that controller rather than by anyone inside the EEA. To the extent that access happens from outside the EEA, it is a transfer under Chapter V of the GDPR and needs both a transfer mechanism and a statement here. Neither this document nor the Privacy Policy currently addresses it. See §9.20.

3. The rule we have to meet

Under Article 5(3) there are exactly two cases where we may store something on your device, or read something from it, without asking you first:

There is no third exemption. In particular there is no "legitimate interest" route for storing things on your device, and there is no general exemption for analytics — not even for analytics that we run ourselves, on our own domain, without any third party involved.

Everything that does not fit (a) or (b) requires your prior consent: freely given, specific, informed, unambiguous, and given by a clear affirmative action. Silence, a pre-ticked box, scrolling, or "by continuing to browse you agree" are not consent.

Below we mark each item honestly against that test. Where we think an item is not exempt and we are nevertheless setting it without valid consent, we say so rather than reclassifying it as "functional" or "essential" to make the table look better.

4. Cookies

All of these are first-party cookies, set on the gigapop.app domain, and your browser sends them back only to gigapop.app. None of them is a third-party or advertising-network cookie, and none is shared with an advertising network. One of them, gb_ref, nevertheless serves a marketing purpose (affiliate attribution) — being first-party does not change that, and it is marked accordingly in the table below.

Unless stated otherwise they are set by our server with the flags HttpOnly, Secure, SameSite=Lax, Path=/. In plain terms: HttpOnly means the page's JavaScript cannot read them; Secure means they are only sent over HTTPS; SameSite=Lax means they are not attached to most requests started from another site, though they are still attached when you follow an ordinary link from another site to us; Path=/ means they are sent on every page of our own site.

Name What it stores What it is for Duration Strictly necessary?
gb_user A signed token containing your Gigapop account ID and an expiry timestamp, protected by an HMAC signature. No name, no email. Keeps you signed in, and proves that the songs, orders and jam contributions in your account are yours. 30 days from sign-in Yes as to authentication itself — Art. 5(3)(b). But it is a persistent login cookie that survives closing the browser, and you are never offered a "keep me signed in" choice. See §9.16.
gb_guest A random token (about 24 characters) with no meaning outside our database. Two things, and this matters (see the note below): (1) it ties a song, a jam contribution or a "like" to you before you create an account, so that you can come back to a song you started; (2) it is used as the unique-visitor key for our own traffic statistics. 90 days from when it is first issued. The code does not extend it on later visits, so it expires 90 days after your first visit unless it has been deleted and re-issued. Partly. Use (1) is strictly necessary. Use (2) — analytics — is not exempt and needs consent. See §9.2.
gb_partner A signed expiry timestamp plus an HMAC signature. No identifier. Keeps a jam host / partner signed in to the partner area at /partner/. 30 days Yes as to authentication — Art. 5(3)(b). The persistence point in §9.16 applies to this cookie too.
gb_auth A signed token for a staff login, containing the staff user name and an expiry, protected by an HMAC signature. Keeps an operator signed in to the internal admin area (/admin/, /history/). Ordinary users never receive this cookie. 30 days Yes. Authentication — Art. 5(3)(b). Staff only.
gb_ref A short partner referral code taken from the ?ref= parameter in the URL you arrived on. Referral attribution: if you later create an account, it credits the partner who sent you. Written by JavaScript in the page rather than by our server, so it is not HttpOnly and — in the current code — carries no Secure flag. Being a cookie, it is nevertheless sent to our server with every request to gigapop.app, not only at sign-up. 90 days, first-touch (not overwritten by a later ?ref=) No. This is marketing attribution. It is not necessary to deliver the service you asked for, so it requires consent. See §9.3.

About gb_guest — the honest version. One cookie is doing two jobs. Holding your unsaved work against a random token is genuinely necessary: without it, a guest who writes a brief and then refreshes the page loses it, and a jam guest cannot be prevented from voting five times. Counting unique visitors with the same token is not necessary — it is measurement, it benefits us and not you, and Article 5(3) does not exempt it. The fact that the two purposes currently share one cookie does not make the second purpose exempt. Our intended fix is described in §9.2.

Payments. When you pay, you are redirected to a checkout page hosted by Dodo Payments, which is the merchant of record for the purchase — Dodo is the seller and contracting party, collects and remits EU VAT and issues your invoice. That checkout page is on Dodo's own domain, and any cookies set there are set by Dodo under Dodo's own cookie and privacy notices, not ours. We do not embed Dodo's checkout in our pages and we do not place any payment-related cookie on your device ourselves.

5. Local storage (localStorage)

localStorage is browser storage on your own device. Unlike a cookie, your browser does not attach it automatically to every request — the page reads it locally to remember how you left things. That is not the same as saying it can never reach us: the page's own JavaScript can read a key and send it, and in one case below (jam_notify_<jam code>) it deliberately does, because we cannot email you a song without the address. Where that happens the table says so.

localStorage also has no expiry: a key stays until you clear your browser's site data, or until we remove it.

It is still fully covered by Article 5(3), so we list it here.

Key What it stores What it is for Duration Strictly necessary?
gb-theme light or dark-midnight The colour theme you picked with the theme switch. If you never touch the switch, nothing is written and we follow your operating system setting. Until cleared Yes, on the "UI customisation explicitly chosen by the user" reading of Art. 5(3)(b). Only written when you actually press the switch.
gb-lang ru or en The interface language you picked. If you never pick one, nothing is written and we use your browser's language, defaulting to Russian. Until cleared Yes, same reasoning as gb-theme.
gb-cookies-ack 1 Records that you dismissed the notice at the bottom of the screen, so it is not shown to you again. Until cleared Yes — storing the record of your own choice is exempt. But see §9.1: what this currently records is a dismissal, not a consent.
gb-adult-ok 1 Records that you confirmed the explicit-content warning before playing a track that is flagged as explicit, so we do not ask again. Until cleared Yes. You asked to play the track; the confirmation gate is part of delivering that.
gb_brief_likes A list of numeric IDs of example briefs you gave a thumbs-up to Re-highlights your own likes when you come back to the page. The like itself is also stored on our server against gb_guest or your account. Until cleared Yes — persistence of your own input in a feature you used.
gb_fb_<song id> 1, one key per song Records that you already left feedback on that song, so we stop asking. Until cleared Yes — persistence of your own input.
jam_notify_<jam code> telegram, an email address, or a "skipped" marker — one key per jam you joined Remembers, on your own device, how you asked to be told when the collective song is ready, so the jam page does not ask you again. If you enter an email here it stays in your browser and is also sent to our server so we can actually notify you. The jam page shows a "cancel / change" control that deletes this key from your device; deleting it does not by itself delete the address held on our server. Until cleared Yes — persistence of your own input in a feature you explicitly used.
gb_notes_sound 1 or 0 Sound on/off in the small note-catching game shown while your song is generating. Until cleared Yes — a setting you chose in a feature you opened.
gb_notes_best A number Your best score in that game. Until cleared Yes — the state of a feature you asked for.
gb-testmode 1 or 0 An internal development toggle. The button that writes it is rendered only for accounts the server reports as staff (/api/whoami), and the server ignores the flag for everyone else, so an ordinary user cannot turn test mode on. The key is nevertheless read on every load of /create/, whoever you are. Until cleared Not written for ordinary users. The read is covered by Art. 5(3) but is harmless; see §9.15 for what should still change.

We do not use sessionStorage, we do not use IndexedDB, we do not register a service worker, we do not use tracking pixels, and we do not fingerprint your device.

Every row above says "until cleared", and that is a statement about our design rather than a formality — §9.17 explains why indefinite is the wrong answer for several of these keys. One further mechanical point: a small script in the <head> of nearly every page reads gb-theme before the page paints, so the read happens even on pages that write nothing at all. Reading is as much within Article 5(3) as writing; we are satisfied this read is exempt under (b), but we would rather say it than let you discover it.

6. Our own traffic statistics

We run a small first-party visit counter. There is no Google Analytics, no Meta pixel, no advertising tag, no session recording, no heatmap, and no third-party analytics vendor of any kind on this site.

When you open a page, the page sends our server:

That last item is the most important line in this section, so we will not bury it. Because the account id is stored with each visit, these records are not anonymous statistics and not a sealed-off measurement standing apart from the rest of your data. For a signed-in user they amount to a page-by-page history of what you looked at and for how long, attached to your account and therefore capable of being read together with your orders, your songs and your email address. See §9.18.

Pages under /admin/ and /jam-admin/ are not counted at all. The page path is recorded without its query string, so the song identifiers and referral codes that travel in query strings do not reach the visit table by that route.

Separately, and independently of any of this, our web server (nginx) writes ordinary server logs, which include your IP address, the request and your browser's user-agent string. That is server-side logging, not storage on your device, so Article 5(3) does not apply to it — but it is personal data and it is covered in the Privacy Policy.

We must be straight about the legal position of the visit counter. Being first-party, being self-hosted, and involving no third party does not exempt analytics from the consent requirement. Article 5(3) asks what the storage is for, not who owns the domain.

There is a narrow national exception in France: under Art. 82 of the loi Informatique et Libertés, the CNIL treats strictly limited audience measurement as exempt. Its published criteria are that the tracker is used for audience measurement alone and for the exclusive account of the publisher, that it produces anonymous statistics only, that it does not lead to the data being cross-referenced with other processing or passed to third parties, and that it does not permit tracking across different sites; the CNIL further recommends a tracker lifetime of no more than 13 months, not automatically extended on new visits, and retention of the collected data for no more than 25 months, both reviewed periodically.

We would fail that test today, and not on a technicality. Our cookie lifetime (90 days, not extended on later visits) is comfortably inside the recommendation, but our visit rows carry the account id of signed-in users, which is precisely the cross-referencing with other processing that the exemption excludes and which stops the statistics being anonymous. We also have no defined retention period for the visit table. So the French route is not open to us as the counter is currently built, and it would only ever have covered our French users in any event. Across the rest of the EU the default is simply: this needs consent, and we are not currently obtaining it. See §9.2 and §9.18.

Note for the reviewer: the CNIL criteria above are taken from the CNIL's own page "Cookies : solutions pour les outils de mesure d'audience" (page dated 4 July 2025), which also publishes a self-assessment tool addressed to providers of measurement solutions. An earlier draft of this document asserted a change of regime "since 1 January 2026" and an express opt-out requirement; neither could be substantiated against the CNIL's published text and both have been removed rather than left in. Please confirm the current French position before any version of this paragraph is relied on.

7. Third-party content loaded by our pages

These are not storage on your device by us, but they cause your browser to contact a third party, which unavoidably discloses your IP address to that party. We list them so the picture is complete.

What Where What it means
Google Fonts (fonts.googleapis.com, fonts.gstatic.com) Almost every public page — around 40 page templates reference it, including the sign-in, creation, song and payment pages Fonts are fetched from Google's servers, so your browser discloses your IP address and user-agent to Google LLC (US). Google Fonts does not set a cookie, so this is not an Article 5(3) issue — but it is a GDPR issue, and a German court (LG München I, 20 January 2022, 3 O 17493/20) awarded damages against a site operator for embedding Google Fonts this way without a basis. We intend to self-host these fonts. See §9.9.
Telegram Web App script (telegram.org/js/telegram-web-app.js) The /play/ mini-game page only Loaded so the mini-game works when it is opened inside Telegram. It is a third-party script and can access browser storage on that page. See §9.10.
Dodo Payments hosted checkout Only after you choose to pay, on Dodo's own domain Governed by Dodo's own cookie and privacy notices.

We do not embed YouTube, social media plugins, share widgets, chat widgets, maps, or advertising tags.

8. What our banner does today — and what it does not

We are describing the current implementation, not an ideal one.

What it is. A small strip appears at the bottom of the screen on your first visit to one of the pages that carries it. It says that cookies are used "for sign-in", with a link to our Privacy Policy, and it has one button, labelled "ок" / "OK". Pressing it dismisses the strip and writes gb-cookies-ack = 1 to localStorage so it does not come back.

Where it actually appears. This is the correction that matters most in this document. The banner is injected by prototype/script.js, and that file is loaded on only about a dozen page templates. It is not loaded on the core product pages — the song-creation page (/create/), the song page (/song/), the payment page (/buy/), sign-in (/signin/), the account page (/me/) or the gift page (/gift/). The tracker and the gb_ref writer, by contrast, live in prototype/theme.js, which is loaded on essentially every page.

The practical consequence: a visitor who arrives from an advertisement or a Telegram link straight onto /create/, writes a brief, pays on /buy/ and listens on /song/ is counted, given a gb_guest cookie, and — on a ?ref= link — given a gb_ref cookie, without ever being shown any cookie notice at all. On the pages where the banner is suppressed by an explicit rule (/privacy/, /terms/) the tracker still runs, which §9.11 already recorded; what was missed is that on most of the funnel there is nothing to suppress in the first place.

Language. The banner's text is translated and the translation engine now runs on every page of the site that carries the banner, so it follows the language you have chosen. The legal pages themselves — this one included — are published in English only; see §9.12.

What it does not do, and we are not going to pretend otherwise:

What consent we are therefore relying on. For the strictly necessary items in §4 and §5 — the sign-in cookies, and the local storage that remembers your own choices — we rely on the Article 5(3)(b) exemption and no consent is needed, so the banner is not the operative thing there.

For the two non-exempt items — the analytics use of gb_guest, and gb_ref — we are currently relying on nothing that meets the legal standard for consent. A single "OK" button offers no genuine choice; the storage happens before the button is pressed in any event; and on much of the site the button is never shown at all. We are not going to describe that as "implied consent" or "consent by continued use", because those are not valid bases, and we are not going to call it "notice" either, because a notice that most users never see is not one. It is a gap, it is listed in §9, and it is being fixed.

9. Known gaps (to be fixed before, or immediately after, EU launch)

This section exists because an accurate cookie policy is worth more than a flattering one. It is written for our own team and our lawyer; a public version of this document may summarise it, but it should not silently drop it.

  1. The banner is notice-only. One "OK" button, no refusal option on the first layer, no granularity. Consent collected this way is not freely given, not specific and not unambiguous. It cannot lawfully support anything that is not exempt.
  2. The visit counter fires before any consent, and writes a cookie while doing it. The tracker in prototype/theme.js posts to /api/track on page load, and that endpoint issues the gb_guest cookie. This breaks the "prior" in prior consent. Two things must change: (a) the analytics call must be gated behind an affirmative opt-in; (b) gb_guest should be split so that the strictly-necessary ownership token is not the same value as the analytics visitor key — otherwise refusing analytics either breaks guest ownership or does not actually stop the measurement.
  3. gb_ref is written on first load with no consent. Referral attribution is a marketing purpose. It must be gated behind consent, or the referral programme must be re-designed to work without device storage (for example, by carrying the code through the sign-up URL). Separately, it is written by client-side JS without the Secure attribute — that should be fixed regardless of the consent question.
  4. No per-purpose granularity. Analytics and referral attribution are distinct purposes and need independently toggleable controls, defaulting to OFF.
  5. No withdrawal mechanism. GDPR Art. 7(3) requires withdrawal to be as easy as giving consent. Today there is no persistent control — no footer link, no floating icon — to reopen preferences. gb-cookies-ack actively prevents the banner from reappearing.
  6. Consent state is stored in localStorage, not a cookie, and only records dismissal. It carries no record of what was consented to, no timestamp, and no version of the notice shown. There is no server-side consent record at all, so we could not demonstrate consent if asked to.
  7. The banner text is inaccurate. "Cookies — for sign-in" is true of gb_user, gb_auth and gb_partner, but the site also sets an analytics visitor token and, on referral links, a marketing attribution cookie. An inaccurate consent notice is not only a transparency failure, it is arguably a misleading commercial practice.
  8. No retention limit on the visits table. Rows are inserted and never purged; there is no scheduled cleanup job in the code. GDPR Art. 5(1)(e) requires a defined period. A concrete figure has to be chosen (a 14-month raw-row retention with aggregate roll-up is the usual shape) and implemented as an actual job, not a policy sentence.
  9. Google Fonts is loaded from Google's CDN on public pages. Not an ePrivacy issue, but an unnecessary disclosure of every visitor's IP to a US recipient with no clear basis. The fix is trivial — self-host the fonts — and should be done before launch. Note that it is nine families across the site (Onest, Inter, Manrope, Space Grotesk, JetBrains Mono, Unbounded, Russo One, Bowlby One, Bagel Fat One), not the four an earlier draft assumed; check the whole set, not just the ones on the home page.
  10. The Telegram script on /play/. Assess whether the mini-game is in scope for the EU deployment at all. If it is, the third-party script should be loaded only when the page is actually running inside Telegram, not unconditionally.
  11. The banner is suppressed on /privacy/ and /terms/, but the tracker still runs there. That is exactly backwards — and it is the smaller half of the problem. The larger half is that the banner is not present on the main funnel at all (/create/, /song/, /buy/, /signin/, /me/, /gift/), because the file that injects it is not loaded on those pages, while the file that runs the tracker and writes gb_ref is. See §8.
  12. Language. The banner strip is translated and follows the language you have selected on every page that shows it. The legal pages themselves are currently published in English only and carry no translation markup; a Russian version is still outstanding. Our EU audience is served in Russian and English and the rest of the UI is localised; GDPR Art. 12(1) requires the information to be intelligible to the people it is aimed at. Both language versions must ship together, and they must say the same thing.
  13. No Art. 27 EU representative appointed. Not a cookie issue as such, but this document and the Privacy Policy both have to name the representative and its contact details, and failing to do so is itself a transparency breach. (The Dutch DPA fined a controller EUR 525,000 for non-designation alone.)
  14. No maintained inventory. There is no automated check that the table in §4/§5 still matches what the site actually writes. Adding a key in a page template today would silently make this document wrong. A pre-release DevTools check, or a small automated audit, should be part of the release routine.
  15. gb-testmode ships in the production bundle on /create/ and /song/. It is properly gated — the toggle renders only for staff and the server ignores the flag for anyone else — so this is a hygiene item, not a live exposure, and an earlier draft of this document overstated it. What remains is that every visitor's browser reads the key on /create/ and downloads the code for a feature that is not theirs; it belongs behind a build flag.
  16. Persistent login cookies with no "keep me signed in" choice. gb_user and gb_partner last 30 days and survive closing the browser. The Article 29 Working Party's Opinion 04/2012 on the cookie consent exemption treats session authentication cookies as exempt but expressly says that persistent login cookies which carry an authentication token across browser sessions are not covered by that exemption, and recommends offering the user a "remember me" control next to the sign-in form. Either add that control (unticked) and make the cookie a session cookie when it is not ticked, or be prepared to argue the point. This is cheap to fix and it removes an easy finding against us.
  17. Nothing in localStorage ever expires. Every key in §5 lives until the user clears their site data. For genuinely exempt items the exemption is not open-ended: Opinion 04/2012 scopes the "user input" exemption to the session (a few hours) and treats UI-customisation storage as exempt for a limited period tied to the choice the user made. Indefinite retention of gb_brief_likes, gb_fb_<song id> and jam_notify_<jam code> goes beyond that shape even if the underlying purpose is unobjectionable. Give each key a written expiry, enforce it in code, and record the chosen periods here.
  18. The visit table is joined to the account. visits.web_user_id is populated for every signed-in pageview, so the "traffic counter" is in substance a per-user browsing history. This is what the first draft failed to disclose and it changes the analysis rather than decorating it: it removes any argument that the measurement is anonymous or severable, it closes off the French exemption discussed in §6, and it raises a purpose-limitation question under Art. 5(1)(b) that a banner cannot answer. Decide deliberately whether the counter needs the account id at all — the honest answer is probably no — and if it does not, stop writing it.
  19. The published Privacy Policy contradicts this document. The live /privacy/ page lists only five storage items (gb_auth, gb_user, gb_guest, gb-theme, gb-cookies-ack), describes gb_guest only as a jam-guest cookie with no mention of the visit counter, and omits gb_partner, gb_ref and eight of the ten localStorage keys in §5. It then says that "analytics (Google Analytics, Meta Pixel, Matomo and the like) are not connected" and that there are no advertising trackers. Read strictly, the parenthetical limits that sentence to third-party tools and it is true. Read the way an ordinary consumer will read it, it says the site does not do analytics — and the site does. Volunteering a reassurance that is only saved by a narrow reading of its own parenthesis is exactly the shape of statement that draws a misleading-practice finding under the Unfair Commercial Practices Directive, on top of the Art. 13 transparency problem. Rewrite it to say plainly that we run our own first-party counter and no third-party analytics. This must land in the same release as this document, not after it.
  20. Access from outside the EEA is not addressed. Hosting is in Finland, but the controller is established in Kazakhstan, which has no adequacy decision, and the admin dashboard — which displays exactly the traffic data described in §6 — is operated by him. Where that access happens from a third country it is a Chapter V transfer. Both a transfer mechanism (standard contractual clauses do not fit a controller transferring to himself, so this likely turns on Art. 49 or on restructuring the access) and a disclosure under Art. 13(1)(f) are missing. Confirm the factual position first — from where, and by whom, the admin interface is actually used — then pick the mechanism.
  21. Controller identification is incomplete. No postal address is published for the controller, and there is no statement about a data protection officer. Both are ordinary Art. 13 content and their absence is the first thing an authority checks.

One more point that cuts the other way. If — after fixing the above — Gigapop ends up setting only strictly necessary storage, then no consent and no consent banner are required at all, and a plain informational notice like this document is the correct and sufficient answer. Adding a full consent banner to a site that does not need one creates pointless friction and, if it implies consent is being collected for exempt cookies, is itself misleading. The decision in §9.2 — keep the visit counter behind consent, or drop it in favour of aggregate server-log analysis with no device storage — determines which of the two shapes this site should have. That decision should be made deliberately, not by default.

10. Open questions for the reviewer

11. How to control storage yourself

Regardless of what we do, you can:

Two rights that belong here rather than only in the Privacy Policy. You may object to, and withdraw any consent for, the non-essential storage described above at any time by writing to hi@gigapop.app. Withdrawal has to be as easy as giving consent; we do not yet offer an in-page control that meets that standard, so until we do, that email address is the mechanism and we will act on it. And you may complain to a data protection authority — the supervisory authority of the EU/EEA country where you live, where you work, or where you think the problem occurred. You do not have to contact us first.

12. Changes to this policy

We will update this document whenever we add, remove or change what we store on your device, and we will move the "Last updated" date at the top. Where a change affects something you previously consented to, we will ask again rather than assume the old answer still applies.

Questions: hi@gigapop.app

Политика в отношении файлов cookie и локального хранилища

Последнее обновление: 25 июля 2026 г.

О языке этого документа. Настоящий русский текст является переводом, предоставленным для удобства чтения. Юридически обязывающей является английская версия этого документа, опубликованная по тому же адресу. При любых расхождениях между русским и английским текстом преимущественную силу имеет английская версия.

1. Что охватывает этот документ

Настоящая политика объясняет, что Gigapop сохраняет на вашем устройстве и что считывает с вашего устройства, когда вы пользуетесь сайтом https://gigapop.app (а также www.gigapop.app, где размещён тот же сайт).

Мы намеренно не называем это просто «политикой в отношении cookie». Применимое здесь право — статья 5(3) Директивы ePrivacy 2002/58/EC в том виде, в каком она перенесена в национальное право каждой страны ЕС/ЕЭЗ, — касается не собственно cookie. Оно охватывает любое сохранение информации на вашем оконечном оборудовании и любое получение доступа к информации, уже сохранённой там. Сюда входят классические HTTP-cookie, но также localStorage, sessionStorage, отслеживающие пиксели и снятие цифрового отпечатка устройства (fingerprinting). Поэтому настоящий документ охватывает всё, что Gigapop помещает на ваше устройство, независимо от технического механизма.

Отдельный вопрос о том, что мы затем делаем с этими данными как с персональными данными, — цели, правовые основания по GDPR, кто их получает, как долго мы их храним и какие у вас права — рассматривается в нашей Политике конфиденциальности. Эти два документа предназначены для совместного чтения. Там, где настоящий документ повторяет что-то из Политики конфиденциальности, более полным изложением является Политика конфиденциальности.

2. Кто несёт ответственность

Gigapop управляется Ivan Smetanin, физическим лицом (физическим лицом, ведущим деятельность самостоятельно, а не компанией), учреждённым в Казахстане. Он является контролёром данных (оператором) в отношении описанной здесь обработки.

Контакт по любым вопросам, относящимся к настоящему документу, включая вопросы о хранении данных на вашем устройстве: hi@gigapop.app

Примечание для проверяющего: статья 13(1)(a) GDPR требует указать личность и контактные данные контролёра, а надзорный орган будет ожидать почтовый адрес для продавца, реализующего товары и услуги потребителям, а не только адрес электронной почты. Ни здесь, ни в Политике конфиденциальности почтовый адрес не указан, составителю он не был предоставлен, и поэтому он не был выдуман. Его необходимо добавить до публикации. То же касается сведений, требуемых по Art. 13(1)(b), — либо назвать специалиста по защите данных (DPO), либо указать, что он не назначен, и почему. См. §9.21.

У нас нет учреждения в Европейском союзе. Поскольку мы предлагаем платную услугу потребителям в ЕС, на русском и английском языках, с ценами в евро, к нам применяется GDPR на основании статьи 3(2)(a), а к тому, что мы сохраняем на устройствах пользователей, применяются национальные правила ePrivacy тех государств-членов, где находятся наши пользователи. Мы не пытаемся утверждать обратное.

Примечание для проверяющего: представитель в ЕС по GDPR Art. 27 пока не назначен. Для данной фактической конфигурации он требуется, и он должен быть назван здесь и в Политике конфиденциальности до запуска. См. §9.13.

Сайт размещён на серверах, эксплуатируемых Hetzner в Финляндии, внутри ЕС/ЕЭЗ.

Однако размещение внутри ЕЭЗ — это ещё не вся картина, и нам не следует подавать это так, будто это так. Контролёр учреждён в Казахстане, на который не распространяется решение об адекватности, и администрирование сайта — включая административную панель, показывающую данные о трафике, описанные в §6, — осуществляется этим контролёром, а не кем-либо внутри ЕЭЗ. В той мере, в какой доступ происходит из-за пределов ЕЭЗ, это является передачей по Главе V GDPR и требует как механизма передачи, так и соответствующего заявления здесь. Ни настоящий документ, ни Политика конфиденциальности этого сейчас не отражают. См. §9.20.

3. Правило, которому мы обязаны соответствовать

Согласно статье 5(3) существует ровно два случая, когда мы вправе сохранить что-либо на вашем устройстве или считать что-либо с него не спросив вас предварительно:

Третьего исключения нет. В частности, нет пути через «законный интерес» для сохранения чего-либо на вашем устройстве, и нет общего исключения для аналитики — даже для аналитики, которую мы ведём сами, на собственном домене, без участия каких-либо третьих лиц.

Всё, что не подпадает под (a) или (b), требует вашего предварительного согласия: свободно данного, конкретного, информированного, недвусмысленного и выраженного явным утвердительным действием. Молчание, предварительно проставленная галочка, прокрутка страницы или фраза «продолжая пользоваться сайтом, вы соглашаетесь» согласием не являются.

Ниже мы честно отмечаем каждый элемент по этому критерию. Там, где мы считаем, что элемент не подпадает под исключение, и мы тем не менее устанавливаем его без действительного согласия, мы прямо об этом говорим, а не переклассифицируем его в «функциональный» или «необходимый», чтобы таблица выглядела лучше.

4. Файлы cookie

Все они являются first-party-cookie (собственными), устанавливаются на домене gigapop.app, и ваш браузер отправляет их обратно только на gigapop.app. Ни один из них не является cookie третьей стороны или рекламной сети, и ни один не передаётся рекламной сети. Один из них, gb_ref, тем не менее служит маркетинговой цели (атрибуция для партнёрской программы) — то, что он является собственным, этого не меняет, и в таблице ниже он помечен соответствующим образом.

Если не указано иное, они устанавливаются нашим сервером с флагами HttpOnly, Secure, SameSite=Lax, Path=/. Простыми словами: HttpOnly означает, что JavaScript страницы не может их прочитать; Secure означает, что они передаются только по HTTPS; SameSite=Lax означает, что они не прикрепляются к большинству запросов, инициированных с другого сайта, хотя они всё же прикрепляются, когда вы переходите по обычной ссылке с другого сайта к нам; Path=/ означает, что они отправляются на каждой странице нашего собственного сайта.

Название Что хранит Для чего Срок Строго необходим?
gb_user Подписанный токен, содержащий идентификатор вашей учётной записи Gigapop и отметку времени истечения срока, защищённый HMAC-подписью. Ни имени, ни адреса электронной почты. Сохраняет вход в учётную запись и подтверждает, что песни, заказы и вклады в jam в вашей учётной записи принадлежат вам. 30 дней с момента входа Да в части собственно аутентификации — Art. 5(3)(b). Но это постоянный cookie входа, который переживает закрытие браузера, и вам никогда не предлагается выбор «запомнить меня». См. §9.16.
gb_guest Случайный токен (около 24 символов), не имеющий смысла за пределами нашей базы данных. Две вещи, и это важно (см. примечание ниже): (1) он связывает песню, вклад в jam или «лайк» с вами до того, как вы создадите учётную запись, чтобы вы могли вернуться к начатой песне; (2) он используется как ключ уникального посетителя для нашей собственной статистики трафика. 90 дней с момента первой выдачи. Код не продлевает его при последующих визитах, поэтому он истекает через 90 дней после вашего первого визита, если только он не был удалён и выдан заново. Частично. Использование (1) строго необходимо. Использование (2) — аналитика — под исключение не подпадает и требует согласия. См. §9.2.
gb_partner Подписанная отметка времени истечения срока плюс HMAC-подпись. Идентификатора нет. Сохраняет вход ведущего jam / партнёра в партнёрский раздел по адресу /partner/. 30 дней Да в части аутентификации — Art. 5(3)(b). Замечание о постоянстве из §9.16 относится и к этому cookie.
gb_auth Подписанный токен для входа сотрудника, содержащий имя пользователя-сотрудника и срок истечения, защищённый HMAC-подписью. Сохраняет вход оператора во внутренний административный раздел (/admin/, /history/). Обычные пользователи этот cookie никогда не получают. 30 дней Да. Аутентификация — Art. 5(3)(b). Только для сотрудников.
gb_ref Короткий партнёрский реферальный код, взятый из параметра ?ref= в URL, по которому вы пришли. Реферальная атрибуция: если вы впоследствии создадите учётную запись, она засчитывается направившему вас партнёру. Записывается JavaScript'ом на странице, а не нашим сервером, поэтому он не является HttpOnly и — в текущем коде — не несёт флага Secure. Будучи cookie, он тем не менее отправляется на наш сервер при каждом запросе к gigapop.app, а не только при регистрации. 90 дней, по первому касанию (first-touch; не перезаписывается более поздним ?ref=) Нет. Это маркетинговая атрибуция. Она не необходима для предоставления запрошенной вами услуги, поэтому требует согласия. См. §9.3.

О gb_guest — честная версия. Один cookie выполняет две работы. Удержание вашей несохранённой работы за случайным токеном действительно необходимо: без этого гость, который пишет бриф и затем обновляет страницу, теряет его, а гостю в jam нельзя помешать проголосовать пять раз. Подсчёт уникальных посетителей тем же токеном необходимым не является — это измерение, оно выгодно нам, а не вам, и статья 5(3) его не освобождает. То, что сейчас две цели используют один cookie, не делает вторую цель подпадающей под исключение. Планируемое нами исправление описано в §9.2.

Платежи. Когда вы оплачиваете, вы перенаправляетесь на страницу оформления платежа, размещённую Dodo Payments, которая является официальным продавцом (Merchant of Record) для этой покупки — Dodo выступает продавцом и стороной договора, взимает и перечисляет НДС ЕС и выставляет вам счёт. Эта страница оформления платежа находится на собственном домене Dodo, и любые cookie, устанавливаемые там, устанавливаются Dodo в соответствии с собственными уведомлениями Dodo о cookie и конфиденциальности, а не с нашими. Мы не встраиваем оформление платежа Dodo в наши страницы и сами не размещаем на вашем устройстве никаких связанных с оплатой cookie.

5. Локальное хранилище (localStorage)

localStorage — это хранилище браузера на вашем собственном устройстве. В отличие от cookie, ваш браузер не прикрепляет его автоматически к каждому запросу — страница читает его локально, чтобы помнить, в каком состоянии вы её оставили. Это не то же самое, что сказать, будто оно никогда не может попасть к нам: собственный JavaScript страницы может прочитать ключ и отправить его, и в одном случае ниже (jam_notify_<код jam>) он делает это намеренно, потому что мы не можем отправить вам песню по электронной почте без адреса. Там, где это происходит, таблица прямо об этом говорит.

У localStorage также нет срока истечения: ключ сохраняется, пока вы не очистите данные сайта в браузере или пока мы его не удалим.

Он всё равно полностью охватывается статьёй 5(3), поэтому мы перечисляем его здесь.

Ключ Что хранит Для чего Срок Строго необходим?
gb-theme light или dark-midnight Цветовая тема, выбранная вами переключателем темы. Если вы никогда не трогаете переключатель, ничего не записывается и мы следуем настройке вашей операционной системы. До очистки Да, при прочтении Art. 5(3)(b) как «настройка интерфейса, явно выбранная пользователем». Записывается только тогда, когда вы действительно нажимаете переключатель.
gb-lang ru или en Выбранный вами язык интерфейса. Если вы никогда его не выбираете, ничего не записывается и мы используем язык вашего браузера, по умолчанию русский. До очистки Да, по той же логике, что и gb-theme.
gb-cookies-ack 1 Фиксирует, что вы закрыли уведомление внизу экрана, чтобы оно вам больше не показывалось. До очистки Да — хранение записи о вашем собственном выборе подпадает под исключение. Но см. §9.1: то, что фиксируется сейчас, — это закрытие уведомления, а не согласие.
gb-adult-ok 1 Фиксирует, что вы подтвердили предупреждение о материалах откровенного содержания перед воспроизведением трека, помеченного как откровенный, чтобы мы не спрашивали снова. До очистки Да. Вы попросили воспроизвести трек; подтверждающий барьер является частью предоставления этого.
gb_brief_likes Список числовых идентификаторов примеров брифов, которым вы поставили «палец вверх» Повторно подсвечивает ваши собственные лайки, когда вы возвращаетесь на страницу. Сам лайк также хранится на нашем сервере в привязке к gb_guest или к вашей учётной записи. До очистки Да — сохранение вашего собственного ввода в функции, которой вы воспользовались.
gb_fb_<id песни> 1, по одному ключу на песню Фиксирует, что вы уже оставили отзыв об этой песне, чтобы мы перестали спрашивать. До очистки Да — сохранение вашего собственного ввода.
jam_notify_<код jam> telegram, адрес электронной почты или отметка «пропущено» — по одному ключу на каждый jam, к которому вы присоединились Запоминает на вашем собственном устройстве, каким способом вы попросили сообщить вам о готовности коллективной песни, чтобы страница jam не спрашивала вас снова. Если вы вводите здесь адрес электронной почты, он остаётся в вашем браузере и также отправляется на наш сервер, чтобы мы действительно могли вас уведомить. Страница jam показывает элемент управления «отменить / изменить», который удаляет этот ключ с вашего устройства; его удаление само по себе не удаляет адрес, хранящийся на нашем сервере. До очистки Да — сохранение вашего собственного ввода в функции, которой вы явно воспользовались.
gb_notes_sound 1 или 0 Звук вкл./выкл. в маленькой игре с ловлей нот, которая показывается, пока генерируется ваша песня. До очистки Да — настройка, выбранная вами в функции, которую вы открыли.
gb_notes_best Число Ваш лучший результат в этой игре. До очистки Да — состояние функции, которую вы запросили.
gb-testmode 1 или 0 Внутренний переключатель для разработки. Кнопка, которая его записывает, отрисовывается только для учётных записей, которые сервер сообщает как сотрудников (/api/whoami), и сервер игнорирует этот флаг для всех остальных, поэтому обычный пользователь не может включить тестовый режим. Тем не менее ключ считывается при каждой загрузке /create/, кем бы вы ни были. До очистки Для обычных пользователей не записывается. Считывание охватывается Art. 5(3), но безвредно; см. §9.15 о том, что всё же следует изменить.

Мы не используем sessionStorage, мы не используем IndexedDB, мы не регистрируем service worker, мы не используем отслеживающие пиксели и мы не снимаем цифровой отпечаток вашего устройства.

В каждой строке выше сказано «до очистки», и это утверждение о нашем проектном решении, а не формальность — §9.17 объясняет, почему бессрочность является неверным ответом для нескольких из этих ключей. Ещё один технический момент: небольшой скрипт в <head> почти каждой страницы считывает gb-theme до отрисовки страницы, поэтому считывание происходит даже на страницах, которые ничего не записывают. Считывание в той же мере охватывается статьёй 5(3), что и запись; мы полагаем, что это считывание подпадает под исключение (b), но мы предпочитаем сказать об этом, а не позволить вам это обнаружить.

6. Наша собственная статистика трафика

Мы ведём небольшой собственный (first-party) счётчик визитов. На этом сайте нет ни Google Analytics, ни пикселя Meta, ни рекламного тега, ни записи сессий, ни тепловых карт, ни стороннего поставщика аналитики какого-либо рода.

Когда вы открываете страницу, страница отправляет на наш сервер:

Последний пункт — самая важная строка в этом разделе, поэтому мы не станем её прятать. Поскольку идентификатор учётной записи хранится вместе с каждым визитом, эти записи не являются анонимной статистикой и не являются изолированным измерением, стоящим отдельно от остальных ваших данных. Для вошедшего в учётную запись пользователя они представляют собой постраничную историю того, что вы просматривали и как долго, привязанную к вашей учётной записи и потому способную читаться вместе с вашими заказами, вашими песнями и вашим адресом электронной почты. См. §9.18.

Страницы в разделах /admin/ и /jam-admin/ не учитываются вовсе. Путь страницы записывается без строки запроса, поэтому идентификаторы песен и реферальные коды, передаваемые в строках запроса, этим путём в таблицу визитов не попадают.

Отдельно и независимо от всего этого, наш веб-сервер (nginx) ведёт обычные серверные логи, которые включают ваш IP-адрес, запрос и строку user-agent вашего браузера. Это логирование на стороне сервера, а не хранение на вашем устройстве, поэтому статья 5(3) к нему не применяется — но это персональные данные, и они рассматриваются в Политике конфиденциальности.

Мы должны прямо изложить правовое положение счётчика визитов. То, что он собственный (first-party), что он размещён у нас самих и что в нём не участвуют третьи лица, не освобождает аналитику от требования согласия. Статья 5(3) спрашивает, для чего производится хранение, а не кому принадлежит домен.

Существует узкое национальное исключение во Франции: согласно Art. 82 loi Informatique et Libertés CNIL рассматривает строго ограниченное измерение аудитории как подпадающее под исключение. Её опубликованные критерии состоят в том, что трекер используется исключительно для измерения аудитории и исключительно в интересах издателя (for the exclusive account of the publisher), что он производит только анонимную статистику, что он не приводит к сопоставлению данных с другими операциями обработки (cross-referencing with other processing) и к их передаче третьим лицам и что он не позволяет отслеживать пользователя между разными сайтами; CNIL далее рекомендует срок жизни трекера не более 13 месяцев, без автоматического продления при новых визитах, и хранение собранных данных не более 25 месяцев, причём и то и другое подлежит периодическому пересмотру.

Сегодня мы бы этот тест не прошли, и не по формальной причине. Срок жизни нашего cookie (90 дней, без продления при последующих визитах) с запасом укладывается в рекомендацию, но наши строки визитов несут идентификатор учётной записи вошедших пользователей, а это именно то сопоставление с другими операциями обработки, которое исключается этим исключением и которое лишает статистику анонимности. У нас также нет определённого срока хранения для таблицы визитов. Поэтому французский путь для нас не открыт при нынешнем устройстве счётчика, и он в любом случае покрывал бы только наших французских пользователей. В остальной части ЕС правило по умолчанию простое: на это требуется согласие, и мы его сейчас не получаем. См. §9.2 и §9.18.

Примечание для проверяющего: приведённые выше критерии CNIL взяты с собственной страницы CNIL «Cookies : solutions pour les outils de mesure d'audience» (страница датирована 4 июля 2025 года), где также опубликован инструмент самооценки, адресованный поставщикам решений для измерения. В более раннем черновике настоящего документа утверждалось об изменении режима «с 1 января 2026 года» и о прямом требовании opt-out; ни то ни другое не удалось подтвердить по опубликованному тексту CNIL, и оба утверждения были удалены, а не оставлены. Пожалуйста, подтвердите текущую французскую позицию, прежде чем полагаться на какую-либо версию этого абзаца.

7. Стороннее содержимое, загружаемое нашими страницами

Это не является хранением данных на вашем устройстве с нашей стороны, но это заставляет ваш браузер обратиться к третьему лицу, что неизбежно раскрывает этому лицу ваш IP-адрес. Мы перечисляем это, чтобы картина была полной.

Что Где Что это означает
Google Fonts (fonts.googleapis.com, fonts.gstatic.com) Почти каждая публичная страница — на них ссылаются около 40 шаблонов страниц, включая страницы входа, создания, песни и оплаты Шрифты загружаются с серверов Google, поэтому ваш браузер раскрывает ваш IP-адрес и user-agent компании Google LLC (США). Google Fonts не устанавливает cookie, поэтому это не вопрос статьи 5(3) — но это вопрос GDPR, и немецкий суд (LG München I, 20 января 2022, 3 O 17493/20) присудил компенсацию с оператора сайта за встраивание Google Fonts таким образом без правового основания. Мы намерены разместить эти шрифты у себя. См. §9.9.
Скрипт Telegram Web App (telegram.org/js/telegram-web-app.js) Только страница мини-игры /play/ Загружается, чтобы мини-игра работала при открытии внутри Telegram. Это сторонний скрипт, и он может получить доступ к хранилищу браузера на этой странице. См. §9.10.
Размещённое оформление платежа Dodo Payments Только после того, как вы решите оплатить, на собственном домене Dodo Регулируется собственными уведомлениями Dodo о cookie и конфиденциальности.

Мы не встраиваем YouTube, плагины социальных сетей, виджеты «поделиться», чат-виджеты, карты или рекламные теги.

8. Что наш баннер делает сегодня — и чего он не делает

Мы описываем текущую реализацию, а не идеальную.

Что это такое. Небольшая полоса появляется внизу экрана при вашем первом визите на одну из страниц, где она есть. В ней сказано, что cookie используются «для входа», со ссылкой на нашу Политику конфиденциальности, и у неё одна кнопка с надписью «ок» / «OK». Нажатие на неё закрывает полосу и записывает gb-cookies-ack = 1 в localStorage, чтобы она не возвращалась.

Где она фактически появляется. Это самая важная поправка в настоящем документе. Баннер внедряется файлом prototype/script.js, а этот файл загружается лишь примерно на дюжине шаблонов страниц. Он не загружается на ключевых продуктовых страницах — на странице создания песни (/create/), странице песни (/song/), странице оплаты (/buy/), странице входа (/signin/), странице учётной записи (/me/) и странице подарка (/gift/). Трекер же и код, записывающий gb_ref, находятся в prototype/theme.js, который загружается практически на каждой странице.

Практическое следствие: посетитель, который приходит по рекламе или по ссылке из Telegram сразу на /create/, пишет бриф, оплачивает на /buy/ и слушает на /song/, оказывается посчитан, получает cookie gb_guest и — по ссылке с ?ref= — cookie gb_ref, ни разу не увидев никакого уведомления о cookie. На страницах, где баннер подавляется явным правилом (/privacy/, /terms/), трекер всё равно работает, что уже было зафиксировано в §9.11; чего не заметили — так это того, что на большей части воронки подавлять попросту нечего.

Язык. Текст баннера переведён, и механизм перевода теперь работает на каждой странице сайта, где есть баннер, поэтому он следует выбранному вами языку. Сами юридические страницы — включая настоящую — опубликованы только на английском; см. §9.12.

Чего он не делает, и мы не собираемся притворяться иначе:

На какое согласие мы, следовательно, опираемся. Для строго необходимых элементов из §4 и §5 — cookie входа и локального хранилища, которое запоминает ваши собственные выборы, — мы опираемся на исключение по статье 5(3)(b), и согласия не требуется, так что баннер там не является действующим механизмом.

Для двух не подпадающих под исключение элементов — аналитического использования gb_guest и gb_ref — мы сейчас не опираемся ни на что, что отвечало бы правовому стандарту согласия. Одна кнопка «OK» не предоставляет подлинного выбора; хранение в любом случае происходит до нажатия кнопки; а на значительной части сайта кнопка вообще не показывается. Мы не будем называть это «подразумеваемым согласием» или «согласием посредством продолжения использования», потому что это недействительные основания, и мы не будем называть это «уведомлением», потому что уведомление, которого большинство пользователей не видит, таковым не является. Это пробел, он указан в §9, и он устраняется.

9. Известные пробелы (подлежат устранению до запуска в ЕС или сразу после него)

Этот раздел существует потому, что точная политика в отношении cookie стоит больше, чем лестная. Он написан для нашей собственной команды и нашего юриста; публичная версия настоящего документа может изложить его в сокращении, но не должна молча его опустить.

  1. Баннер является только уведомлением. Одна кнопка «OK», нет возможности отказа на первом уровне, нет детализации. Согласие, собранное таким способом, не является свободно данным, конкретным и недвусмысленным. Оно не может законно обосновать ничего, что не подпадает под исключение.
  2. Счётчик визитов срабатывает до какого-либо согласия и при этом записывает cookie. Трекер в prototype/theme.js отправляет запрос на /api/track при загрузке страницы, и этот эндпоинт выдаёт cookie gb_guest. Это нарушает слово «предварительное» в «предварительном согласии». Должны измениться две вещи: (a) аналитический вызов должен быть поставлен за утвердительный opt-in; (b) gb_guest следует разделить, чтобы строго необходимый токен принадлежности не был тем же значением, что и аналитический ключ посетителя, — иначе отказ от аналитики либо ломает принадлежность гостевых объектов, либо фактически не прекращает измерение.
  3. gb_ref записывается при первой загрузке без согласия. Реферальная атрибуция — это маркетинговая цель. Она должна быть поставлена за согласие, либо реферальная программа должна быть переработана так, чтобы работать без хранения на устройстве (например, за счёт передачи кода через URL регистрации). Отдельно: он записывается клиентским JS без атрибута Secure — это следует исправить независимо от вопроса о согласии.
  4. Нет детализации по целям. Аналитика и реферальная атрибуция — разные цели, и им нужны независимо переключаемые органы управления, по умолчанию ВЫКЛЮЧЕННЫЕ.
  5. Нет механизма отзыва. GDPR Art. 7(3) требует, чтобы отзыв был столь же простым, как дача согласия. Сегодня нет постоянного элемента управления — ни ссылки в подвале, ни плавающей иконки, — чтобы снова открыть настройки. gb-cookies-ack активно препятствует повторному появлению баннера.
  6. Состояние согласия хранится в localStorage, а не в cookie, и фиксирует лишь закрытие уведомления. В нём нет записи о том, на что было дано согласие, нет отметки времени и нет версии показанного уведомления. Серверной записи о согласии нет вовсе, поэтому мы не смогли бы продемонстрировать согласие, если бы нас об этом попросили.
  7. Текст баннера неточен. «Cookie — для входа» верно в отношении gb_user, gb_auth и gb_partner, но сайт также устанавливает аналитический токен посетителя и, на реферальных ссылках, маркетинговый cookie атрибуции. Неточное уведомление о согласии — это не только нарушение прозрачности, это, возможно, и вводящая в заблуждение коммерческая практика.
  8. Нет ограничения срока хранения для таблицы visits. Строки вставляются и никогда не удаляются; в коде нет планового задания на очистку. GDPR Art. 5(1)(e) требует определённого срока. Необходимо выбрать конкретную цифру (обычная схема — 14 месяцев хранения сырых строк с агрегированной сводкой) и реализовать её как реальное задание, а не как фразу в политике.
  9. Google Fonts загружается с CDN Google на публичных страницах. Это не вопрос ePrivacy, но это излишнее раскрытие IP-адреса каждого посетителя получателю в США без ясного основания. Исправление тривиально — разместить шрифты у себя — и должно быть сделано до запуска. Обратите внимание, что по сайту используется девять гарнитур (Onest, Inter, Manrope, Space Grotesk, JetBrains Mono, Unbounded, Russo One, Bowlby One, Bagel Fat One), а не четыре, как предполагал более ранний черновик; проверьте весь набор, а не только те, что на главной странице.
  10. Скрипт Telegram на /play/. Оцените, входит ли мини-игра вообще в объём развёртывания в ЕС. Если входит, сторонний скрипт должен загружаться только тогда, когда страница действительно работает внутри Telegram, а не безусловно.
  11. Баннер подавляется на /privacy/ и /terms/, но трекер там всё равно работает. Это ровно наоборот — и это меньшая половина проблемы. Большая половина в том, что баннера вообще нет на основной воронке (/create/, /song/, /buy/, /signin/, /me/, /gift/), потому что файл, который его внедряет, на этих страницах не загружается, а файл, который запускает трекер и записывает gb_ref, — загружается. См. §8.
  12. Язык. Полоса баннера переведена и следует выбранному вами языку на каждой странице, где она показывается. Сами юридические страницы в настоящее время опубликованы только на английском и не содержат разметки для перевода; русская версия всё ещё не готова. Наша аудитория в ЕС обслуживается на русском и английском, а остальной интерфейс локализован; GDPR Art. 12(1) требует, чтобы информация была понятной тем людям, которым она адресована. Обе языковые версии должны выпускаться вместе, и они должны говорить одно и то же.
  13. Представитель в ЕС по Art. 27 не назначен. Как таковой это не вопрос cookie, но и настоящий документ, и Политика конфиденциальности обязаны назвать представителя и его контактные данные, а несоблюдение этого само по себе является нарушением требования прозрачности. (Надзорный орган Нидерландов оштрафовал контролёра на EUR 525,000 за одно только неназначение.)
  14. Нет поддерживаемого в актуальном состоянии реестра. Нет автоматической проверки того, что таблицы в §4/§5 по-прежнему соответствуют тому, что сайт фактически записывает. Добавление ключа в шаблон страницы сегодня молча сделало бы настоящий документ неверным. Предрелизная проверка через DevTools или небольшой автоматический аудит должны стать частью релизной процедуры.
  15. gb-testmode попадает в продакшн-сборку на /create/ и /song/. Он корректно огорожен — переключатель отрисовывается только для сотрудников, и сервер игнорирует флаг для всех остальных, — поэтому это вопрос гигиены, а не действующая уязвимость, и более ранний черновик настоящего документа преувеличивал его значение. Остаётся то, что браузер каждого посетителя считывает этот ключ на /create/ и загружает код функции, которая ему не предназначена; ей место за флагом сборки.
  16. Постоянные cookie входа без выбора «запомнить меня». gb_user и gb_partner живут 30 дней и переживают закрытие браузера. Заключение 04/2012 Рабочей группы по статье 29 об исключении из требования согласия для cookie рассматривает сессионные cookie аутентификации как подпадающие под исключение, но прямо указывает, что постоянные cookie входа, переносящие токен аутентификации между сессиями браузера, этим исключением не охватываются, и рекомендует предлагать пользователю элемент управления «запомнить меня» рядом с формой входа. Либо добавьте этот элемент (без предустановленной галочки) и делайте cookie сессионным, когда галочка не проставлена, либо будьте готовы отстаивать свою позицию. Это дёшево исправить, и это снимает лёгкую претензию к нам.
  17. Ничто в localStorage никогда не истекает. Каждый ключ из §5 живёт до тех пор, пока пользователь не очистит данные сайта. Для действительно подпадающих под исключение элементов само исключение не является бессрочным: Заключение 04/2012 ограничивает исключение для «пользовательского ввода» рамками сессии (несколько часов) и рассматривает хранение настроек интерфейса как подпадающее под исключение на ограниченный период, связанный со сделанным пользователем выбором. Бессрочное хранение gb_brief_likes, gb_fb_<id песни> и jam_notify_<код jam> выходит за эти рамки, даже если сама цель не вызывает возражений. Задайте каждому ключу письменно закреплённый срок, обеспечьте его соблюдение в коде и зафиксируйте выбранные периоды здесь.
  18. Таблица визитов связана с учётной записью. visits.web_user_id заполняется для каждого просмотра страницы вошедшим пользователем, поэтому «счётчик трафика» по сути является историей просмотров конкретного пользователя. Именно это не было раскрыто в первом черновике, и это меняет анализ, а не украшает его: это снимает любой аргумент о том, что измерение анонимно или отделимо, это закрывает французское исключение, обсуждавшееся в §6, и это поднимает вопрос об ограничении цели по Art. 5(1)(b), на который баннер ответить не может. Осознанно решите, нужен ли счётчику идентификатор учётной записи вообще — честный ответ, вероятно, нет, — и если не нужен, перестаньте его записывать.
  19. Опубликованная Политика конфиденциальности противоречит настоящему документу. Живая страница /privacy/ перечисляет только пять элементов хранения (gb_auth, gb_user, gb_guest, gb-theme, gb-cookies-ack), описывает gb_guest только как cookie гостя в jam, не упоминая счётчик визитов, и опускает gb_partner, gb_ref и восемь из десяти ключей localStorage из §5. Далее там сказано, что «аналитика (Google Analytics, Meta Pixel, Matomo и тому подобное) не подключена» и что рекламных трекеров нет. При строгом прочтении содержимое скобок ограничивает это предложение сторонними инструментами, и тогда оно верно. При прочтении так, как его прочтёт обычный потребитель, оно говорит, что сайт не занимается аналитикой, — а сайт ею занимается. Добровольно данное заверение, которое спасает лишь узкое прочтение собственных скобок, — это ровно тот тип утверждения, который влечёт вывод о вводящей в заблуждение практике по Директиве о недобросовестной коммерческой практике, вдобавок к проблеме прозрачности по Art. 13. Перепишите его так, чтобы прямо сказать, что мы ведём собственный (first-party) счётчик и не используем стороннюю аналитику. Это должно выйти в том же релизе, что и настоящий документ, а не после него.
  20. Доступ из-за пределов ЕЭЗ не урегулирован. Хостинг находится в Финляндии, но контролёр учреждён в Казахстане, в отношении которого нет решения об адекватности, а административная панель — отображающая ровно те данные о трафике, что описаны в §6, — эксплуатируется им. Там, где такой доступ происходит из третьей страны, это передача по Главе V. Отсутствуют и механизм передачи (стандартные договорные условия не подходят для контролёра, передающего данные самому себе, поэтому здесь вопрос, вероятно, сводится к Art. 49 или к реструктурированию доступа), и раскрытие по Art. 13(1)(f). Сначала подтвердите фактическое положение — откуда и кем административный интерфейс фактически используется, — затем выберите механизм.
  21. Идентификация контролёра неполна. Для контролёра не опубликован почтовый адрес, и нет заявления о специалисте по защите данных (DPO). И то и другое — обычное содержание по Art. 13, и их отсутствие проверяется органом в первую очередь.

Ещё один момент, который работает в другую сторону. Если — после устранения вышеуказанного — Gigapop будет устанавливать только строго необходимое хранение, то никакого согласия и никакого баннера согласия не потребуется вовсе, и простое информационное уведомление вроде настоящего документа будет верным и достаточным ответом. Добавление полноценного баннера согласия на сайт, которому он не нужен, создаёт бессмысленное трение и, если оно подразумевает, что согласие собирается для подпадающих под исключение cookie, само по себе вводит в заблуждение. Решение по §9.2 — оставить счётчик визитов за согласием или отказаться от него в пользу агрегированного анализа серверных логов без хранения на устройстве — определяет, какую из двух форм должен принять этот сайт. Это решение должно быть принято осознанно, а не по умолчанию.

10. Открытые вопросы для проверяющего

11. Как самостоятельно контролировать хранение

Независимо от того, что делаем мы, вы можете:

Два права, место которым здесь, а не только в Политике конфиденциальности. Вы можете возразить против описанного выше несущественного хранения и отозвать любое данное на него согласие в любое время, написав на hi@gigapop.app. Отзыв должен быть столь же простым, как дача согласия; мы пока не предлагаем элемент управления на странице, отвечающий этому стандарту, поэтому до тех пор, пока мы этого не сделаем, механизмом является указанный адрес электронной почты, и мы будем по нему действовать. И вы можете подать жалобу в орган по защите данных — надзорный орган страны ЕС/ЕЭЗ, где вы живёте, где вы работаете или где, по вашему мнению, произошло нарушение. Обращаться сначала к нам вы не обязаны.

12. Изменения настоящей политики

Мы будем обновлять настоящий документ всякий раз, когда мы добавляем, удаляем или изменяем то, что мы сохраняем на вашем устройстве, и будем сдвигать дату «Последнее обновление» вверху. Там, где изменение затрагивает то, на что вы ранее дали согласие, мы спросим снова, а не будем исходить из того, что прежний ответ всё ещё применим.

Вопросы: hi@gigapop.app