Last updated: 16 August 2026
This is the plain-language version, and it is also the whole version. Shelf is a small app; there is not much to disclose, and what there is appears below without hedging.
Your email address. Used only to sign you in. There is no password to lose — you either type a 6-digit code sent to that address, or sign in with Google.
If you sign in with Google, Google tells Shelf your email address, your name, and your profile picture URL. Shelf reads the email address; the rest is stored by Supabase's auth service as part of your account record and is not displayed or used anywhere in the app. Shelf never sees your Google password and cannot access anything else in your Google account.
The reels you share. When you share a reel to Shelf, the app stores:
Diagnostic errors. Failures are recorded in a rolling log of the last 50 entries. This log stays on your device and is never uploaded. You can read it at Settings → Diagnostics and clear it at any time.
Supabase (Postgres database, authentication, and server functions) stores everything listed above. Row Level Security is enforced on every table, meaning the database itself rejects any attempt to read your rows from another account — this is not merely enforced by the app.
Google, if you choose to sign in with it, is told that you are signing in to this app. It is not told anything about the reels you save.
Model providers receive the caption and creator handle of a shared item in order to categorize it — and only when the free hashtag rules built into the app cannot categorize it on their own, which handles many items without any external call at all. Where the item is a video that can be read, they also receive its audio (to transcribe what is said) and the video itself (to describe what appears on screen). When you use the in-app chat, they receive your question along with that same text.
Whichever provider is configured receives no email address, no user ID and nothing else about you.
This deployment uses Groq (groq.com/privacy-policy) for transcription and classification and OpenRouter (openrouter.ai/privacy) for reading video frames. The app also supports Anthropic (anthropic.com/legal/privacy). None of them train models on API inputs. If you are reading this as a published policy for a build you did not configure, check which providers that build actually uses.
Instagram receives an ordinary web request for the public page of the reel you shared, in order to read its caption. No account is used and no login occurs.
That is the complete list. Nothing is sold, rented, or shared with anyone else.
To work out what a video is about, Shelf's server fetches it once from the public link, transcribes what is said in it, and asks a model to describe what appears on screen. The video itself is discarded within that request — what is kept is the resulting text, on your row, and you can see it and delete it.
Shelf does not store, copy or re-host video. It stores a link and opens the original app for playback, where the video remains subject to that service's terms and the creator's rights.
Your data is kept until you delete it.
To request account deletion, email the address below. There is no dark pattern here; the request will be honoured.
Shelf is not directed at children under 13 and does not knowingly collect their data.
Data is encrypted in transit (HTTPS) and at rest by Supabase. Access is restricted to your own account by Row Level Security.
The one thing worth being clear about: the app bundle contains a Supabase "anonymous" key, as every Supabase client app does. That key is safe because Row Level Security is enforced on every table — it grants no access to anyone else's data. No secret that could read the whole database, and no Anthropic API key, is ever shipped inside the app.
If this policy changes, the date at the top changes and the new version is published in the app's repository before it takes effect.