215 lines
8.3 KiB
Markdown
215 lines
8.3 KiB
Markdown
# 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 |