# Guide Frontend — Inventory
Guide complet du frontend Nuxt/Vue pour comprendre comment tout fonctionne, même si tu débutes.
## Table des matières
1. [Vue d'ensemble](#vue-densemble)
2. [Nuxt et Vue — les bases](#nuxt-et-vue--les-bases)
3. [L'architecture de l'application](#larchitecture-de-lapplication)
4. [Les Pages (le routing)](#les-pages)
5. [Les Composables (la logique métier)](#les-composables)
6. [Les Composants (l'interface)](#les-composants)
7. [L'API et les appels HTTP](#lapi-et-les-appels-http)
8. [L'authentification côté frontend](#lauthentification-côté-frontend)
9. [Le style (TailwindCSS + DaisyUI)](#le-style)
10. [Les utilitaires et types](#les-utilitaires-et-types)
11. [Flux complet d'une fonctionnalité](#flux-complet-dune-fonctionnalité)
12. [Patterns et conventions du projet](#patterns-et-conventions)
13. [Les tests](#les-tests)
14. [Commandes utiles](#commandes-utiles)
---
## Vue d'ensemble
Le frontend est une **SPA** (Single Page Application) construite avec :
- **Nuxt 4** : framework basé sur Vue.js qui ajoute le routing automatique, les composables, et plein d'outils
- **Vue 3** : la librairie d'interface (composants, réactivité, etc.)
- **TypeScript** : JavaScript avec des types (réduit les bugs)
- **TailwindCSS 4** : des classes CSS utilitaires (`flex`, `p-4`, `text-lg`, etc.)
- **DaisyUI 5** : des composants visuels prêts à l'emploi (boutons, modales, tableaux, etc.)
### SPA, c'est quoi ?
Dans une SPA, le navigateur charge **une seule page HTML** au départ, puis tout se passe en JavaScript : la navigation entre les pages, le chargement de données, etc. Pas de rechargement complet de la page.
> **SSR est désactivé** (`ssr: false` dans `nuxt.config.ts`). Le rendu se fait entièrement côté client (dans le navigateur).
---
## Nuxt et Vue — les bases
### Vue 3 en 30 secondes
Vue utilise des **composants** : des blocs réutilisables qui combinent HTML, JavaScript et CSS.
```vue
Compteur : {{ count }}
Double : {{ doubled }}
```
### Les concepts clés de Vue 3
| Concept | Syntaxe | Description |
|---------|---------|-------------|
| **ref** | `const x = ref(0)` | Variable réactive. Quand elle change, l'interface se met à jour |
| **computed** | `const y = computed(() => x.value * 2)` | Valeur calculée, se recalcule automatiquement |
| **v-model** | `` | Lie un input à une variable (bidirectionnel) |
| **v-if** | `