Ce document présente les technologies retenues pour le projet, côté backend, frontend, base de données et environnement de développement. Chaque choix est motivé par des critères de maintenabilité, de productivité et d’évolutivité.
📦 Monorepo
Le projet est organisé en monorepo, ce qui facilite :
- le partage de types, schémas de validation ou utilitaires entre le front et le back
- une gestion centralisée des dépendances
- le déploiement coordonné des services via Docker
🔧 Backend
- Express.js
- Framework web minimaliste pour Node.js.
- Choisi pour sa simplicité, sa flexibilité et sa maturité.
- Permet de garder un contrôle précis sur les middlewares, routes et erreurs.
- TypeScript
- Ajoute le typage statique à JavaScript.
- Permet une meilleure lisibilité, un debug plus rapide et une sécurité renforcée à l’exécution.
- Utilisé sur tout le projet (front et back) pour une cohérence totale.
- Prisma
- ORM moderne pour bases de données SQL.
- Fournit un schéma centralisé (
schema.prisma
), une génération de types automatique, et une expérience DX exceptionnelle.
- Idéal pour Postgres.
- Zod
- Bibliothèque de validation de schémas TypeScript-first.
- Permet de valider les entrées API avec un typage 100 % aligné avec TypeScript.
- Jest
- Framework de tests unitaire pour JavaScript/TypeScript.
- Utilisé pour tester les routes, services et logique métier de manière isolée.
🧑🎨 Frontend
- Next.js
- Framework React pour le rendu SSR/SSG et l’optimisation des performances.
- Permet une bonne SEO, un chargement rapide et une architecture modulaire via l’App Router.
- Idéal pour un projet fullstack avec API intégrée.
- Tailwind CSS
- Framework CSS utilitaire.
- Favorise une rapidité de développement, un design cohérent et une lecture directe dans le JSX.
- ShadCN UI
- Composants UI prêts à l’emploi, basés sur Radix UI et stylés avec Tailwind.
- Permet de gagner du temps sur l’UI, tout en gardant une personnalisation facile.
- Zod
- Également utilisé côté front pour valider les formulaires.
- Cela garantit une validation isomorphe, avec des schémas partagés avec le backend.