# Privacy policy

What releaseszn stores about you, why, where it's kept and how to have it deleted.

> [!NOTE]
> Draft, not yet in force. Before releaseszn opens to the public, it will
> be reviewed and will name who runs releaseszn, with a contact address
> and the province whose law applies. Last updated: October 21, 2026.

releaseszn is a showcase of software releases. We keep as little about you
as we can: no ads, no third-party trackers, no selling or sharing of data.
This page says exactly what we store, why, who else handles it, and how
long it stays.

releaseszn is run from Canada. Its operator decides what is done with this
data (under the GDPR, the "controller"). Questions and requests go through
the [feedback form](/feedback) (pick "question").

## If you just browse

- **No tracking cookies.** Visitors who aren't signed in get no cookies,
  with one exception: clicking **Sign in with GitHub** sets a cookie
  (`__Host-rszn_oauth`) that holds the sign-in in progress for 10 minutes
  and is cleared once you're signed in.
- **Visitor counts.** To count unique visitors per hour, we store a one-way
  hash of your IP address and browser user agent, mixed with a random
  value that changes every day. The hashes are kept 35 days. The daily
  values are deleted from the database after two days (backups keep them
  up to 30 days, see below); once a day's value is gone, that day's hashes
  can't be linked to anyone, or to each other across days.
- **Rate limits.** To stop abuse, we keep a hash of your IP address in
  memory for up to an hour (sign-in pages, forms, searches, the feedback
  form, API calls without a token, device sign-in). It is never written to
  disk.
- **Device sign-in.** When a coding agent asks for a token to be approved
  on `/device`, we store, with the request, the network it asked from (an
  IPv4 address, or the first half of an IPv6 one) and the name the agent
  gave itself, to show them to whoever approves. The request lasts 10
  minutes and is deleted within the hour after it expired or was used.
- **Your settings.** The theme, the palette and the feed layout you pick
  are saved in your browser (`localStorage`), and the feed you were
  scrolling is kept for 30 minutes (`sessionStorage`) so the back button
  returns to it; none of this reaches us.
- **No outside requests from the page.** Fonts, scripts and images are
  served by releaseszn itself (images through our storage provider, below);
  your browser doesn't contact Google, analytics services or ad networks.
  Every request does pass through Cloudflare, which protects and delivers
  the site (see [Who handles your data](#who-handles-your-data)).
- **What you look at, anonymously.** To decide what goes on the home
  feed, the page reports what happens to each release card: that it was
  on screen, for how long, and whether it was opened, shared or swiped.
  Without an account these reports carry only a daily hash of your IP
  address (made like the one for visitor counts, without the user agent),
  never the address itself, a cookie or a user agent. They're kept 35 days;
  after that only hourly and daily totals per release stay.
- **Visits to a release page.** We count them per release and day, with
  the name of the site that linked to it (from your browser's `Referer`,
  the host only); nothing about you.

## If you sign in

You sign in with GitHub. releaseszn asks GitHub for no extra permissions:
only your public profile. We receive and store:

- your GitHub **username, user id, display name and avatar** (copied to our
  storage and shown as the author of what you publish);
- your GitHub **account creation date** and your numbers of **public
  repositories and followers**. The creation date and the number of public
  repositories weigh your votes against fake accounts (new accounts' votes
  count less, or not at all); the follower count is stored with your
  profile but not used for that;
- a GitHub **access token**, encrypted, used only to read your public
  repositories and their releases: when you add a project, each time
  releaseszn imports or syncs your projects' releases, to check that GitHub
  still accepts your sign-in (`GET /api/v1/me`), and to cancel releaseszn's
  access when you delete your account. We never post to GitHub on your
  behalf.

We don't receive your GitHub password or your email address.

While you're signed in we also store:

- **A session cookie** (`__Host-rszn_session`), only to keep you signed in. It
  lasts 30 days or until you sign out. We keep only a hash of it, and when
  it was last used.
- **When you joined and were last seen**, from your sign-ins and the use of
  your sessions and tokens. The month you joined is shown on your profile.
- **What you follow, save and hide**: the projects, tags and authors you
  follow, the projects you save, and the projects you hide from your
  feeds. Followers and saves are shown as totals only; what you hide is
  never shown on the site, the project's author included.
- **A picture, if you upload one** instead of your GitHub avatar. It is
  cropped and resized; the file you sent is deleted once that's done, and
  the picture itself when you remove it or delete your account.
- **Votes**, with the weight your vote carried when you cast it and the
  name of the site you came from (the host only), so authors can see which
  sites their votes came from (as totals).
- **Releases you've seen**: when a release card stays on your screen for a
  second, or you open a release page, we record that you saw it, once per
  release. Votes are divided by views to rank releases fairly, so this is
  part of how the boards work. Your own releases are never counted.
- **What you do with release cards** (on screen, for how long, opened,
  shared, swiped, followed, saved, hidden), as for anonymous visitors but
  with your account, kept 35 days, to build the home feed.
- **API tokens** you create: we keep only a hash of each, its first
  characters, the name you gave it, its scopes, when it expires and when it
  was last used. A revoked or expired token is kept, unusable, until you
  delete your account. When an agent sends a request with an
  `Idempotency-Key`, our answer to it is kept 24 hours so the agent can
  safely retry.
- **Reports** you file about a release, with your reason and note.

Your votes, views and what you hide are never shown on the site: pages show
totals only. The people who run releaseszn can see more, as described in
[Who can see what](#who-can-see-what).

## What is public

Your profile page (`/u/{your handle}`) shows your display name, handle and
avatar, the month you joined, a link to your GitHub profile, your published
projects, their total upvotes and your number of followers.

Projects, releases, changelogs, screenshots, GIFs and terminal recordings
you submit are **public**: that's the point of the site. Your GitHub
username and avatar are shown as the author. Screenshots are copied,
resized and served from our storage; the original file is deleted once
processed. Converting an image or video removes its embedded metadata
(camera details, location). A terminal recording is published as it was
recorded, including any user names, host names or paths it shows.

## What project owners see

Owners see statistics about their own projects: how often their releases
were seen, opened, shared and upvoted, how upvotes were weighted, where
their cards were seen on the site, whether viewers were signed in, and
which sites linked to their release pages or sent their voters. These are
**totals only**: never who looked, voted, followed or saved. Groups smaller
than 3 (a site that sent one visitor, for instance) are folded together so
no one can be singled out. To count release page visits we store, per
release and day, a visit count and the linking site's name, and per project
and day how many times its README badge was loaded; nothing about the
visitor.

## Who can see what

- **Moderators** see reports with the name of who filed them, appeals with
  their text, and can open any project's statistics page (the same totals
  as its owner) to help its owner or to look into abuse. Each look at a
  project's statistics, and every moderation action, is recorded in our
  moderation log with the moderator's name.
- **The operator** (who runs the site) can also read, for running and
  protecting it: the list of accounts with their GitHub details (creation
  date, public repositories, followers) and when each was last seen;
  feedback messages; and, for 35 days, the raw card activity, including
  which signed-in account saw, opened, voted on, saved or hid which release.
  This is used to tune the feed and to investigate abuse, never to show
  anyone what you did.

## Moderation and appeals

When a moderator hides a project or release, suspends an account or
changes someone's role, we record who did it, when, on what, and the
reason given. If you appeal, we keep your appeal's text and its outcome
with your account. A suspended account can only sign in to appeal; its
projects are hidden, and its data is kept until the suspension is
resolved. If you want a suspended account deleted, ask us (below).

## Feedback

The feedback form stores your message, the page you came from and, only if
you give them, your name and email address (so we can reply). Feedback sent
through the API is stored the same way; sent with an API token, it carries
your handle as the name. When a message arrives, a notification with its
type, its page and its first 300 characters (never your name or email) is
sent to our notification service, ntfy, so we see it quickly. Feedback is
kept until we delete it, also after you delete your account; ask and we
delete yours.

## Who handles your data

These providers process data for us, only to run the site:

| Provider                    | What it handles                                                                                                                                                                                                  | Where                   |
| --------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------- |
| **Cloudflare** (proxy, CDN) | Every request to releaseszn.com passes through it, to protect the site and deliver it quickly: it sees your IP address, browser, the pages you request and what you send. It also runs a per-address rate limit. | Worldwide network       |
| **Cloudflare R2** (storage) | Screenshots, recordings, avatars, the files of unpublished drafts, and our encrypted database backups. An agent's upload goes straight to it.                                                                    | Cloudflare's network    |
| **Hetzner** (hosting)       | The server that runs the site, its database and its logs, and a copy of the nightly database backups.                                                                                                            | United States (Ashburn) |
| **GitHub**                  | Sign-in, and the reads described in [If you sign in](#if-you-sign-in).                                                                                                                                           | United States           |
| **ntfy** (notifications)    | The start of new feedback messages, as described in [Feedback](#feedback).                                                                                                                                       | ntfy's server           |

Your data is therefore stored and processed outside Canada (and, if you
are in the EU or the UK, outside it), where the authorities of those
countries may be able to access it under their laws. Transfers from the EU
or the UK rely on the providers' standard contractual clauses, or on an
adequacy decision where one applies.

**Server logs** record which kind of page was requested, when, how long it
took and any errors, plus sign-ins, token changes and account changes by
user id, and moderation actions with the handles involved. The app doesn't
log IP addresses, browser details or full page addresses; the web server in
front of it may record the address and page of a request that failed.
They're kept 30 days.

**Backups** of the whole database are made every night and kept 30 days:
one copy on the server, and an encrypted copy at Cloudflare R2. They contain
everything above, including the daily values used for visitor hashes.

## Why we use your data

| What                                                                  | Why                                                                      | Legal basis (EU and UK)                                                                       |
| --------------------------------------------------------------------- | ------------------------------------------------------------------------ | --------------------------------------------------------------------------------------------- |
| Your account, sessions, tokens, projects and what you publish         | To provide the service you signed up for                                 | Performance of a contract (GDPR Art. 6(1)(b))                                                 |
| Your GitHub profile data and access token                             | Sign-in, adding and importing your projects                              | Performance of a contract                                                                     |
| Votes, views and their weights                                        | Fair rankings, protection against fake accounts                          | Legitimate interest (Art. 6(1)(f)): rankings that can't be gamed                              |
| Card activity, visitor counts, visit and badge counts                 | Building the home feed, owners' statistics, knowing how the site is used | Legitimate interest: a useful feed and statistics, without tracking people                    |
| Rate limits, Cloudflare's protection, server logs, the moderation log | Security and abuse prevention                                            | Legitimate interest: keeping the site safe and working                                        |
| Reports and appeals                                                   | Moderation                                                               | Legitimate interest: a site free of abuse; for appeals, also your right to contest a decision |
| Feedback, and your name and email if you give them                    | Answering you                                                            | Legitimate interest; the name and email only if you choose to give them                       |
| Backups                                                               | Recovering from failures                                                 | Legitimate interest                                                                           |

Rankings and the home feed are computed automatically (see
[how ranking works](/docs/ranking)); they decide what is shown where, not
anything with legal or similarly significant effects on you.

## How long we keep it

| Data                                   | Kept                                                                       |
| -------------------------------------- | -------------------------------------------------------------------------- |
| Sign-in cookie in progress             | 10 minutes                                                                 |
| Sessions                               | 30 days, or until you sign out                                             |
| Your account and GitHub details        | until you delete your account                                              |
| API tokens (revoked and expired too)   | until you delete your account                                              |
| Stored API answers (`Idempotency-Key`) | 24 hours                                                                   |
| Visitor-count hashes                   | 35 days                                                                    |
| Visitor-count daily values             | 2 days (up to 30 days in backups)                                          |
| IP address hashes (rate limits)        | up to an hour, in memory only                                              |
| Device sign-in requests                | about an hour, with the network they came from                             |
| Views (releases seen)                  | as long as your account and the release exist                              |
| Card activity (home feed)              | 35 days; hourly and daily totals per release after that                    |
| Totals for owners                      | as long as the release or project exists (counts only)                     |
| Votes                                  | as long as your account and the release exist, or until you withdraw them  |
| Follows, saves, hidden projects        | until you undo them or delete your account                                 |
| Projects, releases, media              | until you delete them or your account                                      |
| Reports you filed                      | as long as your account and the release exist                              |
| Appeals                                | as long as your account exists                                             |
| Moderation log                         | kept (who acted, on what, why, with the handles involved), without appeals |
| Feedback                               | until we delete it; on request                                             |
| Server logs                            | 30 days                                                                    |
| Backups                                | 30 days                                                                    |

## Deleting your data

- **A project:** delete it from [your projects](/settings/projects) or the
  API (`DELETE /projects/{slug}`); its releases, screenshots, votes and
  placements are deleted with it, files included.
- **An API token or session:** revoke it on `/settings/tokens`, or sign
  out.
- **Your account:** use **Delete your account** at the bottom of
  [your settings](/settings#delete-account), or
  `DELETE /api/v1/me?confirm={your handle}` with a token made on
  `/settings/tokens`. It's immediate. Your projects, media, avatar, votes,
  views, card activity, follows, saves, hidden projects, reports, appeals,
  tokens and sessions are deleted, and releaseszn's access to your GitHub
  account is cancelled. What stays: feedback you sent (with your handle if
  you sent it with an API token; ask and we delete it), moderation-log
  entries that name you, and totals that no longer point to you. Copies in
  logs and backups disappear as they expire, within 30 days.
- **GitHub access:** you can also revoke releaseszn's access in your GitHub
  settings at any time.

## Your rights

You can ask what we hold about you, ask us to correct it or delete it,
and, if you're in the EU or the UK, to restrict or object to how we use
it, or to receive your data in a portable form. Ask through the
[feedback form](/feedback); we answer within
30 days. If you're not satisfied, you can contact the Office of the Privacy
Commissioner of Canada or, in the EU or the UK, the data protection
authority where you live or work.

## Changes

If this policy changes, the new version is posted here with its date, and
significant changes are announced on the [blog](/blog).
