TB.
Catalogue en ligne - ASO 70
Next.js
Tailwind CSS
TypeScript
PostgreSQL

Catalogue en ligne - ASO 70

Application web de location de matériel événementiel développée avec Next.js.

Contexte et objectifs

Développement d'un catalogue en ligne de location de matériel événementiel pour ASO 70. Ce projet de 12 semaines a été l'occasion d'approfondir mes connaissances en développement web moderne, notamment avec l'apprentissage de React et Next.js en autodidacte.

J'ai choisi d'utiliser React et Next.js car ce sont des outils idéaux pour développer des applications web modernes, performantes et évolutives. Next.js permet notamment d'optimiser le chargement des pages (rendu côté serveur, génération statique), d'améliorer le SEO, et d'offrir une expérience utilisateur fluide. Ce choix technologique s'inscrit dans une démarche d'efficacité et de professionnalisation du projet.

Objectifs principaux

  • Créer une application web moderne et performante
  • Mettre en place une architecture évolutive et maintenable
  • Acquérir une expertise en React et Next.js

Architecture et Organisation

Feature Based Architecture

L'organisation du code suit une approche "Feature Based" plutôt qu'une organisation par technologie. Cette structure permet d'isoler les fonctionnalités et facilite la maintenance en regroupant tous les fichiers liés à une même fonctionnalité au même endroit.


src/
├── features/
│   │   ├── catalog/
│   │   │   ├── _components/
│   │   │   │   ├── ProductCard.tsx
│   │   │   │   └── ...
│   │   │   ├── _services/
│   │   │   │   └── ...
│   │   │   ├── category/
│   │   │   │   ├── _components/
│   │   │   │   │   └── ...
│   │   │   │   ├── _services/
│   │   │   │   │   └── ...
│   │   │   │   └── CategoryPage.tsx
│   │   │   └── CatalogPage.tsx
├── components/
├── hooks/
├── utils/
└── app/
    ├── catalog/
    │   ├── category/
    │   │   └── page.tsx
    │   └── page.tsx
    ├── page.tsx
    ├── layout.tsx
    └── ...

Les fichiers ou composants partagés entre plusieurs sous-features sont placés dans le dossier de la feature parente. Par exemple, si ProductCard.tsx est utilisé à la fois dans la page "catalog" et dans la page "category" (qui est une sous-feature de "catalog"), il sera placé dans catalog/_components. Ainsi, tous les enfants de "catalog" peuvent l'utiliser, mais pas les autres features. Pour garantir le respect de cette règle, il est possible de configurer des règles ESLint qui préviennent en cas de transgression.

Séparer les pages (/app) et les features (/features) permet de garder une arborescence claire : seuls les fichiers de pages et de layouts se trouvent dans /app, ce qui évite toute pollution de l'arborescence des routes. L'arborescence des features réplique exactement celle des pages, ce qui facilite la navigation dans le code.

Les fichiers ou utilitaires communs à tout le projet (hooks, composants, helpers…) sont placés dans des dossiers partagés à la racine du projet.

Enfin, j'utilise la convention d'ajouter un _ devant le nom des dossiers techniques au sein d'une feature (_components, _services…), ce qui permet de distinguer facilement les sous-features (ex : category) des dossiers techniques.

Services Intégrés

Clerk (Authentification)
Vercel Blob (Gestion des ressources)
Drizzle (ORM)
Vercel (Déploiement)

Compétences développées

Architecture Feature Based
Développement React/Next.js
Gestion de base de données
Intégration de services tiers
Déploiement continu

Détails du projet

Rôle

Développeur Full Stack

Équipe

Projet individuel

Technologies

Next.jsReactPostgreSQLTypeScriptTailwind CSS

Date

2025

Résultats

  • Application performante et évolutive
  • Architecture modulaire facilitant la maintenance
  • Expérience utilisateur fluide et intuitive
  • Base solide pour les évolutions futures

Envie d'en savoir plus ?

Ce projet vous intéresse ? N'hésitez pas à me contacter pour plus d'informations ou pour discuter d'opportunités similaires.

Me contacter