# Scope v0.302 — Phase 3 Social (suite) **Version cible** : v0.302 (X=3, Y=2) **Prérequis** : v0.301 taguée et mergée dans main **Objectif** : Chat (appels, notifications), Social (groupes avancés), Présence enrichie **Dernière mise à jour** : 20 février 2026 **Effort estimé** : 6-8 semaines de développement --- ## 1. Principe directeur > **v0.302 = suite Phase 3 Social.** > > Quatre axes principaux : > 1. **Groupes avancés (Lot S2)** : Demander à rejoindre, inviter, rôles, feed groupes > 2. **Notifications push (Lot N1)** : Web Push API navigateur > 3. **Chat appels (Lot C2)** : Appels audio/vidéo WebRTC (MVP) > 4. **Présence enrichie (Lot P2)** : Rich presence (track en cours), mode invisible --- ## 2. Contexte — État post v0.301 ### 2.1 Livré en v0.301 | Lot | Feature | Statut | |-----|---------|--------| | P0 | Chat Server compilable, auth WebSocket | ✅ | | C1 | Typing indicators, read receipts, delivered | ✅ | | P1 | Présence API, PresenceBadge, last_seen | ✅ | | S1 | Feed enrichi, pagination, explore, filtres all/following/groups | ✅ | ### 2.2 Fondation existante (à enrichir) | Domaine | Existant | À ajouter v0.302 | |---------|----------|-------------------| | **Groupes** | CRUD, join, leave, rôles (admin/modo/member) | Demander à rejoindre (privé), inviter, feed groupes | | **Notifications** | In-app (liste, marquer lu) | Web Push navigateur | | **Chat** | DM, rooms, typing, receipts | Appels audio/vidéo WebRTC | | **Présence** | online/away/offline, last_seen | Rich presence (track), mode invisible | ### 2.3 Composants techniques | Composant | État | Action v0.302 | |-----------|------|---------------| | veza-backend-api | ✅ | Nouvelles routes groupes, push subscriptions | | veza-chat-server | ✅ | Signalisation WebRTC (si Lot C2) | | apps/web | ✅ | Groupes avancés UI, Web Push, appels UI | | Stream Server | ⚠️ | Hors scope (pas nécessaire pour appels) | --- ## 3. Features IN SCOPE v0.302 ### 3.1 Lot S2 — Groupes avancés **Objectif** : Enrichir les groupes sociaux (demander à rejoindre, inviter, feed). **Effort** : M (4-5 jours) **Référence** : veza_full_features_list.md §6.3 (216-225) | # | Feature | Tâche détaillée | Backend | Frontend | Critère de sortie | |---|---------|-----------------|---------|----------|-------------------| | S2.1 | **Demander à rejoindre** | Groupe privé : requête d'adhésion | POST /groups/:id/request, table group_join_requests | Bouton « Demander à rejoindre », liste demandes (admin) | Flux demande → approbation fonctionnel | | S2.2 | **Inviter membres** | Admin/modo peut inviter par email ou user_id | POST /groups/:id/invite, notifications | Modal inviter, lien ou recherche user | Invitation envoyée, user peut accepter | | S2.3 | **Rôles (assign/revoke)** | Promouvoir modo, rétrograder | PUT /groups/:id/members/:user_id/role | UI rôles dans GroupDetailView | Admin peut changer rôle membre | | S2.4 | **Feed groupes** | Posts des groupes dont user est membre | GetGlobalFeed type=groups déjà implémenté | Vérifier filtre groups retourne données | Feed « Groupes » affiche posts des groupes | | S2.5 | **Liste mes groupes** | Groupes dont l'utilisateur est membre | GET /social/groups/mine | Onglet ou section « Mes groupes » | Liste groupes de l'utilisateur | **Fichiers clés** : - Backend : `group_service.go`, `social_group_handler.go`, migrations - Frontend : `GroupDetailView`, `GroupsView`, `groupService.ts`, `SocialViewFeed` (filtre groups) --- ### 3.2 Lot N1 — Notifications push (Web Push) **Objectif** : Notifications navigateur (sans FCM/APNs). **Effort** : M (3-4 jours) **Référence** : Module 2.3 (61-62), features 529, 552-553 | # | Feature | Tâche détaillée | Backend | Frontend | Critère de sortie | |---|---------|-----------------|---------|----------|-------------------| | N1.1 | **Subscription** | Enregistrer endpoint Web Push | POST /notifications/push/subscribe (VAPID) | Service Worker, pushManager.subscribe | Subscription stockée | | N1.2 | **Envoi** | Déclencher push sur événement (follow, like, message) | Intégrer web-push dans notification_service | — | Push reçu en arrière-plan | | N1.3 | **Préférences** | Activer/désactiver par type | GET/PUT /notifications/preferences | Settings notifications | User peut activer/désactiver push | | N1.4 | **Badge** | Compteur non lus sur icône | — | Badge sur favicon ou titre | Badge mis à jour | **Fichiers clés** : - Backend : `notification_service.go`, `notification_handlers.go`, migration push_subscriptions - Frontend : `sw.ts` (service worker), `useNotifications`, settings **Note** : FCM/APNs pour mobile reportés v0.303+. --- ### 3.3 Lot C2 — Chat appels (WebRTC) **Objectif** : Appels audio/vidéo 1-to-1 via WebRTC. **Effort** : L (5-7 jours) **Référence** : Module 5, Video chat intégré (full_features 487) | # | Feature | Tâche détaillée | Chat Server | Frontend | Critère de sortie | |---|---------|-----------------|-------------|----------|-------------------| | C2.1 | **Signalisation** | SDP/ICE via WebSocket | Messages CallOffer, CallAnswer, ICECandidate | Échange WebRTC via WS | Connexion peer-to-peer établie | | C2.2 | **UI appel** | Bouton appeler, modal appel entrant/sortant | — | CallButton, IncomingCallModal, ActiveCallBar | Appel initié, accepté, refusé | | C2.3 | **Audio uniquement (MVP)** | Appel audio 1-to-1 | — | getUserMedia audio | Appel audio fonctionnel | | C2.4 | **Vidéo (optionnel)** | Activer caméra | — | getUserMedia video | Appel vidéo si temps | **Fichiers clés** : - Chat Server : `websocket/handler.rs`, types CallOffer, CallAnswer, ICECandidate - Frontend : `useWebRTC`, `CallModal`, `chatStore` (call state) **Option** : Si effort trop élevé, reporter C2 en v0.303 et garder S2, N1, P2. --- ### 3.4 Lot P2 — Présence enrichie **Objectif** : Rich presence (track en cours), mode invisible. **Effort** : S (2-3 jours) **Référence** : V0_301 HORS SCOPE → v0.302 | # | Feature | Tâche détaillée | Backend | Frontend | Critère de sortie | |---|---------|-----------------|---------|----------|-------------------| | P2.1 | **Rich presence** | Champ status_message = « Écoute X » | PresenceService.UpdatePresence(track_id, track_title) | Player envoie track en cours | « Écoute Midnight Drive » affiché | | P2.2 | **Mode invisible** | User peut masquer statut | PUT /users/me/presence (invisible: true) | Toggle paramètres | Statut masqué pour les autres | **Fichiers clés** : - Backend : `presence_handler.go`, `user_presence` (colonne invisible) - Frontend : `playerStore`, `PresenceBadge`, settings --- ## 4. Récapitulatif par lot | Lot | Priorité | Effort | Dépendances | |-----|----------|--------|-------------| | S2 | Haute | M (4-5 j) | Aucune | | N1 | Haute | M (3-4 j) | Aucune | | C2 | Moyenne | L (5-7 j) | Chat Server stable | | P2 | Moyenne | S (2-3 j) | P1 (présence) | **Ordre recommandé** : S2, N1 en parallèle → P2 → C2 (ou C2 reporté). --- ## 5. Features HORS SCOPE v0.302 | Feature | Raison | Version cible | |---------|--------|---------------| | FCM / APNs (mobile) | Infra externe, apps natives | v0.303+ | | Appels de groupe (3+) | Complexité WebRTC | v0.304+ | | Chiffrement E2E messages | Effort majeur | v0.303+ | | Forum de discussion par groupe | Scope S2 suffit | v0.303 | | Événements de groupe | Scope S2 suffit | v0.303 | --- ## 6. Migrations et schémas | Migration | Description | |-----------|-------------| | 089 | group_join_requests (group_id, user_id, status, created_at) | | 090 | push_subscriptions (user_id, endpoint, p256dh, auth, created_at) | | 091 | user_presence.invisible (BOOLEAN DEFAULT false) — si pas déjà dans 088 | --- ## 7. Critères de livraison v0.302 - [ ] Lot S2 : Demander à rejoindre, inviter, rôles, feed groupes, mes groupes - [ ] Lot N1 : Web Push subscription, envoi sur événement, préférences - [ ] Lot C2 : Appel audio 1-to-1 (ou reporté avec ticket) - [ ] Lot P2 : Rich presence (track), mode invisible - [ ] Tests : `go test ./...` OK, `npm run build` OK - [ ] Documentation : FEATURE_STATUS, PROJECT_STATE, CHANGELOG mis à jour --- ## 8. Checklist pré-merge - [ ] Tous les lots IN SCOPE terminés ou reportés (avec ticket) - [ ] Pas de régression sur v0.301 - [ ] SCOPE_CONTROL.md référence V0_302_RELEASE_SCOPE.md - [ ] FEATURE_STATUS.md mis à jour - [ ] CHANGELOG v0.302 - [ ] MSW handlers pour nouvelles routes --- ## 9. Transition vers v0.303 À l'issue de v0.302 : - Phase 3 Social avancée (~400 / 600 features) - Prochaine version : **v0.303** — Chat (E2E, appels groupe), Notifications (FCM), Social (forum groupes) - Document de scope : `V0_303_RELEASE_SCOPE.md` (à créer après tag v0.302) --- ## Références - [V0_301_RELEASE_SCOPE.md](V0_301_RELEASE_SCOPE.md) — Version précédente - [SCOPE_CONTROL.md](SCOPE_CONTROL.md) — Processus anti-scope-creep - [FEATURE_STATUS.md](FEATURE_STATUS.md) — Statut des features - [PROJECT_STATE.md](PROJECT_STATE.md) — État actuel du projet - [veza_full_features_list.md](archive/root-md/veza_full_features_list.md) — Cible v1.0 (600 features)