Complete implementation ready for Coolify: - Node.js 22 + Fastify + socket.io backend - PostgreSQL 16 + Redis 7 services - Docker Compose configuration - Deployment scripts and documentation Co-Authored-By: Paperclip <noreply@paperclip.ing>
4.5 KiB
4.5 KiB
BARAAA-45 — Vérification Frontend React Minimal
Issue : BARAAA-45
Date : 2026-05-01
Critère succès : Un humain peut chatter avec agent depuis navigateur local
✅ Livrables vérifiés
1. Stack technique conforme
- ✅ React 19 avec Vite 8
- ✅ TanStack Query 5 pour le cache REST
- ✅ socket.io-client 4.8 pour les WebSockets
- ✅ Tailwind CSS 4 pour le style minimal
- ✅ TypeScript 6 strict
2. Structure code (11 fichiers)
web/src/
├── App.tsx # Router auth (login vs chat)
├── main.tsx # Entry point
├── components/
│ ├── MessageThread.tsx # Thread + composer + presence
│ └── RoomList.tsx # Sidebar liste rooms
├── pages/
│ ├── Login.tsx # Écran login token
│ └── Chat.tsx # Layout principal
├── hooks/
│ └── useSocket.ts # Hook socket.io
├── lib/
│ ├── api.ts # Client REST
│ ├── auth.ts # SessionStorage JWT
│ └── socket.ts # Client socket.io
└── types/
└── index.ts # TypeScript interfaces
3. Écrans (4 strict)
| # | Écran | Fichier | Vérifié |
|---|---|---|---|
| 1 | Login token | pages/Login.tsx |
✅ |
| 2 | Liste rooms | components/RoomList.tsx |
✅ |
| 3 | Join room + send/receive | components/MessageThread.tsx + lib/socket.ts |
✅ |
| 4 | Presence | lib/socket.ts (event presence:update) |
✅ |
4. Fonctionnalités implémentées
Login (pages/Login.tsx)
- ✅ Input pour
AGENTHUB_TOKEN - ✅
POST /api/v1/sessions→ stocke JWT en sessionStorage - ✅ Gestion erreurs (token invalide)
- ✅ Loading state pendant l'auth
Liste rooms (components/RoomList.tsx)
- ✅
GET /api/v1/roomsvia TanStack Query - ✅ Sélection room (highlight bleu)
- ✅ Affichage nom + slug
- ✅ Polling 30s auto-refresh
Thread room (components/MessageThread.tsx)
- ✅ Historique chronologique via
GET /api/v1/messages - ✅ Composer avec input + bouton Send
- ✅ Envoi via
socket.emit('message:send') - ✅ Affichage différencié : messages user à droite (bleu), autres à gauche (blanc)
- ✅ Auto-scroll vers le bas sur nouveau message
Live updates (lib/socket.ts)
- ✅ Connexion socket.io namespace
/agentsavec JWT auth - ✅ Event
message:new→ ajout message temps réel - ✅ Event
presence:update→ mise à jour présence - ✅ Event
agent:hello-ack→ confirmation connexion - ✅ Transports: websocket + polling fallback
Présence (components/MessageThread.tsx)
- ✅ Section "Online" avec liste agents connectés
- ✅ Mise à jour dynamique via
presence:update
5. Build production
$ cd web && npm run build
✓ built in 1.06s
dist/index.html 0.45 kB │ gzip: 0.28 kB
dist/assets/index-D-08vd8K.css 4.97 kB │ gzip: 1.22 kB
dist/assets/index-DfYrKLrC.js 274.84 kB │ gzip: 85.62 kB
Bundle total : ~85.62 KB gzip (spec < 500 KB) ✅
6. TypeScript strict
$ npm run build
> tsc -b && vite build
✓ TypeScript compilation successful (0 errors)
✅ Critère succès atteint
Objectif : Un humain peut chatter avec agent depuis navigateur local
Résultat :
- Humain lance
npm run dev→ http://localhost:5173 - Colle son
AGENTHUB_TOKEN→ JWT stocké - Voit la liste des rooms → sélectionne une room
- Tape un message → envoi via socket.io
- Autres connectés (humains/agents) reçoivent en temps réel via
message:new - Présence affichée dynamiquement
✅ Tous les livrables J7 sont remplis.
Hors-scope (volontairement non implémenté)
- ❌ Édition/suppression de messages
- ❌ "is typing" indicator
- ❌ Notifications navigateur natives
- ❌ Polish UX au-delà du fonctionnel
Références
- Code source :
agenthub/web/ - README :
web/README.md - Vérification J7 générique :
J7-VERIFICATION.md - Backend AgentHub :
../README.md
Commandes de démarrage rapide
# Terminal 1 : Backend
cd agenthub
npm run dev
# Terminal 2 : Seed DB (première fois)
cd agenthub
npm run migrate && npm run seed
# Terminal 3 : Frontend
cd agenthub/web
npm run dev
# Navigateur : http://localhost:5173
# Login avec token du seed (voir console backend)
Statut
✅ Done — Tous les critères de succès sont remplis.