Aller au contenu principal
AnthemionStéphane
Retour aux projets

RecettesApp

Application de gestion de recettes orientée nutrition — calcul automatique des macros, planning hebdomadaire et liste de courses par rayon.

Next.jsTypeScriptPrismaPostgreSQLPWA
15 février 2026

Le projet

Une application de recettes pensée pour les athlètes : chaque ingrédient est lié à Open Food Facts pour un calcul automatique des calories et macronutriments. Le planning hebdomadaire affiche les calories consommées vs l'objectif quotidien, et la liste de courses se génère automatiquement par rayon de supermarché.

Stack technique

ComposantTechnologie
FrameworkNext.js 16, React 19, TypeScript
Base de donnéesPostgreSQL 17 + Prisma 7
AuthBetter-Auth (email/password)
NutritionOpen Food Facts API
Drag & drop@dnd-kit
Export@react-pdf/renderer
Importcheerio (web scraping)
TestsVitest (~179 tests)

Fonctionnalités

  • Recettes : création avec recherche d'ingrédients (autocomplete Open Food Facts), calcul automatique des macros
  • Planning : grille 7 jours × 4 repas (petit-déj, déjeuner, dîner, snack) en drag & drop, suivi calories vs objectif
  • Liste de courses : agrégation des ingrédients du planning, groupés par rayon (frais, épicerie, surgelés...)
  • Collections : organisation des recettes par thème
  • Import : coller une URL de recette → parsing automatique des ingrédients
  • Export PDF : recettes exportables en PDF propre
  • PWA : installable, fonctionne hors-ligne (cache-first pour les assets)

Architecture

L'application utilise les Server Actions de Next.js pour les mutations et TanStack Query pour le cache côté client. Les macros sont dénormalisées sur chaque recette pour éviter des calculs coûteux à chaque lecture.

Client (React 19)
  ├── TanStack Query (cache)
  ├── Server Actions (mutations)
  └── /api/nutrition/search → Open Food Facts
            │
        Prisma → PostgreSQL

Ce que j'ai appris

  • Utiliser les Server Actions Next.js pour un CRUD complet
  • Intégrer une API externe (Open Food Facts) avec proxy et debounce
  • Implémenter du drag & drop accessible avec dnd-kit
  • Structurer une suite de 179 tests avec Vitest