# CLAUDE.md

This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.

## Projet

Application web de **gestion de jardins** (potager, serre, plein air), self-hosted, mobile-first, entièrement **en français**. Thème visuel : **Gruvbox Dark "seventies"** (vintage, chaleureux, contrasté).

## Architecture cible

### Backend
- **Python FastAPI** + SQLModel (SQLAlchemy en dessous)
- **SQLite** par défaut (volume Docker persistant), migration future vers PostgreSQL prévue
- Stockage images : local `/data/uploads` + métadonnées en DB
- API REST documentée (OpenAPI auto-générée par FastAPI)

### Frontend
- **Vue 3 + Vite** (alternative React acceptable)
- **Tailwind CSS** avec thème Gruvbox Dark personnalisé
- Mobile-first, PWA en phase 2

### Déploiement
- **Docker Compose** : service `backend` + service `frontend` (static) + volumes `db` et `uploads`

## Commandes de développement

Une fois le projet créé, les commandes attendues seront :

```bash
# Lancer tout l'environnement
docker compose up --build

# Backend seul (développement)
cd backend && uvicorn app.main:app --reload

# Frontend seul (développement)
cd frontend && npm run dev

# Tests backend
cd backend && pytest

# Tests un seul fichier
cd backend && pytest tests/test_gardens.py -v

# Lint backend
cd backend && ruff check . && mypy .

# Lint frontend
cd frontend && npm run lint
```

## Modèle de données (tables MVP)

| Table | Rôle |
|---|---|
| `gardens` | Jardins (nom, type, coordonnées, exposition, sol) |
| `garden_cells` | Cases de la grille 2D du jardin |
| `garden_images` | Photos associées à un jardin |
| `measurements` | Relevés temp/humidité (air + sol) |
| `plant_varieties` | Catalogue de variétés (référence) |
| `plant_images` | Photos de variétés |
| `plantings` | Instance : variété X dans jardin Y à case Z |
| `planting_events` | Historique arrosage/taille/traitement/observation |
| `tasks` | Tâches (ponctuelles ou récurrentes) |
| `lunar_calendar_entries` | Cache/dataset calendrier lunaire |
| `user_settings` | Préférences locales |

## Endpoints API principaux

```
GET  /api/health
GET/POST         /api/gardens
GET/PUT/DELETE   /api/gardens/{id}
GET/POST         /api/gardens/{id}/cells
GET/POST         /api/varieties
GET/POST         /api/plantings
GET/POST         /api/tasks
GET/POST         /api/measurements
GET              /api/lunar?month=YYYY-MM
POST             /api/export
POST             /api/import
```

## Thème Gruvbox Dark

Palette CSS à respecter partout :

```
Background principal  : #282828
Background secondaire : #3c3836
Texte principal       : #ebdbb2
Texte secondaire      : #a89984
Accent vert           : #b8bb26
Accent jaune          : #fabd2f
Accent bleu           : #83a598
Accent orange         : #fe8019
Erreur rouge          : #fb4934
```

Typo : `Fira Code` ou `Courier New` pour le côté rétro.

## Fonctionnalités MVP (ordre d'implémentation)

1. Modèle DB + CRUD jardins / variétés / plantations / tâches
2. Upload images + galerie
3. Vue grille jardin (2D) + placement des plantations
4. Planning calendrier (semaine/mois) + vues filtrées
5. Calendrier lunaire (phases + jours racine/feuille/fleur/fruit)
6. Dashboard + export/import JSON
7. Polissage UI mobile + README final

## Pages de l'interface

1. **Dashboard** — tâches du jour, mesures récentes, plantations actives
2. **Jardins** — liste, création, fiche jardin
3. **Grille jardin** — vue cases, détails par case
4. **Catalogue variétés** — liste, fiche variété
5. **Plantations** — liste filtrable, création, fiche
6. **Planning** — calendrier mois/semaine + actions
7. **Tâches** — Kanban simple ou liste
8. **Calendrier lunaire** — vue mois + détails jour
9. **Réglages** — unités, localisation, export/import, sauvegarde

## Qualité & conventions

- Validation stricte Pydantic côté backend
- Logs structurés (JSON) côté backend
- Tests CRUD + filtres pour chaque ressource API
- Variables d'environnement côté backend uniquement (pas de secrets dans le frontend)
- Données de démo (seed) : 1 jardin + quelques variétés + plantations + tâches
