Privacy Policy
Effective date: 2026-10-16
Fsnap (https://fsnap.app, the "Service") is a food-link note-taking tool that does not require an account. Your notes are stored on your own device. If anonymous usage stats are enabled on this site (see section 6), some usage events (feature-use counts and a coarse traffic source only — never the URL, name or content of your notes) are sent to the Supabase database we use. This policy describes exactly what data the Service handles.
1. Data stored on your device
- Notes (link URL, title, preview image URL, description, coordinates parsed from the link, tags, creation time) are stored in your browser's IndexedDB (database "fsnap-db").
- Preferences are stored in localStorage: UI language (fsnap_lang), export unlock status (fsnap_export_unlocked), whether you dismissed the location explanation (fsnap_geo_prompt_dismissed), the current app version (fsnap_app_version, used to clear old caches after updates), and, when anonymous usage stats are enabled, an anonymous ID and a few stats flags (fsnap_user_id, fsnap_first_open, fsnap_last_active, fsnap_pwa_installed; see section 6).
- For offline use, a Service Worker caches the site's own code and icon files.
- The developer cannot access any of this data. You can delete notes in the app, or clear the site's browser data / uninstall the app to remove everything.
2. Link previews (Microlink)
When you save a link, the app sends that URL to the third-party service Microlink (api.microlink.io) to fetch its title, preview image and description. Microlink receives the URL and standard connection data such as your IP address, and handles it under its own privacy policy. Please avoid saving links that contain confidential personal information.
When note cards are displayed, preview images load directly from the original site's image servers (e.g. Instagram, Facebook); if there is no preview, a default image from Unsplash (images.unsplash.com) is used. Those sites receive standard connection data.
3. Location (optional)
The Service does not ask for location permission when the page loads. Your current location is obtained only after you use a distance feature, tap "Allow location" and accept the browser permission prompt.
Location is used only on your device to calculate the distance between you and a restaurant (e.g. the "Nearest" tag). It is never sent to the developer or any third party (including anonymous usage stats). Tags generated from the distance at that time are stored with the note on your device. You can revoke location permission at any time in your browser or system settings; other features keep working.
4. Clipboard
The app reads your clipboard only when you tap "Paste from clipboard", and only to fill the link field.
5. Hosting and analytics
The site is hosted on Cloudflare Pages. To deliver and protect the site, Cloudflare processes standard connection data (such as IP address and browser type).
The site may use Cloudflare Web Analytics for aggregated visit statistics (such as page views). Cloudflare Web Analytics does not use cookies and is not used to track individual users.
6. Anonymous usage stats (Supabase)
This feature is active only if a Supabase project was configured when this site was built; otherwise no events are sent and no anonymous ID is created. When active, the app sends the following events to the Supabase database we use (table activity_logs) to understand how features are used (e.g. daily active users, return rate, notes added, platform split):
Current status: anonymous usage stats are ENABLED in this version of the site.
- Every event contains: the event name, an anonymous ID, the platform (iOS / Android / web, derived from the browser user agent) and a timestamp, plus the few extra fields listed below.
- The anonymous ID is a random identifier (e.g. anon_xxxxxxxx) created when the first event is sent and stored in your device's localStorage (fsnap_user_id). It is used to count unique users and returns, and does not contain your name, account, phone number or device serial. fsnap_first_open, fsnap_last_active and fsnap_pwa_installed only prevent duplicate first-open/install events and tell whether 30 minutes have passed since your last use.
- No note content is ever sent: never a note's URL, name, ID, your search text, category or tag names, location or coordinates, clipboard contents, preview images and descriptions, or whom you share with.
- Bot filtering: no events are sent when an automated browser (webdriver, headless) or a known crawler is detected, or before any real interaction (click, touch, key press, scroll); nothing is sent while the site is pre-rendered.
- First open (first_open): recorded once per anonymous ID with a coarse traffic source: if the URL carries the campaign parameters utm_source, utm_medium or utm_campaign, the sanitized values (lowercase letters, digits, underscore and hyphen, at most 32 characters); otherwise only the category of the referring site (google, bing, facebook, instagram, threads, line, ptt, dcard, other, direct) — never the full referrer URL or path.
- Session start (session_start): recorded when the app is opened, or when you return after 30 minutes of inactivity, with whether it ran in a browser or as an installed app (standalone). Used for daily / weekly / monthly active users and return rate.
- App installed (pwa_installed): recorded once when you add the app to your home screen, or the first time it is launched as an installed app.
- Note added (note_create): only how it was added (shared or manual).
- Link opened (go_click): one event when you tap GO, without the URL.
- Note removed as "Bad" (note_dislike): only that a removal happened, without the note ID.
- Feature-use counts: search (search_use, at most once per session, no search text), filter (filter_use, only whether by tag or category), category created (category_create, no name), note edited (note_edit), backup export and import (backup_export, backup_import, only json or csv), share to unlock (share_unlock, without the recipient).
- Events recorded by older versions: before v2.4.0 the app recorded app_install on every open and note_create / view_page / note_dislike when you added or opened notes, including the note's URL, title or note ID. Since v2.4.0 none of this is collected any more and those older event types are no longer sent; data recorded earlier is handled under the retention period below, and you can ask us to delete it.
- Access: anonymous users can only add events and cannot read any records; only a signed-in administrator can read them. Supabase processes standard connection data (such as IP address) under its own privacy policy.
- Retention: 12 months. Stats are not used for advertising, not sold and not shared with third parties.
- Clearing this site's browser data deletes the anonymous ID on your device (a new one is created later). To delete events already sent, please contact us (see section 10).
7. Sharing, export and import
- "Share to unlock" uses your device's native share sheet (or copies to the clipboard when unavailable). The Service does not know whom you share with.
- CSV and JSON export and import are processed entirely on your device; files are not uploaded.
- Opening an invite link (?ref=) only shows a welcome message; the invite is not recorded or uploaded.
8. What the Service does not do
- Regular users do not need to, and cannot, create an account (sign-in exists only for the administrator to read stats).
- No cookies are set, and no ads are currently shown.
- No data is sold or rented.
9. Changes
If this policy changes, we will update this page and its effective date.
10. Contact
For privacy questions, please email: [email protected]