# LeBonCoup - Spécifications Fonctionnelles

## Vue d'ensemble

Plateforme de petites annonces inversée : les demandeurs publient leurs besoins gratuitement, les prestataires paient pour accéder aux demandes via un système de tokens.

---

## 1. Système d'Utilisateurs

### 1.1 Types d'utilisateurs
- **Demandeurs** : Publient des demandes de services (gratuit)
- **Prestataires (Pros)** : Achètent des tokens pour accéder aux demandes

### 1.2 Inscription/Connexion
- Email + mot de passe
- Pas de nom/prénom obligatoire
- Pseudonyme auto-généré : "User_8x7f9a"
- Email **jamais** stocké en clair (hashé avec SHA256 + salt)
- Mot de passe hashé (Argon2 ou bcrypt)

### 1.3 Récupération de compte
- Service support séparé
- User entre son email → système calcule le hash → trouve le compte
- Reset password par email
- **Attention** : Changement de mot de passe = suppression de toutes les conversations

---

## 2. Système de Tokens

### 2.1 Achat de tokens
**Packs prépayés uniquement :**
- 10€ = 10 tokens
- 25€ = 30 tokens (+20% bonus)
- 50€ = 70 tokens (+40% bonus)
- 100€ = 150 tokens (+50% bonus)

**Paiement via Stripe :**
- Carte bancaire
- Apple Pay
- Google Pay
- PayPal (optionnel)

### 2.2 Utilisation des tokens

**1 token = accès à 1 demande**

**Tokens premium (optionnel v2) :**
- 2 tokens = accès prioritaire
- Permet de dépasser la limite de 5 pros (jusqu'à 6-7 max)

**Pas d'expiration des tokens** (ou très longue : 12 mois)

### 2.3 Remboursement automatique
- Si demande devient "pleine" entre filtrage et déblocage → refund auto
- Si demande signalée comme frauduleuse → refund
- Si demandeur fantôme (aucune réponse après 7 jours) → refund partiel

---

## 3. Publication de Demandes

### 3.1 Création de demande (gratuit)
**Champs obligatoires :**
- Titre (max 100 caractères)
- Description détaillée
- Catégorie (liste prédéfinie : plomberie, électricité, déménagement, etc.)
- Localisation (ville/arrondissement, floutée publiquement)
- Budget min/max

**Limites anti-spam :**
- Max 3 demandes actives simultanément par user
- Modération automatique (scan de mots-clés suspects)
- Review manuelle si détection de contenu suspect

### 3.2 Visibilité des demandes
**Avant déblocage (pour les pros) :**
- Nombre total de demandes correspondant aux filtres
- **Aucun détail** (pas de titre, pas de preview)
- Éventuellement : carte avec zones géographiques floutées (heatmap)

**Après déblocage :**
- Titre complet
- Description complète
- Localisation précise
- Budget
- Date de publication
- Nombre de pros ayant déjà contacté (X/5)

### 3.3 Cycle de vie d'une demande
**États :**
- **Active** : moins de 5 pros l'ont débloquée
- **Full** : 5 pros (ou 7 avec premium) l'ont débloquée
- **Resolved** : demandeur marque comme résolu
- **Expired** : 30 jours sans activité
- **Deleted** : supprimée par le demandeur ou admin

---

## 4. Système de Filtres (Pros)

### 4.1 Filtres disponibles
- **Géolocalisation** : ville, département, rayon en km
- **Catégories** : sélection multiple
- **Budget** : fourchette min/max
- **Date de publication** : dernières 24h, 7 jours, 30 jours
- **Urgence** : tag "urgent" (optionnel)

### 4.2 Affichage après filtrage
```
🔍 37 demandes correspondent à vos critères

Aperçu géographique (optionnel) :
- Paris 11e : 5 demandes
- Paris 18e : 8 demandes
- 93 Seine-Saint-Denis : 12 demandes
- 94 Val-de-Marne : 12 demandes

Budget moyen : 300-800€

[Débloquer pour 37 tokens] [Débloquer en premium pour 74 tokens]
```

---

## 5. Messagerie Chiffrée

### 5.1 Architecture
**Chiffrement de bout en bout (E2E) :**
- Clé de chiffrement dérivée de `email_clair + password_clair` (côté client uniquement)
- Messages stockés chiffrés sur le serveur
- Serveur **ne peut pas** déchiffrer

**Stockage en "blob" :**
- 1 conversation = 2 blobs chiffrés (1 pour chaque participant)
- Chaque blob contient tout l'historique de la conversation
- Pas de messages individuels stockés

### 5.2 Fonctionnalités messagerie
- **Texte** : illimité
- **Médias** (photos/vidéos - optionnel v2) :
  - Max 5 Mo par image
  - Max 50 Mo par vidéo
  - Stockage temporaire : 14 jours max
  - Cache client local (IndexedDB)

### 5.3 Notifications
- Push notifications : "Nouveau message de Pro_8x7f9a"
- Email notifications (opt-in)
- Badge de messages non lus

### 5.4 Rétention des données
**Conversations texte :**
- Suppression automatique après **6 mois** d'inactivité
- Warning 30 jours avant suppression
- User peut exporter avant

**Médias :**
- Suppression automatique après **14 jours**
- Warning 24h avant expiration
- User peut télécharger avant

**Changement de mot de passe :**
- Suppression immédiate de tous les blobs de l'user
- L'autre participant garde son blob (peut toujours lire)

---

## 6. Modération et Sécurité

### 6.1 Modération des demandes (publiques)
**Scan automatique :**
- Mots-clés interdits
- Patterns suspects (combinaisons de mots)
- Détection de services illégaux

**Actions :**
- Flag pour review manuelle
- Blocage immédiat si contenu clairement illégal
- Ban du user

### 6.2 Modération des messages (privés)

**Système de "flags" client-side :**

**Avant chiffrement, scan local (JavaScript) :**
- Détection de numéros de téléphone
- Détection d'emails
- Détection de réseaux sociaux (@instagram, etc.)
- Mots-clés suspects : "cash", "espèces", "discret", "sans facture"
- Combinaisons suspectes

**Flags envoyés au serveur (anonymes) :**
```
Conversation A-B : +2 flags (catégories: contact_externe, paiement_externe)
```

**Le serveur ne voit PAS le contenu, juste les compteurs.**

**Actions automatiques par seuils :**
- **10 flags** → Warning in-app
- **25 flags** → Restriction temporaire (24h sans pouvoir envoyer de messages)
- **50 flags** OU 3+ signalements → Ban automatique

### 6.3 Signalement par les users
**User A signale User B :**
- User A peut partager son blob déchiffré avec le support
- Support review manuellement
- Si confirmé problématique → ban de User B + refund des tokens

**User B n'est pas informé** que son compte est sous investigation.

---

## 7. Fonctionnalités Avancées (v2)

### 7.1 Système de réputation (optionnel)
- Score de confiance basé sur :
  - Ancienneté du compte
  - Nombre de flags reçus
  - Tokens dépensés (pros) / demandes résolues (demandeurs)
- Visible publiquement (par pseudonyme)

### 7.2 Tokens premium
- 2 tokens pour accès prioritaire
- Passe outre la limite de 5 pros (slots 6-7 réservés aux premium)

### 7.3 Abonnements
- 50€/mois = 60 tokens + accès illimité aux demandes "basiques"
- Tokens servent pour demandes "premium" (gros budgets)

### 7.4 Export de données
- User peut télécharger toutes ses conversations (JSON ou PDF)
- Export de l'historique de tokens
- Conforme RGPD (droit à la portabilité)

---

## 8. MVP - Périmètre Minimal

### Inclure :
✅ Inscription/connexion (email/password hashés)
✅ Achat de tokens (Stripe, packs fixes)
✅ Publication de demandes (gratuit, limite 3 actives)
✅ Filtres (géo, catégorie, budget)
✅ Système de déblocage avec tokens (max 5 pros)
✅ Messagerie texte simple (blob chiffré)
✅ Flags automatiques (modération soft)
✅ Signalement users
✅ Auto-refund si demande pleine
✅ Suppression auto conversations > 6 mois

### Exclure du MVP :
❌ Tokens premium
❌ Médias (photos/vidéos)
❌ Application mobile (web responsive suffit)
❌ Système de notation/avis
❌ Analytics avancés
❌ Abonnements

---

## 9. CGU et Conformité

### 9.1 Mentions obligatoires

**Anonymat et privacy :**
```
- Vos échanges sont chiffrés de bout en bout
- Nous ne pouvons pas lire vos messages
- Votre email n'est jamais exposé publiquement
- Pseudonymes utilisés sur la plateforme
```

**Modération :**
```
- Les demandes publiques sont modérées automatiquement
- Les messages sont analysés localement avant chiffrement
  pour détecter des comportements interdits
- En cas de signalement, des actions peuvent être prises
```

**Rétention des données :**
```
- Conversations supprimées après 6 mois d'inactivité
- Médias supprimés après 14 jours
- Warning avant suppression automatique
- Changement de mot de passe = suppression de vos conversations
```

**Paiements et remboursements :**
```
- Tokens sans expiration (12 mois de validité)
- Remboursement automatique en cas de demande indisponible
- Pas de remboursement si demande légitime mais non aboutie
```

### 9.2 RGPD
- Données minimales collectées (email hashé, pas de nom/prénom)
- Droit à l'export des données
- Droit à la suppression du compte
- Pas de revente de données
- Cookies strictement nécessaires uniquement

### 9.3 Légal
- Responsabilité limitée : plateforme de mise en relation
- Modération proactive (détection automatique)
- Coopération avec les autorités si requis
- Interdiction stricte d'activités illégales (prostitution, drogue, travail au noir)

---

## 10. Roadmap Suggérée

**Phase 1 - MVP (3-4 mois) :**
- Inscription/auth
- Tokens + Stripe
- Demandes + filtres
- Messagerie texte chiffrée
- Modération basique

**Phase 2 - Amélioration (2-3 mois) :**
- Médias (photos/vidéos)
- Tokens premium
- Système de réputation
- Analytics

**Phase 3 - Scale (ongoing) :**
- App mobile (React Native)
- Abonnements
- Notifications avancées
- Support client amélioré

---

**Date de création :** 2025-01-16
**Version :** 1.0
**Statut :** Draft pour validation
