Skip to main content

Structure du projet

Arborescence src/

src/
├── app/
│ ├── layout.tsx # Root layout : fonts IBM Plex, globals.css
│ ├── globals.css # Design tokens, utilitaires CSS (source Tailwind v4)
│ ├── login/
│ │ └── page.tsx # Page de connexion (Client Component)
│ ├── (app)/ # Route group — zone authentifiée
│ │ ├── layout.tsx # Vérifie la session, rend Sidebar + main
│ │ ├── page.tsx # Redirect → /dashboard
│ │ ├── dashboard/page.tsx
│ │ ├── accounts/
│ │ │ ├── page.tsx
│ │ │ └── [id]/page.tsx
│ │ └── import/page.tsx
│ ├── actions/ # Server Actions ('use server')
│ │ ├── accounts.ts
│ │ ├── analytics.ts
│ │ ├── budget.ts
│ │ ├── dashboard.ts
│ │ ├── import.ts
│ │ ├── settings.ts
│ │ └── users.ts
│ └── api/
│ ├── auth/[...nextauth]/route.ts # Handlers NextAuth v5
│ └── health/route.ts # GET /api/health
├── components/
│ ├── layout/
│ │ └── sidebar.tsx # Client Component — nav collapsible
│ └── ui/
│ ├── kpi-card.tsx
│ ├── account-card.tsx
│ └── trend-badge.tsx
├── lib/
│ ├── auth.ts # Configuration NextAuth v5
│ ├── db.ts # Singleton PrismaClient (adapter pg)
│ ├── utils.ts
│ └── parsers/
│ ├── types.ts
│ ├── detect.ts
│ ├── bourso.ts
│ ├── bourso-pea.ts
│ ├── revolut.ts
│ └── trade-republic.ts
└── proxy.ts # Middleware / proxy Next.js

prisma/
├── schema.prisma # Source de vérité du schéma DB
└── migrations/ # Migrations versionnées
prisma.config.ts # Prisma 7 : datasource URL (DATABASE_URL)

Conventions

Nommage

  • Fichiers utilitaires : kebab-case.ts
  • Composants React : PascalCase.tsx
  • Variables / fonctions : camelCase
  • Constantes globales : UPPER_SNAKE_CASE
  • Dossiers de tests : __tests__/ colocalisé avec le code testé

Import paths

  • Alias @/*src/* (configuré dans tsconfig.json)
  • Préférer @/lib/db plutôt que ../../../lib/db

Server Component vs Client Component

Règle Next.js 16 (App Router) :

  • Server Component par défaut (pas de directive)
  • 'use client' uniquement si le composant utilise de l'état, des hooks (useState, useEffect, useRouter…) ou des event handlers

Fichiers spéciaux Next.js par route

  • loading.tsx et error.tsx obligatoires sur toute route avec data fetching (CLAUDE.md)

Secrets

  • Serveur : .env.local (git-ignored), jamais commité
  • Client : préfixe NEXT_PUBLIC_ (exposé au bundle)

Responsabilités par couche

CoucheRôleInterdits
src/app/**Routing, layouts, pages, Server ActionsLogique métier lourde (→ src/lib/)
src/components/**UI réutilisableAppels directs à Prisma
src/lib/**Logique métier, parsers, calculsDépendance à React ou Next.js
prisma/**Schéma et migrationsModification manuelle en base

Voir aussi