NextPerfect est un projet conçu pour regrouper et illustrer les meilleures pratiques en matière de développement avec Next.js 15, TypeScript, et Tailwind CSS. Ce projet sert de référence pour des applications robustes, évolutives et maintenables, en suivant des standards professionnels de 2025.
Ce README décrit la structure du projet, les conventions adoptées, et les outils utilisés pour garantir une qualité optimale.
- Fournir une base solide pour les projets Next.js.
- Promouvoir les bonnes pratiques en matière d'architecture, de typage TypeScript et de stylisation avec Tailwind CSS.
- Offrir des exemples concrets de gestion d'état, de conception de composants, de hooks personnalisés, et bien plus.
- Centraliser les meilleures pratiques pour chaque fonctionnalité courante grâce à une organisation par branches.
Pour chaque fonctionnalité de bonnes pratiques, une branche dédiée est créée. Cela permet de centraliser et de maintenir les meilleures pratiques pour chaque cas d'utilisation spécifique. Voici comment cela fonctionne :
-
Créer une branche dédiée :
git checkout -b your-feature-name
Exemple :
theme-colorspour intégrer les meilleures pratiques liées à la gestion des thèmes de couleurs. -
Ajouter la fonctionnalité : Implémentez les bonnes pratiques pour la fonctionnalité dans cette branche. Ajoutez des exemples, de la documentation et du code réutilisable.
-
Tester la fonctionnalité : Écrivez des tests pour garantir que la fonctionnalité est stable et conforme aux standards.
-
Soumettre une Pull Request : Une fois prêt, créez une Pull Request pour intégrer la fonctionnalité dans la branche principale (ou une autre branche dédiée).
theme-colors: Meilleures pratiques pour gérer des thèmes de couleurs avec Tailwind CSS.pwa: Implémentation des meilleures pratiques pour une Progressive Web App.authentication: Gestion avancée de l'authentification avec Next.js et TypeScript.accessibility: Bonnes pratiques pour l'accessibilité (a11y).
Cette organisation permet à chaque fonctionnalité d’évoluer de manière indépendante tout en assurant une documentation et des exemples clairs.
Voici la structure du projet :
my-next-app/
├── src/
│ ├── app/
│ │ ├── (public-pages)/
│ │ │ ├── layout.tsx
│ │ │ └── page.tsx
│ │ ├── (protected-pages)/
│ │ │ ├── layout.tsx
│ │ │ └── page.tsx
│ │ ├── api/
│ │ │ └── users/
│ │ │ └── route.ts
│ │ ├── layout.tsx
│ │ ├── page.tsx
│ │ ├── error.tsx
│ │ ├── loading.tsx
│ │ └── global-error.tsx
│ ├── components/
│ │ ├── ui/
│ │ │ └── Button.tsx
│ │ ├── layout/
│ │ │ └── Header.tsx
│ │ └── shared/
│ │ └── Card.tsx
│ ├── context/
│ │ └── AuthContext.tsx
│ ├── hooks/
│ │ └── useAuth.ts
│ ├── lib/
│ │ ├── db.ts
│ │ ├── auth.ts
│ │ └── ...
│ ├── styles/
│ │ └── globals.css
│ └── ...
├── public/
│ ├── images/
│ └── ...
├── tests/
│ ├── unit/
│ ├── integration/
│ └── e2e/
├── next.config.js
├── package.json
└── tsconfig.json
- (public-pages) : Pages accessibles à tous les utilisateurs.
- (protected-pages) : Pages nécessitant une authentification.
- api/ : Routes API pour gérer les endpoints RESTful.
- Exemple :
src/app/api/users/route.tspour gérer les requêtes sur/api/users.
- Exemple :
- layout.tsx : Définit le layout global (header, footer, providers).
- page.tsx : Définit la page d'accueil.
- error.tsx : Gestion des erreurs locales.
- loading.tsx : Gestion des états de chargement.
- global-error.tsx : Gestion des erreurs globales.
- ui/ : Composants UI réutilisables (ex. : boutons, formulaires).
- layout/ : Composants liés à l'architecture (header, footer).
- shared/ : Composants partagés comme les cartes, badges, etc.
- Fonctions utilitaires pour la logique métier (ex. :
auth.ts,db.ts).
- Hooks React personnalisés (ex. :
useAuth.ts).
- Providers React pour l'état global (ex. :
AuthContext.tsx).
- Fichiers CSS ou SCSS globaux.
- Contient les fichiers statiques comme les images et les favicons.
- unit/ : Tests unitaires des composants.
- integration/ : Tests d'intégration.
- e2e/ : Tests de bout en bout.
- Dossiers pour les pages : Utilisez le kebab-case (ex. :
(public-pages)). - Fichiers : Utilisez le PascalCase pour les composants (ex. :
Button.tsx). - Variables :
- Variables locales en camelCase (ex. :
userName). - Variables globales en MAJUSCULES_AVEC_UNDERSCORE (ex. :
API_URL).
- Variables locales en camelCase (ex. :
- Server Actions :
- Fonctions en camelCase avec des noms descriptifs (ex. :
getUserData). - Fichiers en camelCase (ex. :
fetchUsers.ts).
- Fonctions en camelCase avec des noms descriptifs (ex. :
- Interfaces et types en PascalCase (ex. :
interface User { id: number; name: string; }).
- Structure modulaire : Regroupez les fonctionnalités connexes dans des dossiers dédiés.
- TypeScript : Typage strict pour éviter les erreurs.
- Tailwind CSS : Utilisez des classes utilitaires pour une meilleure lisibilité.
- Accessibilité : Respectez les normes a11y (ex. :
aria-label). - Gestion des erreurs : Centralisez les erreurs pour un meilleur debugging.
- Tests : Organisez vos tests en dossiers
unit,integrationete2e.
npm installnpm run devnpm run buildnpm test- Forkez ce dépôt.
- Créez une nouvelle branche :
git checkout -b your-feature-name
- Faites vos modifications et commitez :
git commit -m "Add awesome feature" - Poussez la branche :
git push origin your-feature-name
- Ouvrez une Pull Request.
Ce projet est sous licence MIT.
Pour toute question, contactez-nous à leroyaurelien11@gmail.com.