From 006c3af165f5a6426ae5ec974a46bc0b846c2157 Mon Sep 17 00:00:00 2001 From: Pushp Date: Tue, 27 Oct 2026 04:16:08 +0530 Subject: [PATCH 1/3] docs(privacy): Reporting & Safety section (reports, optional chat copy, access, prioritisation, actions, appeals, retention); conduct labels in Admissions Assist --- src/components/legal/Privacy.tsx | 139 +++++++++++++++++++++++++++---- 1 file changed, 125 insertions(+), 14 deletions(-) diff --git a/src/components/legal/Privacy.tsx b/src/components/legal/Privacy.tsx index 70c3930..3b87b6e 100644 --- a/src/components/legal/Privacy.tsx +++ b/src/components/legal/Privacy.tsx @@ -9,6 +9,8 @@ import { ROUTE_SEO } from '../../config/seo-routes'; /** Anchor the apply-with-video consent checkbox links to (onehook.club/privacy#admissions-assist). */ export const ADMISSIONS_ASSIST_ANCHOR = 'admissions-assist'; +/** Linked from the in-app report flow and docs/MODERATION.md (`/privacy#reporting-safety`). */ +export const REPORTING_SAFETY_ANCHOR = 'reporting-safety'; export function Privacy() { const location = useLocation(); @@ -41,7 +43,7 @@ export function Privacy() { Privacy Policy

- Last updated: October 23, 2026 + Last updated: October 26, 2026
Effective from: May 23, 2026

@@ -248,7 +250,10 @@ export function Privacy() { Admissions Assist is a model that learns from our team’s past review decisions to help reviewers work through applications. It is trained on transcript text, the quality measurements above, reviewers’ decisions, and whether an - invite was later used. It is not trained on the images in your video. A person on + invite was later used. If you join, it also learns from simple conduct outcomes + from your first 90 days: whether several members blocked you and whether a report + about you was upheld by our safety team (see section 5). It never sees the content + of reports or chats. It is not trained on the images in your video. A person on our team makes every decision; Admissions Assist does not approve or reject anyone on its own.

@@ -316,9 +321,108 @@ export function Privacy() { + {/* Reporting & Safety (linked from the in-app report flow) */} +
+

5. Reporting & Safety

+

+ You can report another member from a chat or their profile. This section explains what + a report contains, the optional chat copy you can attach, who sees it, what can happen + as a result, and how long we keep it. +

+ +
+
+

What a report contains

+

+ The member you reported, the reason you chose, any description you write, the + conversation it relates to, the time, and whether you also blocked them. A report is + reviewed by people on our safety team. +

+
+
+

Attaching a copy of your chat (optional)

+

+ Chats on OneHook are end-to-end encrypted, so we cannot read them. When you report + someone from a chat, you can choose to share a copy with our safety team by ticking a + box that is never pre-ticked; we only receive it if you tick it, and your report is + handled the same way if you don’t. Your device decrypts and sends only the last + 200 messages or the last 30 days of that one conversation, whichever is smaller: + each message’s text, time and whether you or the other member sent it. Photos, + videos, voice notes and files are not included. You can preview exactly what will be + sent before you submit. The copy is encrypted in transit and in storage, and a + fingerprint of it lets us detect any change. +

+
+
+

Who can see it

+

+ Only authorised members of our safety team. Reading an attached chat requires a + separate permission from handling reports, and every time someone opens one it is + recorded. We do not tell the reported member who reported them or that a chat was + shared. +

+
+
+

How reports are prioritised

+

+ We use automated scoring to decide which reports to look at first, based on the + seriousness of the reason, how many different members reported the same person and + how recently, and how often a reporter’s earlier reports were upheld. This only + sets the order of the queue. A person on our team makes every decision. +

+
+
+

What can happen

+

+ Depending on what we find, we may dismiss the report, warn the member, limit their + account, suspend it for a period, or ban it. A ban needs the agreement of two members + of our team. A member whose account is limited, suspended or banned can appeal, and + the appeal is decided by someone who did not take the original decision. +

+
+
+

Reports about self-harm and about minors

+

+ If you tell us you are worried someone may harm themselves, we treat it as a request + for support, not punishment, and show you support resources such as Tele-MANAS + (14416, India, 24x7). Reports that someone may be under 18 go straight to our + safety lead, and you cannot attach a chat to them. +

+
+
+

How long we keep it

+
    +
  • + An attached chat is deleted 180 days after the case is closed, unless we must keep + it longer because of a legal obligation or legal proceedings. +
  • +
  • + If you delete your account while a case you reported is still open, we keep the + chat you chose to share until the case is resolved, then delete it on the same + schedule, so that a safety case about someone else can be completed. +
  • +
  • + Our record of a case keeps the reason, dates and outcome with pseudonymous + identifiers, so we can recognise repeated abuse. +
  • +
+
+
+

Why we can do this

+

+ We process reports and attached chats to keep members safe and to meet our legal + obligations. You can ask for the information we hold about you, but we will not + reveal who reported you or share an attached chat where that could put the person + who reported you at risk. We may share information with law enforcement where the + law requires it or to prevent imminent harm. +

+
+
+
+ {/* Data Security */}
-

5. Data Security & Encryption

+

6. Data Security & Encryption

End-to-End Encryption (E2EE)

@@ -364,7 +468,7 @@ export function Privacy() { {/* Third-Party Sharing */}
-

6. We Do Not Share Your Data

+

7. We Do Not Share Your Data

❌ OneHook Does NOT:

    @@ -388,7 +492,7 @@ export function Privacy() {
  • Safety & Security: To prevent fraud, abuse, or to protect user - safety + safety, including with law enforcement to prevent imminent harm (see section 5)
  • Service Providers: Only with vendors who sign strict data @@ -402,7 +506,7 @@ export function Privacy() { {/* International Transfers */}
    -

    7. Data International Transfers

    +

    8. Data International Transfers

    OneHook operates primarily in India. If you are outside India, your data will be transferred to and stored inside India. By using OneHook, you @@ -418,7 +522,7 @@ export function Privacy() { {/* Data Retention */}

    -

    8. Data Retention

    +

    9. Data Retention

    Active Accounts: @@ -437,6 +541,13 @@ export function Privacy() { days after an approved applicant uses their invite (see section 4)

    +
    + Reports and Attached Chats: +

    + A chat attached to a report is deleted 180 days after the case is closed, including + when the reporter has deleted their account (see section 5) +

    +
    Backups:

    @@ -455,7 +566,7 @@ export function Privacy() { {/* Your Rights */}

    -

    9. Your Privacy Rights

    +

    10. Your Privacy Rights

    You have the following rights regarding your personal data:

    @@ -492,7 +603,7 @@ export function Privacy() { {/* Compliance */}
    -

    10. Regulatory Compliance

    +

    11. Regulatory Compliance

    GDPR (EU General Data Protection Regulation)

    @@ -534,7 +645,7 @@ export function Privacy() { {/* Security Incident Response */}
    -

    11. Security Incident Response

    +

    12. Security Incident Response

    In the event of a data breach, we will:

    • Notify affected users without undue delay (as required by law)
    • @@ -547,7 +658,7 @@ export function Privacy() { {/* Third-Party Services */}
      -

      12. Third-Party Service Providers

      +

      13. Third-Party Service Providers

      We use limited third-party services only where necessary. All processors sign Data Processing Agreements (DPAs) ensuring the same level of data protection: @@ -576,7 +687,7 @@ export function Privacy() { {/* Contact */}

      -

      13. Contact Us

      +

      14. Contact Us

      Privacy Inquiries: @@ -615,7 +726,7 @@ export function Privacy() { {/* Changes to Policy */}
      -

      14. Changes to This Policy

      +

      15. Changes to This Policy

      We may update this Privacy Policy from time to time. We will notify you of material changes by email or through the platform. Your continued use of OneHook after changes @@ -626,7 +737,7 @@ export function Privacy() { {/* Footer */}

      - © 2026 OneHook. Your privacy is our priority. Last updated October 23, 2026. + © 2026 OneHook. Your privacy is our priority. Last updated October 26, 2026.

      From ae715b9999be132084837c2c46c255446e0b41cd Mon Sep 17 00:00:00 2001 From: Pushp Date: Tue, 27 Oct 2026 05:15:41 +0530 Subject: [PATCH 2/3] docs(privacy): reporter reliability measure, account standing, case-record retention (365 days), full prioritisation factors --- src/components/legal/Privacy.tsx | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/src/components/legal/Privacy.tsx b/src/components/legal/Privacy.tsx index 3b87b6e..93eed90 100644 --- a/src/components/legal/Privacy.tsx +++ b/src/components/legal/Privacy.tsx @@ -366,9 +366,12 @@ export function Privacy() {

      How reports are prioritised

      We use automated scoring to decide which reports to look at first, based on the - seriousness of the reason, how many different members reported the same person and - how recently, and how often a reporter’s earlier reports were upheld. This only - sets the order of the queue. A person on our team makes every decision. + seriousness of the reason, how many different members reported or blocked the same + person and how recently, how new the reported account is, and how reliable the + reporter’s earlier reports proved to be. For that last point we keep a + pseudonymous reliability measure for each reporter, which is deleted after a year + without new reports. This only sets the order of the queue. A person on our team + makes every decision.

      @@ -377,7 +380,9 @@ export function Privacy() { Depending on what we find, we may dismiss the report, warn the member, limit their account, suspend it for a period, or ban it. A ban needs the agreement of two members of our team. A member whose account is limited, suspended or banned can appeal, and - the appeal is decided by someone who did not take the original decision. + the appeal is decided by someone who did not take the original decision. We record + each account’s standing (active, limited, suspended or banned) and use it to + control signing in and who the account is shown to.

      @@ -403,7 +408,8 @@ export function Privacy() {
    • Our record of a case keeps the reason, dates and outcome with pseudonymous - identifiers, so we can recognise repeated abuse. + identifiers, so we can recognise repeated abuse. It is deleted 365 days after the + case is closed, unless the law requires us to keep it longer.
    From 4c18b3d9904469210c113b42dcdab661f64d85ee Mon Sep 17 00:00:00 2001 From: Pushp Date: Tue, 27 Oct 2026 05:16:09 +0530 Subject: [PATCH 3/3] docs(privacy): exact reliability-measure retention wording --- src/components/legal/Privacy.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/legal/Privacy.tsx b/src/components/legal/Privacy.tsx index 93eed90..29e216e 100644 --- a/src/components/legal/Privacy.tsx +++ b/src/components/legal/Privacy.tsx @@ -369,8 +369,8 @@ export function Privacy() { seriousness of the reason, how many different members reported or blocked the same person and how recently, how new the reported account is, and how reliable the reporter’s earlier reports proved to be. For that last point we keep a - pseudonymous reliability measure for each reporter, which is deleted after a year - without new reports. This only sets the order of the queue. A person on our team + pseudonymous reliability measure for each reporter, which is deleted a year after it + last changed. This only sets the order of the queue. A person on our team makes every decision.