Plateforme web permettant aux étudiants de gérer leurs projets en équipe, suivre les tâches, livrable et feedbacks avec une interface intuitive et collaborative.
Bienvenue sur le projet Smart Project. Ce dépôt est un monorepo géré avec Turborepo et pnpm. Il centralise un Frontend (Next.js), un Backend (Node.js/Express) et des packages de configuration partagés.
├── apps/
│ ├── client/ # Frontend Next.js (Port 3000)
│ └── api/ # Backend Node.js/Express (Port 4000)
├── packages/
│ ├── shared/ # Schémas Zod, Types TS et Logique métier partagée
│ └── config/ # Configurations communes (TypeScript, ESLint, etc.)
├── package.json # Scripts racine et orchestration
└── pnpm-workspace.yaml
- Node.js (v20+ recommandé)
- pnpm (v10+ recommandé) :
npm install -g pnpm
Pour installer toutes les dépendances du monorepo (applications et packages internes compris) :
pnpm installNote : N'installez jamais de dépendances manuellement dans les sous-dossiers avec npm ou yarn. Utilisez toujours pnpm à la racine.
Pour lancer séparément le Frontend et l'API :
pnpm dev --filter=@repo/client
pnpm dev --filter=@repo/apiLe filtre @repo/client correspond au Frontend, tandis que le filtre @repo/api correspond à l'API.
- Frontend : http://localhost:3000
- API : http://localhost:4000
Proxy : Le frontend est configuré avec un rewrite Next.js. Tout appel vers /api/* sur le port 3000 est automatiquement redirigé vers l'API sur le port 4000, évitant ainsi les problèmes de CORS en local.
Si vous créez une nouvelle ressource (ex: Product), définissez toujours son schéma Zod dans packages/shared/src/index.ts. Cela garantit que le Front et le Back parlent le même langage.
Pour ajouter le package shared à l'API ou au Client :
pnpm add "@repo/shared@workspace:*" --filter @repo/api- API : Créez un fichier
apps/api/.env. La variablePORTest fixée à4000par défaut viacross-envdans les scripts. - Client : Créez un fichier
apps/client/.env.local.
- Isolation TypeScript : Chaque application possède son propre
tsconfig.jsonqui étend la configuration de base@repo/config/typescript/base.json. Ne modifiez pas la base sans consulter l'équipe. - Validation de données : Utilisez systématiquement les schémas Zod du package
sharedpour valider lesreq.bodycôté API et typer vos appelsfetchcôté Client. - Zéro dépendance à la racine : La racine du projet ne doit contenir que des outils de développement globaux (Turbo, Prettier). Les bibliothèques de runtime (Express, Zod, React) doivent être installées dans leurs dossiers respectifs.
- CORS Stricte : L'API utilise une whitelist dynamique. En production, assurez-vous de définir
FRONTEND_URLpour autoriser votre domaine.
Pour tester le build de l'ensemble du projet :
pnpm buildTurborepo mettra en cache les packages non modifiés pour accélérer les builds futurs.
Nous utilisons les Conventional Commits. Chaque message de commit doit suivre cette structure :
type(scope): description
- feat: Une nouvelle fonctionnalité (ex:
feat(api): add user authentication) - fix: Une correction de bug (ex:
fix(client): repair login button) - refactor: Modification du code sans ajout de fonction ni correction (ex:
refactor(shared): optimize zod schemas) - chore: Maintenance ou mise à jour de dépendances.
Le projet est conçu pour être déployé de manière découplée :
- Frontend (Next.js) : Idéalement sur Vercel ou Netlify.
- Variable requise :
API_URL(URL de votre API de production).
- Backend (Node.js) : Sur Railway, Render, ou un VPS (Docker).
- Variable requise :
FRONTEND_URL(URL de votre frontend de production pour le CORS).
Turborepo est déjà configuré pour optimiser le déploiement. Seules les applications ayant subi des modifications (ou dont les dépendances packages/* ont changé) seront reconstruites lors du push.