đŹ O'Chat - Application de messagerie avec IA
Un projet d'application web interactive développé dans le cadre de ma formation en conception et développement d'applications web.
đ Description
O'Chat est une application de messagerie permettant d'interagir avec l'intelligence artificielle Mistral. L'application offre une interface utilisateur moderne et responsive pour créer des conversations, échanger avec l'IA, et conserver un historique complet des discussions grùce à une base de données locale.
⚠Fonctionnalités
- Gestion des conversations : Création, sélection et suppression de conversations
- Messagerie en temps rĂ©el : Ăchange de messages avec l'IA Mistral
- Historique persistant : Sauvegarde automatique des conversations dans PocketBase
- Affichage Markdown : Rendu élégant des réponses de l'IA avec formatage Markdown
- Authentification API : Gestion sécurisée du token Mistral via localStorage
- Design responsive : Interface adaptée mobile et desktop avec menu interactif
- Effet Glassmorphism : Design moderne et épuré inspiré des interfaces Apple
đ ïž Technologies UtilisĂ©es
- Svelte (v5.28.1) : Framework JavaScript réactif
- Vite (v6.3.5) : Outil de build rapide pour le développement
- PocketBase (v0.23.5) : Base de données locale avec API REST intégrée
- Mistral AI API : Intelligence artificielle pour la génération de réponses
- svelte-exmarkdown (v5.0.2) : Rendu des messages en Markdown
- Lucide Icons (@lucide/svelte v0.562.0) : BibliothĂšque d'icĂŽnes modernes
đ Structure du Projet
âââ myapp/
â âââ src/
â â âââ App.svelte # Composant principal
â â âââ lib/
â â â âââ MobileNav.svelte # Navigation mobile
â â â âââ DesktopNav.svelte # Navigation desktop
â â â âââ state.svelte.js # Ătat partagĂ© entre composants
â â âââ app.css # Styles globaux
â â âââ reset.css # Reset CSS
â â âââ main.js # Point d'entrĂ©e
â âââ pocketbase/ # Base de donnĂ©es PocketBase
â âââ index.html # HTML principal
â âââ package.json # DĂ©pendances du projet
â âââ vite.config.js # Configuration Vite
âââ doc/ # Documentation et wireframes
đš Processus de Conception
Recherches et Moodboard
Le projet a débuté par une phase de recherche approfondie sur les designs des LLM existants (ChatGPT, Claude, Mistral). J'ai créé un moodboard sur Figma pour rassembler mes inspirations, en utilisant :
- Fontjoy.com pour la sélection des polices harmonisées (Amiko + Fira Sans)
- Coolors pour la création de la palette de couleurs
Wireframes sur Figma
AprÚs la phase de recherche, j'ai conçu des wireframes détaillés sur Figma avec :
- Deux versions : Desktop et Mobile
- Grilles en colonnes pour assurer la cohérence du design
- Menu responsive : Version ouverte et fermée pour mobile
Ăvolution du Design
Le design final s'écarte légÚrement du wireframe initial, car j'ai souhaité me challenger et expérimenter avec :
- Le Glassmorphism (effet de flou sur verre) via
::before pour éviter les problÚmes de flou sur les éléments enfants
- Un breakpoint unique Ă 1200px pour une adaptation fluide entre mobile et desktop
đŻ Concepts Mis en Ćuvre
- Architecture composant Svelte avec état partagé
- Programmation réactive avec Svelte 5 ($state, $effect)
- Gestion d'API REST avec fetch (Mistral AI et PocketBase)
- Persistance des données avec PocketBase
- LocalStorage pour la gestion du token d'authentification
- Rendu dynamique avec templates conditionnels
- Design responsive avec media queries
- Gestion d'événements et interactions utilisateur
đ Installation et Utilisation
Prérequis
- Node.js (version 14 ou supérieure)
- npm (généralement inclus avec Node.js)
- Compte Mistral AI (pour obtenir une clé API)
Installation
Cloner le repository et se rendre dans le dossier myapp
Installer les dépendances :
npm install
Lancer PocketBase :
cd myapp/pocketbase
./pocketbase serve
PocketBase sera accessible sur http://localhost:8090
Pour une premiÚre utilisation, il faudra créer un compte super user.
- Obtenir une clé API Mistral :
Rendez-vous sur le site de Mistral pour créer un compte et votre clé API.
- Lancer l'application :
Dans un nouveau terminal :
npm run dev
- Ouvrir votre navigateur Ă l'adresse :
http://localhost:5173
đ Utilisation l'API Mistral
Le token est nĂ©cessaire pour chaque requĂȘte Ă l'API Mistral. Si vous souhaitez le modifier :
- Supprimer manuellement la clé
token du localStorage via les DevTools
- Recharger l'application pour saisir un nouveau token
đŸ Base de DonnĂ©es PocketBase
Structure
conversations
id : Identifiant unique de la conversation
title : Titre de la conversation
created : Date de création
messages
id : Identifiant unique du message
role : RÎle de l'émetteur (user ou assistant)
content : Contenu du message
conversation : Relation vers la table conversations
created : Date de création
Fonctionnalités
- Création automatique des messages à chaque échange
- Récupération filtrée des messages par conversation
- Historique complet avec horodatage
đ DĂ©fis Techniques RencontrĂ©s
Jour 1 : Design et Intégration
- â
MaĂźtrise du Glassmorphism avec
::before
- â
Personnalisation avancée du textarea
- â
Mise en place d'un design responsive avec un seul breakpoint
Jour 2 : Intégration de l'API Mistral
- â
Compréhension de la documentation Mistral AI
- â
Gestion de l'affichage asynchrone des messages
- â
Formatage correct des messages pour l'API
Jour 3 : Persistance avec PocketBase
- â
Configuration de PocketBase
- â
Mise en place des relations entre tables
- â
Correction du contexte de conversation (envoi de l'historique complet Ă Mistral)
Jour 4 : SystĂšme de Conversations
- â
Gestion des états partagés entre composants Svelte
- â
Liaison dynamique entre conversations et messages
- â
Suppression de conversations avec actualisation de l'interface
- â
Remise en place du systÚme de composants avec état partagé
đ TODO
đŻ Objectifs PĂ©dagogiques
Ce projet m'a permis d'aborder les compétences suivantes :
- Le développement d'applications avec Svelte et Vite
- L'intégration d'APIs externes (Mistral AI)
- La gestion d'une base de données locale avec PocketBase
- L'architecture en composants réactifs
- Le design responsive mobile-first
- La gestion des états partagés entre composants
- Les bonnes pratiques en développement front-end moderne
- L'utilisation du localStorage pour la persistance cÎté client
Projet réalisé dans le cadre d'un exercice de formation en développement web front-end