Architecture décidée et documentée dans ADR.md : SvelteKit natif en fichiers plats plutôt que Strapi (55 outils, données statiques, souveraineté et budget performance prioritaires — doctrine §1.2, §4.4). - frontend/ : SvelteKit 2 + Svelte 5 (runes), adapter-static, 58 pages prérendues, CSS natif en @layer (reset→tokens→base→layouts→components), tokens oklch(), container queries, typo fluide clamp(), 2 polices WOFF2 auto-hébergées (Atkinson Hyperlegible, Fraunces), zéro CDN tiers - i18n FR/gcf typé (clé manquante = erreur de build), bascule Kréyòl persistée en localStorage, micro-textes créoles (« Ou pa manké ayen ») - Composants : ToolCard, DifficultyBadge (forme+texte+couleur, jamais la couleur seule), CategoryNav (≤5 entrées, divulgation progressive), SearchBar (raccourci /), LanguageSwitcher, EndMarker - content/ : 55 fiches migrées depuis src/ (script frontend/scripts/ migrate-tools.mjs, idempotent), licences SPDX reprises de directory.json - docs/ : DESIGN_SYSTEM.md et CONTENT_GUIDE.md Budgets vérifiés : JS 41 Ko gzip, CSS 2,9 Ko gzip, svelte-check 0 erreur. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Exit Chat Control
A free, multilingual field guide to escape Chat Control and take back control of your digital privacy: encrypted messaging, email, VPN, DNS, 2FA, Linux, GrapheneOS, self-hosting, and more. Every tool is presented with what it does, who it's for, and how to install it.
🔗 Live site: https://exitchatcontrol.org
What is this?
In July 2026, the European Parliament let the "Chat Control" machinery advance — the amended text now sits with the Council, and the permanent version (CSAR, "Chat Control 2.0") is still being negotiated. This project is a practical, no-nonsense answer: a guide referencing privacy-respecting tools anyone can use to opt out of mass surveillance, from the everyday citizen to the whistleblower.
Its promises, all enforced by tests:
- Static and self-contained — no tracker, no cookie, not a single request to a third-party domain.
- Readable with JavaScript disabled (Tor Browser "safest" mode included) — scripts only power the theme, filters, checklist and quiz.
- Multilingual by design — every language is a real prerendered route with correct
hreflang; adding one means adding translation files, not touching code. - Educational quiz —
/quizscores your censorship resistance on a 0–100 scale and points you at concrete fixes in the guide. Server-rendered questions and scoring key (readable with JS off); the score itself is computed locally in the browser, nothing sent or stored. - Printable and mirrorable — a single-file offline version ships with every build.
Stack
Astro (static output, built-in i18n routing) · Tailwind CSS v4 (design tokens, light-dark() theming) · TypeScript strict · Vitest (content integrity, i18n parity, domain allowlist) · Playwright + axe (no-JS readability, zero-third-party-request guarantee, WCAG AA) · Docker (multi-stage build → nginx). Package manager: pnpm.
pnpm install
pnpm dev # develop on http://localhost:4321
pnpm build # static site + offline artifact in dist/
docker compose -f docker-compose.dev.yml up preview # prod-like: nginx + security headers on :8080
Production deploys docker-compose.yml (single nginx service behind the platform's reverse proxy — Coolify, etc.), or point any static host at pnpm build → dist/.
Contributing
Contributions are very welcome — a tool to add, a translation, a correction. Read CONTRIBUTING.md first: it contains three simple rules for tools (traction, open source, privacy-respecting), a mandatory affiliation-disclosure policy, and a CI-enforced external-link policy. Large changes start with an issue, not a PR.
Not comfortable with code? Open an issue with the app's name, its link, and why it qualifies, and it will be added for you.
License
See LICENSE.
Privacy is a right, not a confession. To encrypt is to vote. To self-host is to disobey. To reclaim your tools is to become ungovernable.