These rules apply to every chat. Breaking them can mean a redacted message, a dropped message, an ended session, a trust penalty, an account restriction, or a ban. The server decides, not the client.
Minors — the largest enforcement category
Nobody under 18 may use this product. Do not say you are a minor. Do not ask anyone to say they are a minor. Do not sexualise anyone who might be a child.
The text filter flags age statements and school-year patterns (for example “i'm 14”, “class 9”) at high severity. A report reason exists specifically for suspected minors. If we think a minor is involved we treat it as the highest-priority safety issue we have.
When the filter Flags a message under the minor rule (not Terminate, not a spam Flag), the server sets users.restricted_at — not a bans row — and bumps token_version. WebSocket authenticate then fails closed (same error path as a ban). Later sends from that account end the session without delivering. Existing sockets are not torn down on the restrict write; the next send and the next authenticate are what fail closed.
Contact exchange
Do not share phone numbers, social handles, or “snap / insta / tg me” style lures. Contact exchange is the primary luring vector in this category.
The filter flags and redacts those patterns before relay. Trying to bypass the filter is still a violation.
Solicitation and sexual content
Do not pressure anyone for sexual content or nude imagery. Unwanted sexual talk is reportable as nudity or solicitation.
Repeat solicitation is escalated: later hits can block the message or terminate the session.
Hate
Slurs and hate speech are not allowed. The filter can drop the message and signal a trust penalty.
Spam and links
Do not flood, repeat the same text across sessions, or paste junk. Rate limits apply to send, typing, skip, and reports.
Links from domains that are not allowlisted can be blocked for low-trust users and flagged otherwise.
Reports, blocks, and skip
Report is one tap. Reasons in this version:
- Nudity or solicitation
- Harassment
- Spam or scam
- Suspected minor
- Hate
- Other
How reports work
There is no free-text field on a report. Abuse of the report button (too many reports) is ignored and can itself lower trust.
Block is permanent: you will not be matched with that person again. Skip ends the chat and finds someone new. A 30-minute no-rematch window applies after a pair.
Bans and evasion
Bans are stored on the bans table and cached briefly. Token version is bumped so existing access tokens stop working. Creating new anonymous sessions to dodge a ban is still evasion. Age-assurance restriction is separate: users.restricted_at, no bans row.