@@ -18,16 +18,36 @@ rien au jardinage.
1818 détection des voisinages déconseillés (compagnonnage).
1919- ** Zone climatique** — tout le calendrier se décale selon la région
2020 (Nord / France tempérée / Sud).
21+ - ** Accès protégé** — mot de passe unique du foyer (session par cookie).
22+ - ** Notifications** — rappels des tâches du mois envoyés sur ** Discord** ,
23+ ** Home Assistant** et/ou ** Web Push** (PWA), déclenchés par un cron.
24+ - ** PWA installable** — installable sur mobile/desktop, fonctionnement
25+ hors-ligne basique via service worker.
2126
22- Les données personnelles (jardin, plan) sont stockées dans le ` localStorage `
23- du navigateur : ** aucune base de données ni backend ** n'est nécessaire .
27+ Les données du foyer (jardin, plan) sont enregistrées côté serveur dans une
28+ base ** SQLite ** ( ` node:sqlite ` , sans dépendance native) .
2429
2530## Stack technique
2631
27- - [ Next.js] ( https://nextjs.org/ ) 16 (App Router) + React 19
28- - TypeScript
29- - Tailwind CSS v4
30- - Node.js 24
32+ - [ Next.js] ( https://nextjs.org/ ) 16 (App Router, « Proxy ») + React 19
33+ - TypeScript · Tailwind CSS v4 · Node.js 24
34+ - Persistance : ** SQLite** via le module intégré ` node:sqlite `
35+ - Notifications Web Push : ` web-push ` (VAPID)
36+
37+ ## Configuration (variables d'environnement)
38+
39+ Copier [ ` .env.example ` ] ( .env.example ) en ` .env ` (dev) ou ` .env.production `
40+ (serveur) et renseigner au minimum ` HOUSEHOLD_PASSWORD ` . Principales clés :
41+
42+ | Variable | Rôle |
43+ | --- | --- |
44+ | ` HOUSEHOLD_PASSWORD ` | Mot de passe du foyer. ** Vide ⇒ auth désactivée** (accès libre LAN). |
45+ | ` DATABASE_PATH ` | Chemin du fichier SQLite (défaut ` ./data/potager.db ` ). |
46+ | ` CRON_SECRET ` | Secret exigé pour déclencher ` /api/notify/run ` . |
47+ | ` NOTIFY_ZONE_OFFSET ` | Décalage de zone du digest (-1 sud, 0 tempéré, 1 nord). |
48+ | ` DISCORD_WEBHOOK_URL ` | Webhook Discord (optionnel). |
49+ | ` HA_WEBHOOK_URL ` * ou* ` HA_BASE_URL ` +` HA_TOKEN ` +` HA_NOTIFY_SERVICE ` | Home Assistant (optionnel). |
50+ | ` NEXT_PUBLIC_VAPID_PUBLIC_KEY ` / ` VAPID_PRIVATE_KEY ` / ` VAPID_SUBJECT ` | Web Push (optionnel). Générer : ` npx web-push generate-vapid-keys ` . |
3151
3252## Développement local
3353
@@ -48,9 +68,10 @@ npm run lint
4868
4969## Déploiement — Proxmox / conteneur LXC
5070
51- > Procédure de référence. L'app est un serveur Next.js sans base de données ;
52- > il suffit d'un conteneur Linux avec Node.js 24, du build, et d'un service
53- > qui maintient le process en vie derrière un reverse proxy.
71+ > Procédure de référence. L'app est un serveur Next.js avec une base SQLite
72+ > locale (fichier) : il suffit d'un conteneur Linux avec Node.js 24, du build,
73+ > d'un fichier ` .env.production ` , et d'un service qui maintient le process en
74+ > vie derrière un reverse proxy.
5475
5576### 1. Créer le conteneur LXC (sur l'hôte Proxmox)
5677
@@ -81,13 +102,23 @@ su - potager
81102git clone https://github.com/Flalal/potager.git
82103cd potager
83104npm ci
105+
106+ # Configurer l'environnement (au minimum le mot de passe du foyer)
107+ cp .env.example .env.production
108+ nano .env.production # HOUSEHOLD_PASSWORD, CRON_SECRET, notifs…
109+
84110npm run build
85111```
86112
87113> Le dépôt est ** privé** : pour ` git clone ` , utiliser un Personal Access Token
88114> (` https://<TOKEN>@github.com/Flalal/potager.git ` ) ou une clé de déploiement
89115> SSH ajoutée au dépôt.
90116
117+ > La base SQLite est créée automatiquement au premier lancement sous
118+ > ` ./data/potager.db ` . Pour la placer sur un volume persistant, définir
119+ > ` DATABASE_PATH=/var/lib/potager/potager.db ` (créer le dossier, propriétaire
120+ > ` potager ` ).
121+
91122### 4. Lancer en service (systemd)
92123
93124Créer ` /etc/systemd/system/potager.service ` (en root) :
@@ -103,6 +134,9 @@ User=potager
103134WorkingDirectory =/home/potager/potager
104135Environment =NODE_ENV =production
105136Environment =PORT =3000
137+ # node:sqlite est « expérimental » et émet un warning au démarrage : on le tait
138+ Environment =NODE_OPTIONS =--no-warnings
139+ EnvironmentFile =/home/potager/potager/.env.production
106140ExecStart =/usr/bin/npm run start
107141Restart =on-failure
108142
@@ -132,7 +166,21 @@ potager.mondomaine.fr {
132166
133167Caddy gère automatiquement le certificat TLS Let's Encrypt.
134168
135- ### 6. Mises à jour
169+ ### 6. Notifications (cron)
170+
171+ Les rappels du mois sont envoyés quand on appelle ` /api/notify/run ` (protégé
172+ par ` CRON_SECRET ` ). Planifier un appel, par ex. tous les lundis à 8 h, via la
173+ crontab du conteneur (` crontab -e ` ) :
174+
175+ ``` cron
176+ 0 8 * * 1 curl -fsS -X POST "https://potager.mondomaine.fr/api/notify/run?secret=VOTRE_CRON_SECRET" >/dev/null
177+ ```
178+
179+ Les canaux actifs dépendent des variables définies (` DISCORD_WEBHOOK_URL ` ,
180+ ` HA_* ` , clés ` VAPID ` ). Pour le ** Web Push** , chaque appareil doit d'abord
181+ cliquer « 🔔 Activer les rappels » dans * Mon jardin* .
182+
183+ ### 7. Mises à jour
136184
137185``` bash
138186su - potager
0 commit comments