# FailDaily - Application de Partage d'Échecs Constructifs

[![Status](https://img.shields.io/badge/Status-Production%20Ready-brightgreen.svg)](https://gitlab.taaazzz-prog.fr/root/FailDaily)
[![Platform](https://img.shields.io/badge/Platform-iOS%20%7C%20Android%20%7C%20Web-blue.svg)](#)
[![Tech](https://img.shields.io/badge/Tech-Angular%2020%20%7C%20Ionic%208%20%7C%20Node.js%2020%20%7C%20MySQL%208-orange.svg)](#)
[![Tests](https://img.shields.io/badge/Tests-16%20Backend%20%7C%205%20Frontend-success.svg)](#)
[![License](https://img.shields.io/badge/License-Proprietary-red.svg)](LICENSE)

## 📜 Licence

Copyright © 2025 Bruno Taaazzz - Tous droits réservés.

Ce projet est sous licence propriétaire. Voir le fichier [LICENSE](LICENSE) pour plus de détails.
Toute utilisation, reproduction ou distribution non autorisée est strictement interdite.

## 🏗️ **Structure du Projet**

```
FailDaily/
├── 📁 backend-api/                        # 🚀 API Node.js + Express
│   ├── 📁 src/                            # Code source principal
│   │   ├── 📁 config/                     # DB, chargement secrets Docker
│   │   ├── 📁 controllers/               # Logique métier (auth, fails, users…)
│   │   ├── 📁 middleware/                # JWT auth, validators, rate limiting
│   │   ├── 📁 routes/                    # Endpoints Express (18 routeurs)
│   │   ├── 📁 services/                  # badgesService, moderationService…
│   │   └── 📁 utils/                     # mailer, push FCM, passwordUtils, secureLogger
│   ├── 📁 migrations/                    # Migrations SQL + dump OVH prod (source de vérité)
│   ├── 📁 tests/                         # Tests Jest (16 suites backend)
│   ├── 📁 uploads/                       # Avatars uploadés
│   ├── 📁 logs/                          # Logs applicatifs locaux
│   ├── 📄 server.js                      # Bootstrap (secrets, middlewares, routes)
│   ├── 📄 Dockerfile                     # Image Docker backend (pnpm)
│   └── 📄 package.json                   # Dépendances backend
│
├── 📁 frontend/                          # 📱 Application Ionic + Angular
│   ├── 📁 src/app/                       # Code source Angular
│   │   ├── 📁 components/               # Composants réutilisables
│   │   ├── 📁 directives/               # Directives Angular custom
│   │   ├── 📁 guards/                   # Route guards (auth, admin)
│   │   ├── 📁 models/                   # Interfaces TypeScript
│   │   ├── 📁 pages/                    # Pages (auth, profile, fails, admin…)
│   │   ├── 📁 pipes/                    # Pipes Angular
│   │   ├── 📁 services/                 # Services Angular (15+)
│   │   ├── 📁 styles/                   # Styles globaux SCSS
│   │   ├── 📁 types/                    # Types TypeScript partagés
│   │   └── 📁 utils/                    # Utilitaires (constants, helpers)
│   ├── 📁 android/                      # Build Android (Capacitor)
│   ├── 📁 ios/                          # Build iOS (Capacitor)
│   ├── 📁 www/                          # Build production web (généré)
│   ├── 📁 public/                       # Assets statiques
│   ├── 📄 capacitor.config.ts           # Config Capacitor (bundle ID : com.faildaily.app)
│   └── 📄 Dockerfile                    # Image Docker frontend Nginx (pnpm)
│
├── 📁 docker/                           # 🐳 Infrastructure conteneurisée
│   ├── 📄 docker-compose.local.yml      # Stack locale (DB + API + Frontend + Traefik)
│   ├── 📄 docker-stack.ovh-cloud.yml    # Stack production OVH Swarm
│   ├── 📄 frontend.Dockerfile           # Build Angular + Nginx (pnpm)
│   ├── 📄 backend.Dockerfile            # Image backend alternative (pnpm)
│   ├── 📄 admin-frontend.Dockerfile     # Build panel admin (pnpm)
│   ├── 📄 nginx.conf                    # Config Nginx production
│   ├── 📁 local/                        # Config environnement local
│   └── 📁 production/                   # Config environnement production
│
├── 📁 docs/                             # 📚 Documentation complète
│   ├── 📁 guides/                       # Guides techniques (Architecture, SMTP, Sécurité)
│   ├── 📁 reports/                      # Rapports de validation et audits
│   ├── 📁 presentations/                # Présentations HTML du projet
│   ├── 📁 project/                      # Documentation projet (CGU, DevOps)
│   ├── 📁 project-management/           # Gestion de projet (planning, actions)
│   ├── 📁 specs/                        # Spécifications techniques API
│   ├── 📁 assets/                       # Captures d'écran et images
│   ├── 📁 archive/                      # Anciens fichiers et références historiques
│   ├── 📁 database/                     # Documentation schéma base de données
│   ├── 📁 planning/                     # Planification sprints
│   ├── 📁 todo/                         # Listes de tâches
│   └── 📁 misc/                         # Divers
│
├── 📁 scripts/                          # ⚙️ Scripts d'automatisation
│   ├── 📁 development/                  # start-dev.ps1, start-dev.sh
│   ├── 📁 deployment/                   # deploy-to-ovh.ps1, deploy-secure.ps1…
│   ├── 📁 maintenance/                  # check-server-sync, fix-frontend…
│   ├── 📄 dump-bdd-local.ps1            # Dump OVH → repo local (source de vérité SQL)
│   ├── 📄 setup-auto-dump-task.ps1      # Tâche Windows Scheduler (dimanche 3h)
│   ├── 📄 backup-database.ps1 / .sh     # Sauvegarde base de données
│   ├── 📄 restore-mysql.ps1 / .sh       # Restauration depuis backup
│   ├── 📄 rollback-version.ps1 / .sh    # Rollback version déployée
│   ├── 📄 monitor-health.ps1            # Monitoring santé API
│   ├── 📄 pre-deployment-check.ps1      # Vérifications pré-déploiement
│   └── 📄 ci-backend-local.ps1 / .sh    # CI locale (smoke tests sans DB)
│
├── 📁 migrations/                       # Migrations SQL incrémentales (racine)
├── 📁 e2e/                              # 🧪 Tests Cypress end-to-end
├── 📁 config/                           # ⚙️ Configuration système et fichiers sensibles
├── 📁 reports/                          # Rapports d'audit OVH
│
├── 📄 README.md                         # Ce fichier
├── 📄 LICENSE                           # Licence propriétaire
├── 📄 claude.md                         # Guide opérationnel pour agents IA
├── 📄 package.json                      # Définition monorepo PNPM
├── 📄 pnpm-workspace.yaml               # Configuration workspaces PNPM
├── 📄 pnpm-lock.yaml                    # Lockfile des dépendances
├── 📄 docker-compose.ssl-production.yml # Config Docker production SSL
├── 📄 DEPLOYMENT_GUIDE.md              # Guide de déploiement complet
├── 📄 DOCKER_SECRETS_GUIDE.md          # Guide Docker Secrets production
├── 📄 BACKUP_ROLLBACK_GUIDE.md         # Guide sauvegarde et rollback
└── 📄 database-schema.sql               # Schéma de référence (⚠️ voir backend-api/migrations/faildaily_bdd.sql)
```

## �🚀 **Démarrage Rapide**

```bash
# 1. Cloner le projet
git clone ssh://git@gitlab.taaazzz-prog.fr:2224/root/FailDaily.git
cd FailDaily

# 2. Lancer avec Docker (recommandé)
.\scripts\development\start-dev.ps1        # Windows PowerShell
# ou
./scripts/development/start-dev.sh          # Linux / macOS

# 3. Accéder à l'application
# Frontend (via Traefik) :  http://localhost:8000
# Backend API :             http://localhost:3000/api
# MySQL (host) :            127.0.0.1:3308
# Traefik Dashboard :       http://localhost:8090
```

**🔗 Documentation :** [API Reference](docs/specs/API_ENDPOINTS.md) | [Badges System](docs/guides/BADGES_GUIDE.md) | [Architecture](docs/guides/ARCHITECTURE.md) | [Plan de tests](docs/reports/TEST_PLAN_MANUEL.md)

**🔐 Production :** [Deployment Guide](DEPLOYMENT_GUIDE.md) | [Docker Secrets Guide](DOCKER_SECRETS_GUIDE.md) | [Backup & Rollback Guide](BACKUP_ROLLBACK_GUIDE.md)

### 🔐 Variables d'environnement obligatoires (Backend)

Ces variables sont **validées au démarrage** — l'API refuse de démarrer si l'une manque :

```env
DB_HOST=...
DB_USER=...
DB_PASSWORD=...
DB_NAME=...
JWT_SECRET=...          # Minimum 64 caractères en production
```

Variables importantes (non bloquantes mais nécessaires en prod) :

```env
SMTP_HOST=...           # OVH : ssl0.ovh.net
SMTP_PORT=...
SMTP_USER=...
SMTP_PASS=...
OPENAI_API_KEY=...      # Modération IA anti-toxicité
FRONTEND_URL=...        # Ex : https://faildaily.com
```

> **Note DB unique :** En production OVH, `LOGS_DB_*` pointent vers la même base `faildaily_bdd` que la DB principale. Désactivable avec `LOGS_DB_DISABLED=true`.

## 🎯 **Concept & Vision**

FailDaily révolutionne les réseaux sociaux en encourageant la **vulnérabilité positive** et l'**apprentissage par l'échec**. Contrairement aux plateformes traditionnelles qui cultivent la perfection artificielle, FailDaily célèbre l'imperfection humaine et transforme les échecs en opportunités de croissance collective.

### **Stack Technologique**

- **Frontend** : Angular 20 + Ionic 8 (PWA/Mobile + Capacitor Android/iOS)
- **Backend** : Node.js 22 + Express.js (API REST)
- **Base de données** : MySQL 8.0 — OVH CloudDB (1 base unifiée `faildaily_bdd`, 42 tables)
- **Authentification** : JWT HS256 + JTI unique + table de révocation
- **Mots de passe** : Argon2id (migration transparente depuis bcrypt à la connexion)
- **Emails** : Nodemailer + SMTP OVH (`ssl0.ovh.net`)
- **Push** : FCM (Firebase Cloud Messaging) via `utils/push.js`
- **Modération IA** : OpenAI API (anti-toxicité automatique)
- **Upload** : Multer + triple validation (MIME + extension + magic bytes)
- **CI/CD** : GitLab CI auto-hébergé (`gitlab.taaazzz-prog.fr`)
- **Gestionnaire de paquets** : PNPM (monorepo workspace)

---

## ✅ **FONCTIONNALITÉS IMPLÉMENTÉES**

### ?? **Systeme d'Authentification Complet**

- **Inscription securisee** avec validation email/mot de passe
- **Connexion JWT HS256** avec JTI unique et révocation en base
- **Consentement RGPD** intégré (gestion des mineurs 13-16 ans)
- **Réinitialisation de mot de passe** par email (SMTP OVH configuré)
- **Multi-appareils** : chaque appareil reçoit son propre token JWT indépendant (aucune session serveur partagée)

### 👤 **Gestion des Profils Utilisateur**

- **Profils personnalisables** (nom, avatar, bio)
- **Statistiques de base** (fails, reactions, badges)
- **Système de courage points** avec calculs automatiques
- **Paramètres de confidentialité** granulaires
- **Historique d'activité** complet

### 📝 **Publication de Fails**

- **Interface intuitive** pour partager des échecs
- **Upload d'images** avec compression automatique
- **Catégorisation** (professionnel, personnel, social, etc.)
- **Mode anonyme** optionnel
- **Modération IA** (OpenAI) anti-toxicité
- **Accès sécurisé** : les fails ne sont visibles que par des utilisateurs authentifiés

### 🏆 **Système de Badges Gamifié**

- **65 badges disponibles** (6 categories, definitions en base)
- **Déblocage automatique** basé sur les actions utilisateur
- **Système de XP** et progression
- **Badges d'accomplissement** et de régularité
- Badges auto-debloques + configs points/moderation en admin (pas d'edition des definitions en UI)

### 💖 **Interactions Positives Uniquement**

- **4 types de réactions encourageantes** : Courage, Soutien, Empathie, Humour (pas de "like" générique)
- **Réactions prédéfinies**
- **Commentaires modérés** automatiquement
- **Système de soutien** communautaire
- **Pas de comparaisons toxiques**

### 👑 **Interface d'Administration**

- **Dashboard complet** avec métriques
- **Gestion des utilisateurs** (rôles, bans, statistiques)
- **Modération de contenu** centralisée
- **Système de logs** détaillé
- **Configuration des points** et récompenses

---

## 🚧 **FONCTIONNALITÉS EN DÉVELOPPEMENT**

### 🔔 **Système de Notifications Push**

- **Push notifications** implémentées via FCM (`utils/push.js`)
- **Notifications de badges** débloqués (branché sur `badgesService`)
- **Notifications de réactions** sur les fails
- ⚠️ **Credentials FCM à configurer** en production (variable `FCM_PROJECT_ID` + service account)

### 📧 **Communication par Email** ✅

- **Emails de consentement parental** pour les 13-16 ans (SMTP OVH actif)
- **Réinitialisation de mot de passe** par email
- **Support utilisateur** par email (`/api/support`)
- ⚠️ **Rapports d’activité hebdomadaires** : non implémentés

### 🎮 **Fonctionnalités Avancées** (En attente / Non implémentées)

- ❌ **Group Challenges** : Défis collectifs — flag présent (`groupChallenges: false`), aucune route backend ni UI
- ❌ **AI Counselor** : Conseils personnalisés basés sur l'IA — flag présent (`aiCounselor: false`), aucune route backend
- ⚠️ **Streaks** : Calcul de streak présent dans `badgesService` et les stats profil, mais pas de système "streak de vulnérabilité" dédié

---

## 📋 **ROADMAP & TODO LIST**

### 🔥 **Priorité Haute (Sprint Actuel)**

#### Backend API

- [x] **Notifications push** (FCM implémenté dans `utils/push.js`, branché sur badges et fails — credentials FCM à configurer en prod)
- [x] **Système d’emails** (Nodemailer actif : consentement parental, réinitialisation MDP, support — SMTP OVH configuré)
- [x] **API de modération** avancée (hidden/approved/rejected, seuils, panneaux admin)
- [x] **Système de rapports** utilisateur (signalements fails/comments + seuil auto-masquage)
- [ ] **Cache Redis** pour performances

#### Frontend Mobile

- [ ] **Optimisations PWA** (offline, cache)
- [ ] **Animations** d’interface améliorées
- [ ] **Mode sombre** natif (modèle `darkMode` en place, toggle UI pas encore implémenté)
- [ ] **Gestes** intuitifs (swipe, pull-to-refresh)
- [ ] **Accessibilité** (WCAG compliance)

#### Base de Données

- [ ] **Index de performance** optimisés
- [ ] **Procédures stockées** pour analytics
- [x] **Système de backup** automatisé (`scripts/backup-database.ps1`, `setup-cron-backup.ps1`, dump hebdo OVH)
- [ ] **Monitoring** temps réel

### ⚡ **Priorité Moyenne (Prochains Sprints)**

#### Fonctionnalités Sociales

- [x] **Système de follow** entre utilisateurs (API complète)
- [ ] **Feed personnalisé** basé sur les follows (route dédiée à créer)
- [ ] **Mentions** et notifications sociales
- [x] **Partage** de fails vers autres plateformes
- [ ] **Groupes/Communautés** thématiques

#### Analytics & Insights

- [ ] **Dashboard personnel** avec graphiques
- [ ] **Insights IA** sur les patterns d'échecs
- [ ] **Recommandations** personnalisées
- [ ] **Export de données** RGPD
- [ ] **Rapports d'impact** personnel

#### Gamification Avancée

- [ ] **Système de niveaux** global
- [ ] **Badges collaboratifs** (équipe)
- [ ] **Challenges temporaires** (événements)
- [ ] **Récompenses virtuelles** échangeables
- [ ] **Classements** communautaires bienveillants

### 🔮 **Priorité Basse (Vision Long Terme)**

#### Intelligence Artificielle

- [ ] **Analyse de sentiment** des posts
- [ ] **Détection de détresse** psychologique
- [ ] **Recommandations de ressources** d'aide
- [ ] **Coach IA** personnalisé
- [ ] **Prédiction de patterns** destructeurs

#### Intégrations Externes

- [ ] **API publique** pour développeurs
- [ ] **Webhooks** pour services tiers
- [ ] **Intégration calendrier** (Google/Outlook)
- [ ] **Connect social** (import fails depuis autres apps)
- [ ] **Partenariats** avec plateformes de bien-être

#### Monétisation Éthique

- [ ] **Abonnement Premium** (fonctionnalités avancées)
- [ ] **Dons** volontaires à des associations
- [ ] **Contenu éducatif** payant (workshops)
- [ ] **Certifications** en développement personnel
- [ ] **API commerciale** pour entreprises

---

## 🛠️ **DÉTAILS TECHNIQUES**

### **Services Angular Implémentés**

```typescript
✅ AuthService         // Authentification, gestion session
✅ MysqlService         // Communication base de données
✅ BadgeService         // Gestion système de badges
✅ FailService          // Gestion des posts/fails
✅ AdminMysqlService    // Administration système
✅ ComprehensiveLogger  // Logging avancé
✅ DebugService         // Outils de débogage
✅ ConsentService       // Gestion RGPD
✅ PushService          // Notifications push
✅ ModerationService    // Modération automatique
```

### **Pages Fonctionnelles**

```typescript
✅ /auth/register       // Inscription utilisateur
✅ /auth/login          // Connexion
✅ /profile             // Profil personnel
✅ /edit-profile        // Modification profil
✅ /post-fail           // Publication échec
✅ /badges              // Collection badges
✅ /admin               // Interface admin
✅ /privacy-settings    // Paramètres confidentialité
✅ /debug               // Outils développeur
✅ /legal               // Documents légaux
```

### **API Endpoints MySQL**

```bash
# Authentification
POST /api/auth/register
POST /api/auth/login
POST /api/auth/logout
POST /api/auth/password-reset
POST /api/auth/password-reset/confirm

# Utilisateurs
GET  /api/auth/profile
PUT  /api/auth/profile
GET  /api/users/:userId/stats

# Badges
GET  /api/badges/available
GET  /api/users/:userId/badges
GET  /api/users/:userId/badges/ids
POST /api/badges/check-unlock/:userId

# Administration
GET  /api/admin/users
GET  /api/admin/dashboard
GET  /api/admin/moderation/config
PUT  /api/admin/fails/:id/moderation   # approved | hidden | under_review | rejected

# Inscription & Vérification
POST /api/registration/register
POST /api/registration/resend-verification
POST /api/registration/verify-email
POST /api/registration/parent-consent/request
POST /api/registration/parent-consent/confirm
```

---

## 📊 **MÉTRIQUES & PERFORMANCE**

### **Performance Technique**

- ⚡ **Temps de chargement** : < 2s (première visite)
- 🚀 **Temps de réponse API** : < 200ms (95% des requêtes)
- 📱 **PWA Score** : 95/100 (Lighthouse)
- 🔐 **Sécurité** : A+ (SSL Labs)

### **Objectifs Business**

- 👥 **100 utilisateurs actifs** (première phase)
- 📝 **10 fails/jour** en moyenne (communauté)
- 🏆 **80% d'engagement** avec le système de badges
- 💖 **Ratio positif** 90%+ sur les interactions

---

## 🚀 **DÉPLOIEMENT**

### **Environnement Local (Docker recommandé)**

```bash
# Déployer la stack locale (DB + migrations + Traefik + API + Frontend)
pnpm run deploy:docker

# Accès
# Frontend (Traefik) :  http://localhost:8000
# Backend API        :  http://localhost:3000
# MySQL (host)       :  127.0.0.1:3308
```

### **Production (Prêt)**

- ✅ **Build optimisé** (Angular AOT)
- ✅ **Docker containers** configurés
- ✅ **Variables d'environnement** sécurisées
- ✅ **SSL/HTTPS** ready
- ✅ **Monitoring** logs intégré

---

_FailDaily - Transformons nos échecs en succès collectifs_ 🌟

> For AI coding agent usage and guardrails, see [AGENTS.md](./AGENTS.md).
