[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"theme-db":3,"$f3nLeRUAQRkoudWi1_Sz441XTCl5GSOe920DGjXeZDds":22,"$fPxp2pKjB1827CSIFKbBCCf2UVIP2G3wfRkcotZcScG0":59,"client-config-ac-hub":82,"header-db":133,"megamenu-contexts-ac-hub":143,"megamenu":145,"$fZ8NsAgP5p6WfMsieOTyDWv7YDOTTQbVpIxJaWHdQxGM":222,"$fP0FV7zZkQhZStJelKMQF2vnI2nbZQB210etjzdyGslw":225,"$ffA2_eFkN9XKgB9jzDDiARvtJXvRwD8gCOu2aHaDW8eo":284,"footer-db":286,"$fINI4gZJ9jGrKkdeKMLokcXFtTu9GlSBjqf36q2YjjHQ":296},{"theme":4},{"colors":5,"typography":13,"ui":17,"defaultColorMode":21},{"primary":6,"secondary":7,"background":8,"foreground":9,"muted":10,"headerBg":11,"footerBg":12,"topBarBg":9,"topBarText":11},"#4F46E5","#0D9488","#F9FAFB","#111827","#6B7280","#ffffff","#020617",{"fontFamily":14,"fontUrl":15,"baseFontSize":16},"Inter, system-ui, sans-serif","https:\u002F\u002Ffonts.googleapis.com\u002Fcss2?family=Inter:wght@400;500;600;700&family=Playfair+Display:ital,wght@0,400;0,700;0,800;0,900;1,400;1,700&display=swap","16px",{"borderRadius":18,"contentWidth":19,"shadow":20},"lg","7xl",true,"light",{"module":23,"canonical":54,"isCanonical":20,"contentHtml":58},{"name":24,"codename":25,"icon":26,"category":27,"flywheel":28,"description":29,"features":30,"tags":44,"status":52,"link":53,"slug":54,"summary":55,"contentMd":56,"ficheSlug":54,"version":57},"Régler les stocks depuis un CSV","cafe_quantitybycsv","📥","libre","","Vous déposez l'inventaire de votre fournisseur ou le comptage sorti de votre tableur, le module vous montre ce qu'il changerait, et vous décidez d'écrire. L'essai à blanc est actif par défaut. La version précédente ne fonctionnait pas du tout sur PHP 8 : mesuré sur PrestaShop 9.0.3, un fichier de moins de 500 lignes n'écrivait aucune ligne et rendait une erreur serveur. Elle faisait surtout dériver le stock des produits à déclinaisons — 10 demandé, 29 annoncé à la première vente.",[31,32,33,34,35,36,37,38,39,40,41,42,43],"La version 1.0.0 n'écrivait rien sur PHP 8 — mesuré : une TypeError fatale avant le dernier lot, donc un fichier de moins de 500 lignes ne changeait rien du tout","Elle faisait dériver le stock des produits à déclinaisons : 10 demandé, 29 annoncé à la première vente. Une ligne à deux colonnes sur un produit à déclinaisons est désormais refusée, et le message dit quoi ajouter","L'essai à blanc est actif par défaut : il lit le fichier, montre le séparateur détecté, les lignes applicables et les refusées, et n'écrit rien","Un refus porte sur une ligne, pas sur le fichier : l'import va au bout sans elle et le rapport nomme son numéro de ligne","Une cellule de texte ne met plus un produit à zéro, et une quantité décimale n'est pas tronquée en silence","Le séparateur est détecté — point-virgule, virgule, tabulation ou barre verticale — et le CSV UTF-8 de votre tableur convient tel quel, marque d'octets comprise","La première ligne ne passe pour un en-tête que si elle ne commence pas par un nombre : un export sans titres garde son premier produit","Une déclinaison qui appartient à un autre produit est refusée — une erreur de colonnes ne crée pas de stock fantôme","Aucune requête SQL dans les tables de stock : le module passe par StockAvailable::setQuantity(), donc la ligne agrégée, le mouvement de stock et actionUpdateQuantity restent justes","La quantité est relue après écriture et comparée à celle demandée — le rapport ne dit « réglé » que sur ce qui l'est","Les bornes refusent AVANT la première écriture (8 Mo, 20 000 lignes) : un import tué par le max_execution_time ne laisse pas un catalogue à moitié réglé","Aucune table créée, aucun greffon posé, aucune clé de configuration : la désinstallation ne laisse rien","61 vérifications et 10 mutations livrées avec le module, rejouables sans PHPUnit ni boutique",[45,46,47,48,49,50,51,27],"agpl-3.0","prestashop-9","stock","import","csv","declinaisons","catalogue","Production","\u002Fmodules\u002Fcafe_quantitybycsv-2.0.0.zip","import-quantites-csv-prestashop","Déposez l'inventaire de votre fournisseur ou le comptage sorti de votre tableur : le module montre ce qu'il changerait, puis vous décidez d'écrire. L'essai à blanc est actif par défaut, et une ligne douteuse est refusée seule, sans arrêter l'import.","## Le problème\n\nVotre fournisseur vous envoie un inventaire. Vous sortez un comptage de votre\ntableur. Et il faut reporter trois cents quantités à la main dans le\nback-office, une fiche après l'autre.\n\n## Comment ça marche\n\nDeux colonnes suffisent : l'identifiant du produit, et la quantité.\n\n```\nid;quantite\n42;17\n43;0\n```\n\nTrois colonnes pour viser une déclinaison précise :\n\n```\nid;declinaison;quantite\n51;120;8\n51;121;3\n```\n\nLe séparateur est **détecté** : point-virgule, virgule, tabulation ou barre\nverticale. Le fichier que votre tableur vient de produire convient tel quel, y\ncompris en « CSV UTF-8 » avec sa marque d'octets invisible.\n\nLa première ligne n'est traitée comme un en-tête que si elle ne commence pas par\nun nombre : un export sans ligne de titres garde donc son premier produit.\n\n## L'essai à blanc est actif par défaut\n\nSur un module qui écrit dans votre stock, le premier geste ne doit pas être celui\nqui écrit. L'essai à blanc lit le fichier, affiche le séparateur détecté,\nl'en-tête reconnu, les lignes applicables et les lignes refusées — **et n'écrit\nrien**.\n\n## Ce qu'il refuse, et pourquoi c'est le cœur du module\n\nUn refus porte sur **une ligne**, pas sur le fichier : l'import va au bout sans\nelle, et le rapport nomme son numéro de ligne.\n\n| Ligne | Ce qui se passe |\n|---|---|\n| `42;rupture` | **refusée**. Une cellule de texte ne met pas un produit à zéro. |\n| `42;10.6` | **refusée**. Une quantité décimale n'est pas tronquée à 10 — c'est une question à vous poser. |\n| `42;12 pièces` | **refusée**. Elle ne vaut pas 12. |\n| `REF-123;10` | **refusée**. Ce module travaille sur les identifiants de produit, pas sur les références. |\n| `51;8` quand 51 a des déclinaisons | **refusée**, et le message vous dit d'ajouter la colonne de déclinaison. |\n| `51;999;8` quand 999 appartient à un autre produit | **refusée**. Une erreur de colonnes ne crée pas de stock fantôme. |\n| `42;10` deux fois | la **dernière** vaut, et le rapport nomme la ligne remplacée. Les quantités ne s'additionnent pas. |\n\nUn produit à déclinaisons ne peut pas être réglé en deux colonnes, et le module\nle dit plutôt que de deviner. La table de stock porte une ligne par déclinaison,\nplus une ligne agrégée que PrestaShop recalcule comme leur somme : écrire la même\nvaleur partout donne un stock juste à l'instant de l'import, puis faux à la\npremière vente.\n\n## Ce qu'il écrit, et par où\n\nAucune requête SQL dans les tables de stock. Le module passe par l'API de la\nboutique — celle qui tient la ligne agrégée, respecte le contexte de boutique,\ninscrit le mouvement de stock et prévient les autres modules qui en dépendent.\n\nAprès l'import, la quantité est **relue** et comparée à celle demandée : le\nrapport ne dit « réglé » que sur ce qui l'est vraiment. En multiboutique,\nl'import s'applique à la boutique du contexte courant, et le rapport la nomme.\n\n## Les bornes\n\n| Borne | Valeur | Pourquoi |\n|---|---|---|\n| Taille du fichier | 8 Mo | au-delà, découpez |\n| Nombre de lignes | 20 000 | un import tué par le délai d'exécution du serveur laisse un catalogue à moitié réglé sans qu'on sache où il s'est arrêté. Le refus arrive **avant** la première écriture. |\n| Lignes par appel | 500 | borne la mémoire, ne change rien au résultat |\n\n## Si vous veniez de la version 1.0.0\n\n**Elle ne fonctionnait pas sur PHP 8**, et c'est mesuré : un fichier de moins de\n500 lignes ne changeait rien du tout, et l'écran rendait une erreur serveur. Elle\nfaisait aussi dériver le stock des produits à déclinaisons — 10 demandé, 29\nannoncé à la première vente.\n\nLes quantités déjà posées par la 1.0.0 ne sont pas corrigées par la mise à jour :\nelle ne peut pas savoir ce que vous vouliez. Un produit dont le stock a dérivé se\nrègle en redéposant son fichier, cette fois avec la colonne de déclinaison —\nl'essai à blanc vous montrera le résultat avant de l'écrire.\n\n## Installation\n\nBack-office → Modules → Installer un module → déposer le `.zip`, puis\n**Configurer**. Aucune table créée, aucun greffon posé, aucune clé de\nconfiguration : la désinstallation ne laisse rien derrière elle.\n\nLe module n'a qu'un seul point d'entrée, la page de configuration, derrière la\nsession employé et le jeton d'administration que PrestaShop pose lui-même.\n","2.0.0","\u003Ch2>Le problème\u003C\u002Fh2>\n\u003Cp>Votre fournisseur vous envoie un inventaire. Vous sortez un comptage de votre tableur. Et il faut reporter trois cents quantités à la main dans le back-office, une fiche après l&#39;autre.\u003C\u002Fp>\n\u003Ch2>Comment ça marche\u003C\u002Fh2>\n\u003Cp>Deux colonnes suffisent : l&#39;identifiant du produit, et la quantité.\u003C\u002Fp>\n\u003Cpre>\u003Ccode>id;quantite\n42;17\n43;0\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Trois colonnes pour viser une déclinaison précise :\u003C\u002Fp>\n\u003Cpre>\u003Ccode>id;declinaison;quantite\n51;120;8\n51;121;3\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Le séparateur est \u003Cstrong>détecté\u003C\u002Fstrong> : point-virgule, virgule, tabulation ou barre verticale. Le fichier que votre tableur vient de produire convient tel quel, y compris en « CSV UTF-8 » avec sa marque d&#39;octets invisible.\u003C\u002Fp>\n\u003Cp>La première ligne n&#39;est traitée comme un en-tête que si elle ne commence pas par un nombre : un export sans ligne de titres garde donc son premier produit.\u003C\u002Fp>\n\u003Ch2>L&#39;essai à blanc est actif par défaut\u003C\u002Fh2>\n\u003Cp>Sur un module qui écrit dans votre stock, le premier geste ne doit pas être celui qui écrit. L&#39;essai à blanc lit le fichier, affiche le séparateur détecté, l&#39;en-tête reconnu, les lignes applicables et les lignes refusées — \u003Cstrong>et n&#39;écrit rien\u003C\u002Fstrong>.\u003C\u002Fp>\n\u003Ch2>Ce qu&#39;il refuse, et pourquoi c&#39;est le cœur du module\u003C\u002Fh2>\n\u003Cp>Un refus porte sur \u003Cstrong>une ligne\u003C\u002Fstrong>, pas sur le fichier : l&#39;import va au bout sans elle, et le rapport nomme son numéro de ligne.\u003C\u002Fp>\n\u003Ctable>\u003Cthead>\u003Ctr>\u003Cth>Ligne\u003C\u002Fth>\u003Cth>Ce qui se passe\u003C\u002Fth>\u003C\u002Ftr>\u003C\u002Fthead>\u003Ctbody>\u003Ctr>\u003Ctd>\u003Ccode>42;rupture\u003C\u002Fcode>\u003C\u002Ftd>\u003Ctd>\u003Cstrong>refusée\u003C\u002Fstrong>. Une cellule de texte ne met pas un produit à zéro.\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003Ccode>42;10.6\u003C\u002Fcode>\u003C\u002Ftd>\u003Ctd>\u003Cstrong>refusée\u003C\u002Fstrong>. Une quantité décimale n&#39;est pas tronquée à 10 — c&#39;est une question à vous poser.\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003Ccode>42;12 pièces\u003C\u002Fcode>\u003C\u002Ftd>\u003Ctd>\u003Cstrong>refusée\u003C\u002Fstrong>. Elle ne vaut pas 12.\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003Ccode>REF-123;10\u003C\u002Fcode>\u003C\u002Ftd>\u003Ctd>\u003Cstrong>refusée\u003C\u002Fstrong>. Ce module travaille sur les identifiants de produit, pas sur les références.\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003Ccode>51;8\u003C\u002Fcode> quand 51 a des déclinaisons\u003C\u002Ftd>\u003Ctd>\u003Cstrong>refusée\u003C\u002Fstrong>, et le message vous dit d&#39;ajouter la colonne de déclinaison.\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003Ccode>51;999;8\u003C\u002Fcode> quand 999 appartient à un autre produit\u003C\u002Ftd>\u003Ctd>\u003Cstrong>refusée\u003C\u002Fstrong>. Une erreur de colonnes ne crée pas de stock fantôme.\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>\u003Ccode>42;10\u003C\u002Fcode> deux fois\u003C\u002Ftd>\u003Ctd>la \u003Cstrong>dernière\u003C\u002Fstrong> vaut, et le rapport nomme la ligne remplacée. Les quantités ne s&#39;additionnent pas.\u003C\u002Ftd>\u003C\u002Ftr>\u003C\u002Ftbody>\u003C\u002Ftable>\n\u003Cp>Un produit à déclinaisons ne peut pas être réglé en deux colonnes, et le module le dit plutôt que de deviner. La table de stock porte une ligne par déclinaison, plus une ligne agrégée que PrestaShop recalcule comme leur somme : écrire la même valeur partout donne un stock juste à l&#39;instant de l&#39;import, puis faux à la première vente.\u003C\u002Fp>\n\u003Ch2>Ce qu&#39;il écrit, et par où\u003C\u002Fh2>\n\u003Cp>Aucune requête SQL dans les tables de stock. Le module passe par l&#39;API de la boutique — celle qui tient la ligne agrégée, respecte le contexte de boutique, inscrit le mouvement de stock et prévient les autres modules qui en dépendent.\u003C\u002Fp>\n\u003Cp>Après l&#39;import, la quantité est \u003Cstrong>relue\u003C\u002Fstrong> et comparée à celle demandée : le rapport ne dit « réglé » que sur ce qui l&#39;est vraiment. En multiboutique, l&#39;import s&#39;applique à la boutique du contexte courant, et le rapport la nomme.\u003C\u002Fp>\n\u003Ch2>Les bornes\u003C\u002Fh2>\n\u003Ctable>\u003Cthead>\u003Ctr>\u003Cth>Borne\u003C\u002Fth>\u003Cth>Valeur\u003C\u002Fth>\u003Cth>Pourquoi\u003C\u002Fth>\u003C\u002Ftr>\u003C\u002Fthead>\u003Ctbody>\u003Ctr>\u003Ctd>Taille du fichier\u003C\u002Ftd>\u003Ctd>8 Mo\u003C\u002Ftd>\u003Ctd>au-delà, découpez\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>Nombre de lignes\u003C\u002Ftd>\u003Ctd>20 000\u003C\u002Ftd>\u003Ctd>un import tué par le délai d&#39;exécution du serveur laisse un catalogue à moitié réglé sans qu&#39;on sache où il s&#39;est arrêté. Le refus arrive \u003Cstrong>avant\u003C\u002Fstrong> la première écriture.\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>Lignes par appel\u003C\u002Ftd>\u003Ctd>500\u003C\u002Ftd>\u003Ctd>borne la mémoire, ne change rien au résultat\u003C\u002Ftd>\u003C\u002Ftr>\u003C\u002Ftbody>\u003C\u002Ftable>\n\u003Ch2>Si vous veniez de la version 1.0.0\u003C\u002Fh2>\n\u003Cp>\u003Cstrong>Elle ne fonctionnait pas sur PHP 8\u003C\u002Fstrong>, et c&#39;est mesuré : un fichier de moins de 500 lignes ne changeait rien du tout, et l&#39;écran rendait une erreur serveur. Elle faisait aussi dériver le stock des produits à déclinaisons — 10 demandé, 29 annoncé à la première vente.\u003C\u002Fp>\n\u003Cp>Les quantités déjà posées par la 1.0.0 ne sont pas corrigées par la mise à jour : elle ne peut pas savoir ce que vous vouliez. Un produit dont le stock a dérivé se règle en redéposant son fichier, cette fois avec la colonne de déclinaison — l&#39;essai à blanc vous montrera le résultat avant de l&#39;écrire.\u003C\u002Fp>\n\u003Ch2>Installation\u003C\u002Fh2>\n\u003Cp>Back-office → Modules → Installer un module → déposer le \u003Ccode>.zip\u003C\u002Fcode>, puis \u003Cstrong>Configurer\u003C\u002Fstrong>. Aucune table créée, aucun greffon posé, aucune clé de configuration : la désinstallation ne laisse rien derrière elle.\u003C\u002Fp>\n\u003Cp>Le module n&#39;a qu&#39;un seul point d&#39;entrée, la page de configuration, derrière la session employé et le jeton d&#39;administration que PrestaShop pose lui-même.\u003C\u002Fp>",{"footer":60},{"theme":61,"description":62,"hours":62,"logo":63,"contact":67,"social":68,"bottomBar":78,"newsletter":79},"dark",null,{"src":64,"href":65,"alt":66},"\u002Flogo-ac.svg","\u002F","Alexandre Carette",{"email":62,"phone":62,"address":62,"cta":62},[69,72,75],{"platform":70,"href":71,"label":70},"linkedin","https:\u002F\u002Fwww.linkedin.com\u002Fin\u002Falexandre-carette\u002F",{"platform":73,"href":74,"label":73},"malt","https:\u002F\u002Fwww.malt.fr\u002Fprofile\u002Falexandrecarette",{"platform":76,"href":77,"label":76},"github","https:\u002F\u002Fgithub.com\u002Fprest4cafe",{"copyright":62},{"show":80,"title":62,"description":62,"placeholder":62,"ctaLabel":62,"consentText":81},false,"J'accepte de recevoir par e-mail les actualités de CodeMyShop et d'Alexandre Carette : nouveaux modules libres, astuces PrestaShop, SEO et performance. Je peux me désinscrire à tout moment grâce au lien présent dans chaque message.",{"faq":83,"theme":120,"domain":124,"clientId":128,"features":129,"contactEmail":131,"defaultColorMode":21,"gscSiteUrl":132},[84,87,90,93,96,99,102,105,108,111,114,117],{"reponse":85,"question":86},"L'architecture Headless sépare le moteur e-commerce (PrestaShop via API REST) de l'interface (Nuxt 4, SSR). Résultat : des performances 3× supérieures en Core Web Vitals, une liberté de design totale, et la possibilité d'intégrer l'IA nativement dans le parcours d'achat. Je le recommande car je l'ai éprouvé sur +10 ans de projets : la maîtrise technique est entière, les données restent chez vous.","Qu'est-ce que l'architecture PrestaShop Headless et pourquoi la recommandez-vous ?",{"reponse":88,"question":89},"Dans le cadre d'une mission, j'intègre l'IA comme un outil de production, pas un gadget. Concrètement : génération automatique de fiches produit optimisées SEO, transcréation multilingue adaptée culturellement (FR\u002FEN\u002FDE), publication sociale automatisée, scripts vidéo Shorts, nurturing client. Tout est orchestré depuis un Hub centralisé avec suivi FinOps des coûts IA en temps réel — que vous voyez à chaque livraison.","Comment intégrez-vous l'IA dans un projet e-commerce ?",{"reponse":91,"question":92},"Mon conseil est clair : les solutions SaaS comme Shopify offrent une mise en route rapide, mais vous cèdent votre infrastructure, vos données et une part de votre CA. Avec PrestaShop Headless, vous êtes propriétaire du code, des données et de l'infrastructure. Pas de dépendance plateforme, souveraineté RGPD, liberté technique totale pour scaler et intégrer l'IA. Je prends en charge la migration ou le build complet dans le cadre d'un forfait ou d'une régie au TJM.","Pourquoi PrestaShop Headless plutôt que Shopify ou WooCommerce ?",{"reponse":94,"question":95},"Tout commence par un premier échange de 30 min pour cadrer votre besoin. Je vous remets ensuite un devis (forfait ou régie au TJM) avec des jalons clairs et sans surprise. Une fois accepté, je réalise la mission ; à la livraison, le code et les accès vous appartiennent intégralement. Pas d'abonnement, pas de dépendance : vous repartez autonomes.","Comment se déroule une mission avec vous ?",{"reponse":97,"question":98},"Le SSR (Server-Side Rendering) via Nuxt 4 garantit un HTML complet pour les crawlers Google et les LLM (ChatGPT, Perplexity). J'optimise les Core Web Vitals, la structure des URLs, le maillage interne, le balisage Schema.org (Product, FAQ, Person) et l'architecture de contenu pour maximiser le trafic organique et la visibilité dans les réponses IA.","Comment fonctionne le SEO technique sur une architecture Headless ?",{"reponse":100,"question":101},"Le tarif est calé sur la nature de la mission (audit, refonte, accompagnement long, build complet) et discuté en début de relation. Chaque mission démarre par un audit technique gratuit de 30 minutes pour cadrer le besoin, suivi d'un devis détaillé avec jalons clairs et sans surprise. +10 ans d'expertise, 193 projets livrés et une maîtrise complète de la stack (PrestaShop, Nuxt 4, Docker, IA).","Quel est votre tarif et comment se structure une mission ?",{"reponse":103,"question":104},"Oui, dans le cadre d'une mission. Je déploie des infrastructures containerisées (Docker, Nginx, Redis, PM2) sur VPS souverain français, avec CI\u002FCD GitHub Actions et déploiements Zero-Downtime. Vos données restent en France, conformément au RGPD. À la livraison, vous maîtrisez votre stack : je vous forme et vous remets la documentation d'exploitation.","Prenez-vous en charge l'infrastructure et le DevOps ?",{"reponse":106,"question":107},"Oui — c'est l'une de mes spécialités. Je développe des modules PrestaShop sur mesure dans le cadre d'une mission (forfait ou régie). CRM, génération IA de contenu, catalogue headless, automatisations métier : chaque module est sécurisé, documenté et vous appartient intégralement à la livraison. Pas de catalogue produit : chaque module est conçu pour votre besoin précis.","Développez-vous des modules PrestaShop sur mesure ?",{"reponse":109,"question":110},"Je configure une boucle d'analyse qui croise trois sources que vous possédez : vos logs serveur, votre Google Search Console via API, et les comportements visiteurs via Matomo auto-hébergé sur votre VPS. L'IA identifie le contenu manquant — requêtes sans page, pages à faible conversion — et le génère. Zéro donnée ne transite par des serveurs tiers. Le coût IA est suivi token par token et vous est reporté.","Comment l'IA identifie-t-elle le contenu à produire pour mon site ?",{"reponse":112,"question":113},"Basé à Metz (Grand Est), j'accompagne des entreprises dans toute la France. Audit initial en visio, suivi de projet en temps réel, et déploiements automatisés. La distance n'est jamais un frein — 119 avis 5 étoiles sur Malt en témoignent.","Acceptez-vous des clients partout en France ?",{"reponse":115,"question":116},"Le forfait convient aux périmètres bien définis : refonte, module précis, audit. Le prix et le délai sont fixés à l'avance, sans surprise. La régie (au TJM) convient aux missions évolutives : accompagnement technique long, sprints itératifs, roadmap ouverte. Dans les deux cas, le code vous appartient à la livraison et je n'impose aucun abonnement ni dépendance.","Quelle différence entre une mission au forfait et une mission en régie (TJM) ?",{"reponse":118,"question":119},"Cliquez sur \"Réserver un appel\" pour un échange gratuit de 30 minutes. J'analyse vos enjeux e-commerce, votre stack actuelle et les opportunités d'optimisation SEO et IA. Aucun engagement — juste un diagnostic clair et actionnable.","Comment réserver un premier échange pour discuter de mon projet ?",{"ui":121,"colors":122,"typography":123},{"shadow":20,"borderRadius":18},{"muted":10,"primary":6,"footerBg":11,"headerBg":11,"topBarBg":9,"secondary":7,"background":8,"foreground":9,"topBarText":11},{"fontUrl":15,"fontFamily":14},[125,126,127],"alexandrecarette.fr","www.alexandrecarette.fr","localhost","ac-hub",{"showLogin":20,"showSearch":80,"showContact":80,"headerLayout":130,"showWishlist":80,"stickyHeader":80},"inline","contact@alexandrecarette.fr","https:\u002F\u002Falexandrecarette.fr\u002F",{"header":134},{"logo":135,"topBar":138,"contactEmail":131,"contactPhone":62,"features":141,"navBar":62,"headerLinks":142,"storesHref":62},{"src":64,"alt":136,"text":66,"href":65,"class":137},"Alexandre Carette — Architecte E-commerce Souverain","h-10 w-10",{"message":62,"messageMobile":62,"showLanguages":80,"align":139,"languages":140},"left",[],{"showSearch":80,"showWishlist":80,"showLogin":20,"showContact":80,"showCart":80,"showQuoteButton":20,"showBlogLink":80,"showContactLink":80,"showGiftcardLink":80,"showStoresLink":80,"stickyHeader":20,"staticHeader":80,"headerLayout":130},{},{"contexts":144},[],{"items":146},[147,157,165,173,181,189,198,206,214],{"id":148,"type":149,"label":150,"href":152,"icon":62,"iconRole":153,"description":62,"badge":62,"groupTitle":62,"groupKey":62,"style":62,"gridColumns":62,"cssClass":62,"psCategoryId":62,"psProductId":62,"showPsChildren":80,"position":154,"barVisible":20,"children":155,"psChildren":156},41,"link",{"fr":151},"Expertise","\u002Fexpertise","picto",0,[],[],{"id":158,"type":149,"label":159,"href":161,"icon":62,"iconRole":153,"description":62,"badge":62,"groupTitle":62,"groupKey":62,"style":62,"gridColumns":62,"cssClass":62,"psCategoryId":62,"psProductId":62,"showPsChildren":80,"position":162,"barVisible":20,"children":163,"psChildren":164},42,{"fr":160},"Blog","\u002Fblog",1,[],[],{"id":166,"type":149,"label":167,"href":169,"icon":62,"iconRole":153,"description":62,"badge":62,"groupTitle":62,"groupKey":62,"style":62,"gridColumns":62,"cssClass":62,"psCategoryId":62,"psProductId":62,"showPsChildren":80,"position":170,"barVisible":20,"children":171,"psChildren":172},43,{"fr":168},"Méthode","\u002Fmodules",2,[],[],{"id":174,"type":149,"label":175,"href":177,"icon":62,"iconRole":153,"description":62,"badge":62,"groupTitle":62,"groupKey":62,"style":62,"gridColumns":62,"cssClass":62,"psCategoryId":62,"psProductId":62,"showPsChildren":80,"position":178,"barVisible":20,"children":179,"psChildren":180},49,{"fr":176},"Modules gratuits","\u002Fmodules-libres",3,[],[],{"id":182,"type":149,"label":183,"href":185,"icon":62,"iconRole":153,"description":62,"badge":62,"groupTitle":62,"groupKey":62,"style":62,"gridColumns":62,"cssClass":62,"psCategoryId":62,"psProductId":62,"showPsChildren":80,"position":186,"barVisible":20,"children":187,"psChildren":188},44,{"fr":184},"Outils IA","\u002Foutils-ia",4,[],[],{"id":190,"type":149,"label":191,"href":193,"icon":62,"iconRole":153,"description":62,"badge":62,"groupTitle":62,"groupKey":62,"style":194,"gridColumns":62,"cssClass":62,"psCategoryId":62,"psProductId":62,"showPsChildren":80,"position":195,"barVisible":20,"children":196,"psChildren":197},45,{"fr":192},"Tarifs","\u002Ftarifs",{"highlight":20},5,[],[],{"id":199,"type":149,"label":200,"href":202,"icon":62,"iconRole":153,"description":62,"badge":62,"groupTitle":62,"groupKey":62,"style":62,"gridColumns":62,"cssClass":62,"psCategoryId":62,"psProductId":62,"showPsChildren":80,"position":203,"barVisible":20,"children":204,"psChildren":205},46,{"fr":201},"Academy","\u002Facademy",6,[],[],{"id":207,"type":149,"label":208,"href":210,"icon":62,"iconRole":153,"description":62,"badge":62,"groupTitle":62,"groupKey":62,"style":62,"gridColumns":62,"cssClass":62,"psCategoryId":62,"psProductId":62,"showPsChildren":80,"position":211,"barVisible":20,"children":212,"psChildren":213},47,{"fr":209},"À propos","\u002Fa-propos",7,[],[],{"id":215,"type":149,"label":216,"href":218,"icon":62,"iconRole":153,"description":62,"badge":62,"groupTitle":62,"groupKey":62,"style":62,"gridColumns":62,"cssClass":62,"psCategoryId":62,"psProductId":62,"showPsChildren":80,"position":219,"barVisible":20,"children":220,"psChildren":221},48,{"fr":217},"Contact","\u002Fcontact",8,[],[],{"ok":20,"alternates":223},{"fr":224},"\u002Fmodules-libres\u002Fimport-quantites-csv-prestashop",{"columns":226},[227,238,264,277],{"title":228,"position":162,"links":229},"Plateforme",[230,231,234,235],{"label":192,"href":193,"external":80},{"label":232,"href":233,"external":80},"Devenir Ambassadeur","\u002Fambassadeur",{"label":168,"href":169,"external":80},{"label":236,"href":237,"external":20},"CodeMyShop (open-source)","https:\u002F\u002Fcodemyshop.com",{"title":239,"position":170,"links":240},"Le Synedre",[241,244,247,250,253,256,258,261],{"label":242,"href":243,"external":80},"L'histoire","\u002Fsynedre",{"label":245,"href":246,"external":20},"Constitution","https:\u002F\u002Fsynedre.com\u002Ffr\u002Fconstitution",{"label":248,"href":249,"external":20},"L'équipe","https:\u002F\u002Fsynedre.com\u002Ffr\u002Fagents",{"label":251,"href":252,"external":80},"Le réacteur en direct","\u002Freacteur",{"label":254,"href":255,"external":20},"Le Drill (entraînement)","https:\u002F\u002Fsynedre.com\u002Ffr\u002Fdrill",{"label":257,"href":249,"external":20},"Les agents IA",{"label":259,"href":260,"external":20},"La Conduite","https:\u002F\u002Fsynedre.com\u002Ffr\u002Fconduite",{"label":262,"href":263,"external":20},"Charte plateforme","https:\u002F\u002Fsynedre.com\u002Ffr\u002Fcharte",{"title":265,"position":178,"links":266},"Ressources",[267,268,269,271,274],{"label":160,"href":161,"external":80},{"label":201,"href":202,"external":80},{"label":270,"href":152,"external":80},"Expertise PrestaShop",{"label":272,"href":273,"external":80},"Flywheel","\u002Fflywheel",{"label":275,"href":276,"external":80},"Manifeste","\u002Fmanifeste",{"title":209,"position":186,"links":278},[279,280,283],{"label":66,"href":210,"external":80},{"label":281,"href":282,"external":20},"Dossier de presse","https:\u002F\u002Fsynedre.com\u002Ffr\u002Fpresse",{"label":217,"href":218,"external":80},{"sections":285},[],{"footer":287},{"theme":61,"description":62,"hours":62,"logo":288,"contact":289,"social":290,"bottomBar":294,"newsletter":295},{"src":64,"href":65,"alt":66},{"email":62,"phone":62,"address":62,"cta":62},[291,292,293],{"platform":70,"href":71,"label":70},{"platform":73,"href":74,"label":73},{"platform":76,"href":77,"label":76},{"copyright":62},{"show":80,"title":62,"description":62,"placeholder":62,"ctaLabel":62,"consentText":81},{"reviews":297,"total":331,"business":62},[298,304,310,315,321,327],{"author":299,"company":300,"rating":195,"title":301,"text":302,"date":303,"source":73},"Office","MONOGRAM","Nous travaillons avec Alexandre depuis quelques mois et sommes ravis de son a","Nous travaillons avec Alexandre depuis quelques mois et sommes ravis de son accompagnement. Alexandre comprend parfaitement les enjeux et problématiques liés à notre activité et parvient, en réponse, à nous apporter des solutions techniques et fonctionnelles en respectant coûts et délais.","2023-07-18",{"author":305,"company":306,"rating":195,"title":307,"text":308,"date":309,"source":73},"Marine","MES-Distribution","La résolution de mes problèmes à été rapide et efficace, je recommande :)","La résolution de mes problèmes à été rapide et efficace, je recommande :).","2023-01-20",{"author":311,"company":312,"rating":195,"title":313,"text":313,"date":314,"source":73},"Jl","Kaigan","Super","2022-10-25",{"author":316,"company":317,"rating":195,"title":318,"text":319,"date":320,"source":73},"Elite Cbd","Canna Elite Europe Ltd","Au Top","Au Top. tout simplement","2022-06-21",{"author":322,"company":323,"rating":195,"title":324,"text":325,"date":326,"source":73},"Lorie","GRIIN outdoor","Configuration d''un VPS et migration réalisée avec succès, bons conseils, dia","Configuration d'un VPS et migration réalisée avec succès, bons conseils, diagnostique rapide et efficace de nos problèmes. Je recommande.","2022-06-01",{"author":316,"company":317,"rating":195,"title":328,"text":329,"date":330,"source":73},"Toujours aussi clair et clairvoyant","Toujours aussi clair et clairvoyant... ;) Un plaisir de travailler avec Alexandre","2022-05-16",33]