Merci de votre intérêt pour contribuer au Zone01 Admin Dashboard ! Ce guide vous aidera à démarrer.
- Code de conduite
- Comment contribuer
- Workflow de développement
- Conventions de code
- Processus de Pull Request
- Signaler des bugs
- Proposer des fonctionnalités
En participant à ce projet, vous acceptez de respecter notre code de conduite :
- ✅ Soyez respectueux et inclusif
- ✅ Acceptez les critiques constructives
- ✅ Concentrez-vous sur ce qui est le mieux pour la communauté
- ❌ Pas de harcèlement ou de comportement inapproprié
- ❌ Pas de spam ou de publicité non sollicitée
Il existe plusieurs façons de contribuer :
- Vérifiez que le bug n'a pas déjà été signalé dans Issues
- Utilisez le template de bug report
- Incluez des détails (version, OS, navigateur)
- Ajoutez des captures d'écran si pertinent
- Ouvrez une Discussion pour discuter de l'idée
- Expliquez le cas d'usage et les bénéfices
- Attendez les retours avant de commencer le développement
- Corrigez les fautes de frappe
- Ajoutez des exemples
- Clarifiez les sections confuses
- Traduisez en d'autres langues
- Consultez les Issues marquées "good first issue"
- Commentez l'issue pour indiquer que vous travaillez dessus
- Suivez le workflow de développement ci-dessous
- Discutez d'abord de la fonctionnalité dans une issue
- Attendez l'approbation d'un mainteneur
- Suivez le workflow de développement
# Fork le repository sur GitHub, puis :
git clone https://github.com/VOTRE_USERNAME/admin-dashboard.git
cd admin-dashboard
# Ajouter le remote upstream
git remote add upstream https://github.com/makcimerrr/admin-dashboard.git# Installer les dépendances
pnpm install
# Copier et configurer les variables d'environnement
cp .env.example .env
# Éditer .env avec vos valeurs
# Initialiser la base de données
pnpm drizzle-kit push# Mettre à jour main
git checkout main
git pull upstream main
# Créer une branche pour votre travail
git checkout -b feature/ma-fonctionnalite
# ou
git checkout -b fix/correction-bugConventions de nommage des branches :
feature/- Nouvelles fonctionnalitésfix/- Corrections de bugsdocs/- Documentation uniquementrefactor/- Refactoring de codetest/- Ajout ou modification de testschore/- Tâches de maintenance
# Lancer le serveur de développement
pnpm dev
# Accéder à http://localhost:3000Bonnes pratiques :
- ✅ Écrire du code TypeScript typé
- ✅ Suivre les conventions de code (voir ci-dessous)
- ✅ Commenter le code complexe
- ✅ Tester vos changements
- ✅ Vérifier que tout fonctionne en production (
pnpm build)
Utilisez Conventional Commits :
# Format : type(scope): description
# Exemples
git commit -m "feat(students): add search filter"
git commit -m "fix(planning): correct date calculation"
git commit -m "docs(readme): update installation steps"
git commit -m "refactor(auth): simplify login logic"
git commit -m "style(ui): format button component"
git commit -m "test(api): add students endpoint tests"
git commit -m "chore(deps): update next to 15.2.4"Types de commits :
feat- Nouvelle fonctionnalitéfix- Correction de bugdocs- Documentation uniquementstyle- Formatage (pas de changement de code)refactor- Refactoring (pas de nouvelle fonctionnalité)perf- Amélioration des performancestest- Ajout ou modification de testschore- Maintenance, dépendancesci- Changements CI/CDbuild- Changements build system
# Push vers votre fork
git push origin feature/ma-fonctionnalite
# Créer une Pull Request sur GitHub// ✅ BON
interface Student {
id: string;
name: string;
email: string;
}
export async function getStudents(): Promise<Student[]> {
// Implementation
}
// ❌ MAUVAIS
function getStudents() { // Pas de type de retour
// any utilisé implicitement
}// ✅ BON - Server Component
export default async function StudentsPage() {
const students = await getStudents();
return (
<div>
<StudentsList students={students} />
</div>
);
}
// ✅ BON - Client Component
'use client';
interface Props {
students: Student[];
}
export function StudentsList({ students }: Props) {
const [filter, setFilter] = useState('');
// ...
}
// ❌ MAUVAIS - Pas de types pour les props
export function StudentsList({ students }) {
// ...
}// ✅ BON - Utiliser Tailwind + cn()
import { cn } from '@/lib/utils';
export function Button({ className, ...props }) {
return (
<button
className={cn(
"px-4 py-2 bg-blue-500 hover:bg-blue-600",
className
)}
{...props}
/>
);
}
// ❌ MAUVAIS - CSS inline
<button style={{ padding: '8px 16px' }}>
Click me
</button>// ✅ BON - Ordre et organisation
// 1. External dependencies
import { useState } from 'react';
import { useRouter } from 'next/navigation';
// 2. Internal absolute imports
import { Button } from '@/components/ui/button';
import { getStudents } from '@/lib/db/services/students';
// 3. Relative imports
import { StudentCard } from './student-card';
// 4. Types
import type { Student } from '@/types';
// ❌ MAUVAIS - Mélange désordonné
import { StudentCard } from './student-card';
import { useState } from 'react';
import type { Student } from '@/types';// Components - PascalCase
export function StudentCard() {}
// Functions/Variables - camelCase
const getStudentData = () => {};
const studentCount = 10;
// Constants - UPPER_SNAKE_CASE
const API_BASE_URL = 'https://api.example.com';
const MAX_RETRIES = 3;
// Types/Interfaces - PascalCase
interface StudentData {}
type UserRole = 'admin' | 'user';
// Files
// - Components: PascalCase.tsx (StudentCard.tsx)
// - Utilities: kebab-case.ts (get-students.ts)
// - Pages: kebab-case (page.tsx dans students/ folder)# Avant de commit, vérifiez :
# 1. Linting
pnpm lint
# 2. Type checking
pnpm tsc --noEmit
# 3. Formatting
pnpm prettier --write .
# 4. Build
pnpm build- Code compilé sans erreurs (
pnpm build) - Linting passé (
pnpm lint) - Types corrects (pas d'erreurs TypeScript)
- Code formaté avec Prettier
- Testé localement
- Commits suivent Conventional Commits
- Branche à jour avec
main - Documentation mise à jour si nécessaire
## 📝 Description
Décrivez brièvement les changements apportés.
## 🎯 Type de changement
- [ ] 🐛 Bug fix
- [ ] ✨ Nouvelle fonctionnalité
- [ ] 💥 Breaking change
- [ ] 📝 Documentation
- [ ] 🔧 Refactoring
## 📋 Checklist
- [ ] Code testé localement
- [ ] Documentation mise à jour
- [ ] Pas de console.log oubliés
- [ ] Types TypeScript corrects
- [ ] Build réussi
## 🖼️ Captures d'écran
Si pertinent, ajoutez des captures d'écran.
## 📌 Issues liées
Closes #123
Related to #456- Soumission - Vous ouvrez la PR
- Review automatique - CI/CD vérifie le code
- Review manuelle - Un mainteneur examine le code
- Discussion - Échanges sur les changements
- Modifications - Vous apportez les corrections demandées
- Approbation - La PR est approuvée
- Merge - Merge dans main par un mainteneur
## 🐛 Description du bug
Description claire et concise du problème.
## 📋 Étapes pour reproduire
1. Aller sur '...'
2. Cliquer sur '...'
3. Voir l'erreur
## ✅ Comportement attendu
Ce qui devrait se passer.
## ❌ Comportement actuel
Ce qui se passe réellement.
## 🖼️ Captures d'écran
Si applicable, ajoutez des captures.
## 🔧 Environnement
- OS: [e.g. macOS 14.0]
- Browser: [e.g. Chrome 120]
- Node version: [e.g. 18.17.0]
- Version du projet: [e.g. commit hash ou version]
## 📝 Informations supplémentaires
Logs d'erreur, contexte additionnel, etc.## 🎯 Problème à résoudre
Quel problème cette fonctionnalité résout-elle ?
## 💡 Solution proposée
Décrivez la solution que vous aimeriez voir.
## 🔄 Alternatives considérées
Autres solutions envisagées.
## 📊 Impact
- Utilisateurs concernés
- Effort de développement estimé
- Bénéfices attendus
## 📝 Détails additionnels
Mockups, exemples, références, etc.# Lancer les tests (quand disponibles)
pnpm test
# Tests en mode watch
pnpm test:watch
# Coverage
pnpm test:coverage// tests/students.test.ts
import { describe, it, expect } from 'vitest';
import { getStudents } from '@/lib/db/services/students';
describe('getStudents', () => {
it('should return array of students', async () => {
const students = await getStudents();
expect(Array.isArray(students)).toBe(true);
});
it('should have required properties', async () => {
const students = await getStudents();
if (students.length > 0) {
expect(students[0]).toHaveProperty('id');
expect(students[0]).toHaveProperty('name');
}
});
});Si vous avez des questions ou besoin d'aide :
- 💬 GitHub Discussions
- 📧 Email: maximedubs@proton.me
- 📖 Documentation: docs/
Merci de contribuer au Zone01 Admin Dashboard ! Chaque contribution, petite ou grande, est appréciée.
🤝 Built with ❤️ by the community