
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