← Back to home

Banora Privacy Policy

The short version

The rest of this policy explains everything in detail, including the small print most apps leave out.


1. Who is responsible (the controller)

The controller under the EU General Data Protection Regulation (GDPR) is:

Ala Eddine Bannour (sole proprietor)
Email: hi@banora.dev

(No data protection officer is appointed; as a small sole proprietorship, Banora is below the thresholds of § 38 BDSG — lawyer to confirm.)

2. Where your data lives

Banora is on-device-first. Your thoughts, their topics (categories), and rooms are stored on your device. The only cloud location that ever holds your full note content and topic names is your own private iCloud (Apple CloudKit) — governed by your agreement with Apple, and not accessible to us. (Forensic audit §1, §2.5, §3.)

iCloud Backup is ON by default. You can turn it off anytime in Settings; turning it off removes the iCloud copy (the change applies after you restart the app). The AI toggle and the iCloud toggle are independent: turning AI off keeps thoughts on device, but iCloud Backup still mirrors them to your private iCloud unless you also turn it off — the app tells you this in Settings.

Our own backend (Supabase) holds no content. It stores account, consent, and billing-related metadata only — never your notes, topic names, embeddings, audio, or corrections (§2.2, §5: the legacy content tables were dropped and the deployed relay functions are stateless).

The share extension makes zero network calls — it saves what you share locally, and the main app processes it later (§2.5, ShareViewController.swift).

3. AI sorting (OpenAI)

3.1 What happens, step by step

Everything except the final naming/classification step happens on your device: transcription, semantic embeddings, and the clustering that groups thoughts into rooms are all computed locally and never leave the device (§3, §6).

When AI sorting is on and you have given consent, exactly two kinds of calls go out, both via our stateless relay (device → Supabase edge function → OpenAI); the relay stores nothing (§2.1, §6):

  1. Classification — the text of the new thought, your topic names (as the list of options), up to a few short excerpts (≤ ~500 characters) of your other filed thoughts used as examples, and short correction snippets (see 3.4).
  2. Room naming — only the cluster member labels (titles / short snippets your device already holds). The grouping itself was computed on-device; only the labels needed for a name are sent.

3.2 Anonymous, not stored by us — but retained briefly by OpenAI

3.3 Turning AI off later does not un-send the past — and old thoughts can still be sent later

This is subtle and we want you to understand it (§4.1, disclosed by founder ruling):

The in-app consent screen states this same behavior before you decide.

3.4 Corrections as examples

When you move a thought to a different topic, the app may keep a short snippet of that correction on your device and send it — anonymously, alongside a later classification request — as an example that improves future sorting (§2.1, §4).

3.5 Your choice, and how it is enforced

AI sorting requires your explicit consent on first run, and can be switched off anytime in Settings (AI categorization toggle). Content-bearing calls run only when both the consent flag and the toggle are on — enforced in code on every capture path, including the share extension and Siri (ConsentStore.swift:20-24). Declining changes nothing else: capture, transcription, and storage keep working; thoughts simply stay unsorted until you opt in.

4. What our servers store (Supabase)

Production holds exactly six tables (§2.2), none of which contain note content:

Data What it is Kept how long
profiles Your account: user ID, email (if shared via Apple), consent choices with timestamps, subscription status, lifetime recording count, onboarding flag Until you delete your account
usage_events Metering records for free recordings and billing idempotency: timestamps and entry IDs only — no content Auto-deleted after 180 days; deleted immediately with your account
v4_rate_events Rate-limit entries (timestamps per user) used to prevent abuse; only the last 24 hours are ever consulted Auto-deleted after 90 days; deleted immediately with your account
revenuecat_events Sanitized purchase records (event type, product ID, amount, currency — no content) 10 years — German tax law (§ 147 AO) requires this; these records also survive account deletion
client_events Product telemetry. Collection is permanently off — the toggle was removed and no user-facing path to enable it exists Any rows auto-deleted after 90 days
paywall_config Global app configuration — contains no personal data n/a

5. Subscriptions (Apple and RevenueCat)

Payments are processed by Apple through your Apple ID; we never receive your payment card details (§2.3). RevenueCat manages subscription state for us and receives your subscription ID (which equals your Banora user ID) and purchase/subscription data.

Three things worth knowing plainly:

6. Sign in with Apple, and the one-Apple-ID model

Signing in sends Apple's identity token and a one-time nonce — nothing else. We never request your name; your email is present only if you chose to share it with us via Apple (§2.4).

Banora assumes one Apple ID = one account = one person. Signing in with the same Apple ID always returns the same Banora account (AuthService.swift:78-81), and your iCloud backup lives in the iCloud of the device's Apple ID. If you share an Apple ID with someone, they can reach your account and your iCloud copy; Banora is not designed for shared Apple IDs.

7. Sync between your devices — honest edge cases

If iCloud Backup is on, your devices sync through your private iCloud. Sync is "last write wins," per whole record (accepted product policy, hardening ruling T11): if you edit the same thought on two devices, the edit with the newer timestamp replaces the other one entirely — the two are not merged, and the older edit is lost.

8. How long we keep things (retention)

Where What How long
Your device Thoughts, topics, rooms, embeddings, corrections, compose drafts Until you delete them or delete the app/account
Your device Audio recordings Deleted immediately after on-device transcription (§3)
Your private iCloud Mirror of thoughts/topics/rooms Until you turn Backup off (removes the copy), delete the data, or delete your account
OpenAI Text submitted for sorting/naming Not stored by the relay; retained by OpenAI up to ~30 days for abuse monitoring, then deleted; not used for training (§2.1)
Supabase client_events Telemetry (collection permanently off) 90 days (scheduled server job)
Supabase usage_events Metering records 180 days (scheduled server job); deleted immediately with your account
Supabase v4_rate_events Rate-limit entries 90 days (scheduled server job); deleted immediately with your account. Only the last 24 hours are ever consulted
Supabase revenuecat_events Sanitized purchase records 10 years (§ 147 AO, German tax law) — survive account deletion
RevenueCat / Apple Subscription and payment records Per their own policies as processors/independent controllers (see §10)

9. Deleting your account, exporting your data

9.1 Deletion — in the app, today

Profile → Delete Account & Data (two confirmations). What happens:

9.2 Export — in the app, today

Profile → export. You receive a JSON file built from your device (it works offline), containing your profile metadata, topics, entries (transcripts, titles, timestamps), rooms, corrections, and nudge dismissals. The file itself lists what is included and what is excluded, with reasons. Excluded, and why (AccountService.swift:295-320):

9.3 Signing out

Signing out keeps everything on the device: "Your thoughts stay on this device — and in your iCloud backup if it's on. You can sign back in anytime." (the app's own sign-out dialog). Unsent compose drafts are also kept — they are stored per-account on the device, survive sign-out, and reappear when the same account signs back in (PreferenceKeys.swift:42). Account deletion, by contrast, wipes them with everything else.

10. Who receives data (recipients and processors)

Recipient Role What they get Where
OpenAI (OpenAI, L.L.C. / OpenAI Ireland Ltd — lawyer to confirm contracting entity) Processor for AI sorting Thought text, topic names, example excerpts, correction snippets — no identifier USA (see §11)
Supabase Processor — backend hosting Account/consent/billing metadata, metering, rate-limit records — no content Frankfurt, Germany (EU)
RevenueCat, Inc. Processor — subscription management User ID, purchase/subscription data USA (see §11)
Apple (Apple Inc. / Apple Distribution International Ltd) Sign in with Apple; App Store billing; CloudKit is your own iCloud under your Apple agreement Identity token + nonce; purchase processing; your iCloud mirror Per Apple's terms

We do not sell personal data, and no third party receives it for advertising or analytics. There are no third-party analytics, advertising, or crash-reporting SDKs in the app (§1, §2 — verified; the app's privacy manifest declares tracking = false).

11. International transfers

OpenAI and RevenueCat process data in the United States. Transfers rest on an adequacy decision (EU–US Data Privacy Framework, where the recipient is certified) and/or EU Standard Contractual Clauses. Note that what reaches OpenAI carries no identifier (§2.1), which materially limits transfer risk. Apple processes data under your own agreement with Apple. Our backend involves no international transfer: it is hosted on Supabase in Frankfurt, Germany (EU).

Processing Legal basis
Account, sync backend, metering, subscription state Art. 6(1)(b) — performance of the contract with you
AI sorting via OpenAI (incl. examples and correction snippets) Art. 6(1)(a) — your explicit consent, revocable anytime in Settings
Rate limiting and abuse prevention Art. 6(1)(f) — legitimate interest in protecting the service
Retaining sanitized purchase records for 10 years Art. 6(1)(c) — legal obligation (§ 147 AO)
Consent records (proof of your choices, Art. 7(1)) Art. 6(1)(c) — legal obligation

Withdrawing consent (turning AI sorting off) is as easy as giving it and does not affect the lawfulness of prior processing. Note the honest limitation in §3.3 about previously filed thoughts becoming examples if you later turn AI back on.

13. Your rights

You have the right of access (Art. 15 — the in-app export covers this in practice), rectification (Art. 16 — edit your thoughts directly), erasure (Art. 17 — in-app account deletion, §9.1), restriction (Art. 18), data portability (Art. 20 — the export is machine-readable JSON), and objection (Art. 21, in particular against the legitimate-interest processing in §12). Contact us at hi@banora.dev for anything the in-app tools don't cover.

Complaint: you may lodge a complaint with a data protection supervisory authority (Art. 77 GDPR) — in Germany, the authority of your federal state or ours — or the authority where you live or work.

14. Children

Banora is not directed at children. AI sorting relies on consent; in Germany, consent in the context of information-society services requires a minimum age of 16 (Art. 8 GDPR).

15. Changes to this policy

We will update this policy when the app's data handling changes and indicate the new effective date. Material changes to what is sent off-device will additionally be surfaced in the app before they apply.