Étude de cas

Croc'enVie, une boutique complète écrite de zéro

Catalogue, paiement, expéditions, facturation comptable, avis clients, sauvegardes et supervision — sans CMS, sans framework, sans abonnement. Voici ce qu'il y a derrière.

Page d'accueil de crocenvie.fr : bannière « De la vitalité à croquer » avec les sachets de produits, menu Boutique, Nous découvrir, Bienfaits, Recettes, et catégories de produits.
La page d'accueil de crocenvie.fr

Le contexte

Un savoir-faire réel, une visibilité limitée

Croc'enVie fabrique à Ploemeur, en Bretagne, des préparations crues et des super-aliments : épices, mueslis, laits d'or, nectars et élixirs, rochers au chocolat. Des produits bio, vegan et sans additifs, fabriqués « dans le respect du vivant ».

Le problème n'était pas le produit, mais l'accès : pas de vraie boutique en ligne, une gestion des commandes et des expéditions à la main, et aucun moyen simple de recueillir la parole des clients — alors que c'est précisément ce qui fait vendre une épicerie fine.

À cela s'ajoutait une exigence souvent négligée sur les petits sites : un producteur qui vend en direct doit émettre de vraies factures, gérer des remboursements et tenir une comptabilité. Ce n'est pas une option qu'on branche après coup.

« De la vitalité à croquer » — l'enjeu était de retrouver en ligne ce que le client ressent devant l'étal : la matière, la couleur, l'histoire du producteur.
Le parti pris du projet
Bio AB Vegan Sans gluten Raw food Ploemeur, Bretagne

La réponse

Dix domaines fonctionnels, écrits sur mesure

Plutôt qu'un socle générique alourdi d'extensions, chaque fonction a été développée pour ce que fait réellement Croc'enVie au quotidien.

Catalogue & recherche

Cinq catégories illustrées, fiches produits avec labels (bio AB, vegan, sans gluten, raw food), recherche par mot-clé insensible aux accents et tolérante aux fautes de frappe, images allégées et chargées à la demande, panier accessible depuis toutes les pages.

Tunnel de commande & paiement

Récapitulatif avec quantités ajustables dans le panier, adresse modifiable, choix du mode de livraison, puis paiement par carte sur la page sécurisée Stripe : aucune donnée bancaire ne transite par le site. Commande possible sans créer de compte.

Livraison & étiquettes

Point relais via le widget Mondial Relay intégré au checkout et son API ; étiquette générée depuis le back-office, numéro de suivi enregistré sur la commande. Même principe pour DPD, dont l'étiquette est générée en direct via son web-service.

Livraison France & Europe

Six destinations européennes en plus de la France, avec des grilles tarifaires au poids propres à chaque zone et des options d'expédition qui s'adaptent au pays choisi. Franco de port limité aux pays où il est rentable, et options masquées là où le transporteur ne dessert pas.

Facturation & avoirs

Facture PDF pour chaque commande payée, numérotation séquentielle et sans trou, ventilation HT / TVA / TTC. Tout remboursement génère un avoir numéroté, conforme comptablement, référençant la facture d'origine.

Avis clients

Relance automatique dix jours après la livraison, dépôt d'avis noté en étoiles, publication immédiate avec modération a posteriori, et note agrégée exposée en données structurées pour Google.

Espace client

Historique limité aux commandes réellement abouties, numéro de facture en première colonne, téléchargement des PDF, adresse modifiable, dépôt d'avis sur les produits commandés.

Back-office & pilotage

Commandes filtrables et paginées, indicateurs « payées », « à traiter » et chiffre d'affaires, remboursement Stripe en deux clics, modération des avis, statistiques filtrables par catégorie et par produit, journal des ventes exportable en CSV avec ventilation de TVA, mesure de la provenance du trafic sans cookie publicitaire.

Éditorial & découverte

Histoire du producteur, événements et salons, points de vente physiques et revendeurs en ligne, recettes et conseils d'usage : la partie qui construit la confiance et nourrit le référencement.

Site multilingue

Six langues servies à partir de la seule version française, traduites automatiquement à la volée, catalogue et fiches produits compris. Chaque langue a ses propres adresses et ses balises hreflang ; un écran d'administration permet de relire et de figer les traductions corrigées à la main.

Sous le capot

Une architecture délibérément simple

Le site est écrit en PHP 8.3 procédural, sans CMS ni framework. Ce n'est pas de la nostalgie : c'est un choix de portabilité. Il n'y a pas de socle propriétaire à apprendre, pas de conteneur, pas de chaîne de compilation. N'importe quel développeur PHP peut reprendre ce code dans cinq ans, et le déploiement se résume à copier des fichiers.

Toutes les pages passent par un point d'entrée unique qui charge un petit noyau d'includes réutilisables : helpers métier, accès base de données en singleton, configuration. Les accès à MariaDB se font exclusivement via PDO en requêtes réellement préparées : aucune donnée utilisateur n'est jamais concaténée dans une requête SQL.

Les identifiants sensibles vivent au-dessus de la racine web, dans un fichier que le serveur ne peut pas servir — comme les sauvegardes. Et deux interrupteurs de configuration permettent de désactiver instantanément en production des mécanismes entiers, sans toucher au code.

domaine/
├─ public_html/        ← racine web, tout le site
├─ secrets.php         ← hors du web, jamais servi
└─ sauvegardes/        ← dumps quotidiens, hors du web

public_html/includes/
init.php → functions.php → db.php → config.php
PHP 8.3 MariaDB / PDO Requêtes préparées LiteSpeed + OPcache Migrations SQL versionnées

Fiabilité

La fonctionnalité qui ne se voit pas

Un site marchand qui perd une commande, débite deux fois un transporteur ou casse sa numérotation de factures coûte bien plus cher qu'il n'a coûté à construire. Une bonne part du travail est allée là.

Paiement

Confirmation par webhook

Une commande ne passe « payée » que lorsque Stripe le confirme au serveur, jamais sur le simple retour du navigateur. Un client qui ferme son onglet après avoir payé ne crée pas de commande fantôme.

Comptabilité

Numérotation sans trou

Le numéro de facture est attribué sous transaction, avec verrou sur le compteur, et l'opération est idempotente : une commande déjà facturée n'en reçoit jamais un second. C'est une obligation comptable, pas un détail.

Expédition

Garde-fou anti-double-débit

Un double clic sur « générer l'étiquette » ne produit qu'une seule étiquette, donc un seul débit du compte transporteur. Le genre de bug qui ne se voit qu'en fin de mois, sur la facture.

Sauvegarde

Dump quotidien hors du web

Sauvegarde automatique de la base chaque nuit, compressée, stockée hors de la racine web, avec rotation des vingt dernières et copie envoyée par e-mail.

Reprise

Journal des écritures

Toutes les écritures en base sont consignées dans un journal rejouable entre deux sauvegardes. Si un incident survient à 17 h, on ne repart pas de la nuit précédente en perdant la journée.

Supervision

42 contrôles chaque jour

Base, extensions, Stripe, SMTP, images, espace disque, temps de réponse, fraîcheur des tâches planifiées, commandes bloquées, présence de la sauvegarde de la veille, santé du cache serveur, expiration du certificat SSL et du nom de domaine…

À la moindre anomalie détectée, une alerte est envoyée par e-mail.

Sécurité

Les bases, appliquées partout

Il n'y a pas de recette magique : la sécurité d'un site marchand tient à une poignée de disciplines tenues sans exception, à chaque page et à chaque formulaire. Elles sont intégrées au socle du site, pas ajoutées après coup.

Deux pistes restent ouvertes et sont documentées comme telles : une politique de sécurité de contenu (CSP) et l'extension des jetons anti-CSRF aux formulaires publics. Savoir ce qui n'est pas fait fait partie du travail.

  • Injections SQL neutralisées : PDO et requêtes préparées côté serveur, sans exception
  • XSS : échappement systématique en sortie, via un helper unique
  • CSRF : jeton centralisé vérifié sur toutes les actions du back-office
  • Mots de passe hachés en bcrypt, jamais stockés en clair
  • Protection anti-force brute sur la connexion
  • Cookies durcis : HttpOnly, Secure, SameSite
  • En-têtes HSTS et X-Frame-Options
  • Secrets et sauvegardes hors de la racine web
  • Le client ne voit que ses propres commandes et documents

La fabrique

Une pile technique lisible et reprenable

Aucun composant exotique : des briques éprouvées, documentées, que l'on trouve chez n'importe quel hébergeur mutualisé à quelques euros par mois.

PHP 8.3MariaDBPDO HTML / CSS / JS natifsStripe Checkout Webhook StripeAPI Mondial Relay API DPDFPDFPHPMailer / SMTPAPI DeepL Tâches planifiéesGitHub HostingerGoogle Search Console
  • Aucune dépendance front lourde, aucune étape de compilation
  • Développement versionné sur GitHub, déploiement par copie de fichiers
  • Évolutions de schéma livrées en migrations SQL numérotées
  • Documents PDF (factures, avoirs, rapports) générés côté serveur
  • Données structurées produit avec note agrégée pour les étoiles dans Google
  • Sitemap dynamique, robots.txt, titres et méta-descriptions par page
  • Soumission instantanée des URL aux moteurs via IndexNow, depuis le back-office
  • Six langues servies depuis une source unique : adresse dédiée, hreflang et plan de site par langue
  • Spécifications techniques et fonctionnelles rédigées et livrées avec le site

Ce que ce projet démontre

Un site marchand, ce n'est pas une vitrine avec un bouton payer

C'est un paiement à fiabiliser, une comptabilité à respecter, des transporteurs à dialoguer, des e-mails qui doivent arriver, des données à sauvegarder et une exploitation à surveiller. Ce projet couvre la chaîne entière — et elle est documentée, pour que le producteur ne dépende de personne. Parce qu'il est documenté de bout en bout, ce socle sert aujourd'hui de base éprouvée aux boutiques suivantes.