@AGENTS.md
Application de jardinage pour débutants : quoi semer/planter/récolter, quand et
où. Next.js 16 (App Router) + React 19 + TypeScript + Tailwind v4, base
SQLite via node:sqlite. Voir docs/ARCHITECTURE.md
(technique) et docs/GUIDE.md (usage).
npm run dev # serveur de dev (http://localhost:3000)
npm run build # build de prod
npm run start # sert le build
npm run lint # eslint
npm test # vitest run (CI)
npx next typegen # régénère les types de routes (voir gotcha plus bas)- Next 16 : le middleware s'appelle
proxy.ts(à la racine desrc/, pas du projet).cookies(),headers(), etparams/searchParamssont async (await). Les helpersPageProps<'/route'>/RouteContext<'/route'>sont générés : après avoir ajouté une route, lancernpx next typegensinon tsc échoue. Toujours lirenode_modules/next/dist/docs/avant de coder du Next (breaking changes). - DB :
node:sqliteintégré (zéro dépendance native). Connexion paresseuse via le proxy dansdb.ts(ne pas ouvrir à l'import). Pas de système de migrations →ALTER TABLEidempotents (try/catch) dansdb.ts. - server-only :
*-store.ts,session.ts,notify.ts,db.tsimportentserver-only. Ne jamais les importer depuis un composant client ; les composants client passent par les route handlers (/api/...). - Hooks données client (
garden.ts,plots.ts,journal.ts,tasks.ts) : même patron = cache module partagé + maj optimiste + événementwindow+fetchvers l'API. Réutiliser ce patron pour toute nouvelle donnée serveur. - Logique pure dans
lib/*.ts(calendar, garden-calc, quantities, shopping, plot-logic, weather, login-throttle) avec un*.test.tsVitest en regard. Ajouter des tests pour toute nouvelle logique pure. - Mode sombre : classes
dark:partout,.darksur<html>. Tout nouveau composant UI doit inclure ses variantesdark:(surfacesdark:bg-zinc-900, borduresdark:border-zinc-800, textesdark:text-emerald-{50..300}). - ESLint :
react-hooks/set-state-in-effectest en erreur. Pour le pattern légitime « lire localStorage au montage », encadrer lesetStatepar/* eslint-disable react-hooks/set-state-in-effect */. - Env :
NEXT_PUBLIC_*sont figées au build (rebuild requis si on les change). Les autres sont lues au runtime (restart suffit). Secrets dans.env.production/.env.local— jamais committer (seul.env.exampleest versionné). - Vérif locale : ne pas lancer
next buildpendant quenext devtourne (même dossier.next→ corrompt le serveur de dev). En dev, le mot de passe foyer estjardin(dans.env.local, ignoré par git). - Les avertissements git LF → CRLF sont bénins (dépôt sur Windows).
Proxmox / LXC, systemd derrière un reverse proxy HTTPS. Procédure complète dans le README. HTTPS requis pour la PWA et le Web Push.