Le premier réseau social français et souverain
Conçu en France, hébergé en France, pour les Français.
@imbiston Fondateur & Dev |
@youtsuhodev Fondateur & Lead Dev |
À l'origine une application de messagerie, Wouaff est devenu un réseau social souverain. Nos engagements sont clairs :
- 🇫🇷 Hébergement 100 % français — toutes les données restent sur le territoire national.
- ⚖️ RGPD & lois européennes — le droit français et européen s'appliquent, sans compromis.
- 🔒 Confidentialité par défaut — pas de traçage d'activité, pas de revente de données.
Le projet suit une approche « privacy by design » : la souveraineté numérique n'est pas une option, c'est le socle du produit.
- 🏠 Fil « Pour toi » (chronologique) et « Abonnements », scroll infini.
- ✍️ Posts de 280 caractères max avec image ou vidéo (30 Mo), reposts, likes, réponses, #hashtags, @mentions et liens cliquables.
- 🔎 Explorer : recherche de comptes et de posts, tendances, pages
#hashtag. - 👤 Profils : photo, bannière, bio, abonnés / abonnements, onglets Posts · Réponses · Reposts.
- 🔔 Notifications (likes, reposts, réponses, mentions, abonnements) avec badge de non-lus.
- 🛡️ Modération : blocage, signalement par catégorie avec retour au signaleur, file de modération (
/admin), sanctions (avertissement, suppression, suspension, bannissement), journal des actions, décisions notifiées avec motif. - 🔐 Compte : double authentification (appli TOTP), sessions visibles et révocables, codes de secours, mot de passe oublié, changement de pseudo et d'e-mail, confirmation d'e-mail (SMTP), captcha Cap auto-hébergé (optionnel), cookie de session
__Host-en HTTPS. - 🇪🇺 RGPD : export des données et suppression définitive du compte depuis Paramètres → Confidentialité.
- 🎨 Thème clair / sombre / automatique · 📱 PWA installable · 🖥️ appli de bureau (Electron).
Messagerie privée, communautés, stories, appels. Elles existaient dans l'ancienne version et ont été retirées lors de la réécriture allégée (voir l'historique git).
| Couche | Technologies |
|---|---|
| Frontend | React 18, TypeScript, Vite, Tailwind CSS |
| Backend | Express 4, MySQL / MariaDB (mysql2), nodemailer |
| Desktop | Electron, electron-builder |
| Sécurité | bcrypt, sessions httpOnly, TOTP, rate-limit, CSP, validations |
- Node.js 20+ (testé sur 22)
- MySQL 8+ ou MariaDB 10.6+, avec une base vide (par défaut
wouaff, jeu de caractères utf8mb4)
git clone https://github.com/Wouaff/WouaffApp.git
cd WouaffApp
npm install # outils du dépôt (Biome)
npm --prefix server install
npm --prefix client install
cp server/.env.example server/.env
# éditer server/.env : identifiants MySQL, APP_URL, SMTP éventuel
# recommandé : TOTP_ENCRYPTION_KEY=$(openssl rand -hex 32) pour chiffrer les secrets 2FA en basePremier administrateur (après une inscription normale) :
npm --prefix server run build
npm --prefix server run role -- ton_pseudo admin # ou moderator / userLes administrateurs nomment ensuite les modérateurs depuis /admin → Utilisateurs.
CAP_ADMIN_KEY=une-longue-valeur-secrète docker compose -f cap/docker-compose.yml up -dOuvre http://127.0.0.1:3001, connecte-toi avec CAP_ADMIN_KEY, crée une clé de site (laisse l'instrumentation désactivée), puis renseigne CAP_URL, CAP_SITE_KEY et CAP_SECRET dans server/.env. Cap ne doit pas être exposé publiquement : seul le serveur Wouaff le contacte.
Les tables sont créées automatiquement au démarrage du serveur (server/src/migrations).
⚠️ Utilise une base neuve. Une base issue de l'ancienne version (tablesprofiles,post_likes…) n'est pas compatible.
npm run dev # serveur Express + Vite (HMR) sur http://localhost:7285Variante : npm --prefix client run dev lance Vite seul sur :5173 et proxifie /api et /uploads vers :7285.
npm run build
NODE_ENV=production npm start # `npm run start:build` = build puis démarrageDerrière un reverse proxy, définis TRUST_PROXY=1 pour que le rate-limit voie la vraie IP.
cd client
npm run dev:electron # développement
npm run build:electron # installeur Windows (autres : :mac, :linux)En production l'appli charge https://wouaff.app (changeable avec WOUAFF_URL) ; si le site est injoignable, elle affiche l'interface embarquée.
WouaffApp/
├── client/ # SPA React (Vite + TypeScript) + Electron
│ ├── src/components/ # PostCard, ComposeBox, Sidebar, AppShell…
│ ├── src/pages/ # Feed, Explore, Post, Profile, Settings, Login…
│ ├── src/hooks/ # useAuth, useTheme, usePaged, useUnread
│ ├── src/services/ # client API
│ └── electron/ # processus principal Electron
└── server/ # API Express (TypeScript)
└── src/
├── config/ # base de données, migrations, captcha
├── middleware/ # auth, rate-limit, en-têtes de sécurité, erreurs
├── routes/ # auth, posts, profiles, social, notifications, trends, upload
├── services/ # accès données (rtdb.ts), requête du fil, e-mails
└── migrations/ # 001_init.sql … 007_hardening.sql
- 🍪 Sessions par cookie
httpOnly+SameSite=Lax, expirantes, révocables ; purge automatique des sessions expirées. - 🔑 Mots de passe hachés (bcrypt), double authentification TOTP, réinitialisation par jeton à usage unique.
- 🚦 Rate-limit global et renforcé sur la connexion, l'inscription, les publications et les envois.
- 🧱 Requêtes SQL paramétrées, entrées validées côté serveur (pseudos réservés, URL http(s) uniquement, médias limités aux uploads).
- 📎 Uploads : type vérifié sur le contenu réel du fichier, EXIF/GPS retiré (
sharp),nosniffet CSP restrictive sur/uploads, fichiers effacés avec le post ou le compte. - 🔏 Sessions stockées sous forme de hash, secrets 2FA chiffrés (
TOTP_ENCRYPTION_KEY), codes TOTP à usage unique, contrôle d'Originanti-CSRF. - 🕵️ Aucun suivi d'activité ; les journaux techniques restent sur le serveur.
Voir SECURITY.md pour signaler une faille.
Voir CONTRIBUTING.md.
Wouaff License — Autorisé pour contributions et améliorations uniquement. Redistribution sous un autre nom ou branding interdite.
Fait avec ❤️ en France · wouaff.app

