Legal

Privacy Policy

Plain-English summary of what ShotSelect does and does not do with your data. Written by photographers, for photographers — but it's still the document we'd rely on in a dispute.

Last updated · 8 May 2026 Version · 1.0 Applies to · ShotSelect 1.3 and later
Short version. On the free tier, your photos never leave your Mac. Future paid features (e.g. hosted client review) that involve uploading content will be opt-in per use, clearly marked, and documented before they ship. We don't sell anything to anyone. We collect anonymous diagnostics by default (app version, OS version, launch count) so we can fix crashes and prioritize work — you can turn it off in Settings → Privacy. There are no third-party trackers, no ads, no analytics SDKs.

1. Who we are

ShotSelect ("we", "us") is a desktop application for macOS that helps photographers cull and rate large shoots locally. The app is built and operated by the developer behind shotselect.app. Contact: hello@shotselect.app.

2. Photos and image content

On the free tier, your photos stay on your device. ShotSelect reads images from folders you open and writes XMP sidecar files alongside them. We do not upload your photos, thumbnails, EXIF data, derivatives, embeddings, or face data to any server under the free tier.

3. License keys

For paid tiers (when offered), the license server stores only what's needed to authorize the seat:

License validation is signed locally; the app does not phone home on every launch.

4. Anonymous diagnostics (Tier A)

By default, ShotSelect sends a small, anonymous session ping at startup. This helps us know whether updates are installing, which macOS versions to support, and how many people are using the app — without identifying anyone.

Each ping contains exactly five fields:

What we do not send in Tier A:

You can preview the exact JSON that would be sent in Settings → Privacy → "See exactly what gets sent". You can turn diagnostics off at any time and we'll stop sending and delete the local device_id.

5. Usage data (Tier B) — opt-in, off by default

If you turn this on, ShotSelect sends counts of which features you use (e.g. how many photos you culled, how many times you opened the search panel, when a session is removed from history or that removal is undone). Each event carries the same five Tier A fields plus a fixed event name from a short whitelist and bucketed values (e.g. <100, 100-1k) — never raw counts that could uniquely identify a session, and never folder paths or filenames.

The whitelist and the buckets are enforced server-side; arbitrary event names or raw values are dropped at intake. This is off by default. Turn it on in Settings → Privacy if you'd like to help us prioritize features.

The bucketed dimensions we collect (no raw numbers ever leave your Mac):

Examples of events on the whitelist (the full list lives at worker-telemetry/telemetry.js in the source repo and is enforced at the server):

6. Crash reports (Tier C) — opt-in

If a crash occurs and you choose to send a report, ShotSelect submits a scrubbed stack trace, the app version, OS version, and architecture. Before sending we redact /Users/<name>/, /Volumes/<name>/, and email addresses. The server runs the same scrubbing again as defense-in-depth.

You choose how this works: Always send, Ask each time (default), or Never send.

7. Auto-updates

The app checks our update feed periodically. The check looks like a regular HTTPS request for a small static file hosted on Cloudflare R2 — there is no body identifying you, your license, or your install. Cloudflare's standard request logs (IP, timestamp, requested file) are subject to Cloudflare's privacy policy and we do not retain or correlate them.

8. Where data goes

Diagnostics, opt-in usage events, and opt-in crash reports are sent to a Cloudflare Worker we operate, and stored in a Cloudflare D1 database in our account. We do not share this data with any third party. We do not use any third-party analytics, advertising, or tracking SDK in the app or on this website.

In-app feedback messages, optional reply emails, and optional user-selected attachments are sent to a Cloudflare Pages Function and stored in our Cloudflare D1 feedback inbox. They are used only to debug issues, understand requests, and reply when you provide an email.

9. Retention

10. Your rights

Because Tier A is anonymous (we have no map from device_id to you), there is nothing to export or delete on a per-person basis — turning the toggle off is the deletion. For license records, email hello@shotselect.app with the address you purchased with and we'll respond within 30 days.

If you're in the EU/UK or California, you have rights under GDPR / UK GDPR / CCPA respectively. We honor those rights regardless of where you are.

11. Children

ShotSelect is built for working photographers and is not directed at children under 13 (or 16 in the EU). We do not knowingly collect personal data from children.

12. Future paid tier

We may introduce paid features in the future (for example, hosted client review links). Any feature that involves uploading content off-device will be clearly marked, opt-in per use, and documented here before it ships. The free tier and its workflow will not be moved to a paid tier retroactively. The on-device guarantee in section 2 applies to the free tier permanently.

13. Changes

We'll update this page when something material changes, increment the version number, and surface an in-app notice on next launch. The change log below records every revision.

14. Contact

Questions, complaints, takedown requests, or privacy concerns: hello@shotselect.app.

Change log

v1.0 8 May 2026 · Initial publication. Documents Tier A diagnostics, B/C opt-in plumbing, license-key handling, on-device AI guarantee.

See also: Terms of Use