OverTrail RO — Content Moderation Policy

Last updated: 2026-05-19.

This document explains how user-generated content (UGC) in OverTrail RO is moderated. It exists to satisfy Google Play's UGC policy requirement for a published moderation policy and to give users a clear picture of what they can expect. A copy is hosted publicly at https://overtrail.ro/moderation (alongside the privacy policy).

If you have a question about a specific moderation decision or want to report content that the in-app flow doesn't cover, email contact@overtrail.ro.


1. What is user-generated content in OverTrail?

Four feature areas accept content from users:

FeatureFree-text fieldsLifetime
Community POIs (camping, springs, viewpoints, refuges, vulcanizări)name (≤ 80 chars), description (≤ 800 chars)Permanent until reported / deleted by creator
Hazard reports (fallen trees, landslides, etc.)description (≤ 280 chars, optional)4 hours TTL, then auto-deleted
SOS alertsdescription (≤ 280 chars, optional), contact_hint (≤ 80 chars, optional)24 hours TTL, then auto-resolved
Convoy nicknamesnickname (≤ 8 chars, visible only to fellow convoy members)12 hours after last activity

Everything else (GPS tracks, downloaded map regions, tire-pressure calculator inputs, etc.) is stored only on the user's device.


2. What is not allowed


3. How moderation works

OverTrail RO uses three complementary moderation layers. The user account model is anonymous (no email/password required); abusive users can therefore create new accounts, which is why server-side controls dominate over account-level enforcement.

3.1 Server-side profanity filter (preventive)

Every POI name/description, hazard description, and SOS description/contact-hint passes through a server-side wordlist filter before insertion. The filter uses whole-word matching with Romanian diacritic folding (ă/â/î/ș/ța/a/i/s/t) to catch common bypass attempts. Content that matches the wordlist is rejected with the error content_blocked_profanity; the user sees a localized message asking them to rephrase.

Implementation: BEFORE INSERT triggers on pois, reports, sos_alerts in supabase/migrations/0010_ugc_moderation.sql.

The wordlist is intentionally narrow (severe slurs + common vulgarities, ~25 terms across Romanian and English). We err on the side of letting borderline content through; the report-and-auto-hide path below is the second line of defence.

3.2 In-app "Report content" action (community moderation)

Every UGC surface has a "🚩 Report content" action visible to all users except the creator:

Reports are immutable and visible only to the reporter (a user cannot see who else has reported a row). One report per user per row is enforced at the database layer.

3.3 Auto-hide / auto-resolve trigger (≥ 3 unique reporters)

When the count of distinct reporters for a given row reaches 3:

Triggers run as SECURITY DEFINER functions and stamp resolved_by_user_id = NULL so the audit log distinguishes system-resolution from human-resolution.

Implementation: poi_auto_hide_on_reports, report_auto_resolve_on_reports, sos_auto_resolve_on_reports.

3.4 Time-to-live cleanup (passive moderation)

Even content that nobody reports doesn't live forever:

Expired/resolved rows are purged by pg_cron jobs every 15 minutes to 1 hour, depending on the table.


4. Operator-level moderation

For content that bypasses the automated layers (a single highly-toxic post that doesn't trip the wordlist and isn't seen by 3 other users), the operator (Constantin, contact@overtrail.ro) reserves the right to:

These actions are taken in response to email reports at contact@overtrail.ro or to proactive observation by the operator. Operator actions are logged but not publicly visible.


5. User rights

You can:


6. Reporting content that bypassed the automated flow

If you find abusive content that wasn't auto-hidden by the in-app report action:

  1. Try the in-app "🚩 Report content" button first — it's the fastest path and triggers immediate moderation once 3 users agree.
  2. If the content is severe (threats, doxxing, sexually explicit content involving minors, etc.) email contact@overtrail.ro directly with a screenshot. We commit to first response within 48 hours and removal of clearly-violating content within 7 days.
  3. For illegal content (CSAM, direct threats of violence), report to Romanian authorities (112 for emergencies, +40 21 208 25 25 for the General Inspectorate of Romanian Police) in parallel with notifying us.

7. Updates to this policy

This policy may change as the app grows. Material changes will be announced in the app's release notes and reflected in the "last updated" date at the top of this document. The current version always lives at https://overtrail.ro/moderation.