Jean Martin — Menuiserie sur mesure à Lyon
Artisans du bois depuis 2018, nous concevons et fabriquons des mobiliers haut de gamme entièrement personnalisés pour une clientèle exigeante. Ce dépôt contient le code source du site vitrine et de l'espace client digital de l'entreprise Jean Martin, conçu pour soutenir la croissance commerciale via le numérique.
Table des matières
- Présentation du projet
- Fonctionnalités
- Prérequis
- Installation
- Utilisation
- Configuration — variables d'environnement
- Structure du projet
- Contribution
- Licence
Présentation du projet
Jean Martin Menuiserie est une entreprise artisanale fondée en 2018 à Lyon (69). Forte de 12 salariés qualifiés, elle se spécialise dans la création de mobilier sur mesure haut de gamme : cuisines, dressings, bibliothèques, agencements d'espaces professionnels et résidentiels.
Face à une clientèle de plus en plus connectée et à un objectif affirmé de croissance digitale, l'entreprise a lancé en 2024 la refonte complète de sa présence en ligne. Ce projet repose sur un site vitrine moderne, un catalogue interactif et un espace client sécurisé permettant de suivre l'avancement des commandes de fabrication.
Objectifs principaux :
- Accroître la visibilité en ligne sur la région lyonnaise et au-delà
- Offrir une expérience utilisateur à la hauteur du positionnement haut de gamme de la marque
- Réduire les échanges par courrier électronique grâce à un suivi de projet centralisé
- Générer des demandes de devis qualifiées directement depuis le site
Fonctionnalités
Site vitrine
- Page d'accueil avec présentation de l'entreprise, de ses valeurs artisanales et de son ancrage lyonnais depuis 2018
- Galerie de réalisations filtrée par catégorie (cuisine, dressing, bureau, agencement professionnel)
- Formulaire de demande de devis avec sélection du type de projet, surface estimée et budget indicatif
- Présentation de l'équipe — 12 artisans et chefs de projet mis en avant individuellement
- Page « Savoir-faire » détaillant les essences de bois utilisées, les finitions disponibles et les procédés de fabrication
- Blog pour publier actualités, conseils d'entretien et tendances de l'aménagement intérieur
- Optimisation SEO — balises structurées, métadonnées et sitemap automatique
Espace client
- Authentification sécurisée par identifiant et mot de passe, avec double authentification optionnelle
- Tableau de bord affichant l'état d'avancement du projet en cours (devis, fabrication, livraison)
- Messagerie intégrée pour échanger directement avec le chef de projet attitré
- Téléchargement des documents : devis signé, plans techniques, factures
- Galerie privée : photos d'avancement partagées par l'atelier
Administration
- Interface d'administration pour gérer les projets, les clients et les contenus du blog
- Notifications automatiques par courriel à chaque changement de statut de commande
- Tableau de bord analytique affichant le nombre de demandes de devis, le taux de conversion et les pages les plus consultées
Prérequis
Avant d'installer le projet, assurez-vous de disposer des éléments suivants sur votre machine :
- Node.js version 20.x ou supérieure
- npm version 10.x ou supérieure (inclus avec Node.js)
- PostgreSQL version 15 ou supérieure
- Git version 2.40 ou supérieure
- Un compte SMTP actif pour l'envoi de courriels transactionnels (ex. : Brevo, Mailgun)
- Un accès à un serveur ou à une plateforme d'hébergement compatible (ex. : VPS sous Ubuntu 22.04, Railway, Render)
Installation
1. Cloner le dépôt
git clone https://github.com/jean-martin-menuiserie/site-web.git
cd site-web
2. Installer les dépendances
npm install
3. Configurer les variables d'environnement
Copiez le fichier d'exemple et renseignez vos propres valeurs :
cp .env.example .env
Éditez ensuite le fichier .env selon les instructions de la section Configuration ci-dessous.
4. Initialiser la base de données
npm run db:migrate
npm run db:seed
La commande db:seed insère les données initiales : catégories de produits, statuts de projet et compte administrateur par défaut.
5. Lancer le serveur en mode développement
npm run dev
Le site est alors accessible à l'adresse http://localhost:3000.
6. Construire pour la production
npm run build
npm run start
Utilisation
Accès au site vitrine
Une fois le serveur démarré, naviguez vers http://localhost:3000 pour consulter le site vitrine. Le formulaire de demande de devis est accessible depuis la page d'accueil et depuis chaque page de catégorie.
Accès à l'espace client
Les clients reçoivent leurs identifiants par courriel à la création de leur dossier. L'espace client est disponible à l'adresse /espace-client.
Accès à l'interface d'administration
L'interface d'administration est disponible à l'adresse /admin. Le compte administrateur créé lors du db:seed utilise les identifiants suivants en environnement de développement :
Identifiant : admin@jean-martin-menuiserie.fr
Mot de passe : Admin2024!
Ces identifiants doivent impérativement être modifiés avant tout déploiement en production.
Lancer les tests
npm run test
Pour les tests avec rapport de couverture :
npm run test:coverage
Configuration — variables d'environnement
Le fichier .env doit contenir les variables suivantes :
# Application
NODE_ENV=production
PORT=3000
APP_URL=https://www.jean-martin-menuiserie.fr
SESSION_SECRET=remplacez-par-une-chaine-aleatoire-de-64-caracteres
# Base de données PostgreSQL
DATABASE_URL=postgresql://utilisateur:motdepasse@localhost:5432/jean_martin_db
# Courriel transactionnel (SMTP)
SMTP_HOST=smtp.brevo.com
SMTP_PORT=587
SMTP_USER=votre-adresse@jean-martin-menuiserie.fr
SMTP_PASS=votre-cle-api-smtp
# Stockage des fichiers (AWS S3 ou compatible)
S3_BUCKET_NAME=jean-martin-assets
S3_REGION=eu-west-3
S3_ACCESS_KEY_ID=votre-cle-acces
S3_SECRET_ACCESS_KEY=votre-cle-secrete
# Analytique (optionnel)
ANALYTICS_TRACKING_ID=G-XXXXXXXXXX
| Variable | Obligatoire | Description |
|---|---|---|
NODE_ENV |
Oui | Environnement d'exécution (development ou production) |
DATABASE_URL |
Oui | Chaîne de connexion PostgreSQL complète |
SESSION_SECRET |
Oui | Clé secrète pour le chiffrement des sessions |
SMTP_HOST |
Oui | Serveur SMTP pour les courriels transactionnels |
S3_BUCKET_NAME |
Oui | Nom du compartiment de stockage des fichiers |
ANALYTICS_TRACKING_ID |
Non | Identifiant de suivi pour les statistiques de trafic |
Structure du projet
jean-martin-menuiserie/
├── public/ # Fichiers statiques (images, polices, icônes)
│ ├── images/
│ └── fonts/
├── src/
│ ├── components/ # Composants réutilisables (en-tête, pied de page, galerie)
│ ├── pages/ # Pages du site vitrine
│ │ ├── index.tsx # Page d'accueil
│ │ ├── realisations/ # Galerie et fiches de réalisations
│ │ ├── savoir-faire/ # Présentation des matériaux et procédés
│ │ ├── devis/ # Formulaire de demande de devis
│ │ └── blog/ # Articles et actualités
│ ├── app/ # Espace client et administration
│ │ ├── espace-client/ # Tableau de bord client
│ │ └── admin/ # Interface d'administration
│ ├── api/ # Points d'accès de l'interface de programmation
│ │ ├── devis.ts # Traitement des demandes de devis
│ │ ├── auth.ts # Authentification
│ │ └── projects.ts # Gestion des projets
│ ├── lib/ # Utilitaires partagés (base de données, courriel, stockage)
│ └── styles/ # Feuilles de style globales et thème
├── prisma/
│ ├── schema.prisma # Schéma de la base de données
│ └── migrations/ # Historique des migrations
├── tests/ # Tests unitaires et d'intégration
├── .env.example # Modèle de fichier de configuration
├── next.config.js # Configuration Next.js
├── tailwind.config.js # Configuration Tailwind CSS
├── package.json
└── README.md
Contribution
Les contributions internes à l'équipe sont les bienvenues. Merci de respecter le processus suivant :
Conventions de branches
| Préfixe | Usage |
|---|---|
feature/ |
Nouvelle fonctionnalité |
fix/ |
Correction de bogue |
content/ |
Mise à jour de contenu (textes, images) |
chore/ |
Maintenance, mises à jour de dépendances |
Processus de contribution
Créer une branche à partir de
develop:git checkout develop git pull origin develop git checkout -b feature/nom-de-la-fonctionnaliteDévelopper en respectant les règles de style définies dans
.eslintrcetprettier.config.js.Tester localement avant toute soumission :
npm run lint npm run testSoumettre une demande de fusion vers
developavec une description claire des changements apportés.Relecture obligatoire par au moins un autre développeur avant fusion.
Les fusions vers
mainsont réservées aux versions stables validées et déclenchent un déploiement automatique en production.
Style de code
- Langue des commentaires et des messages de validation : français
- Formatage automatique via Prettier à chaque sauvegarde
- Aucun avertissement ESLint ne doit subsister avant soumission
Licence
Ce projet est la propriété exclusive de Jean Martin Menuiserie, entreprise artisanale immatriculée à Lyon. Le code source est confidentiel et destiné à un usage interne.
Toute reproduction, distribution ou utilisation du code en dehors de l'entreprise est strictement interdite sans autorisation écrite préalable.
© 2024 Jean Martin Menuiserie — Tous droits réservés.
Site conçu et développé pour accompagner la croissance digitale d'une entreprise artisanale lyonnaise qui place l'excellence du travail du bois au cœur de chaque projet.