Last updated: 2026-09-30
SkinArc ("we", "us") is a skin-tracking mobile application operated by Keyao Zhu, an individual (not a company), based in Vancouver, British Columbia, Canada. This policy covers the SkinArc app and the backend services it talks to. Contact: worldtab.app@gmail.com.
| Data | What it is | Where it lives by default |
|---|---|---|
| Face photos | The photos you take in the guided capture flow | On your device only. Never uploaded unless you turn on cross-device sync in Settings → Privacy. |
| Skin scores | Numbers our on-device algorithm computes from each photo (redness, pore, wrinkle, dark-circle, spot, oiliness, skin-tone-evenness, roughness, broken-capillary, dullness, breakout, and blackhead measurements) | On your device; synced to our servers automatically once you create an account, so your history isn't lost if you reinstall |
| Routine-change labels | Free-text notes you add ("started retinol", etc.) | Same as skin scores |
| Account info | Email address, or your Google/Apple account identifier if you sign in that way, plus the nickname and emoji avatar you choose | Our servers (Supabase, see §5) |
| Approximate location | Used only to look up local weather/UV/air-quality for the environmental-correlation feature | Your device's location is rounded to roughly city-level precision (~11km) before it ever leaves your device, then sent directly to our weather-data provider, OpenWeatherMap (see §5) — not routed through our own servers first. We do not store the coordinates ourselves; only the resulting temperature/UV/air-quality/humidity/wind values are saved, and only if you enable this optional feature |
| Purchase data | Subscription status, verified through Apple/Google | Our servers, written only by an automated server process — never directly by the app |
| Feedback you submit | The text of any feedback you send us (Settings → Feedback), and your email address if you provide one for a reply | Relayed by our server and delivered to us by email (Resend, see §5); not stored in our database. Only collected if you actually submit feedback |
| Install attribution data | Collected when the app is opened, for every install, so that installs from our ads can be told apart from the rest: your device's advertising identifier (the Google Advertising ID on Android — on iOS no IDFA is collected, because we never ask for App Tracking Transparency), IP address, device model and OS version, and the fact and time of the install and first open | Sent to AppsFlyer (see §5). Contains none of your photos, skin scores, routine-change labels, or account email |
| Crash and error diagnostics | Stack trace, device model, OS version, app version and language, when the app crashes or hits an error | Sent to Sentry (see §5). No email address or account identifier is attached |
We do not collect: your name (unless you type it into the nickname field), contacts, or photos other than what you capture in-app.
As a guest (without an account), your photos, skin scores, routine-change labels and account details never leave your device. Install attribution data (AppsFlyer) and crash diagnostics (Sentry) are still sent, as described above.
Your face photos and the skin measurements we derive from them may be considered biometric identifiers or biometric information under laws such as the Illinois Biometric Information Privacy Act (BIPA) and similar statutes in Texas, Washington, and other jurisdictions.
| Provider | What they handle | Why |
|---|---|---|
| Supabase | Account auth, database (scores, routine changes, purchase status), relaying feedback to Resend (not stored), and — only if you enable cross-device photo sync — encrypted photo storage | Our backend infrastructure |
| Apple / Google | Subscription payment and receipt data | Required for in-app purchases; we never see your payment card details |
| Anthropic (Claude API) | The text summary of your monthly/weekly report and daily tip — see §6 for exactly what's sent | Generates the VIP report's written narrative and the VIP daily tip |
| Resend | The text of feedback you submit (Settings → Feedback) and your email address if you provide one for a reply; and your account email address, for sign-up confirmation and password-reset emails | Delivers your feedback to us by email, and sends account emails |
| OpenWeatherMap | Your approximate location (rounded to city-level before it leaves your device), sent directly from the app — not via our servers | Looks up local temperature/UV/air-quality for the optional environmental-correlation feature — only called if you enable that feature |
| AppsFlyer | The install attribution data described in §2 — advertising identifier, IP address, device model and OS version, install and first-open events | Tells us which ad campaign an install came from, so paid acquisition can be measured. Receives none of your photos, skin scores, routine-change labels or account email |
| Sentry | Crash reports and error diagnostics — stack trace, device model, OS version, app version and language | Lets us find and fix crashes. Configured with sendDefaultPii: false, so no email address or account identifier is attached |
This matters enough that we want to be precise rather than vague:
SkinArc provides personal tracking and statistical observations about your own data over time. It is not a medical device, does not diagnose any condition, and the "attribution" feature shows correlation in your own logged data, not a clinically validated cause-and-effect finding. Consult a dermatologist for any medical concern. See the in-app disclaimer shown on every attribution result for the exact wording.
Location access is optional and used only to look up local weather/UV/air-quality for the environmental-correlation feature. If you deny or later revoke location permission, that feature simply doesn't show data — nothing else in the app is affected.
SkinArc is not directed at children under 13. We do not knowingly collect data from children under that age.
Photos default to on-device storage. Account credentials are never stored in plaintext — sessions are AES-256 encrypted with the key held in the device's secure hardware storage. Server-side data is protected by row-level security policies scoping every user to their own rows only.
If we make a material change to this policy, we'll show an in-app notice the next time you open SkinArc and update the "Last updated" date above. Continued use of the app after that notice means you accept the revised policy.