Aperçu de l’application Plantes : liste d’un foyer avec les plantes à arroser
Web App2026Featured

Plantes

PWA de suivi d’arrosage partagée entre les membres d’un foyer, avec tags NFC sur les pots et notifications push.

Format
PWA installable, pas de store
Terrain
Tags NFC collés sur les pots
Stack
Next.jsReactTypeScriptTailwindNestJSPrismaPostgreSQLNode.jsDockerPWAWeb Push

À propos

Application de suivi d’arrosage pensée pour un foyer plutôt que pour une personne : les plantes appartiennent au foyer, chacun voit ce qui a soif et qui a arrosé en dernier. Un tag NFC collé sur le pot ouvre une page publique en lecture seule, et un rappel Web Push part quand une plante arrive à échéance. Monorepo pnpm Next.js + NestJS, déployé en Docker sur un VPS derrière Caddy.

Mon rôle

  • Architecture monorepo pnpm : front Next.js (App Router), API NestJS, DTOs partagés écrits à la main — le client Prisma ne sort jamais de l’API pour ne pas exposer la structure de la base au front
  • Modèle de données PostgreSQL / Prisma : plantes rattachées au foyer, journal d’événements d’arrosage en ajout seul, prochaine échéance dérivée plutôt que stockée, UUID v7
  • Scoping foyer imposé par la signature des repositories : aucun accès à une plante sans son foyer, testé avant même l’écriture du CRUD
  • Tags NFC : résolution token → plante isolée dans un seul service, page publique servie par un DTO dédié (nom, espèce, prochain arrosage) en noindex et sans referrer
  • Web Push VAPID : abonnement par appareil, notification « X a arrosé » envoyée à tout le foyer sauf l’auteur de l’action, cron de rappel côté serveur
  • PWA : manifest, service worker orienté push puis cache, écran hors ligne, installable sans passer par un store
  • Mise en production : images Docker, migrations exécutées dans un service à part qui bloque le déploiement en cas d’échec, services publiés sur la boucle locale uniquement et proxifiés par Caddy

Impact

  • Application réellement utilisée au quotidien à la maison, sur https://plante.hornain.dev
  • L’interface est triée par urgence (« À arroser » / « Plus tard ») et ne pousse jamais à arroser en avance — l’excès d’eau tue plus de plantes que l’oubli
  • Garde-fou double arrosage : deux personnes ne peuvent pas noyer la même plante à quelques heures d’intervalle
  • Décisions d’architecture documentées et justifiées au fil du projet, ce qui rend chaque choix relisable plutôt qu’implicite