app-tchat-svelte Svelte Themes

App Tchat Svelte

💬 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

  1. Cloner le repository et se rendre dans le dossier myapp

  2. Installer les dépendances :

    npm install
    
  3. 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.

  1. Obtenir une clé API Mistral :

Rendez-vous sur le site de Mistral pour créer un compte et votre clé API.

  1. Lancer l'application :

Dans un nouveau terminal :

npm run dev
  1. 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

  • Mettre un scroll smooth lors de l'ajout d'un nouveau message
  • Ajouter un bouton pour supprimer le token
  • Mettre en place un loader pendant l'attente de la rĂ©ponse de l'IA
  • ImplĂ©menter un systĂšme de recherche dans les conversations
  • Ajouter la possibilitĂ© d'Ă©diter le titre d'une conversation
  • CrĂ©er un systĂšme d'export des conversations en fichier

🎯 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

Top categories

Loading Svelte Themes