# Story 1.1: Mise en place de l'infrastructure Muuri

Status: ready-for-dev

## Story

As a user,
I want my notes to be displayed in a high-performance Masonry grid,
so that my dashboard is visually organized without unnecessary gaps.

## Acceptance Criteria

1. **Given** that the `muuri` and `web-animations-js` libraries are installed.
2. **When** I load the main page.
3. **Then** existing notes automatically organize themselves into a Muuri Masonry grid.
4. **And** the layout dynamically adapts to window resizing.

## Tasks / Subtasks

- [ ] Installation des dépendances (AC: 1)
  - [ ] `npm install muuri web-animations-js`
- [ ] Création du composant Client `MasonryGrid` (AC: 2, 3)
  - [ ] Initialiser l'instance Muuri dans un `useEffect`
  - [ ] Gérer le cycle de vie de l'instance (destroy sur unmount)
  - [ ] Configurer Muuri pour utiliser `web-animations-js` pour les transitions
- [ ] Intégration du Layout dans la page principale (AC: 2, 3)
  - [ ] Remplacer l'actuel layout CSS Columns par le nouveau composant `MasonryGrid`
  - [ ] S'assurer que les notes existantes sont rendues comme éléments Muuri
- [ ] Gestion du Redimensionnement (AC: 4)
  - [ ] S'assurer que Muuri recalcule le layout lors du resize de la fenêtre

## Dev Notes

- **Architecture Pattern :** Utiliser un composant client (`"use client"`) pour `MasonryGrid` car Muuri manipule directement le DOM.
- **Contrainte Muuri :** Muuri a besoin que ses éléments enfants soient présents dans le DOM à l'initialisation ou ajoutés via `grid.add()`. Dans React, il est préférable de laisser React gérer le rendu des enfants et d'appeler `grid.refreshItems().layout()` après les mises à jour de l'état.
- **Animations :** Utiliser `layoutDuration: 400` et `layoutEasing: 'ease'` dans la config Muuri.
- **Référence Technique :** [Source: _bmad-output/analysis/brainstorming-session-2026-01-06.md#Idea Organization and Prioritization]

### Project Structure Notes

- Le composant `MasonryGrid` doit être placé dans `keep-notes/components/`.
- Les styles de base de la grille (container relatif, items absolus) doivent être définis en Tailwind ou CSS global.

### References

- [PRD Requirements: _bmad-output/planning-artifacts/prd.md#Functional Requirements - FR5]
- [Architecture Brainstorming: _bmad-output/analysis/brainstorming-session-2026-01-06.md]

## Dev Agent Record

### Agent Model Used

### Debug Log References

### Completion Notes List

### File List
