Historique produit

Changelog Nexo

Les nouveautés, corrections et améliorations livrées dans Nexo, en timeline.

Vocal réparé, GIFs de retour

Le vocal remarche, sélecteur de GIFs sous Giphy et mises à jour sans recharger

Le vocal était hors service depuis début juillet : le certificat du relais média avait expiré et n’était jamais renouvelé, ce qui faisait échouer toute connexion — sans qu’aucun voyant ne passe au rouge. C’est réparé, et surveillé. Le sélecteur de GIFs, cassé par l’arrêt de l’API Tenor par Google, repart sur Giphy. Enfin, changer d’avatar, de bannière ou d’icône de serveur s’affiche instantanément, partout, sans recharger la page.

Vocal Messages UI Fiabilité
  • Vocal réparé (salons et messages privés) : le certificat du relais média, valable dix jours, n’était généré qu’une seule fois. Passé le 5 juillet il était expiré et le navigateur refusait toute connexion, alors que tous les services restaient au vert. Il est désormais renouvelé automatiquement avant échéance, rechargé à chaud par le relais sans couper les conversations en cours, et l’empreinte transmise au navigateur suit chaque renouvellement.
  • Panne rendue visible : le contrôle de santé du renouvellement vérifie maintenant que le certificat est réellement valide, et non plus seulement qu’un fichier existe — c’est ce qui avait rendu la panne invisible pendant huit semaines. Un outil de diagnostic dédié permet de vérifier le vocal depuis l’extérieur en une commande.
  • Sélecteur de GIFs de retour : Google a définitivement arrêté l’API Tenor le 30 juin 2026, ce qui laissait le picker vide. Il repose désormais sur le SDK officiel de Giphy, avec défilement infini, recherche et favoris conservés.
  • Nouvelle entrée « Qui a demandé ? » dans le menu contextuel d’un membre : répond à son message par un GIF aléatoire. Réservée aux rôles disposant de la nouvelle permission correspondante.
  • Avatar, bannière et réglages de serveur : les changements s’affichent immédiatement, dans toutes les vues (panneau utilisateur, liste des membres, auteurs des messages, barre des messages privés) et chez les autres personnes connectées, sans recharger la page.
  • Messages temporaires : le compte à rebours s’égrène réellement seconde par seconde, sans saut ni valeur répétée, et sans solliciter le serveur.
Commits workspace actuel
Vocal plus fluide & clic droit partout

Détection de voix affinée, vidéo plus fluide et menus contextuels unifiés

Grosse passe temps réel et confort : la détection de voix s’adapte au bruit ambiant et l’anneau vert réagit instantanément (allumage comme extinction), la caméra et le partage d’écran gagnent nettement en fluidité (relais parallélisé, resynchronisation automatique), et un clic droit sur n’importe quel message ouvre enfin un menu d’actions complet, en salon comme en message privé, avec des actions qui respectent vos permissions.

Vocal Vidéo Messages UI Sécurité Performance
  • Sécurité : le stockage de fichiers ne peut plus être listé publiquement (l’index du bucket était accessible), et la gestion des rôles empêche désormais une escalade de privilèges (un rôle ne peut ni accorder une permission que l’auteur ne possède pas, ni être hissé/attribué au-dessus du rôle de l’auteur).
  • Détection de voix : le seuil s’adapte au bruit ambiant (ventilateur, clim), les clics isolés (clavier) ne déclenchent plus l’émission, et le tout début des mots n’est plus coupé (pré-roll de 20 ms).
  • Anneau vert : allumage/extinction animés en douceur, et extinction en ~0,5 s au lieu de ~3 s quand un participant arrête de parler (côté client ET côté relais — plus de « locuteur fantôme »).
  • Caméra & partage d’écran plus fluides : le relais écrit les frames en parallèle (une grosse image clé ne bloque plus les suivantes), lit les flux entrants en parallèle, purge le retard accumulé et redemande automatiquement une image clé après une perte (fini l’image corrompue qui traîne).
  • Vidéo plus légère : profil caméra dédié (moins de bande passante), démarrage progressif du débit, images sautées avant encodage sous congestion (CPU économisé), remontée de qualité stabilisée (fini l’oscillation flou/net).
  • Clic droit sur un message (salon et MP) : répondre, réagir (emojis rapides), transférer, épingler, modifier, copier le texte ou l’identifiant, supprimer — chaque action n’apparaît que si vous avez la permission.
  • Menus contextuels unifiés : même moteur partout (clavier ↑↓/Entrée/Échap, positionnement fiable aux bords de l’écran), menu ami complet dans l’onglet Amis, menus enrichis sur les serveurs et salons (inviter, marquer comme lu, copier l’identifiant), confirmation avant expulsion/bannissement.
  • Salons vocaux : les personnes connectées sont visibles par tous les membres (même sans rejoindre l’appel), clic gauche sur un participant ouvre son profil, et le panneau d’appel a été repensé (partages d’écran en grand, participants en bandeau, grille adaptative).
  • Rôles : les changements de rôles et de permissions s’appliquent instantanément chez tous les membres connectés, sans recharger la page.
  • Interface : le menu du nom de serveur ne se fait plus masquer par la bannière, et micro-animations au survol (icônes de serveurs, salons, membres, barre d’actions des messages).
  • Performance : les menus utilisateurs ne préchargent plus les profils tant qu’ils ne sont pas ouverts (beaucoup moins de requêtes sur les gros salons).
Commits workspace actuel
Vocal, fichiers & confort

Vocal fiabilisé, fichiers jusqu’à 10 Go, épingles et thème animé

Une grosse passe de fiabilité et de confort : le vocal affiche votre vrai pseudo et un indicateur de parole réactif, la caméra et le partage d’écran gagnent plein écran, zoom et Picture-in-Picture, les fichiers passent par storage.to (jusqu’à 10 Go) avec téléchargement direct, on peut épingler des messages, et le thème clair/sombre s’accompagne d’une bascule animée.

Vocal Fichiers Messages UI
  • Vocal : votre pseudo et votre avatar réels s’affichent (au lieu de « Vous »), et l’indicateur de parole (anneau vert) suit désormais l’émission réelle de votre voix.
  • Caméra & partage d’écran : plein écran, zoom/dézoom (molette + boutons) et Picture-in-Picture navigateur, en local comme sur les flux distants.
  • Partage d’écran : arrêt fiable (le bouton et la vignette disparaissent aussitôt, même via le bouton natif du navigateur) et fluidité améliorée (rendu cadencé, moins de pertes d’images).
  • Fichiers : envoi via storage.to par défaut (jusqu’à 10 Go) avec repli automatique, bouton « Télécharger » en téléchargement direct, et envoi immédiat dès la fin de l’upload.
  • Messages : épinglez un message (au survol et depuis l’en-tête « Messages épinglés »), dans les salons comme en messages privés.
  • Serveurs : la bannière du serveur s’affiche en en-tête de la liste des salons.
  • Interface : thème clair/sombre cohérent sur l’accueil et le changelog, avec une bascule animée (transition circulaire), et le menu de réactions ne sort plus de l’écran.
Commits workspace actuel
Accueil & changelog

Nouvel accueil animé, axé confidentialité

La page d’accueil publique a été entièrement repensée : plus dynamique, animée et interactive, avec une mise en avant forte de la confidentialité (pas de pair-à-pair, pas de fuite d’IP, messages éphémères, relais que vous hébergez). Le changelog adopte la même identité visuelle.

Accueil Confidentialité UI Animations
  • Accueil repensé : héros animé (texte dégradé, aperçu produit, halos), ruban technologique défilant, section confidentialité mise en avant, schéma « sans WebRTC » à flux animés, fonctionnalités en bento, statistiques à compteurs et appel à l’action.
  • Nouvelle section « Sécurité réseau » avec diagramme animé : Nexo n’ouvre aucun port entrant et se publie derrière la passerelle NYXR via un mesh WireGuard NetBird (sortie uniquement, point d’entrée unique filtré par un WAF à 9 couches et un verdict IA), illustrant la surface d’exposition réduite.
  • Composants d’animation maison inspirés de Magic UI, sans dépendance : filet lumineux de bordure, texte scintillant et aurora, ruban défilant et compteurs, rendus sans surcoût côté client.
  • Interactions progressives : en-tête qui se densifie au scroll, révélation « blur-fade » à l’apparition et halo « spotlight » qui suit le curseur sur les cartes, dans le respect de « réduire les animations » et sans JavaScript requis.
  • Navigation entre pages publiques sans rechargement (View Transitions) : accueil, changelog et connexion s’enchaînent en fondu.
  • Logo de marque animé (la mascotte chat) dans les en-têtes de l’accueil et du changelog.
  • Changelog repensé visuellement dans le même esprit que l’accueil : halos, titre dégradé, cartes révélées au scroll et dernière nouveauté mise en valeur.
Commits workspace actuel
Nouvelle mascotte

Le chat Nexo fait peau neuve

La mascotte chat de Nexo (logo de connexion, écran de chargement, favicon) a été remplacée par une nouvelle illustration animée, même esprit, silhouette affinée, animations douces (respiration, clignement, oreilles, queue) qui s’adaptent au thème clair/sombre.

Marque UI
  • Nouveau chat Nexo (BrandCat) sur les pages de connexion/inscription et l’écran de chargement, avec animations idle (respiration, clignement, frémissement des oreilles et de la queue) respectant « réduire les animations ».
  • Favicon mis à jour avec la nouvelle silhouette du chat sur la pastille de marque.
  • Le bouton « Messages privés » (en haut à gauche) affiche désormais le chat animé au lieu de la bulle.
Commits workspace actuel
Vocal & saisie : confort

Auto-déconnexion vocale et barre de saisie épurée

Le vocal se déconnecte tout seul après 5 minutes passées seul dans un salon, et la barre de saisie a été harmonisée : réglage d’expiration réduit à l’icône horloge et icônes d’action de taille uniforme.

Vocal UI Saisie
  • Auto-déconnexion du vocal après 5 minutes seul dans le salon (appel direct ou salon vocal de serveur), le minuteur s’annule dès que quelqu’un rejoint.
  • Barre de saisie : le réglage d’expiration n’affiche plus que l’icône horloge (le menu reste accessible au clic), surlignée quand une expiration est active.
  • Barre de saisie : toutes les icônes d’action (+, horloge, micro, envoyer) ont désormais la même taille.
  • Salons vocaux de serveur : une icône caméra et/ou partage d’écran apparaît sur la ligne d’un participant qui a activé sa caméra ou partage son écran.
  • Confidentialité : un appel privé (message direct) n’apparaît plus dans la présence diffusée à vos amis, seuls les participants de la conversation savent que l’appel a lieu.
  • Confidentialité : la liste des personnes connectées à un salon vocal de serveur n’est désormais visible que des membres réellement dans ce salon (plus affichée aux membres du serveur qui n’y sont pas).
  • Périphériques audio/vidéo : la liste se charge automatiquement à l’ouverture des réglages « Voix & son » (et au branchement/débranchement), sans devoir cliquer « Redétecter » à chaque fois, le périphérique enregistré s’affiche directement.
  • Périphériques : si la permission micro est déjà accordée, les périphériques (dont ceux par défaut) sont chargés et reconnus automatiquement ; votre choix de micro/sortie/caméra est enregistré et réappliqué aux appels suivants.
  • Accessibilité : meilleur contraste de l’onglet « Ajouter un ami », zone de contenu principale balisée (<main>) et liens des écrans de connexion soulignés (ne reposent plus sur la couleur seule).
  • Accessibilité (thème clair) : audit complet des deux thèmes, texte secondaire assombri, et indicateurs verts/orange (vocal, présence, statuts) adaptés au thème clair pour rester lisibles. Thème sombre inchangé.
Commits workspace actuel
Fiabilité vidéo distante

Caméra et partage d’écran enfin fiables chez le correspondant

La caméra et le partage d’écran s’affichaient en local mais restaient noirs ou figés chez l’autre personne (l’audio passait). Cause : la vidéo était découpée en fragments minuscules (1100 octets), transformant chaque image clé en centaines de flux dont la perte du moindre empêchait la reconstitution. Corrigé.

Vocal Vidéo Relais Fiabilité
  • Fragments vidéo nettement plus gros : une image transite en quelques flux QUIC fiables au lieu de centaines, ce qui rend la réception robuste sur une vraie connexion Internet (et non plus seulement en réseau local).
  • Le relais n’abandonne plus les fragments d’image clé sous charge (délai d’écriture élargi, file plus profonde) : sans image clé complète, le distant restait sur un écran noir/figé.
  • Débit vidéo plafonné à des valeurs raisonnables (caméra/écran) pour ne plus saturer le lien montant d’une connexion domestique en appel à deux.
  • Limite de taille d’image relevée côté relais pour ne pas rejeter une image clé riche à l’ingestion.
  • Décodeur vidéo recréé après une erreur : un décodeur en erreur restait fermé et l’image se figeait sur la première frame chez le correspondant (« on ne voit que la première image »). Il se resynchronise désormais tout seul.
  • Flux vidéo entrants lus dans l’ordre : ils étaient lus en parallèle, livrant les images dans le désordre → image saccadée chez le correspondant. Lecture séquentielle (avec délai borné) pour une vidéo fluide.
Commits workspace actuel
Médias, transfert & réglages

Upload d’images, gros fichiers plafonnés, transfert enrichi et vocal affiné

Upload d’images pour les profils et serveurs, transferts externes plafonnés à 100 Mo avec type rétabli, transfert de message préservant les pièces jointes et ciblant les messages privés, changelog déplacé dans les paramètres et corrections vocales.

Médias Upload Transfert Vocal Réglages
  • Upload d’images : bannière utilisateur, icône et bannière de serveur (en plus de l’avatar), via un champ d’upload réutilisable branché dans les paramètres utilisateur et serveur.
  • Transferts volumineux (AnonFilesNew) plafonnés à 100 Mo côté client et serveur, avec rétablissement du content-type depuis l’extension pour les fichiers refusés en « octet-stream ».
  • Transfert de message amélioré : les pièces jointes sont préservées (réattachées si possédées, jointes en lien sinon) et l’on peut désormais transférer vers un message privé, pas seulement un salon de serveur.
  • Changelog déplacé du menu utilisateur vers une section dédiée des paramètres (la page publique reste disponible).
  • Vocal : la dernière latence affichée ne fait plus que monter (mesure par nonce et lissage), et l’indicateur de parole est un simple cercle vert autour de l’avatar, réactif à la voix.
Commits workspace actuel
Caméra & partage d’écran

Vidéo distante réparée : caméra et partage d’écran visibles par les autres

La caméra et le partage d’écran s’affichaient en local mais restaient noirs chez les autres participants. Corrigé côté relais et lecture, avec réglage de qualité du partage d’écran en direct.

Vocal Vidéo Relais Qualité
  • Réception vidéo réparée : le relais ne retransmettait que le premier fragment de chaque frame, empêchant les abonnés de reconstituer l’image (audio non affecté). Tous les fragments sont désormais retransmis, caméra et partage d’écran s’affichent côté distant.
  • Codec vidéo négocié signalé de bout en bout : le décodeur distant utilise le codec réellement employé par l’émetteur (H.264/VP9/AV1) au lieu d’un codec figé ; H.264 émis en Annex B pour un décodage sans configuration hors-bande.
  • Partage d’écran : réglage de la qualité en direct (Texte / Standard / Fluide) sans interrompre le partage, et bouton d’arrêt explicite.
  • Vérifié en production de bout en bout (deux comptes) : réassemblage, décodage et rendu des images caméra et écran confirmés.
Commits workspace actuel
Vocal & médias

Vocal en production, présence vocale, sons et fiabilité des médias

Vocal joignable en production, présence vocale visible sans rejoindre, sonorisation et sonnerie d’appel, upload de fichiers réparé, anti-spam des appels et améliorations UX.

Vocal Présence Upload Anti-spam CI
  • Vocal opérationnel en production : le port UDP du relais média (QUIC/WebTransport) est désormais exposé via le reverse proxy NetBird (réseau edge + pont UDP 443 → hôte Dokploy).
  • Présence vocale : voir qui est en vocal dans un salon ou un DM sans y être connecté, et affichage du panneau d’appel même seul dans un DM.
  • Sonorisation de l’application : sons de coupure micro/sourdine/partage d’écran et sonnerie d’appel entrant en boucle (réglable).
  • Upload de fichiers réparé : URLs pré-signées signées contre l’hôte public (joignables par le navigateur) et gros fichiers délégués à AnonFilesNew.
  • Anti-spam : limitation de débit et verrou anti-sonnerie sur les appels ; création de serveur temporairement restreinte.
  • Messages temporaires : délai d’expiration au format compact (1h / 30m / 30s) à côté de l’icône d’horloge.
  • Réponses : un clic sur l’aperçu fait défiler jusqu’au message d’origine et le met en surbrillance.
  • Invitations : le lien est généré automatiquement à l’ouverture et mis à jour à chaque changement de paramètre.
  • CI : runner ubuntu-latest opérationnel pour les builds AppImage, .deb et APK.
Commits workspace actuel
En cours

Appels directs, sécurité et expérience mobile

Raccordement des appels privés audio/vidéo, messages temporaires, 2FA TOTP complète, permissions étendues et pipeline desktop/mobile.

Vocal Sécurité Mobile Build
  • Appels directs en DM via le relais média WebTransport existant, avec caméra et signalement temps réel.
  • Messages temporaires dans les salons textuels et les DM, avec expiration optionnelle et valeur par défaut permanente.
  • 2FA TOTP complète : QR code, clé manuelle, confirmation, codes de secours et régénération.
  • Permissions serveur/rôles enrichies pour les invitations, le vocal avancé, les fils, les pseudos et la modération.
  • Workflow Tauri sur ubuntu-latest produisant AppImage, paquet .deb et APK Android.
Commits workspace actuel
Production hardening

Déploiement production stabilisé

Correction du déploiement Dokploy/Gitea, du proxy public, des migrations et du stockage objet.

Production Deploy Storage Realtime
  • Rafraîchissement de la découverte upstream Nginx via Docker DNS pour éviter les IP de conteneurs obsolètes.
  • Bootstrap automatique du bucket objet MinIO et politique de lecture publique contrôlée pour les médias.
  • Normalisation de l’endpoint WebSocket pour éviter les chemins /ws/ws et restaurer le temps réel en production.
  • Service de migrations PostgreSQL lancé avant API, realtime et worker pour un déploiement reproductible.
Commits e0b8fcf2e8a81c7359418c83de8d
Media relay

Vocal et relais QUIC opérationnels

Mise en production du socle média sans WebRTC avec certificat, bind QUIC privilégié et diagnostics côté client.

Media QUIC WebTransport
  • Relais WebTransport/QUIC Rust fonctionnel pour audio, caméra et partage d’écran.
  • Bootstrap de certificat média et autorisation du bind UDP/TCP privilégié requis par le relais.
  • Indicateurs vocaux : latence, perte, courbe temps réel, reconnexion et statut du relais.
  • Pipeline média : jitter buffer, fragmentation vidéo, contrôle de congestion et routage SFU côté relais.
Commits 4fb2a25974fb32dc242321183e51934fcc8
Chat & DM

Messagerie unifiée et interactions avancées

Unification des interactions dans les salons et DM avec réponses, réactions, édition, suppression et médias.

Chat DM UX
  • Composant MessageRow partagé entre salons et messages privés.
  • Réponses avec aperçu d’origine, réactions optimistes, édition, suppression et transfert.
  • Markdown étendu, mentions cliquables, rendu de code avec copie et modale média.
  • Composer partagé avec emojis, GIFs, mentions et auto-agrandissement.
Commits 7a9a9b9fc959ff26940faa107616
Social foundation

Profils, amis, invitations et recherche

Fondations sociales complètes : profils enrichis, amis, invitations de serveur, recherche et préférences.

Social Profils Invites
  • Popover profil global avec avatar, bannière, statut, bio et actions rapides.
  • Demandes d’ami, blocage, conversations privées et contrôle de confidentialité DM.
  • Invitations avec expiration et nombre maximal d’utilisations, page publique de join.
  • Recherche messages/utilisateurs, favoris GIF, webhooks, sons et notifications.
Commits 10965ac5956a89c47a004dad40f2
Roles & moderation

Administration serveur et permissions

Gestion de serveur complète avec rôles, permissions, membres, audit, modération et paramètres de salons.

Permissions Admin Moderation
  • Dialog de paramètres serveur avec rôles, membres, invitations, règles et audit.
  • CRUD rôles et attribution aux membres, avec calcul serveur des permissions effectives.
  • Surcharges de permissions par salon et menu contextuel personnalisé.
  • Paramètres utilisateur : profil, présence, thème, voix, confidentialité et déconnexion.
Commits 2143c7d0cd62ec0e15b8c
Realtime core

Temps réel end-to-end

Mise en place du routage logique, des curseurs, de la gateway WebSocket et des tests d’intégration.

Realtime Gateway Tests
  • Flux logiques channel/workspace/user/conversation avec séquences strictes.
  • Abonnement WebSocket validé côté serveur et reprise par curseurs.
  • Événements éphémères typing/presence sans déduplication bloquante.
  • Tests d’intégration realtime, parcours E2E et corrections TypeScript monorepo.
Commits 76d1198363f1699e9073bd259e9e
Infrastructure

Monorepo, apps et stack Docker

Création du socle applicatif : packages partagés, API, web, worker, realtime, media relay et infra.

Monorepo Docker Tauri
  • Scaffold monorepo avec packages contracts, database, auth, permissions, realtime et UI.
  • Applications API, web Astro/React, realtime-gateway, worker, desktop Tauri et media-relay Rust.
  • Stack Docker déployable, healthchecks, ports publics et configuration PUBLIC_*.
  • Client Tauri AppImage initial et documentation ports/protocoles.
Commits 580788a0bca7176675a30