Skip to content

ScrubChat Privacy Policy

Version: privacy-2026-08-01

Effective: 1 August 2026

Applies to: everyone who uses ScrubChat

This is a template, not legal advice. It is written to be accurate to what
the code in this repository actually does, and to align with the Digital
Personal Data Protection Act 2023 (India) and the UK/EU GDPR. Before you
operate this platform commercially, have a qualified lawyer in your
jurisdiction review it and adapt it. Placeholders in [SQUARE BRACKETS] must
be filled in.

1. The short version

  • We collect the minimum we need to run a social platform safely.
  • We do not sell your data. We do not run ads. We never will under this policy.
  • We never store your date of birth, your raw IP address, or your password.
  • Your posts are scanned for patient identifiers before they publish. That is the

entire point of this platform.

  • Direct messages are scanned too, but only for patient data and illegal

content — never for rudeness. Section 6 explains exactly what that means.

  • You can download everything we hold, or delete all of it, from Settings. Both

work immediately, without emailing anyone.

If any part of this document contradicts that summary, the detailed section wins

and we have made a drafting error. Please tell us.


2. Who we are

Data Fiduciary / Controller: [LEGAL ENTITY NAME], [REGISTERED ADDRESS]

Data Protection Officer: dpo@scrubchat.app

Grievance Officer (DPDP Act s.13): grievance@scrubchat.app

Response commitment: 30 days, and usually far sooner.


3. Who may use ScrubChat

ScrubChat is for people aged 18 and over who are medical students, interns,

residents, doctors or allied health professionals.

We do not knowingly permit accounts for anyone under 18. This is not a

convenience choice: the platform hosts clinical images, discussion of death and

gore, and frank talk about burnout and mental health. It is not an appropriate

environment for a minor, and processing a minor's data at this sensitivity level

under the DPDP Act would require verifiable parental consent that we are not

equipped to obtain.

If we learn that an account belongs to someone under 18, we close it and delete

the data.


4. What we collect, and why

4.1 You give us this directly

Data Why Legal basis
Email address Sign-in, security alerts, account recovery Contract
Handle and display name Public identity on the platform Contract
Password Sign-in. Stored only as an Argon2id hash — irreversible, never readable by us Contract
Year of birth To confirm you are 18+ Legal obligation
Bio, specialty, college, study year Your public profile. All optional Consent
Posts, comments, messages, media The service itself Contract
Verification documents To confirm you are who you say you are Consent

We do not store your date of birth. We ask for the year, derive an "is 18 or

over" flag, and keep the year only. A full DOB is one of the strongest

re-identification keys that exists and we have no use for it.

4.2 We generate this about you

Data Why
Trust score (0–100) Adjusts how strictly automated moderation treats you. Section 6
Strike record Enforcement history. Strikes expire automatically
Moderation decisions Every automated and human decision, kept so you can appeal it
Consent ledger An immutable record of what you agreed to and when — required to prove valid consent
Session records So you can see and end your active sign-ins

4.3 We collect this automatically

Data What we actually store
IP address Never stored in raw form. We store a salted SHA-256 hash with a daily-rotating salt. This lets us correlate abuse within a 24-hour window and nothing beyond it
User agent Truncated browser string, for the session list in your settings
Timestamps When content was created and when you were last active

4.4 We do NOT collect

  • Your precise location. We never request it and the app has no code to.
  • Contacts, calendar or device identifiers.
  • Advertising or cross-site tracking identifiers. There are no third-party

trackers, pixels or advertising SDKs in this codebase.

  • Any special-category health data about you — your specialty is a

professional interest, not a health record.


5. Patient data — the rule that matters most

You must never post identifiable patient information to ScrubChat.

This is a Community Guidelines rule, a Terms of Service term, and a technical

control all at once. Our systems actively scan for and block:

  • Names, initials in combination with other identifiers
  • Hospital, record, UHID, IP/OP, admission, lab or accession numbers
  • Government IDs (Aadhaar, PAN, SSN, NHS number), insurance and scheme numbers
  • Dates of birth, admission, discharge or procedure
  • Phone numbers, email addresses, postal addresses, postcodes
  • Device and implant serial numbers
  • Face photographs and other biometric identifiers
  • Image metadata, including GPS coordinates — stripped before upload completes

Where ScrubChat sits legally. We are not a healthcare provider and we are not

a HIPAA-covered entity or business associate. We do not process patient data on

any hospital's behalf. If you post patient data here, you have disclosed it — we

have not. Our design goal is to make that as hard as possible to do by accident,

and we treat any such disclosure as a serious violation regardless of intent.

Our controls are strong but not perfect. They do not transfer your professional

and legal obligations to us.


6. Automated moderation — exactly what happens

You have a right to know how automated decisions about you are made

(GDPR Art. 15(1)(h) and Art. 22; DPDP Act s.11). Here it is in full.

6.1 What is scanned

Surface Scanned? What acts on it
Posts, comments, case threads Yes All categories
Bio, display name, handle Yes All categories
Community names and descriptions Yes All categories
Image alt text and text burned into images (OCR) Yes All categories
Direct messages Yes, but narrowly Only patient data, illegal content, self-harm encouragement and hate speech

On direct messages specifically. We scan them. We are telling you plainly

rather than burying it, because a moderation behaviour you do not know about is a

betrayal whatever it catches. Two limits apply:

  • Only the categories listed above act. An argument between two people who chose

to talk to each other is not our business.

  • When we detect an identifier, we redact it and deliver the message rather

than blocking it. The conversation continues; the leak does not.

We do not read your messages. No human sees a message unless it is reported, or

unless an automated hard-block is appealed.

6.2 How a decision is made

  • Normalisation. Text is canonicalised to defeat evasion (homoglyphs,

zero-width characters, leetspeak, separator injection).

  • Rules. Deterministic detectors for patient data, abuse, hate speech,

illegal activity, misinformation, spam and self-harm.

  • Model adjudication. Grey-zone content only, and the text sent has already

had identifiers removed. The model can *clear* content freely; it can escalate

only as far as "hold for a human", never straight to removal.

  • Scoring. Signals are combined; severity dominates and volume aggravates.
  • Action. One of: allow, label, blur, limit reach, hold for review, block.

6.3 What the automated system may and may not do

It may: remove content, reduce its reach, hold it for review, apply a strike,

suspend an account temporarily.

It may never: permanently ban an account. That requires a human moderator,

and the rule is enforced in code, not by convention.

6.4 Content about your own distress is never actioned

If you post that you are struggling, suicidal, or want to hurt yourself, our

system publishes your post normally, records nothing against your account, and

attaches crisis support information. We do not remove it, hide it, limit it or

count it against you.

We do act on content that *encourages* another person to self-harm, or that

shares specific method detail — because that causes measurable harm to others.

6.5 Your rights over automated decisions

  • See the reason. Settings → Moderation history shows every decision and the

exact rules that fired.

  • Appeal it. Every automated action is appealable and **a human decides every

appeal.** The automated system never reviews its own work.

  • Get it reversed. If an appeal succeeds, the strike is removed and the trust

penalty refunded — not merely stopped from counting.


6a. Personas — pseudonymous, not anonymous

If you post under a persona, this is the whole of the promise. Nothing is

buried, and the word "anonymous" does not appear because it would not be true.

What a persona does

  • Other members never see your account, handle, college, year or specialty on a

persona post. The server does not send those fields — they are absent from

the payload, not hidden by the app.

  • Persona posts do not appear on your profile, and are not selected into your

followers' timelines. Both would link the persona to you in one step.

  • Persona posts are excluded from your public post count. A count that ticks up

with no visible post is a timing correlation.

  • Only a coarse "verified medic / verified student / unverified" badge is shown.

The exact tier is withheld: a pseudonymous *faculty* member posting about one

department narrows to a handful of people.

  • The persona's avatar is seeded randomly, never derived from your account, so

it is not a fingerprint across personas.

  • Its creation date is shown to the month, not the second.

What a persona does not do

  • ScrubChat knows. Persona.userId is not nullable and never will be. A

moderator reviewing a report about your post sees your real account — and

that view writes an audit event naming the moderator, so "who looked, and

when" is a question with an answer.

  • Strikes land on you, not on the persona. Retiring it clears nothing.
  • A valid legal order reaches your real account. Under India's IT Rules 2021

we are an intermediary; "we do not know who posted it" is not a defence, it is

an admission that we built an untraceable system. We did not.

  • Blocking is a confirmation oracle. If you block someone you suspect, their

persona's posts disappear from your feed — which confirms a guess. We keep it

that way because a block that silently failed to block would be worse, and

because it only helps someone who already had a suspect.

  • Your writing style is not disguised. We do not rewrite what you say.

Someone who reads your identified posts can often recognise your pseudonymous

ones.

  • The content is usually the leak. "My HOD in pathology keeps making me redo

slides" is unidentifiable in Delhi and completely obvious to the twelve people

in that department. We warn you about this as you type — see the deanon

detector in docs/MODERATION_POLICY.md — but the warning is a net, not a

seal.

  • Case discussions and direct messages are always under your real account.

In a clinical thread the reader is entitled to know whether the person

recommending a dose is a verified consultant; in a DM, one-sided pseudonymity

is the exact asymmetry harassment needs.

Personas unlock three days after you join and are paused while you have an

active strike. Both exist because the throwaway account created to harass

someone under cover is always used the same day it is made.


7. Who we share data with

We share personal data with no one for marketing purposes, ever.

Recipient What they get Why
Cloud hosting provider Encrypted data at rest To run the service
Anthropic (moderation model) Grey-zone content with identifiers already removed, no account details Moderation adjudication. Disable by unsetting ANTHROPIC_API_KEY
Email provider Your email address Verification and security notices
Object storage Uploaded media, EXIF already stripped Media hosting
Law enforcement Only on a valid, specific legal order Legal obligation

We publish a transparency report at /transparency showing action volumes,

appeal counts and — most importantly — the appeal overturn rate.


8. How long we keep things

Data Retention
Account and content While your account is open
Deleted content 30 days, then permanently purged
Closed accounts 30-day grace period to change your mind, then permanent deletion
Verification documents Deleted immediately after review — usually within days
Moderation cases 365 days, then pseudonymised (the decision survives; the link to you does not)
Audit log Pseudonymous by design; no personal data in it
IP hashes Salt rotates daily, so correlation is impossible after 24 hours
Sessions Until expiry, then pruned after 7 days

What survives a full deletion, and why. Moderation case records survive with

the link to you removed. This lets us report "we removed N pieces of content for

patient-data violations" without being able to say whose they were. We consider

this the minimum necessary for platform safety and legal defence, and we are

telling you about it rather than hiding it in a definition.


9. Your rights

Under the DPDP Act 2023 (ss. 11–13) and GDPR (Arts. 15–22) you may:

Right How to use it
Access everything we hold Settings → Download my data. Instant, no ticket
Correct inaccurate data Edit your profile, or email the DPO
Delete your account and data Settings → Close my account. 30-day grace, then permanent
Port your data The export is machine-readable JSON
Withdraw consent Settings. Withdrawal is as easy as giving it, as the law requires
Object to processing Email the DPO
Complain Grievance Officer first, then the Data Protection Board of India or your supervisory authority

We never charge for these and we never make you jump through hoops.


10. Security

  • Passwords: Argon2id, OWASP 2024 parameters. We cannot read them.
  • Transport: TLS everywhere; HSTS with preload in production.
  • Sessions: short-lived access tokens, rotating refresh tokens with **reuse

detection** — a stolen token invalidates the whole session family.

  • Identity documents: AES-256-GCM encrypted; searchable only via HMAC blind

index, so no plaintext registration-number column exists.

  • Logs: aggressive central redaction of tokens, passwords and identifiers.
  • Media: EXIF and GPS stripped before storage. Uploads that fail this are refused.
  • Access: role-based, with an append-only audit trail on every privileged action.

Breach notification. If a breach is likely to affect you, we will tell you and

the Data Protection Board without undue delay, and within 72 hours where the GDPR

requires it. We will tell you what happened, what we know, and what to do — not

a euphemism about "an incident".


11. International transfers

Data may be processed outside your country. Where it is, we rely on Standard

Contractual Clauses or an adequacy decision. Contact the DPO for the current

processor list.


12. Cookies

We use exactly three, all strictly necessary:

Cookie Purpose Lifetime
sc_at Access token (httpOnly) 15 minutes
sc_rt Refresh token (httpOnly, scoped to /api/auth) 30 days
sc_csrf CSRF double-submit token (readable by our own JS) 30 days

No analytics cookies, no advertising cookies, no third-party cookies. There is no

consent banner because there is nothing to consent to.


13. Changes

We will tell you in-app before any material change takes effect, and the consent

ledger records which version you agreed to. Continued use after a change means

you accept it; if you do not, you can export and close your account at any time.


*Last reviewed: 1 August 2026*