# CONSIGNE — Claude Code — Webapp “Gestion Jardin” (Self-hosted, mobile-friendly)

## 0) Objectif
Développer une webapp self-hosted (Docker) **en français**, **compatible smartphone**, permettant de gérer un ou plusieurs jardins (extérieur/serre) et la gestion complète des plants : fiche plante, planning (plantation, entretien, culture, récolte), tâches, calendrier (dont lunaire), et données environnementales (températures, humidité). UI : **Gruvbox Dark “seventies”** (vintage, contrasté, très lisible).

## 1) Contraintes générales
- Déploiement : **Docker Compose** (service backend + frontend + DB).
- Stockage : **SQLite par défaut** (volume persistant). Prévoir migration future vers Postgres.
- Accès : application locale (LAN) via reverse proxy possible mais non obligatoire.
- Auth : MVP sans auth complexe (optionnel). Prévoir un futur module “auth”.
- Données : possibilité d’import/export (JSON) et sauvegarde DB.
- Responsive : **mobile-first** + desktop ok.
- Performance : chargements rapides, pagination/lazy-loading images.

## 2) Périmètre fonctionnel MVP (Phase 1)
### 2.1 Gestion des jardins
Un jardin est une “zone cultivée” décrite par :
- Nom, description, type : **plein air / serre / tunnel**
- Coordonnées : latitude/longitude, altitude (optionnel)
- Adresse/lieu (optionnel)
- Exposition : nord/sud/est/ouest + ombre/mi-ombre/plein soleil
- Sol : type (argileux, sableux, limoneux, humifère…), pH (optionnel), amendements (optionnel)
- **Images** (galerie)
- Capteurs (valeurs manuelles MVP) :
  - température sol
  - température air
  - humidité air
  - humidité sol (optionnel)
  - date/heure de mesure, source (manuel/capteur)
- Géométrie du jardin en “cases” (grille) : voir 2.3

Fonctions :
- CRUD jardins
- Fiche jardin
- Galerie photos
- Saisie rapide “mesure du jour” (temp/humidité)

### 2.2 Gestion des plants (plantes/cultures)
Deux concepts :
1) **Variété** (catalogue) : “Tomate Andine Cornue”, “Courgette Verte…”
2) **Plantation** (instance) : variété X plantée dans jardin Y à une date et une case/grille.

Champs “Variété” (catalogue) :
- Nom commun, variété, famille (Solanacées…), tags
- Périodes conseillées : semis intérieur, semis extérieur, repiquage, plantation, récolte (fenêtres)
- Besoins : eau (faible/moyen/fort), soleil, espacement, température min, durée de culture
- Profondeur semis, type de sol conseillé
- Notes personnelles, photos

Champs “Plantation” (instance) :
- Jardin, zone/case, date semis/plantation/repiquage
- Quantité (nb plants), statut (prévu/en cours/terminé/échoué)
- Historique des actions (arrosage, taille, traitement, etc.)
- Dates réelles (récolte début/fin), rendement estimé/réel (optionnel MVP)
- Observations et photos

Fonctions :
- CRUD variété
- CRUD plantation (avec placement sur grille)
- Vue “planning” (par semaine/mois) des actions à venir

### 2.3 Géométrie du jardin (cases / grille)
MVP : représentation en **grille 2D** configurable (ex: 6×4).
- Chaque case peut avoir :
  - un libellé (A1, A2…)
  - des dimensions (optionnel)
  - un état (libre/occupée)
  - des plantations associées (actives + historiques)
- Interaction :
  - tap/clic sur case → détails + actions (ajouter plantation, marquer libre, notes)

### 2.4 Gestion des tâches et planning
- Tâches :
  - titre, description, jardin, plantation liée (optionnel), priorité, échéance, récurrence simple
  - statut : à faire / en cours / fait / annulé
- Vues :
  - “Aujourd’hui”
  - “Semaine”
  - “Backlog”
- Notifications : hors-scope MVP (préparer hooks)

### 2.5 Calendrier lunaire (MVP simple)
MVP : afficher pour chaque jour :
- phase (nouvelle lune, 1er quartier, pleine lune, dernier quartier)
- indicateur “lune montante/descendante” si source disponible
- filtres “jours racines/feuilles/fleurs/fruits” : optionnel

Implémentation :
- Soit calcul astronomique via lib (si fiable),
- soit dataset embarqué (année en cours + suivante) importable.

## 3) Brainstorming d’améliorations (Phase 2+)
### 3.1 “Smart features”
- Détection photo (mobile) :
  - reconnaissance variété / espèce (suggestion, pas décision)
  - détection maladies / carences (suggestion)
  - suivi de croissance (comparaison de photos)
- Suggestions automatiques :
  - alertes gel / canicule selon localisation + météo
  - arrosage estimé selon température/humidité/historique
  - rotation des cultures et associations bénéfiques
- Import/export :
  - import semences / catalogue depuis CSV
  - export journal des récoltes

### 3.2 Capteurs réels (futur)
- Intégration Home Assistant / MQTT (module)
- Courbes de température/humidité
- Tableau de bord “serre” temps réel

### 3.3 Multi-jardin / multi-site
- Gestion de plusieurs lieux (ex: maison / potager secondaire)
- Synchronisation & sauvegardes

## 4) UX / UI (obligatoire)
### 4.1 Thème visuel
- Style : **Gruvbox Dark** + “seventies” (vintage, chaleureux, lisible)
- Contraintes :
  - contrastes élevés, gros boutons mobile
  - cartes (cards) avec bord arrondi, ombres légères
  - typographie simple, lisibilité prioritaire
- Composants récurrents :
  - Header fixe avec navigation (Jardins / Plants / Planning / Tâches / Calendrier lunaire / Settings)
  - Drawer mobile (menu burger)
  - Panneau filtre/tri sur listes

### 4.2 Pages MVP
1) Dashboard : résumé (tâches du jour, mesures récentes, plantations actives)
2) Jardins : liste + création + fiche jardin
3) Grille jardin : vue cases + détails
4) Catalogue variétés : liste + fiche
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) Settings : unités, localisation par défaut, export/import, sauvegarde

### 4.3 Filtres “judicieux” (brainstorming)
- Jardins : type, exposition, serre/extérieur, tags, dernier relevé capteur
- Variétés : famille, saison, besoin eau, soleil, durée culture, tags
- Plantations : jardin, case, statut, période (en cours/à venir/terminé), “à récolter”
- Tâches : priorité, échéance, jardin, plantation liée, statut, récurrence

## 5) Architecture technique (choix par défaut)
### Backend
- Python **FastAPI**
- ORM : SQLModel (ou SQLAlchemy)
- SQLite par défaut
- Gestion uploads images : stockage local `/data/uploads` + métadonnées DB
- API REST :
  - CRUD jardins, cases, variétés, plantations, tâches, mesures
  - endpoints de recherche + filtres
  - export/import JSON

### Frontend
- Vue 3 + Vite (ou React si préféré)
- UI kit minimal (ou Tailwind) en respectant le thème Gruvbox
- Mobile-first, PWA optionnelle (phase 2)

### Docker
- `docker-compose.yml` :
  - backend
  - frontend (static)
  - volume DB + uploads

## 6) Modèle de données (MVP — tables)
- gardens
- garden_cells
- garden_images
- measurements (air_temp, soil_temp, humidity_air, humidity_soil, ts, garden_id)
- plant_varieties
- plant_images
- plantings
- planting_events (arrosage, taille, traitement, observation)
- tasks
- lunar_calendar_entries (dataset) OU table “computed cache”
- user_settings (local)

## 7) API (MVP — exemples d’endpoints)
- `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`

## 8) Règles qualité
- Validation stricte des champs (pydantic)
- Gestion erreurs claire côté UI
- Tests basiques backend (CRUD + filtres)
- Logs structurés backend
- Pas de secrets dans le frontend (variables d’env côté backend)

## 9) Livrables attendus
- Arborescence complète projet
- `README.md` (install, run, backup)
- `docker-compose.yml`
- Backend FastAPI prêt
- Frontend complet pages MVP
- Thème gruvbox dark seventies appliqué partout
- Données de démo (seed) : 1 jardin + quelques variétés + plantations + tâches

## 10) Ordre de réalisation imposé
1) Modèle DB + CRUD jardins/variétés/plantations/tâches
2) Upload images + galerie
3) Vue grille jardin + placement plantations
4) Planning calendrier + vues filtrées
5) Calendrier lunaire (dataset ou calcul)
6) Dashboard + export/import
7) Polissage UI mobile + perf + README final