FoxTrail
Security & Anonymity Architecture
Leave anonymous messages on the walls of the city. Backed by 7 layers of protection, content safety in 17 languages, and 86 automated tests.
Your Identity Stays Yours
- Nickname + color — your real name is never asked for, never shown.
- Field allow-list — profile updates only pass through permitted fields; there's nothing extra to leak.
- Optional gender visibility — sharing it is entirely the user's choice.
- Photos are optional — an avatar is never required.
A 7-Layer Spam Shield
Cooldown
A mandatory 5-minute cool-off between posts — flooding is impossible.
Location Limit
At most 2 posts per hour within the same 50-meter area.
Duplicate Detection
70%+ similarity to your posts in the last 24 hours → auto-rejected.
Length Bounds
10–280 characters. Neither empty noise nor a wall of text.
SHOUTING Filter
More than 80% uppercase → blocked.
Permanent-Post Zone
A 30-meter radius around permanent posts is protected.
Personal Info Never Leaks
Before a post goes live, its content is scanned — attempts to pull users off the platform are cut off at the source:
- Phone numbers — local formats plus international patterns
- Email addresses
- Social handles — Instagram, Telegram, WhatsApp…
- URLs and domains — including 18 common extensions
Content Safety in 17 Languages
~150 terms × 15 languages
Profanity, hate, sexual content, violence and drugs — a dictionary-based scan across 5 categories (Apple Guideline 1.2).
Leet-speak decoder
5hit → shit · fuuuck → fuck — number/symbol masking and letter-repeat tricks are neutralized.
Whole-word matching
Unicode-aware word boundaries: "class" is never blocked for containing "ass".
EN · TR · DE · ES · FR · PT · ID · RU · JA · KO · AR · HE · HI · FA · ZH · AZ · TH
When Languages Collide
This bug was caught on the very first run of the automated tests — in a worldwide app, language safety is never left to chance.
The Fortress Is Built on the Server
Client checks are assumed bypassable — the real boundary lives in Firebase:
309 lines of Firestore rules
isAuthed · isNotBanned · isAdmin layers. Chats are open only to participants; system collections are write: false.
7 Cloud Functions
Report review, chat cleanup, moderation and notifications run server-side — no power is handed to the client.
Reporting system
Reports are read and resolved by admins only; a banned user cannot produce content.
Automated Tests, All Green
- 22 anti-spam tests — cooldown, location limit, duplicate, CAPS, personal info
- 17-language i18n parity tests — no missing or orphaned translation key survives
- 44 collision checks — everyday sentences in 15 languages don't trip the filter
- Regression lock — the "çok" case can never happen again
Even More Solid
Location-based country detection
The local-language filter is weighted by a post's country — accuracy rises while false positives drop.
Server-side rate limiting
Write quotas are enforced in Cloud Functions too — even if the client check is bypassed.
Firestore rules tests
Every scenario of the security rules is verified automatically on the emulator.
Anonymous. Bold. Safe.
FoxTrail — Write, Shoot & Discover