Skip to content

Commit c3004fb

Browse files
Florian Flahautclaude
andcommitted
Docs: update README/ARCHITECTURE/GUIDE for all current features
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
1 parent 7ba24a4 commit c3004fb

3 files changed

Lines changed: 93 additions & 35 deletions

File tree

README.md

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -9,18 +9,25 @@ rien au jardinage.
99
- **Ce mois-ci** — ce qu'il faut semer / planter / récolter maintenant, avec
1010
filtres cliquables par action.
1111
- **Calendrier de l'année** — grille plantes × 12 mois (semis, plantation,
12-
récolte), filtrable par catégorie et par action.
12+
récolte), filtrable par catégorie et par action, **imprimable**.
1313
- **Fiches plantes** — 38 plantes (légumes, fruits, aromates) : exposition,
14-
sol, arrosage, levée, espacement, ravageurs, rotation, compagnonnage.
15-
- **Mon jardin** — suivi personnel des plantations avec rappels de tâches du
16-
mois (récolte, soins, arrosage) et **conseils d'arrosage selon la météo
17-
locale** (Open-Meteo).
14+
sol, arrosage, levée, espacement, ravageurs, rotation, compagnonnage,
15+
**quantité conseillée** et **liens d'achat** (comparateur de prix).
16+
- **Mon jardin** — suivi des plantations avec **récolte prévisionnelle** (selon
17+
la date de plantation), **tâches du mois cochables**, et **conseils
18+
d'arrosage selon la météo locale** (Open-Meteo, par géoloc ou par ville).
1819
- **Journal de jardin** — récoltes, semis, observations et traitements datés,
1920
avec quantités.
20-
- **Plan du potager** — dessin des carrés et placement des plantes, avec
21-
détection des voisinages déconseillés (compagnonnage).
21+
- **Plan du potager** — dessin des carrés et placement des plantes, avec :
22+
détection des **voisinages déconseillés**, **rotation des cultures** (plan par
23+
année + alerte « même famille ici récemment »), **modèles tout faits**,
24+
**suggestions de bonnes voisines**, **distances de plantation**, impression.
25+
- **Liste de courses du mois** — graines/plants à acheter ce mois-ci, avec
26+
quantités (par nombre de personnes) et liens pour comparer les prix.
2227
- **Zone climatique** — tout le calendrier se décale selon la région
2328
(Nord / France tempérée / Sud).
29+
- **Mode sombre** — bascule clair/sombre, suit le système par défaut.
30+
- **Onboarding** — carte de premiers pas pour les débutants.
2431
- **Accès protégé** — mot de passe unique du foyer (session par cookie),
2532
protégé contre les tentatives répétées (anti-brute-force).
2633
- **Notifications** — rappels des tâches du mois envoyés sur **Discord**,
@@ -122,9 +129,9 @@ nano .env.production # HOUSEHOLD_PASSWORD, CRON_SECRET, notifs…
122129
npm run build
123130
```
124131

125-
> Le dépôt est **privé** : pour `git clone`, utiliser un Personal Access Token
132+
> Si le dépôt est **privé**, le `git clone` nécessite un Personal Access Token
126133
> (`https://<TOKEN>@github.com/Flalal/potager.git`) ou une clé de déploiement
127-
> SSH ajoutée au dépôt.
134+
> SSH. S'il est **public**, le clone HTTPS fonctionne directement.
128135
129136
> La base SQLite est créée automatiquement au premier lancement sous
130137
> `./data/potager.db`. Pour la placer sur un volume persistant, définir

docs/ARCHITECTURE.md

Lines changed: 41 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -32,28 +32,33 @@ Navigateur ──HTTP──> Next.js (Node) ──> SQLite (node:sqlite)
3232
src/
3333
app/
3434
layout.tsx Racine : thème, providers, nav, script anti-FOUC
35-
page.tsx Accueil « Ce mois-ci »
36-
calendrier/ Calendrier annuel
35+
page.tsx Accueil « Ce mois-ci » (+ onboarding)
36+
calendrier/ Calendrier annuel (imprimable)
3737
plantes/ Liste + fiches (génération statique)
38-
potager/ Plan du potager
39-
mon-jardin/ Plantations + météo + notifications
38+
potager/ Plan du potager (rotation, modèles, distances)
39+
mon-jardin/ Plantations + récolte prévue + tâches + météo
4040
journal/ Journal de jardin
41+
courses/ Liste de courses du mois
4142
login/ Écran de connexion
4243
actions/auth.ts Server Actions login / logout (+ anti-brute-force)
43-
api/ Route Handlers (garden, plots, journal, push, notify)
44+
api/ Route Handlers (garden, plots, journal, tasks, push, notify)
4445
manifest.ts Manifest PWA
4546
components/ Composants UI (client pour l'interactif)
4647
lib/
4748
plants.ts Catalogue statique (38 plantes)
4849
types.ts Types + libellés
4950
calendar.ts Logique calendaire (décalage zone, tâches, compat.)
51+
garden-calc.ts Récolte prévisionnelle (logique pure)
52+
quantities.ts Quantités conseillées par personne (logique pure)
53+
shopping.ts Liens d'achat / comparateur (logique pure)
54+
plot-logic.ts Rotation, suggestions, modèles de carrés (pure)
55+
weather.ts Arrosage + géocodage Open-Meteo (logique pure)
5056
climate.tsx Contexte zone climatique (localStorage)
51-
db.ts Connexion SQLite paresseuse + schéma
57+
db.ts Connexion SQLite paresseuse + schéma + migrations
5258
session.ts Sessions (cookie + DB)
5359
login-throttle.ts Anti-brute-force (logique pure)
54-
*-store.ts Accès DB côté serveur (garden, plots, journal, push…)
55-
garden.ts/plots.ts/journal.ts Hooks client (cache optimiste + fetch)
56-
weather.ts Conseils d'arrosage (logique pure) + Open-Meteo
60+
*-store.ts Accès DB côté serveur (garden, plots, journal, tasks, push…)
61+
garden.ts/plots.ts/journal.ts/tasks.ts Hooks client (cache optimiste + fetch)
5762
proxy.ts Garde des routes (ex-middleware)
5863
public/
5964
sw.js Service worker (push + cache hors-ligne)
@@ -78,14 +83,28 @@ Créé automatiquement au démarrage (`CREATE TABLE IF NOT EXISTS`, voir `db.ts`
7883
| --- | --- |
7984
| `sessions` | jetons de session (token, expiration) |
8085
| `plantations` | plantes installées (Mon jardin) |
81-
| `plots` | parcelles du plan (grille `cells` en JSON) |
86+
| `plots` | parcelles du plan ; `cells` (année courante) + `layouts` (JSON par année) + `year` |
8287
| `journal_entries` | journal (récolte/semis/observation…) |
88+
| `task_done` | tâches cochées (clé `uid:année-mois:libellé`) |
8389
| `push_subscriptions` | abonnements Web Push |
8490
| `login_attempts` | compteur anti-brute-force par IP |
8591

8692
Connexion **paresseuse** (ouverte à la première requête, pas à l'import) pour
8793
éviter les verrous entre les workers du build ; `PRAGMA busy_timeout` + WAL.
8894

95+
**Migrations** : `node:sqlite` n'a pas de système de versions ; `db.ts` applique
96+
des `ALTER TABLE` idempotents (try/catch) au démarrage — c'est ainsi que les
97+
colonnes `year`/`layouts` ont été ajoutées à `plots`.
98+
99+
### Plan du potager & rotation
100+
101+
Chaque carré stocke un **layout par année** (`layouts: { "2025": cells, … }`).
102+
Le sélecteur d'année change le layout édité. `plot-logic.ts` calcule :
103+
`rotationConflicts` (même famille au même endroit dans les 3 ans précédents),
104+
`suggestionsForPlot` (bonnes voisines compatibles) et `PLOT_TEMPLATES` (carrés
105+
tout faits, sans conflit). Les distances de plantation viennent du champ
106+
`espacement` des fiches.
107+
89108
## Flux de données (client ↔ serveur)
90109

91110
Les hooks `useGarden` / `usePlots` / `useJournal` suivent le même patron :
@@ -127,10 +146,12 @@ partir des plantations.
127146

128147
## Météo
129148

130-
`weather.ts` contient la **logique pure** (`wateringAdvice`, `summarize`) testée
131-
unitairement. Le composant `WeatherAdvice` géolocalise le navigateur et appelle
132-
**Open-Meteo** (gratuit, sans clé, CORS) côté client, puis affiche un conseil
133-
d'arrosage. La position est mémorisée en `localStorage`.
149+
`weather.ts` contient la **logique pure** (`wateringAdvice`, `summarize`,
150+
`geocodeUrl`, `firstGeocode`) testée unitairement. Le composant `WeatherAdvice`
151+
obtient la position par **géolocalisation** ou par **recherche de ville**
152+
(géocodage Open-Meteo), appelle **Open-Meteo** (gratuit, sans clé, CORS) côté
153+
client, puis affiche un conseil d'arrosage. La position est mémorisée en
154+
`localStorage`.
134155

135156
## PWA
136157

@@ -149,11 +170,15 @@ applique le thème avant le premier paint (anti-FOUC) et `<html>` porte
149170

150171
## Tests
151172

152-
**Vitest** (environnement `node`). Couvre la logique pure :
173+
**Vitest** (environnement `node`). Couvre la logique pure (48 tests) :
153174

154175
- `calendar.test.ts` — décalage de zone, tâches du mois, compatibilités.
155176
- `login-throttle.test.ts` — verrou/fenêtre/réinitialisation.
156-
- `weather.test.ts` — conseils d'arrosage, agrégation Open-Meteo.
177+
- `weather.test.ts` — arrosage, agrégation et géocodage Open-Meteo.
178+
- `garden-calc.test.ts` — récolte prévisionnelle.
179+
- `quantities.test.ts` — quantités conseillées.
180+
- `shopping.test.ts` — liens d'achat.
181+
- `plot-logic.test.ts` — rotation, suggestions, validité des modèles.
157182

158183
`npm test` (CI) / `npm run test:watch` (dev).
159184

docs/GUIDE.md

Lines changed: 36 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -40,30 +40,56 @@ Le mois en cours est surligné.
4040
## Fiches plantes
4141

4242
Chaque fiche détaille exposition, sol, arrosage, levée, espacement, ravageurs,
43-
rotation (famille), compagnonnage (bonnes/mauvaises associations) et un
44-
mini-calendrier. Bouton **Ajouter à mon jardin** pour suivre la plante.
43+
rotation (famille), compagnonnage, un mini-calendrier, la **quantité conseillée**
44+
(ex. ≈ 8 pieds pour 4 pers.) et des **liens d'achat** (« Comparer les prix »
45+
pour trouver le moins cher). Bouton **Ajouter à mon jardin** pour suivre la
46+
plante.
4547

4648
## Plan du potager
4749

4850
Dessinez vos **carrés** (lignes × colonnes), puis placez vos plantes :
4951

50-
1. créez un carré (nom, dimensions) ;
52+
1. créez un carré, **ou partez d'un modèle tout fait** (Carré du débutant,
53+
Tomates & basilic, Carré d'aromates, Carré d'automne) ;
5154
2. dans la **palette**, choisissez une plante (ou la **gomme**) ;
5255
3. cliquez les cases pour les remplir.
5356

54-
L'outil **signale en rouge ⚠️** deux voisines déconseillées (compagnonnage).
55-
Vous pouvez renommer, redimensionner ou supprimer un carré.
57+
L'outil vous aide :
58+
59+
- **⚠️ Voisinage déconseillé** : deux voisines incompatibles sont entourées
60+
de rouge.
61+
- **🔁 Rotation** : changez l'**année** du carré ; si vous replantez la même
62+
famille au même endroit dans les 3 ans, la case passe en orange.
63+
- **💡 Bonnes voisines à ajouter** : suggestions compatibles avec ce qui est
64+
déjà placé (cliquez pour les prendre comme pinceau).
65+
- **📏 Distances de plantation** : la liste des espacements à respecter pour
66+
chaque plante du carré (aussi dans l'infobulle de chaque case).
67+
68+
Bouton **🖨️ Imprimer le plan** pour l'emporter au jardin. Vous pouvez renommer,
69+
redimensionner ou supprimer un carré.
5670

5771
## Mon jardin
5872

59-
La liste de vos plantations, avec pour chacune les **tâches du mois** (récolte,
60-
soins, arrosage). On y trouve aussi :
73+
La liste de vos plantations. Pour chacune :
74+
75+
- **Récolte prévue** : estimée à partir de votre date de plantation et de votre
76+
région.
77+
- **Tâches du mois** (récolte, soins, arrosage) : **cochez-les** (✅) quand
78+
c'est fait — l'état est enregistré et se réinitialise chaque mois.
6179

62-
- **Conseils d'arrosage météo** : cliquez « Activer la localisation » pour que
63-
l'app récupère la météo locale (via Open-Meteo) et vous dise s'il faut
64-
arroser ou non (pluie/chaleur prises en compte).
80+
On y trouve aussi :
81+
82+
- **Conseils d'arrosage météo** : saisissez votre **ville** (ou « 📍 Ma
83+
position ») pour que l'app récupère la météo locale (Open-Meteo) et vous dise
84+
s'il faut arroser ou non (pluie/chaleur prises en compte).
6585
- **Notifications** : bouton « 🔔 Activer les rappels » (voir plus bas).
6686

87+
## Liste de courses du mois
88+
89+
La page **Courses** réunit tout ce qu'il faut acheter ce mois-ci (graines à
90+
semer, plants à repiquer), avec la **quantité conseillée** selon le nombre de
91+
personnes (réglable) et un lien **« Comparer les prix »** par plante.
92+
6793
## Journal de jardin
6894

6995
Gardez la trace de votre saison : récoltes, semis, plantations, observations,

0 commit comments

Comments
 (0)