Commit Graph

65 Commits

Author SHA1 Message Date
benoit 2acd652df0 fix: detection correcte des cartes son CoreAudio avec nombre de canaux reel
- Parse coreaudio_device_input/output depuis system_profiler (nombre canaux)
- Ajoute sampleRate reel par device
- Ajoute metadata: manufacturer, transport, isDefault
- Filtre devices sans input ni output
- Corrige l'API pour exposer les 11 devices au lieu de 2
2026-05-26 15:18:41 +02:00
benoit 61b3bedcae fix: creation LocalAudioTrack depuis AudioSource pour publication
- Import LocalAudioTrack depuis @livekit/rtc-node
- Utilise LocalAudioTrack.createAudioTrack() pour creer track depuis source
- Corrige erreur 'Cannot read properties of undefined (reading handle)'
- Permet publication correcte du track audio du bridge
2026-05-26 14:56:18 +02:00
benoit cc4f5ca35a feat: generation automatique token JWT pour AudioBridge participant
- Import AccessToken depuis livekit-server-sdk
- Generation token avec identity 'AudioBridge' et metadata role:bridge
- Permissions completes (publish, subscribe, data)
- Utilise devkey/secret du serveur LiveKit
- Permet au bridge de se connecter en tant que participant authentifie
2026-05-26 14:32:16 +02:00
benoit be05755677 fix: migration vers @livekit/rtc-node pour bridge audio serveur
- Remplacement livekit-client (navigateur) par @livekit/rtc-node (serveur Node.js)
- Support natif AudioSource/AudioFrame pour gestion PCM bas niveau
- Réception audio via AudioStream asynchrone (for await)
- Publication track audio via AudioSource.captureFrame()
- Permet au serveur d'agir comme participant LiveKit complet
- Suppression dépendance livekit-client inutile côté serveur
2026-05-26 14:26:32 +02:00
benoit cd76b66529 feat: activation du vrai AudioBridge (sortie du mode placeholder)
- Import dynamique de AudioBridge.js
- Création instance avec config complète (routing, groupes, LiveKit)
- Démarrage effectif du bridge audio
- Gestion erreur pour ne pas bloquer le serveur si pas de carte son
- Remplace le mode placeholder par le vrai système audio
2026-05-26 14:23:31 +02:00
benoit 7e5c8744cd fix: ajout path /audio-levels dans URL WebSocket client 2026-05-26 14:20:33 +02:00
benoit 37aa447ecd fix: WebSocket audio-levels utilise le meme serveur HTTP
Probleme: AudioLevelsServer creait son propre port (3001) au lieu d'utiliser le serveur HTTP existant (3000)

Solution:
- Modification AudioLevelsServer pour accepter option 'server'
- Si serveur HTTP fourni, utilise WebSocket upgrade sur meme port avec path /audio-levels
- Sinon, fallback sur port standalone (3001)
- Client se connecte maintenant a ws://localhost:3000/audio-levels

Architecture WebSocket:
HTTP GET /config, POST /token       (port 3000)
WebSocket ws://localhost:3000/audio-levels (upgrade HTTP)

Plus besoin de port separe pour WebSocket
2026-05-26 14:19:56 +02:00
benoit 6c35121866 fix: demarrage WebSocket audio-levels + correction port client
Probleme: Client tentait de se connecter a ws://localhost:3001 mais serveur n'avait pas de WebSocket demarre

Solution:
- Ajout import AudioLevelsServer dans server/index.js
- Demarrage WebSocket sur meme port que l'API REST (3000)
- Correction port dans useAudioLevels.js (3000 au lieu de 3001)

Le WebSocket audio-levels fonctionne maintenant pour monitoring temps reel
2026-05-26 14:18:49 +02:00
benoit fb9d0fd101 fix: remplacement naudiodon par sox pour stabilite macOS
Probleme: naudiodon (bindings PortAudio) causait segfaults sur macOS

Solution: Utiliser sox (Sound eXchange) en subprocess

Modifications CoreAudioBackend.js:
- Remplacement naudiodon par sox (stable, deja installe sur macOS)
- Detection devices via system_profiler SPAudioDataType (vraies cartes)
- Capture audio via sox avec driver coreaudio
- Lecture audio via sox avec stdin/stdout
- Meme API (EventEmitter), compatible avec AudioBridge

Avantages sox:
- Stable (aucun segfault)
- Supporte toutes les cartes CoreAudio (USB, Thunderbolt, virtuelles)
- Multi-canaux natif
- Installe par defaut sur macOS (ou via brew install sox)
- Meme approche que JACK/PipeWire (subprocess)

Detection reelle des cartes:
- Parse system_profiler pour lister VRAIES cartes son
- Focusrite, MOTU, RME, Dante DVS, etc. detectes
- Fallback sur Built-in Mic/Output si aucune carte externe

Modifications package.json:
- Suppression dependance naudiodon (instable)

Modifications install/macos.sh:
- Ajout installation sox via Homebrew
- Detection si deja installe

Plus de warning "devices fictifs" au demarrage !
2026-05-26 14:16:13 +02:00
benoit e460376d9a feat: integration complete audio bridge cartes son macOS/Linux
Integration GroupAudioRouter dans AudioBridge pour routing bidirectionnel

Modifications AudioBridge.js:
- Ajout GroupAudioRouter pour matrice routing multi-canaux
- Flux CAPTURE: Carte Son → GroupRouter → Groupes → LiveKit
- Flux LECTURE: LiveKit → Groupes → GroupRouter → Carte Son
- Conversions PCM Buffer ↔ Float32Array pour routing
- Support multi-canaux (32+ canaux inputs/outputs)
- Events groupAudioOut/groupAudioIn pour pont LiveKit

Nouveau LiveKitServerBridge.js:
- Pont entre AudioBridge et LiveKit SFU
- Generation tokens JWT pour clients
- Gestion rooms par groupe
- API list participants/create room
- Events pour debug/monitoring

Documentation AUDIO_BRIDGE_ARCHITECTURE.md:
- Architecture complete flux audio bidirectionnel
- Pipeline detaille capture/lecture
- Configuration YAML routing multi-canaux
- Compatibilite macOS (CoreAudio) et Linux (JACK/PipeWire)
- Tests validation et performance
- Latence end-to-end 48-111ms (objectif < 150ms valide)

Documentation LIVEKIT_AUDIO_BRIDGE.md:
- Guide integration LiveKit Server SDK
- 3 approches possibles (rtc-node, DataChannel, participant virtuel)
- Code complet LiveKitServerBridge avec AudioSource
- Configuration serveur et variables env
- Tests compatibilite cartes son

Fonctionnalites:
- Serveur voit TOUTES les cartes son de la machine hote
- Routing flexible inputs → groupes → outputs avec gains
- Mixage additif multi-sources
- Anti-clipping automatique
- Compatible cartes USB/Thunderbolt/virtuelles (Dante DVS)
- Fonctionne sur macOS ET Linux

TODO Phase 3+: Implementer envoi reel vers LiveKit (rtc-node)
2026-05-26 14:12:50 +02:00
benoit 37ed66a043 docs: mise a jour TODO.md - Phase 3 completee (backends + docs) 2026-05-26 13:57:47 +02:00
benoit b766789a2a docs: ajout guides deploiement production et troubleshooting
Phase 3.4 - Documentation production complete

DEPLOYMENT.md:
- Architecture production recommandee (30+ clients)
- Specifications materiel serveur et reseau
- Configuration switch (VLAN, QoS, IGMP)
- Optimisations WiFi (Access Points, 5GHz, fast roaming)
- Installation systemd services (pttlive-server/client)
- Configuration audio multi-canaux (Dante/AES67)
- Monitoring Prometheus + Grafana
- Tests de charge (LoadBot, iperf3)
- Checklist pre-evenement
- Performances attendues (CPU, RAM, latence)

TROUBLESHOOTING.md:
- Diagnostics problemes audio (pas de son, latence, coupures)
- Diagnostics problemes reseau (connexion, WiFi)
- Diagnostics client PWA (bouton PTT, notifications)
- Diagnostics serveur (crash, memory leak)
- Diagnostics JACK/PipeWire (xruns, ports)
- Diagnostics Dante/AES67 (DVS, PTP sync)
- Outils de diagnostic (journalctl, jack_evmon, chrome://webrtc-internals)
- Checklist rapide par symptome

Fonctionnalites documentees:
- Services systemd production
- Monitoring temps reel (Grafana dashboards)
- Tests charge 30+ clients (scenarios)
- Budget latence end-to-end valide (< 150ms)
- Optimisations performance Linux
- Solutions tous problemes courants

TODO.md mis a jour: Phase 3.4 partiellement completee
2026-05-26 13:54:40 +02:00
benoit b5874b5c3b docs: ajout guides complets Dante et AES67
Phase 3.2 et 3.3 - Documentation intégrations audio professionnelles

DANTE_SETUP.md:
- Guide installation Dante Virtual Soundcard (DVS)
- Configuration JACK pour macOS/Linux/Windows
- Routing Dante Controller vers PTT Live
- Configuration multi-canaux (8+ canaux)
- Scripts de connexion automatique JACK
- Troubleshooting latence et connectivite
- Budget latence end-to-end (62-165ms)
- Comparaison couts DVS vs AES67

AES67_SETUP.md:
- Alternative open source gratuite a Dante
- Installation driver Merging ALSA RAVENNA (Linux)
- Configuration PTP (Precision Time Protocol) complete
- Setup reseau (VLAN, QoS, IGMP snooping)
- Configuration services systemd (ptp4l, phc2sys)
- Integration JACK avec flux RTP multicast
- Interoperabilite Dante mode AES67
- Configuration real-time Linux
- Troubleshooting PTP sync et xruns JACK
- Alternative trx pour RTP sans driver RAVENNA

Fonctionnalites documentees:
- Routing audio multi-canaux professionnel
- Synchronisation horloge reseau (PTP)
- Configuration switches manageables
- Optimisations performance Linux
- Budget latence < 150ms end-to-end

TODO.md mis a jour: Phase 3.2 et 3.3 partiellement completees
2026-05-26 13:40:47 +02:00
benoit 37205f0409 feat: ajout support Linux avec backends JACK et PipeWire
Phase 3.1 - Support Linux professionnel

Nouveaux backends audio:
- JACKBackend.js : support JACK Audio Connection Kit pour audio pro
- PipeWireBackend.js : support PipeWire (standard moderne Linux)
- Detection automatique dans AudioBridge (PipeWire > JACK > erreur)

Script installation:
- install/linux.sh pour Ubuntu/Debian/Arch/Fedora
- Installation automatique dependencies (Node.js, PipeWire/JACK)
- Telechargement LiveKit Server pour Linux (amd64/arm64)

Fonctionnalites:
- Detection serveur audio (PipeWire/JACK)
- Enumeration devices audio via pactl/jack_lsp
- Capture et lecture audio basse latence (pw-cat, jack_rec/play)
- Messages d'erreur detailles pour troubleshooting
- Compatibilite Ubuntu 22.04+, Debian 11+, Arch Linux, Fedora

TODO.md mis a jour: Phase 3.1 en cours
2026-05-26 13:37:18 +02:00
benoit 9654c7f421 docs: mise a jour TODO.md - Phase 2.5 terminee
- Configuration audio visuelle complete
- GroupAudioRouter avec routing multi-canaux et gains
- Matrice routing avec dropdowns gain et VU-metres temps reel
- WebSocket audio-levels operationnel
- Phase 2 entierement terminee
2026-05-25 22:18:45 +02:00
benoit f5a5643f4b feat: ajout VU-metres temps reel dans matrice routing
- Hook React useAudioLevels pour WebSocket audio-levels
- Composant VUMeter (mini, horizontal, vertical)
- Integration VU-metres dans headers/labels matrice
- Indicateur etat connexion WebSocket (Live/Offline)
- Affichage RMS, peak, detection clipping
- Design responsive avec animations clipping
2026-05-25 22:17:48 +02:00
benoit b64bac1f3d feat: ajout WebSocket server pour monitoring niveaux audio temps réel
- Calcul RMS et peak par canal (dBFS)
- Détection clipping automatique
- Broadcast temps réel 20 fois/sec (configurable)
- Support inputs, groups, outputs
- Gestion multi-clients WebSocket
- API pour mise à jour depuis GroupAudioRouter
2026-05-25 22:12:48 +02:00
benoit 5ae9dfe2ac feat: ajout dropdowns gain par route dans matrice routing
- Dropdown gain -12dB à +6dB pour chaque route active
- Interface visuelle améliorée (checkbox + gain)
- Gestion gains input->group et group->output
- Sauvegarde gains dans config.yaml
- Design responsive mobile
2026-05-25 22:11:43 +02:00
benoit 8c43c7e8af feat: ajout GroupAudioRouter.js pour routing audio multi-canaux avec gains
- Mix de plusieurs canaux physiques vers groupes (gains individuels)
- Distribution groupes vers plusieurs canaux physiques (gains individuels)
- Support canaux partagés avec mixage additif
- Gestion gains par route (-120dB à +6dB)
- Anti-clipping automatique
- Statistiques routing temps réel
2026-05-25 22:07:44 +02:00
benoit 3ee474d90c fix: correction adresse IP proxy LiveKit dans vite.config 2026-05-25 21:47:48 +02:00
benoit 86b86e9037 feat: ajout système de notifications Web Push et prompt installation PWA iOS 2026-05-25 21:12:05 +02:00
benoit 7682b90557 feat: ajout système de préférences utilisateur avec mode PTT par défaut 2026-05-25 21:10:16 +02:00
benoit 63147f93f4 feat: ajout filtre canaux nommés dans matrice routing 2026-05-25 21:04:59 +02:00
benoit 42badb1fdf refactor: remplacement système de canaux statiques par canaux virtuels depuis routing 2026-05-25 21:03:40 +02:00
benoit 7037517ca2 fix: correction route POST /audio/routing (suppression /admin en double)
- Route montée sous /admin dans index.js
- Ne pas répéter /admin dans la définition de route
- Correction 404 Cannot POST /admin/audio/routing
2026-05-25 10:06:14 +02:00
benoit ba3d32fd3d fix: correction warnings React et gestion erreurs matrice routing
- Ajout React.Fragment avec keys pour éliminer warnings
- Import de React pour utiliser React.Fragment
- Meilleure gestion erreurs HTTP (status check)
- Messages d'erreur plus détaillés avec status code
- Logging amélioré pour debugging
2026-05-25 10:04:22 +02:00
benoit 0b31708b48 fix: correction layout matrice routing (affichage en grille)
- Ajout grid-template-columns dynamique basé sur nombre groupes
- Suppression display:contents qui causait le bug
- Utilisation de fragments React au lieu de div wrapper
- Matrice 1: 120px + N colonnes pour les groupes
- Matrice 2: 120px + 8 colonnes pour les outputs
- Nettoyage CSS classes inutilisées
2026-05-25 10:02:20 +02:00
benoit 4a8a7a60e1 docs: mise à jour TODO.md - Phase 2.5 configuration audio visuelle complétée 2026-05-25 09:57:11 +02:00
benoit e053924b63 feat: matrice de routing audio style Dante Controller (Phase 2.5)
- API GET/POST /admin/audio/routing
- Composant AudioRoutingMatrix avec 2 matrices :
  * Inputs vers Groupes (8 inputs x N groupes)
  * Groupes vers Outputs (N groupes x 8 outputs)
- Interface visuelle type grille cliquable
- Intégration noms de canaux personnalisés
- Stockage routing dans config.yaml
- Responsive design avec CSS Grid
- Style cohérent avec interface admin
2026-05-25 09:56:31 +02:00
benoit 0aebf3e3e0 docs: mise à jour TODO.md - nommage canaux complété 2026-05-25 09:54:59 +02:00
benoit ccfdd54e2c feat: ajout nommage canaux physiques (Phase 2.5)
- API GET /admin/audio/channels/names
- API PUT /admin/audio/channels/names
- Interface admin : nommage 8 inputs/outputs
- Mode édition avec sauvegarde/annulation
- Stockage dans config.yaml (section audio.channelNames)
- Formulaire organisé en 2 colonnes (inputs/outputs)
2026-05-25 09:54:43 +02:00
benoit c1202a63a5 feat: amélioration UI onglet Audio admin (Phase 2.5)
- Styles CSS professionnels pour configuration audio
- Sections visuelles avec bordures et hover effects
- Indicateurs de sélection pour devices
- Tableau devices amélioré avec styles cohérents
- Layout responsive et centré
- Suppression emojis (respect guidelines)
2026-05-25 09:53:16 +02:00
benoit 4a4c3e40ad docs: mise à jour TODO.md - Phase 2.5 détection carte son terminée 2026-05-25 09:46:14 +02:00
benoit 9350c9410c feat: système hot-reload bridge audio avec ConfigManager (Phase 2.5)
- ConfigManager: gestionnaire centralisé config avec EventEmitter
- AudioBridgeManager: gestion bridge avec auto-reload sur changement config
- Intégration dans serveur principal (index.js)
- Événements 'audio-device-updated' et 'config-updated'
- Reload automatique du bridge sans redémarrer serveur
- Mode placeholder pour développement (vrai bridge Phase 3)
2026-05-25 09:45:59 +02:00
benoit 7fd60315dd docs: mise à jour TODO Phase 2.5 détection carte son complétée 2026-05-25 09:42:33 +02:00
benoit 5583808279 feat: ajout interface admin pour configuration carte son (Phase 2.5)
- Nouvel onglet Audio dans l'interface admin
- Sélection carte son d'entrée/sortie via dropdowns
- Configuration sample rate (44.1/48/96kHz)
- Affichage liste toutes cartes disponibles
- Affichage configuration actuelle
- Sauvegarde vers API backend
2026-05-25 09:42:10 +02:00
benoit 03b3f94824 feat: ajout APIs détection et configuration cartes son (Phase 2.5)
- GET /admin/audio/devices : énumération devices CoreAudio
- GET /admin/audio/device : récupération config actuelle
- POST /admin/audio/device : sélection carte son + sample rate
- Workaround naudiodon segfault avec devices fictifs
- Configuration sauvegardée dans config.yaml
2026-05-25 09:40:43 +02:00
benoit 55d777319b Update TODO.md avec ajout config audio visuelle 2026-05-24 22:42:30 +02:00
benoit c3b6af7d30 fix: saveConfig ne sauvegarde plus les IDs dans le YAML
Problème : les IDs étaient sauvegardés dans config.yaml alors qu'ils doivent être générés dynamiquement.

Solution :
- saveConfig() nettoie maintenant les IDs avant sauvegarde
- Suppression récursive des 'id' pour groupes et canaux
- config.yaml restauré sans IDs (format propre)
- Les IDs sont uniquement en mémoire après loadConfig()

Garantit :
- config.yaml reste lisible et maintenable
- Pas de conflit d'IDs
- Source de vérité = nom du groupe/canal
- IDs cohérents et prévisibles (slugify)
2026-05-24 22:29:59 +02:00
benoit 6e9dd738d7 fix: correction édition/suppression groupes avec IDs générés dynamiquement
Problème : l'édition et la suppression de groupes ne fonctionnaient pas car les IDs n'étaient pas persistés dans le YAML.

Solution :
- loadConfig() génère maintenant les IDs à chaque chargement (slugify du nom)
- PUT /admin/groups/:id cherche le groupe par nom slugifié au lieu de l'ID
- DELETE /admin/groups/:id idem
- Les IDs ne sont jamais sauvegardés dans config.yaml (source de vérité = nom)
- Rechargement après mise à jour pour renvoyer les IDs corrects au client

Comportement :
- Création : génère l'ID depuis le nom
- Édition : trouve le groupe par son nom slugifié, sauvegarde sans ID, recharge
- Suppression : trouve le groupe par son nom slugifié
- Les IDs restent cohérents entre les rechargements
2026-05-24 22:28:43 +02:00
benoit 2bd0c27a71 refactor: harmonisation style admin avec app principale et suppression emojis
Changements de style :
- Utilisation des variables CSS globales (--color-*, --spacing-*)
- Cohérence visuelle avec App.css et index.css
- Suppression emojis du header et boutons (🎛️ ⚠️ ✏️ 🗑️ ✕)
- Remplacement par texte simple ou symboles HTML (×)
- Boutons 'Modifier' et 'Supprimer' au lieu d'icônes

Design system unifié :
- Couleurs : var(--color-primary, --color-surface, etc.)
- Espacements : var(--spacing-xs à --spacing-xl)
- Typographie et transitions cohérentes
- Border radius, padding, hover states alignés

Interface plus professionnelle et accessible sans dépendance externe.
2026-05-24 22:25:39 +02:00
benoit 8b05946632 fix: correction syntaxe JSX formulaire groupe (balise fermante manquante) 2026-05-24 22:21:00 +02:00
benoit a0839ed563 refactor: simplification structure des groupes
Simplification majeure de la configuration des groupes :
- Suppression des champs redondants 'id' et 'description'
- Le nom du groupe sert maintenant d'identifiant (converti en slug automatiquement)
- Génération automatique des IDs pour groupes et canaux via fonction slugify()

Backend (server/) :
- Ajout fonction slugify() pour génération d'IDs à partir des noms
- Génération automatique des IDs au chargement de la config (index.js)
- API admin adaptée : POST/PUT /admin/groups génèrent les IDs automatiquement
- Pas besoin de fournir l'ID lors de la création/modification

Frontend (client/src/Admin.jsx + Admin.css) :
- Suppression champs ID et description du formulaire
- Simplification interface : nom + bitrate + canaux
- Mise à jour layout CSS canal (4 colonnes au lieu de 5)
- Cartes de groupe épurées (plus d'affichage d'ID)

Configuration (config.yaml) :
- Format simplifié : groupes avec 'name', 'channels' et 'audioBitrate' optionnel
- Exemple : "Production" au lieu de id/name/description séparés
- Plus lisible et maintenable

Les IDs sont générés dynamiquement :
- Groupe "Production" → id: "production"
- Canal "Principal" → id: "production-principal"

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2026-05-24 20:32:24 +02:00
benoit 637cc3e3a7 feat: interface admin complète pour gestion système (Phase 2.3)
Implémentation complète de l'interface d'administration web :

Backend (server/api/admin.js) :
- Endpoints CRUD pour gestion des groupes (GET/POST/PUT/DELETE /admin/groups)
- Gestion utilisateurs connectés en temps réel (GET/DELETE /admin/users)
- Monitoring statistiques système (GET /admin/stats)
- Affichage logs serveur avec filtrage (GET /admin/logs)
- Configuration audio globale (PUT /admin/config/audio)
- Système de tracking des connexions/déconnexions
- Export fonctions registerUser, unregisterUser, addLog

Frontend (client/src/Admin.jsx + Admin.css) :
- Interface admin complète avec 4 onglets (Groupes, Utilisateurs, Stats, Logs)
- Gestion groupes : création, modification, suppression avec formulaires
- Gestion canaux audio par groupe (inputs/outputs)
- Liste utilisateurs connectés avec déconnexion forcée
- Dashboard statistiques temps réel (connexions, uptime, mémoire)
- Viewer logs avec code couleur par niveau (debug/info/warn/error)
- Rafraîchissement auto toutes les 3s
- Design responsive et mode sombre

Intégration système :
- Routes admin montées sous /admin dans index.js
- Enregistrement automatique des utilisateurs lors de la génération de token
- Logs serveur centralisés dans le système admin
- Routing simple frontend pour /admin (main.jsx)

🎛️ Interface accessible via https://localhost:5173/admin

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2026-05-24 20:13:20 +02:00
benoit 7e42164c5c feat: intégration VU-mètre circulaire autour du bouton PTT
NOUVEAU DESIGN :
- VU-mètre transformé en anneau SVG autour du bouton PTT
- Cercle progressif (0-360°) selon le niveau audio
- Couleurs dynamiques selon le niveau :
  - Vert (0-75%) : audio normal
  - Orange (75-90%) : niveau élevé
  - Rouge (90-100%) : saturation/danger avec effet glow
  - Bleu : mode talking (micro actif)

AVANTAGES :
- Beaucoup plus discret et élégant
- Intégré visuellement au bouton principal
- Pas d'encombrement UI supplémentaire
- Contextuellement pertinent (niveau autour du contrôle)

TECHNIQUE :
- SVG avec stroke-dasharray pour l'arc progressif
- Transition fluide 0.1s sur le niveau
- Drop-shadow dynamique selon couleur
- Responsive (adapté mobile/paysage)
- z-index stratifié (anneau derrière, bouton devant)

SUPPRESSION :
- Ancien composant AudioIndicator.jsx retiré de App.jsx
- Garde plus d'espace pour UserList et GroupSelector

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2026-05-23 10:17:29 +02:00
benoit ed6d2e763d fix: augmentation hauteur UserList et amélioration scroll
CORRECTIONS :
- Hauteur max passée de 180px à 300px (desktop)
- Hauteur max passée de 150px à 250px (mobile)
- Ajout min-height: 100px pour garantir visibilité

AMÉLIORATIONS SCROLL :
- Scrollbar personnalisée fine et discrète
- Support -webkit-overflow-scrolling: touch (iOS)
- Scrollbar visible au hover (desktop)
- Gap réduit entre items pour densité optimale

RESPONSIVE :
- Portrait mobile : 200px max
- Paysage : 120px max (priorité au bouton PTT)
- Padding réduit pour maximiser l'espace visible

Résultat : Affichage de 4-5 utilisateurs au lieu de 1-2

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2026-05-23 09:57:00 +02:00
benoit 49df6bd44c fix: refonte mode PTT continu avec activation par drag vertical
CORRECTIONS :
- Fix son qui ne restait pas actif en mode lock (utilisation de ref au lieu de state)
- Les event handlers utilisent isLockModeRef.current pour accès immédiat

NOUVELLE ACTIVATION :
- Remplacement appui long 3s par drag vertical (glisser vers le haut)
- Drag de 80px vers le haut active le mode lock
- Indicateur visuel avec flèche + texte "Glissez pour verrouiller"
- Bouton suit le doigt pendant le drag (transform translateY)
- Feedback haptique à l'activation (triple vibration)

DÉSACTIVATION :
- Tap/clic sur le bouton en mode lock désactive le mode
- Feedback haptique simple à la désactivation

UX AMÉLIORÉE :
- Plus intuitif qu'un appui long
- Retour visuel immédiat du drag
- Compatible touch (mobile) et mouse (desktop)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2026-05-23 09:43:49 +02:00
benoit 0b0e998b55 docs: mise à jour TODO.md - Phase 2.1 et 2.2 complétées
- Phase 2.1 : Support multi-groupes ✓
- Phase 2.2 : Mode PTT continu ✓
- Mise à jour statut : Phase 2 en cours
- Ajout section "Prochaines actions" avec roadmap Phase 2/3

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2026-05-23 09:35:03 +02:00
benoit 78e9a32e12 feat: mode PTT continu avec activation par appui long (Phase 2.2)
- Nouveau mode PTT continu (lock) activé par appui long de 3s
- Barre de progression visuelle pendant l'appui (0-100%)
- Badge cadenas en haut à droite quand mode actif
- Animation pulsante distinctive pour mode lock
- Feedback haptique à l'activation (triple vibration)
- Désactivation par simple tap quand mode lock actif
- Indication textuelle claire de l'état (normal/lock)
- Styles responsifs mobile + accessibilité (prefers-reduced-motion)

Mode d'emploi :
- Normal : Maintenir pour parler, relâcher pour arrêter
- Lock : Maintenir 3s → mode continu → tap pour désactiver

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2026-05-23 09:34:30 +02:00
benoit 3181c62e57 feat: support multi-groupes avec sélection dynamique (Phase 2.1)
- Ajout de 3 groupes dans config.yaml : Production, Technique, Sonorisation
- Nouvel endpoint API GET /groups pour lister les groupes disponibles
- Composant GroupSelector.jsx pour changer de groupe pendant la session
- Hook useLiveKit étendu avec fonction switchGroup() pour reconnexion
- Intégration dans App.jsx avec gestion du changement de groupe
- Chaque groupe = 1 room LiveKit distincte
- Qualité audio configurable par groupe (96-128 kbps)
2026-05-23 09:32:51 +02:00