Last Updated: April 27, 2026 Audience: the operator (Cankat) and any future contributor. Status: internal engineering notes, not a published legal document.
This file is the developer-side companion to PRIVACY_POLICY.md and TERMS_OF_SERVICE.md. It captures the actions that have to be true on the codebase and the cloud project for the published legal claims to hold up. Treat it as a living checklist.
These need to be closed before pointing the App Store / Play Store at the live policy URLs.
[GOVERNING LAW JURISDICTION]
placeholder). Default options to discuss with counsel:
- Country of residence of the operator.
- England and Wales (broadly enforceable, common in app ToS).
- Delaware, USA (common, but only sensible if there is a US
legal entity).cankatsarac@gmail.com, cankatsarac@gmail.com,
cankatsarac@gmail.com). If the dotsense.app domain is not
yet owned, either register it or replace these with addresses
on a domain you do own. Apple and Google will reject privacy
contacts that bounce.expo.ios.supportsTablet = true in app.json and
include the iPad screenshots; if no, remove the iPad
screenshots to avoid review confusion.NSUserTrackingUsageDescription in
app.json. As of this writing the project does not include
expo-tracking-transparency and does not call the ATT API.
If no SDK is going to request the ATT prompt, remove the
key — leaving it in implies a tracking intent that does not
match the privacy policy. If a future SDK needs ATT, add the
key back at that time and update the privacy policy.What is true today and what to keep true.
request.auth.uid == userId). Confirmed in
expo/firestore.rules.events subcollection is append-only (update: false)
and only the owner can read, create, and delete its entries.firebase emulators:exec
--only firestore "<rules-test-runner>"). At minimum cover:
- User A cannot read User B’s users/{B} document.
- User A cannot write to User B’s events.
- An anonymous request fails on every path.
- Account-create requires request.resource.data.uid == userId.
Run the suite in CI on every PR that touches firestore.rules.events and any future
ones). Firestore does not cascade by itself, and the policy
promises a 30-day deletion window. The client-side delete
removes the parent document but can leave subcollections
orphaned.onUserDelete) is the cleanest
path; pick one and document it here once installed.PrivacyInfo.xcprivacy): the app.json
already includes NSPrivacyAccessedAPITypes for UserDefaults,
SystemBootTime, DiskSpace, and FileTimestamp. Verify each one
is actually used by a dependency (Expo lists them
automatically) and that the reason codes are still the ones
Apple expects. Re-check with npx expo-doctor after every
Expo SDK upgrade.console.log that touches the user object behind a __DEV__
check, or strip them with the Babel react-native-paper-redact
pattern (a simple Babel plugin that drops console.* in prod).eas secret:create) for any build-time
secrets, never commit .env* files. Add .env* to
.gitignore if not already.npx expo-doctor and bun audit (or npm audit) on every
release branch.expo/ package.json. Critical CVEs in transitive
dependencies are the most common quiet security failure on
Expo apps.deleteUser(). Surface a clear “sign in again to confirm”
step rather than swallowing the error.These are the labels that must match the policy.
For the launch build, declare:
Mirror the above. Pay attention to the encryption-in-transit question (yes), the data-deletion request mechanism question (yes, in-app + email), and the third-party-sharing question (no advertising, no analytics-vendor sharing, only Google as the backend operator).
incidents.md, not in this
repo) with date, severity, scope, mitigation, and root cause
for any security incident that affects user data.cankatsarac@gmail.com mailbox and monitor it.
Add a /.well-known/security.txt on the web property when
one exists.npx expo-doctor and audit dependencies.Apple and Google reject for these often:
NSUserTrackingUsageDescription without ever calling
the ATT API, or calls the ATT API but does not declare tracking
in the privacy form.If the URL pattern is https://<github-user>.github.io/Project-s-Privacy-Policies-and-ToC/dotsense/PRIVACY_POLICY,
test in an incognito window from a different network before pasting
it into App Store Connect.