@salifbiaye/create-boutique 0.5.0 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (193) hide show
  1. package/cli/dist/code.js +110 -0
  2. package/cli/dist/commands.js +241 -17
  3. package/cli/dist/create.js +108 -15
  4. package/cli/dist/generate.js +108 -39
  5. package/cli/dist/guide.js +12 -4
  6. package/cli/dist/index.js +38 -7
  7. package/cli/dist/payments.js +150 -0
  8. package/cli/dist/project.js +42 -3
  9. package/docs/fiche-client.en.html +2 -2
  10. package/docs/fiche-client.html +2 -2
  11. package/docs/guide-complet.fr.html +681 -256
  12. package/docs/guide-images/categories.jpg +0 -0
  13. package/docs/guide-images/clients.jpg +0 -0
  14. package/docs/guide-images/collections.jpg +0 -0
  15. package/docs/guide-images/commande-detail.jpg +0 -0
  16. package/docs/guide-images/commande-expedier.jpg +0 -0
  17. package/docs/guide-images/commande-menu.jpg +0 -0
  18. package/docs/guide-images/commande-paiement.jpg +0 -0
  19. package/docs/guide-images/commandes-liste.jpg +0 -0
  20. package/docs/guide-images/connexion.jpg +0 -0
  21. package/docs/guide-images/groupes-clients.jpg +0 -0
  22. package/docs/guide-images/inventaire.jpg +0 -0
  23. package/docs/guide-images/listes-prix.jpg +0 -0
  24. package/docs/guide-images/menu.jpg +0 -0
  25. package/docs/guide-images/mes-boutiques-fermer.jpg +0 -0
  26. package/docs/guide-images/mes-boutiques-panneau.jpg +0 -0
  27. package/docs/guide-images/mes-boutiques.jpg +0 -0
  28. package/docs/guide-images/parametres-boutique.jpg +0 -0
  29. package/docs/guide-images/parametres-canaux.jpg +0 -0
  30. package/docs/guide-images/parametres-emplacements.jpg +0 -0
  31. package/docs/guide-images/parametres-profil.jpg +0 -0
  32. package/docs/guide-images/parametres-regions.jpg +0 -0
  33. package/docs/guide-images/parametres-utilisateurs.jpg +0 -0
  34. package/docs/guide-images/produit-creer-details.jpg +0 -0
  35. package/docs/guide-images/produit-detail.jpg +0 -0
  36. package/docs/guide-images/produit-variantes-menu.jpg +0 -0
  37. package/docs/guide-images/produit-variantes.jpg +0 -0
  38. package/docs/guide-images/produits-liste.jpg +0 -0
  39. package/docs/guide-images/promotion-details.jpg +0 -0
  40. package/docs/guide-images/promotion-type.jpg +0 -0
  41. package/docs/guide-images/promotions-liste.jpg +0 -0
  42. package/docs/guide-images/site-boutique.jpg +0 -0
  43. package/docs/guide-images/site-fermee.png +0 -0
  44. package/docs/guide-images/vue-ensemble.jpg +0 -0
  45. package/package.json +3 -2
  46. package/templates/backend/medusa-config.ts +31 -25
  47. package/templates/backend/package-lock.json +21 -0
  48. package/templates/backend/package.json +2 -0
  49. package/templates/backend/src/admin/i18n/json/en.json +63 -5
  50. package/templates/backend/src/admin/i18n/json/fr.json +63 -5
  51. package/templates/backend/src/admin/routes/boutique-campaigns/campaign-drawer.tsx +29 -17
  52. package/templates/backend/src/admin/routes/boutique-campaigns/page.tsx +84 -6
  53. package/templates/backend/src/admin/routes/reviews/page.tsx +259 -0
  54. package/templates/backend/src/api/admin/active-boutique/route.ts +25 -0
  55. package/templates/backend/src/api/admin/boutique-campaigns/[salesChannelId]/route.ts +7 -1
  56. package/templates/backend/src/api/admin/boutique-campaigns/route.ts +9 -1
  57. package/templates/backend/src/api/admin/boutique-online/[salesChannelId]/route.ts +22 -0
  58. package/templates/backend/src/api/admin/reviews/[id]/route.ts +15 -0
  59. package/templates/backend/src/api/admin/reviews/route.ts +47 -0
  60. package/templates/backend/src/api/middlewares.ts +9 -0
  61. package/templates/backend/src/api/store/campaign/route.ts +5 -1
  62. package/templates/backend/src/api/store/reviews/latest/route.ts +39 -0
  63. package/templates/backend/src/api/store/reviews/order/route.ts +36 -0
  64. package/templates/backend/src/api/store/reviews/route.ts +43 -0
  65. package/templates/backend/src/api/store/reviews/summary/route.ts +28 -0
  66. package/templates/backend/src/emails/en.json +3 -1
  67. package/templates/backend/src/emails/fr.json +3 -1
  68. package/templates/backend/src/lib/active.ts +41 -0
  69. package/templates/backend/src/lib/email-config.ts +14 -0
  70. package/templates/backend/src/lib/emails.ts +9 -0
  71. package/templates/backend/src/lib/notify.ts +14 -8
  72. package/templates/backend/src/lib/payment-config.ts +66 -0
  73. package/templates/backend/src/lib/project.ts +38 -1
  74. package/templates/backend/src/lib/redirect-payment.ts +264 -0
  75. package/templates/backend/src/lib/review-token.ts +40 -0
  76. package/templates/backend/src/lib/reviews.ts +25 -0
  77. package/templates/backend/src/modules/naboopay/index.ts +6 -0
  78. package/templates/backend/src/modules/naboopay/service.ts +92 -0
  79. package/templates/backend/src/modules/paydunya/index.ts +6 -0
  80. package/templates/backend/src/modules/paydunya/service.ts +89 -0
  81. package/templates/backend/src/modules/paytech/index.ts +6 -0
  82. package/templates/backend/src/modules/paytech/service.ts +114 -0
  83. package/templates/backend/src/modules/product-review/index.ts +8 -0
  84. package/templates/backend/src/modules/product-review/migrations/Migration20261001090000.ts +18 -0
  85. package/templates/backend/src/modules/product-review/models/review.ts +25 -0
  86. package/templates/backend/src/modules/product-review/service.ts +6 -0
  87. package/templates/backend/src/modules/product-review/validators.ts +27 -0
  88. package/templates/backend/src/modules/smtp/index.ts +6 -0
  89. package/templates/backend/src/modules/smtp/service.ts +73 -0
  90. package/templates/backend/src/scripts/rewrite-file-urls.ts +56 -0
  91. package/templates/backend/src/scripts/seed.ts +60 -36
  92. package/templates/backend/src/subscribers/fulfillment-emails.ts +1 -1
  93. package/templates/backend/src/workflows/reviews.ts +21 -0
  94. package/templates/backend/src/workflows/steps/create-review.ts +52 -0
  95. package/templates/backend/src/workflows/steps/update-review.ts +36 -0
  96. package/templates/storefront/PERSONNALISER.md +134 -0
  97. package/templates/storefront/locales/en.json +198 -11
  98. package/templates/storefront/locales/fr.json +198 -11
  99. package/templates/storefront/public/custom/LISEZMOI.txt +2 -0
  100. package/templates/storefront/src/app/(checkout)/layout.tsx +1 -1
  101. package/templates/storefront/src/app/(main)/layout.tsx +8 -1
  102. package/templates/storefront/src/app/(main)/legal/[page]/page.tsx +42 -7
  103. package/templates/storefront/src/app/(main)/page.tsx +149 -4
  104. package/templates/storefront/src/app/(main)/products/[handle]/page.tsx +4 -1
  105. package/templates/storefront/src/app/(main)/review/page.tsx +60 -0
  106. package/templates/storefront/src/app/(main)/store/page.tsx +3 -1
  107. package/templates/storefront/src/app/(main)/template.tsx +17 -2
  108. package/templates/storefront/src/app/layout.tsx +13 -1
  109. package/templates/storefront/src/lib/boutique/campaign.ts +5 -1
  110. package/templates/storefront/src/lib/boutique/config.ts +71 -23
  111. package/templates/storefront/src/lib/boutique/page-name.ts +25 -0
  112. package/templates/storefront/src/lib/boutique/schema.ts +7 -2
  113. package/templates/storefront/src/lib/config.ts +37 -8
  114. package/templates/storefront/src/lib/constants.tsx +17 -0
  115. package/templates/storefront/src/lib/data/cart.ts +4 -1
  116. package/templates/storefront/src/lib/data/cookies.ts +14 -2
  117. package/templates/storefront/src/lib/data/review-actions.ts +28 -0
  118. package/templates/storefront/src/lib/data/reviews.ts +64 -0
  119. package/templates/storefront/src/modules/checkout/components/payment/index.tsx +26 -4
  120. package/templates/storefront/src/modules/checkout/components/payment-button/index.tsx +85 -2
  121. package/templates/storefront/src/modules/checkout/components/shipping-address/index.tsx +6 -1
  122. package/templates/storefront/src/modules/products/templates/index.tsx +5 -0
  123. package/templates/storefront/src/modules/store/components/shop-search.tsx +85 -0
  124. package/templates/storefront/src/modules/store/templates/index.tsx +16 -8
  125. package/templates/storefront/src/modules/store/templates/paginated-products.tsx +15 -3
  126. package/templates/storefront/src/modules/ub/album.tsx +2 -0
  127. package/templates/storefront/src/modules/ub/arena.tsx +182 -0
  128. package/templates/storefront/src/modules/ub/campaign-blocks.tsx +3 -2
  129. package/templates/storefront/src/modules/ub/campaign-ended.tsx +27 -13
  130. package/templates/storefront/src/modules/ub/cinema.tsx +2 -0
  131. package/templates/storefront/src/modules/ub/cookie-banner.tsx +62 -0
  132. package/templates/storefront/src/modules/ub/gala.tsx +2 -0
  133. package/templates/storefront/src/modules/ub/grimoire.tsx +35 -8
  134. package/templates/storefront/src/modules/ub/harvest.tsx +2 -1
  135. package/templates/storefront/src/modules/ub/hero-image.tsx +14 -0
  136. package/templates/storefront/src/modules/ub/home-kit.ts +45 -0
  137. package/templates/storefront/src/modules/ub/lantern.tsx +244 -0
  138. package/templates/storefront/src/modules/ub/locker.tsx +180 -0
  139. package/templates/storefront/src/modules/ub/mosaic.tsx +189 -0
  140. package/templates/storefront/src/modules/ub/nav.tsx +8 -5
  141. package/templates/storefront/src/modules/ub/review-form.tsx +62 -0
  142. package/templates/storefront/src/modules/ub/reviews.tsx +131 -0
  143. package/templates/storefront/src/modules/ub/riviera.tsx +175 -0
  144. package/templates/storefront/src/modules/ub/souk.tsx +214 -0
  145. package/templates/storefront/src/modules/ub/sunset-checklist.tsx +95 -0
  146. package/templates/storefront/src/modules/ub/sunset.tsx +164 -0
  147. package/templates/storefront/src/modules/ub/tech.tsx +2 -2
  148. package/templates/storefront/src/modules/ub/training.tsx +196 -0
  149. package/templates/storefront/src/proxy.ts +4 -1
  150. package/templates/storefront/src/styles/custom.css +26 -0
  151. package/templates/storefront/src/styles/ub/album.css +1 -1
  152. package/templates/storefront/src/styles/ub/arena.css +120 -0
  153. package/templates/storefront/src/styles/ub/cinema.css +1 -1
  154. package/templates/storefront/src/styles/ub/gala.css +1 -1
  155. package/templates/storefront/src/styles/ub/grimoire.css +23 -7
  156. package/templates/storefront/src/styles/ub/harvest.css +7 -6
  157. package/templates/storefront/src/styles/ub/lantern.css +157 -0
  158. package/templates/storefront/src/styles/ub/locker.css +115 -0
  159. package/templates/storefront/src/styles/ub/media.css +10 -0
  160. package/templates/storefront/src/styles/ub/mosaic.css +118 -0
  161. package/templates/storefront/src/styles/ub/motion.css +0 -2
  162. package/templates/storefront/src/styles/ub/overrides.css +10 -0
  163. package/templates/storefront/src/styles/ub/pages.css +176 -0
  164. package/templates/storefront/src/styles/ub/reviews.css +85 -0
  165. package/templates/storefront/src/styles/ub/riviera.css +103 -0
  166. package/templates/storefront/src/styles/ub/souk.css +144 -0
  167. package/templates/storefront/src/styles/ub/sunset.css +123 -0
  168. package/templates/storefront/src/styles/ub/tech.css +5 -8
  169. package/templates/storefront/src/styles/ub/training.css +120 -0
  170. package/templates/storefront/themes/jeux/campaign.en.json +31 -0
  171. package/templates/storefront/themes/jeux/campaign.fr.json +31 -0
  172. package/templates/storefront/themes/jeux/theme.json +11 -0
  173. package/templates/storefront/themes/jeux-2/campaign.en.json +31 -0
  174. package/templates/storefront/themes/jeux-2/campaign.fr.json +31 -0
  175. package/templates/storefront/themes/jeux-2/theme.json +11 -0
  176. package/templates/storefront/themes/mubarak/campaign.en.json +31 -0
  177. package/templates/storefront/themes/mubarak/campaign.fr.json +31 -0
  178. package/templates/storefront/themes/mubarak/theme.json +11 -0
  179. package/templates/storefront/themes/mubarak-2/campaign.en.json +31 -0
  180. package/templates/storefront/themes/mubarak-2/campaign.fr.json +31 -0
  181. package/templates/storefront/themes/mubarak-2/theme.json +11 -0
  182. package/templates/storefront/themes/sport/campaign.en.json +31 -0
  183. package/templates/storefront/themes/sport/campaign.fr.json +31 -0
  184. package/templates/storefront/themes/sport/theme.json +11 -0
  185. package/templates/storefront/themes/sport-2/campaign.en.json +31 -0
  186. package/templates/storefront/themes/sport-2/campaign.fr.json +31 -0
  187. package/templates/storefront/themes/sport-2/theme.json +11 -0
  188. package/templates/storefront/themes/summer/campaign.en.json +31 -0
  189. package/templates/storefront/themes/summer/campaign.fr.json +31 -0
  190. package/templates/storefront/themes/summer/theme.json +11 -0
  191. package/templates/storefront/themes/summer-2/campaign.en.json +31 -0
  192. package/templates/storefront/themes/summer-2/campaign.fr.json +31 -0
  193. package/templates/storefront/themes/summer-2/theme.json +11 -0
@@ -2,277 +2,702 @@
2
2
  <html lang="fr">
3
3
  <head>
4
4
  <meta charset="utf-8">
5
- <title>{{STORE_NAME}} — guide complet</title>
5
+ <title>Guide de gestion — {{STORE_NAME}}</title>
6
6
  <style>
7
- @page { size: A4; margin: 16mm 15mm; }
8
- :root{ --ink:#16181d; --muted:#5b616e; --line:#e3e5ea; --soft:#f5f6f8; --accent:#2b4fd8; --accent-soft:#eef1fd; --warn:#9a4a07; --warn-soft:#fdf3e7; --ok:#166534; --ok-soft:#ecfdf3; }
9
- *{box-sizing:border-box}
10
- body{font-family:"Carlito","Liberation Sans",Arial,sans-serif;color:var(--ink);font-size:10.2pt;line-height:1.45;margin:0;-webkit-print-color-adjust:exact;print-color-adjust:exact}
11
- h1{font-size:24pt;margin:0 0 2mm}
12
- h2{font-size:15pt;margin:8mm 0 2mm;padding-bottom:1.5mm;border-bottom:2px solid var(--ink);break-after:avoid}
13
- h3{font-size:11.5pt;margin:5mm 0 1.5mm;break-after:avoid}
14
- p{margin:1.5mm 0}
15
- ol,ul{margin:1mm 0 2mm;padding-left:6mm} li{margin:.6mm 0}
16
- code{background:var(--soft);padding:.2mm 1.2mm;border-radius:1mm;font-size:9.4pt}
17
- pre{background:var(--soft);padding:2.5mm 3.5mm;border-radius:2mm;font-size:9pt;white-space:pre-wrap;margin:1.5mm 0 2.5mm}
18
- table{width:100%;border-collapse:collapse;margin:2mm 0 3mm;font-size:9.4pt;break-inside:avoid}
19
- th,td{border:1px solid var(--line);padding:1.3mm 2mm;text-align:left;vertical-align:top}
20
- th{background:var(--soft)}
21
- .menu{color:var(--accent);background:var(--accent-soft);padding:.2mm 1.6mm;border-radius:1mm;font-size:9.2pt;white-space:nowrap}
22
- .box{border-radius:2mm;padding:2.5mm 3.5mm;margin:2mm 0 3mm;break-inside:avoid}
23
- .warn{background:var(--warn-soft);color:var(--warn)} .ok{background:var(--ok-soft);color:var(--ok)} .info{background:var(--accent-soft)}
24
- .part{break-before:page}
25
- .cover p.sub{color:var(--muted);font-size:12pt;margin:0 0 6mm}
26
- .toc{columns:2;font-size:9.8pt}
27
- .muted{color:var(--muted)}
7
+ /* ========== Mise en page du livre (A4, impression Chrome) ========== */
8
+ @page { size: A4; margin: 20mm 18mm 20mm 18mm;
9
+ @bottom-center { content: counter(page); font: 9pt "Segoe UI", Arial, sans-serif; color: #8a8d99; }
10
+ @top-right { content: "Guide de gestion · {{STORE_NAME}}"; font: 8pt "Segoe UI", Arial, sans-serif; color: #a3a6b2; } }
11
+ @page cover { margin: 0; @bottom-center { content: none; } @top-right { content: none; } }
12
+ @page opener { @top-right { content: none; } }
13
+ :root { --ink: #17181f; --muted: #5c5f6d; --soft: #f4f5f8; --line: #e2e4ea; --brand: #3b2bb5; --brand-soft: #eeebfc;
14
+ --tip: #0f7a4f; --tip-bg: #ecf8f2; --warn: #b4540a; --warn-bg: #fff4e8; --info: #2457c5; --info-bg: #edf3ff; }
15
+ * { box-sizing: border-box; }
16
+ html { -webkit-print-color-adjust: exact; print-color-adjust: exact; }
17
+ body { margin: 0; color: var(--ink); font: 10.6pt/1.62 "Segoe UI", system-ui, -apple-system, Arial, sans-serif; }
18
+ p { margin: 0 0 8px; }
19
+ strong, b { font-weight: 600; }
20
+ code { font: 9.2pt Consolas, "Cascadia Mono", monospace; background: var(--soft); padding: 1px 5px; border-radius: 4px; }
21
+
22
+ /* ---------- Couverture ---------- */
23
+ .cover { page: cover; height: 297mm; position: relative; overflow: hidden; background: #14122b; color: #fff; break-after: page; }
24
+ .cover__band { position: absolute; inset: 0 0 auto 0; height: 118mm; background: linear-gradient(135deg, #3b2bb5 0%, #6d4bd8 55%, #b56ad8 100%); }
25
+ .cover__band::after { content: ""; position: absolute; inset: auto 0 -1px 0; height: 40mm; background: linear-gradient(0deg, #14122b, transparent); }
26
+ .cover__in { position: absolute; inset: 0; padding: 30mm 22mm; display: flex; flex-direction: column; }
27
+ .cover__kicker { font-size: 10pt; letter-spacing: .28em; text-transform: uppercase; opacity: .85; }
28
+ .cover__title { margin: 14mm 0 4mm; font-size: 40pt; line-height: 1.02; font-weight: 700; letter-spacing: -.02em; }
29
+ .cover__sub { font-size: 14pt; opacity: .9; max-width: 140mm; }
30
+ .cover__store { margin-top: 26mm; font-size: 22pt; font-weight: 600; }
31
+ .cover__card { margin-top: auto; background: rgba(255,255,255,.07); border: 1px solid rgba(255,255,255,.16); border-radius: 10px; padding: 7mm 8mm; display: grid; grid-template-columns: 38mm 1fr; row-gap: 3mm; font-size: 10.5pt; }
32
+ .cover__card dt { opacity: .7; } .cover__card dd { margin: 0; font-weight: 600; word-break: break-all; }
33
+ .cover__foot { margin-top: 8mm; font-size: 9pt; opacity: .6; }
34
+
35
+ /* ---------- Pages d'introduction ---------- */
36
+ .front { break-after: page; }
37
+ .front h1 { font-size: 22pt; margin: 0 0 6mm; letter-spacing: -.01em; }
38
+ .legend { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; margin: 10px 0 18px; }
39
+ .legend > div { border: 1px solid var(--line); border-radius: 8px; padding: 10px 12px; font-size: 9.8pt; }
40
+ .toc { columns: 2; column-gap: 12mm; font-size: 10pt; }
41
+ .toc .part { break-inside: avoid; margin-bottom: 12px; }
42
+ .toc .part > b { display: block; color: var(--brand); font-size: 8.5pt; letter-spacing: .14em; text-transform: uppercase; margin-bottom: 4px; }
43
+ .toc ol { margin: 0; padding: 0; list-style: none; }
44
+ .toc li { margin: 2px 0; } .toc li span { display: inline-block; width: 8mm; color: var(--muted); font-weight: 600; }
45
+
46
+ /* ---------- Parties et chapitres ---------- */
47
+ .part-page { page: opener; break-before: page; break-after: page; height: 250mm; display: flex; flex-direction: column; justify-content: center; }
48
+ .part-page small { color: var(--brand); font-weight: 700; letter-spacing: .3em; text-transform: uppercase; font-size: 10pt; }
49
+ .part-page h1 { font-size: 34pt; line-height: 1.05; margin: 4mm 0 6mm; letter-spacing: -.02em; }
50
+ .part-page p { color: var(--muted); font-size: 12pt; max-width: 130mm; }
51
+ .part-page ul { margin: 8mm 0 0; padding: 0; list-style: none; border-top: 1px solid var(--line); }
52
+ .part-page li { padding: 3mm 0; border-bottom: 1px solid var(--line); font-size: 12pt; }
53
+ .part-page li b { color: var(--brand); display: inline-block; width: 14mm; }
54
+
55
+ .chapter { break-before: page; }
56
+ .chapter-head { display: grid; grid-template-columns: 22mm 1fr; gap: 6mm; align-items: end; padding-bottom: 5mm; margin-bottom: 6mm; border-bottom: 3px solid var(--ink); }
57
+ .chapter-head .num { font-size: 46pt; line-height: .8; font-weight: 700; color: var(--brand); }
58
+ .chapter-head h1 { margin: 0; font-size: 22pt; line-height: 1.1; letter-spacing: -.01em; }
59
+ .chapter-head p { margin: 2mm 0 0; color: var(--muted); font-size: 10.5pt; }
60
+ .inchapter { background: var(--soft); border-radius: 8px; padding: 8px 12px; margin-bottom: 8mm; font-size: 9.6pt; }
61
+ .inchapter b { color: var(--muted); font-size: 8.3pt; letter-spacing: .12em; text-transform: uppercase; margin-right: 6px; }
62
+
63
+ h2 { font-size: 14pt; margin: 9mm 0 3mm; break-after: avoid; letter-spacing: -.005em; }
64
+ h2 .n { color: var(--brand); margin-right: 8px; }
65
+ h3 { font-size: 11pt; margin: 5mm 0 2mm; break-after: avoid; }
66
+
67
+ /* Chemin dans les menus */
68
+ .path { display: inline-flex; flex-wrap: wrap; align-items: center; gap: 4px; margin: 0 0 3mm; padding: 4px 10px; border-radius: 99px; background: var(--brand-soft); color: var(--brand); font-size: 9pt; font-weight: 600; }
69
+ .path::before { content: "Où"; margin-right: 4px; padding: 0 6px; border-radius: 99px; background: var(--brand); color: #fff; font-size: 8pt; }
70
+ .ui { display: inline-block; padding: 0 6px; border: 1px solid #cfd2dc; border-bottom-width: 2px; border-radius: 5px; background: #fff; font-size: 9.4pt; font-weight: 600; white-space: nowrap; }
71
+
72
+ /* Étapes */
73
+ ol.steps { counter-reset: s; list-style: none; margin: 3mm 0 5mm; padding: 0; }
74
+ ol.steps > li { counter-increment: s; position: relative; padding: 0 0 3mm 11mm; min-height: 8mm; break-inside: avoid; }
75
+ ol.steps > li::before { content: counter(s); position: absolute; left: 0; top: 0; width: 7mm; height: 7mm; border-radius: 50%; background: var(--ink); color: #fff; font-size: 9pt; font-weight: 700; display: grid; place-items: center; }
76
+ ul { padding-left: 18px; margin: 2mm 0 4mm; } ul li { margin: 1.5mm 0; }
77
+
78
+ /* Figures */
79
+ figure { margin: 4mm 0 6mm; break-inside: avoid; }
80
+ figure img { display: block; width: 100%; border: 1px solid var(--line); border-radius: 8px; box-shadow: 0 6px 18px -10px rgb(20 20 40 / .35); }
81
+ figure.half img { width: 62%; margin: 0 auto; }
82
+ figure.crop img { height: 70mm; object-fit: cover; object-position: top; }
83
+ figure.crop.bottom img { object-position: bottom; }
84
+ figcaption { margin-top: 2mm; font-size: 8.8pt; color: var(--muted); text-align: center; }
85
+ figcaption b { color: var(--ink); }
86
+
87
+ /* Encadrés */
88
+ .note { display: grid; grid-template-columns: 7mm 1fr; gap: 3mm; margin: 4mm 0; padding: 3.5mm 4mm; border-radius: 8px; break-inside: avoid; font-size: 9.9pt; }
89
+ .note::before { width: 7mm; height: 7mm; border-radius: 50%; display: grid; place-items: center; color: #fff; font-weight: 700; font-size: 10pt; }
90
+ .note b.t { display: block; margin-bottom: 1mm; }
91
+ .tip { background: var(--tip-bg); } .tip::before { content: "✓"; background: var(--tip); } .tip b.t { color: var(--tip); }
92
+ .warn { background: var(--warn-bg); } .warn::before { content: "!"; background: var(--warn); } .warn b.t { color: var(--warn); }
93
+ .info { background: var(--info-bg); } .info::before { content: "i"; background: var(--info); } .info b.t { color: var(--info); }
94
+
95
+ table { width: 100%; border-collapse: collapse; margin: 3mm 0 5mm; font-size: 9.6pt; break-inside: avoid; }
96
+ th, td { text-align: left; vertical-align: top; padding: 2.4mm 3mm; border-bottom: 1px solid var(--line); }
97
+ th { background: var(--soft); font-weight: 600; }
98
+ tr { break-inside: avoid; }
99
+ .badge { display: inline-block; padding: 0 7px; border-radius: 99px; font-size: 8.8pt; font-weight: 600; }
100
+ .b-orange { background: #fff1e6; color: #b4540a; } .b-green { background: #e6f7ee; color: #0f7a4f; } .b-red { background: #fdecef; color: #c0253f; } .b-grey { background: #eef0f3; color: #555a66; } .b-blue { background: #eaf1ff; color: #2457c5; }
28
101
  </style>
29
102
  </head>
30
103
  <body>
31
104
 
105
+ <!-- ======================= COUVERTURE ======================= -->
32
106
  <section class="cover">
33
- <h1>{{STORE_NAME}}</h1>
34
- <p class="sub">Guide complet : mettre les boutiques en ligne, puis tout gérer depuis l'admin.</p>
107
+ <div class="cover__band"></div>
108
+ <div class="cover__in">
109
+ <div class="cover__kicker">Guide de l'administration</div>
110
+ <div class="cover__title">Gérer votre boutique en ligne</div>
111
+ <div class="cover__sub">Commandes, produits, stock, promotions et campagnes : toutes les manipulations, pas à pas, avec les écrans.</div>
112
+ <div class="cover__store">{{STORE_NAME}}</div>
113
+ <dl class="cover__card">
114
+ <dt>Adresse de l'administration</dt><dd>{{ADMIN_URL}}</dd>
115
+ <dt>Identifiant</dt><dd>{{ADMIN_EMAIL}}</dd>
116
+ <dt>Mot de passe</dt><dd>transmis séparément, à changer à la première connexion</dd>
117
+ <dt>Devises</dt><dd>{{CURRENCIES}}</dd>
118
+ </dl>
119
+ <div class="cover__foot">Assistance : {{SUPPORT}}</div>
120
+ </div>
121
+ </section>
122
+
123
+ <!-- ======================= COMMENT LIRE CE GUIDE ======================= -->
124
+ <section class="front">
125
+ <h1>Comment lire ce guide</h1>
126
+ <p>Chaque chapitre correspond à une rubrique du menu de l'administration. Chaque section répond à une question précise (« comment expédier une commande ? ») et suit toujours le même ordre : <b>où aller</b>, <b>les étapes</b>, puis <b>l'écran</b> correspondant.</p>
127
+ <div class="legend">
128
+ <div><span class="path">Produits › Créer</span><br>Le chemin à suivre dans les menus.</div>
129
+ <div><span class="ui">Enregistrer</span><br>Un bouton ou un libellé tel qu'il apparaît à l'écran.</div>
130
+ <div><div class="note tip" style="margin:0"><div><b class="t">Astuce</b>Un raccourci ou une bonne pratique.</div></div></div>
131
+ <div><div class="note warn" style="margin:0"><div><b class="t">Attention</b>Une action à faire avec prudence.</div></div></div>
132
+ </div>
133
+ <p>Le bouton <span class="ui">…</span> (trois points) en haut à droite de chaque bloc ouvre les actions de ce bloc : modifier, supprimer, expédier, etc. C'est le geste le plus utilisé de l'administration.</p>
134
+
135
+ <h1 style="margin-top:10mm">Sommaire</h1>
136
+ <div class="toc">
137
+ <div class="part"><b>Partie I · Premiers pas</b><ol>
138
+ <li><span>1</span>Se connecter</li>
139
+ <li><span>2</span>Découvrir l'administration</li></ol></div>
140
+ <div class="part"><b>Partie II · Vendre au quotidien</b><ol>
141
+ <li><span>3</span>Les commandes</li>
142
+ <li><span>4</span>Retours et remboursements</li>
143
+ <li><span>5</span>Les clients</li></ol></div>
144
+ <div class="part"><b>Partie III · Le catalogue</b><ol>
145
+ <li><span>6</span>Les produits</li>
146
+ <li><span>7</span>Variantes, prix et photos</li>
147
+ <li><span>8</span>Le stock</li>
148
+ <li><span>9</span>Catégories et collections</li></ol></div>
149
+ <div class="part"><b>Partie IV · Boutiques et promotions</b><ol>
150
+ <li><span>10</span>Mes boutiques : sites, textes et visuels</li>
151
+ <li><span>11</span>Prix barrés (listes de prix)</li>
152
+ <li><span>12</span>Codes promo et promotions</li></ol></div>
153
+ <div class="part"><b>Partie V · Réglages</b><ol>
154
+ <li><span>13</span>Paramètres</li>
155
+ <li><span>14</span>Bonnes pratiques et dépannage</li></ol></div>
156
+ </div>
157
+ </section>
158
+
159
+ <!-- ======================= PARTIE I ======================= -->
160
+ <section class="part-page">
161
+ <small>Partie I</small>
162
+ <h1>Premiers pas</h1>
163
+ <p>Se connecter, se repérer dans l'administration et retrouver vos boutiques.</p>
164
+ <ul><li><b>1</b>Se connecter</li><li><b>2</b>Découvrir l'administration</li></ul>
165
+ </section>
166
+
167
+ <section class="chapter">
168
+ <div class="chapter-head"><div class="num">1</div><div><h1>Se connecter</h1><p>Accéder à l'administration, changer son mot de passe et sa langue.</p></div></div>
169
+ <div class="inchapter"><b>Dans ce chapitre</b>1.1 Première connexion · 1.2 Mot de passe · 1.3 Langue</div>
170
+
171
+ <h2><span class="n">1.1</span>Première connexion</h2>
172
+ <ol class="steps">
173
+ <li>Ouvrez l'adresse de l'administration dans votre navigateur : <b>{{ADMIN_URL}}</b>. Ajoutez-la à vos favoris.</li>
174
+ <li>Saisissez votre e-mail (<b>{{ADMIN_EMAIL}}</b>) et le mot de passe qui vous a été transmis.</li>
175
+ <li>Cliquez sur <span class="ui">Continuer avec l'email</span>. Vous arrivez sur la liste des commandes.</li>
176
+ </ol>
177
+ <figure class="half"><img src="guide-images/connexion.jpg" alt=""><figcaption><b>Figure 1.1</b> — Écran de connexion.</figcaption></figure>
178
+
179
+ <h2><span class="n">1.2</span>Changer ou retrouver son mot de passe</h2>
180
+ <ol class="steps">
181
+ <li>Sur l'écran de connexion, cliquez sur <span class="ui">Réinitialiser</span> (« Mot de passe oublié ? »).</li>
182
+ <li>Saisissez votre e-mail : vous recevez un lien pour choisir un nouveau mot de passe.</li>
183
+ </ol>
184
+ <div class="note tip"><div><b class="t">Sécurité renforcée</b>Dans <span class="ui">Paramètres</span> › <span class="ui">Profil</span>, <span class="ui">Authentification à deux facteurs</span> › <span class="ui">Activer</span> ajoute un code demandé à chaque connexion (application d'authentification sur votre téléphone).</div></div>
185
+ <div class="note warn"><div><b class="t">Attention</b>Le mot de passe donne accès aux commandes et aux données de vos clients. Ne le partagez pas : invitez plutôt chaque personne avec son propre compte (chapitre 13).</div></div>
186
+
187
+ <h2><span class="n">1.3</span>Choisir la langue de l'administration</h2>
188
+ <div class="path">Paramètres › Profil</div>
189
+ <ol class="steps">
190
+ <li>Ouvrez <span class="ui">Paramètres</span> (en bas du menu), puis <span class="ui">Profil</span>.</li>
191
+ <li>Cliquez sur <span class="ui">…</span> › <span class="ui">Modifier</span>, choisissez la langue et enregistrez.</li>
192
+ </ol>
193
+ <figure class="crop"><img src="guide-images/parametres-profil.jpg" alt=""><figcaption><b>Figure 1.2</b> — Profil : langue et informations personnelles.</figcaption></figure>
194
+ </section>
195
+
196
+ <section class="chapter">
197
+ <div class="chapter-head"><div class="num">2</div><div><h1>Découvrir l'administration</h1><p>Le menu, la recherche et vos boutiques.</p></div></div>
198
+ <div class="inchapter"><b>Dans ce chapitre</b>2.1 Le menu · 2.2 Rechercher · 2.3 Vos boutiques et leurs adresses</div>
199
+
200
+ <h2><span class="n">2.1</span>Le menu</h2>
201
+ <p>Tout se trouve dans le menu de gauche. Le nom en haut est celui de votre boutique ; votre compte est en bas.</p>
35
202
  <table>
36
- <tr><th>Admin</th><td>{{ADMIN_URL}}</td></tr>
37
- <tr><th>E-mail admin</th><td>{{ADMIN_EMAIL}}</td></tr>
38
- <tr><th>Mot de passe</th><td class="muted">transmis à part — jamais écrit dans ce document</td></tr>
39
- <tr><th>Devises</th><td>{{CURRENCIES}}</td></tr>
40
- <tr><th>Projet</th><td><code>{{PROJECT}}</code></td></tr>
203
+ <tr><th style="width:32%">Rubrique</th><th>Pour…</th><th style="width:14%">Chapitre</th></tr>
204
+ <tr><td><b>Commandes</b></td><td>suivre, encaisser, expédier, annuler, rembourser</td><td>3, 4</td></tr>
205
+ <tr><td><b>Produits</b> (et Collections, Catégories)</td><td>créer et modifier le catalogue, les photos, les prix</td><td>6, 7, 9</td></tr>
206
+ <tr><td><b>Inventaire</b></td><td>voir et ajuster le stock</td><td>8</td></tr>
207
+ <tr><td><b>Clients</b></td><td>fiches clients, groupes (VIP, revendeurs…)</td><td>5</td></tr>
208
+ <tr><td><b>Promotions</b></td><td>codes promo, remises automatiques</td><td>12</td></tr>
209
+ <tr><td><b>Listes de prix</b></td><td>prix barrés, prix réservés à un groupe</td><td>11</td></tr>
210
+ <tr><td><b>Avis</b></td><td>valider ou refuser les avis des acheteurs, par boutique</td><td>6.7</td></tr>
211
+ <tr><td><b>Mes boutiques</b></td><td>ouvrir / fermer un site, textes, dates et visuels de campagne</td><td>10</td></tr>
212
+ <tr><td><b>Paramètres</b></td><td>équipe, régions, livraison, taxes</td><td>13</td></tr>
41
213
  </table>
214
+ <figure><img src="guide-images/vue-ensemble.jpg" alt=""><figcaption><b>Figure 2.1</b> — L'administration : le menu à gauche, la rubrique ouverte à droite.</figcaption></figure>
215
+
216
+ <h2><span class="n">2.2</span>Rechercher</h2>
217
+ <p><span class="ui">Rechercher</span> en haut du menu (ou <span class="ui">Ctrl</span> + <span class="ui">K</span>, <span class="ui">⌘</span> + <span class="ui">K</span> sur Mac) trouve une commande, un produit ou un client depuis n'importe quel écran. Chaque liste a aussi son propre champ de recherche et le bouton <span class="ui">Ajouter un filtre</span>.</p>
218
+
219
+ <h2><span class="n">2.3</span>Vos boutiques et leurs adresses</h2>
220
+ <p>Toutes vos boutiques sont gérées depuis cette même administration. Chacune a un <b>identifiant</b> (colonne « Identifiant ») : c'est lui qui apparaît dans les commandes (colonne « Canal de vente ») et sur la fiche des produits.</p>
42
221
  <table>
43
- <tr><th>Boutique</th><th>Identifiant (canal de vente)</th><th>Thème</th><th>Devise</th><th>Adresse</th></tr>
222
+ <tr><th>Nom</th><th>Identifiant</th><th>Thème</th><th>Devise</th><th>Adresse du site</th></tr>
44
223
  {{STORES_HTML}}
45
224
  </table>
46
- <div class="toc">
47
- <b>A. Mise en ligne (équipe)</b>
48
- <ol><li>Créer et lancer le projet</li><li>Identifiants admin</li><li>Paiement Stripe</li><li>E-mails</li><li>Domaines et HTTPS</li><li>Checklist avant livraison</li></ol>
49
- <b>B. Gestion au quotidien (client)</b>
50
- <ol><li>Se connecter, équipe, mot de passe</li><li>Commandes</li><li>Retours, échanges, remboursements</li><li>Produits et variantes</li><li>Prix par devise et prix barrés</li><li>Catégories et collections</li><li>Boutiques (canaux de vente)</li><li>Stock</li><li>Campagnes (textes, images, logo)</li><li>Codes promo et promotions</li><li>Clients et groupes</li><li>Livraison et taxes</li><li>À ne pas toucher</li><li>Dépannage</li></ol>
51
- </div>
225
+ <div class="note info"><div><b class="t">Bon à savoir</b>Les commandes, les produits, le stock et les clients de toutes les boutiques sont au même endroit. Un même produit peut être vendu dans plusieurs boutiques ; son stock est commun.</div></div>
226
+ </section>
227
+
228
+ <!-- ======================= PARTIE II ======================= -->
229
+ <section class="part-page">
230
+ <small>Partie II</small>
231
+ <h1>Vendre au quotidien</h1>
232
+ <p>Traiter les commandes du paiement à la livraison, gérer les retours et connaître vos clients.</p>
233
+ <ul><li><b>3</b>Les commandes</li><li><b>4</b>Retours et remboursements</li><li><b>5</b>Les clients</li></ul>
234
+ </section>
235
+
236
+ <section class="chapter">
237
+ <div class="chapter-head"><div class="num">3</div><div><h1>Les commandes</h1><p>Du paiement à la livraison : ce que vous faites, ce que reçoit le client.</p></div></div>
238
+ <div class="inchapter"><b>Dans ce chapitre</b>3.1 La liste · 3.2 Lire une commande · 3.3 Encaisser · 3.4 Expédier · 3.5 Annuler · 3.6 Exporter</div>
239
+
240
+ <h2><span class="n">3.1</span>La liste des commandes</h2>
241
+ <div class="path">Commandes</div>
242
+ <p>Chaque ligne indique le numéro, la date, le client, la <b>boutique</b> d'origine (colonne « Canal de vente »), l'état du paiement, l'état de la livraison et le total. Cliquez sur une ligne pour ouvrir la commande.</p>
243
+ <figure class="crop"><img src="guide-images/commandes-liste.jpg" alt=""><figcaption><b>Figure 3.1</b> — La liste des commandes, toutes boutiques confondues.</figcaption></figure>
244
+ <div class="note tip"><div><b class="t">Astuce</b>Pour ne voir qu'une boutique : <span class="ui">Ajouter un filtre</span> › <span class="ui">Canal de vente</span>. Pour les commandes à préparer : filtre <span class="ui">Livraison</span> › « Non expédié ».</div></div>
245
+
246
+ <h2><span class="n">3.2</span>Lire une commande</h2>
247
+ <p>En haut, deux étiquettes résument la situation : le <b>paiement</b> et la <b>livraison</b>. En dessous : les articles et les totaux, les paiements, les articles à expédier, puis à droite le client, ses adresses et l'historique (« Activité »).</p>
248
+ <table>
249
+ <tr><th style="width:30%">Étiquette</th><th>Signification</th></tr>
250
+ <tr><td><span class="badge b-orange">Autorisé</span></td><td>Le paiement est réservé mais pas encore encaissé (paiement manuel, virement, espèces…). Voir 3.3.</td></tr>
251
+ <tr><td><span class="badge b-green">Capturé</span></td><td>L'argent est encaissé. C'est automatique pour les paiements par carte.</td></tr>
252
+ <tr><td><span class="badge b-red">Non expédié</span></td><td>À préparer et expédier. Voir 3.4.</td></tr>
253
+ <tr><td><span class="badge b-blue">Expédié</span> / <span class="badge b-green">Livré</span></td><td>Le colis est parti / arrivé.</td></tr>
254
+ <tr><td><span class="badge b-grey">Annulé</span></td><td>Commande annulée ; le stock est remis en vente.</td></tr>
255
+ </table>
256
+ <figure><img src="guide-images/commande-detail.jpg" alt=""><figcaption><b>Figure 3.2</b> — Une commande : étiquettes, résumé, client et historique.</figcaption></figure>
257
+
258
+ <h2><span class="n">3.3</span>Encaisser un paiement</h2>
259
+ <p>Paiement <b>par carte</b> : rien à faire, il est encaissé automatiquement. Paiement <b>manuel</b> (le client paie à part) : une fois l'argent reçu, confirmez-le.</p>
260
+ <div class="path">Commandes › la commande › bloc Paiements</div>
261
+ <ol class="steps">
262
+ <li>Descendez jusqu'au bloc <b>Paiements</b>. Le message « Le paiement … est prêt à être capturé » s'affiche.</li>
263
+ <li>Cliquez sur <span class="ui">Capture du paiement</span>, vérifiez le montant et confirmez.</li>
264
+ <li>L'étiquette passe à <span class="badge b-green">Capturé</span>.</li>
265
+ </ol>
266
+ <figure class="crop"><img src="guide-images/commande-paiement.jpg" alt=""><figcaption><b>Figure 3.3</b> — Le bloc Paiements et le bouton « Capture du paiement ».</figcaption></figure>
267
+
268
+ <h2><span class="n">3.4</span>Expédier une commande</h2>
269
+ <div class="path">Commandes › la commande › bloc Articles non expédiés</div>
270
+ <ol class="steps">
271
+ <li>Dans le bloc <b>Articles non expédiés</b>, cliquez sur <span class="ui">…</span> › <span class="ui">Expédier des articles</span>.</li>
272
+ <li>Choisissez les articles et les quantités expédiés (tout, ou une partie si le colis part en plusieurs fois), puis validez.</li>
273
+ <li>Sur le bloc d'expédition créé, cliquez sur <span class="ui">…</span> › <span class="ui">Marquer comme expédiée</span> et saisissez le <b>numéro et le lien de suivi</b> du transporteur.</li>
274
+ <li>À la livraison : <span class="ui">…</span> › <span class="ui">Marquer comme livrée</span>.</li>
275
+ </ol>
276
+ <figure class="crop bottom"><img src="guide-images/commande-expedier.jpg" alt=""><figcaption><b>Figure 3.4</b> — « Expédier des articles », dans le menu du bloc Articles non expédiés.</figcaption></figure>
277
+ <table>
278
+ <tr><th style="width:36%">Vous faites</th><th>Le client reçoit par e-mail</th></tr>
279
+ <tr><td>(commande passée)</td><td>Confirmation de commande avec le récapitulatif</td></tr>
280
+ <tr><td>Marquer comme expédiée</td><td>« Votre colis est en route » avec le lien de suivi</td></tr>
281
+ <tr><td>Marquer comme livrée</td><td>« Votre commande est livrée »</td></tr>
282
+ <tr><td>Annuler</td><td>Confirmation d'annulation</td></tr>
283
+ </table>
284
+ <div class="note info"><div><b class="t">Bon à savoir</b>Vous recevez aussi un e-mail à chaque nouvelle commande. Les e-mails partent seulement si l'envoi d'e-mails a été configuré pour votre projet.</div></div>
285
+
286
+ <h2><span class="n">3.5</span>Annuler une commande</h2>
287
+ <div class="path">Commandes › la commande › … (en haut)</div>
288
+ <ol class="steps">
289
+ <li>Cliquez sur <span class="ui">…</span> à côté des étiquettes, puis <span class="ui">Annuler</span>.</li>
290
+ <li>Confirmez. Le stock est remis en vente et le client est prévenu.</li>
291
+ </ol>
292
+ <figure class="crop"><img src="guide-images/commande-menu.jpg" alt=""><figcaption><b>Figure 3.5</b> — Le menu de la commande et l'action « Annuler ».</figcaption></figure>
293
+ <div class="note warn"><div><b class="t">Attention</b>On annule seulement une commande <b>non expédiée</b>. Si le client a déjà payé par carte, faites aussi le remboursement (4.3). Une commande expédiée se traite par un retour (chapitre 4).</div></div>
294
+
295
+ <h2><span class="n">3.6</span>Exporter les commandes</h2>
296
+ <p><span class="ui">Commandes</span> › <span class="ui">Exporter</span> produit un fichier (tableur) des commandes, avec les filtres en cours : pratique pour la comptabilité.</p>
297
+ </section>
298
+
299
+ <section class="chapter">
300
+ <div class="chapter-head"><div class="num">4</div><div><h1>Retours et remboursements</h1><p>Retour d'un colis, échange, réclamation, remboursement.</p></div></div>
301
+ <div class="inchapter"><b>Dans ce chapitre</b>4.1 Retour · 4.2 Échange et réclamation · 4.3 Rembourser · 4.4 Motifs de retour</div>
302
+
303
+ <h2><span class="n">4.1</span>Enregistrer un retour</h2>
304
+ <div class="path">Commandes › la commande › … (bloc Résumé)</div>
305
+ <ol class="steps">
306
+ <li>Dans le bloc <b>Résumé</b>, cliquez sur <span class="ui">…</span> › <span class="ui">Créer un retour</span>.</li>
307
+ <li>Choisissez les articles renvoyés, la quantité et le motif ; indiquez si les frais de retour sont à la charge du client.</li>
308
+ <li>À la réception du colis : sur le retour demandé, <span class="ui">Recevoir des articles</span>. Le stock remonte et le client est prévenu.</li>
309
+ </ol>
310
+
311
+ <h2><span class="n">4.2</span>Échange et réclamation</h2>
312
+ <ul>
313
+ <li><b>Échange</b> (autre taille, autre couleur) : <span class="ui">…</span> › <span class="ui">Créer un échange</span> : articles rendus et articles envoyés à la place ; la différence de prix est calculée.</li>
314
+ <li><b>Réclamation</b> (article abîmé ou manquant) : <span class="ui">…</span> › <span class="ui">Créer une réclamation</span>, avec renvoi d'un article ou remboursement.</li>
315
+ </ul>
316
+
317
+ <h2><span class="n">4.3</span>Rembourser</h2>
318
+ <div class="path">Commandes › la commande › bloc Paiements › …</div>
319
+ <ol class="steps">
320
+ <li>Sur la ligne du paiement, cliquez sur <span class="ui">…</span> › <span class="ui">Remboursement</span>.</li>
321
+ <li>Saisissez le montant (total ou partiel) et le motif, puis confirmez.</li>
322
+ <li>Paiement par carte : l'argent revient automatiquement sur la carte du client (quelques jours selon sa banque). Le client reçoit un e-mail avec le montant.</li>
323
+ </ol>
324
+ <div class="note warn"><div><b class="t">Attention</b>Un remboursement par carte est définitif. Vérifiez le montant avant de confirmer.</div></div>
325
+
326
+ <p><b>Commande payée par Wave ou Orange Money (PayTech, PayDunya, NabooPay)</b></p>
327
+ <p>Le bloc <span class="ui">Paiements</span> indique le moyen utilisé. La marche à suivre dépend du service de paiement de votre boutique :</p>
328
+ <table>
329
+ <tr><th style="width:26%">Service</th><th>Comment rembourser</th></tr>
330
+ <tr><td><b>PayTech</b>, <b>NabooPay</b></td><td>Comme ci-dessus : <span class="ui">…</span> › <span class="ui">Remboursement</span>. L'argent repart automatiquement vers le compte Wave ou Orange Money du client. <b>Remboursement total uniquement</b> : saisissez le montant payé en entier.</td></tr>
331
+ <tr><td><b>PayDunya</b></td><td>1. Remboursez d'abord le client dans votre tableau de bord PayDunya. 2. Puis, dans l'admin, <span class="ui">…</span> › <span class="ui">Remboursement</span> avec le même montant : la commande passe « remboursée » et le client reçoit l'e-mail. Ce second geste <b>enregistre</b> le remboursement, il ne déplace pas d'argent.</td></tr>
332
+ </table>
333
+ <div class="note info"><div><b class="t">Bon à savoir</b>Pour un remboursement partiel avec PayTech ou NabooPay (un seul article d'une commande), remboursez-le directement au client (par exemple par un envoi Wave), puis ajoutez une note sur la commande pour garder la trace.</div></div>
334
+
335
+ <h2><span class="n">4.4</span>Motifs de retour</h2>
336
+ <p><span class="ui">Paramètres</span> › <span class="ui">Raison de retour</span> : la liste proposée lors d'un retour (« Taille trop petite », « Article abîmé »…). Ajoutez les vôtres pour suivre les causes de retour.</p>
337
+ </section>
338
+
339
+ <section class="chapter">
340
+ <div class="chapter-head"><div class="num">5</div><div><h1>Les clients</h1><p>Fiches clients et groupes.</p></div></div>
341
+ <div class="inchapter"><b>Dans ce chapitre</b>5.1 Fiches clients · 5.2 Groupes de clients</div>
342
+
343
+ <h2><span class="n">5.1</span>Fiches clients</h2>
344
+ <div class="path">Clients</div>
345
+ <p>Chaque client qui crée un compte ou commande apparaît ici : coordonnées, adresses, historique des commandes. Un client est commun à toutes vos boutiques.</p>
346
+ <figure class="crop"><img src="guide-images/clients.jpg" alt=""><figcaption><b>Figure 5.1</b> — La liste des clients.</figcaption></figure>
347
+
348
+ <h2><span class="n">5.2</span>Groupes de clients</h2>
349
+ <div class="path">Clients › Groupes de clients</div>
350
+ <p>Un groupe (ex. « VIP », « Revendeurs ») sert à réserver des prix (chapitre 11) ou des codes promo (chapitre 12) à certains clients.</p>
351
+ <ol class="steps">
352
+ <li><span class="ui">Créer</span>, nommez le groupe, enregistrez.</li>
353
+ <li>Ouvrez le groupe › bloc Clients › <span class="ui">Ajouter</span>, cochez les clients.</li>
354
+ </ol>
355
+ </section>
356
+
357
+ <!-- ======================= PARTIE III ======================= -->
358
+ <section class="part-page">
359
+ <small>Partie III</small>
360
+ <h1>Le catalogue</h1>
361
+ <p>Créer vos produits, leurs variantes, leurs photos et leurs prix ; suivre le stock ; organiser le catalogue.</p>
362
+ <ul><li><b>6</b>Les produits</li><li><b>7</b>Variantes, prix et photos</li><li><b>8</b>Le stock</li><li><b>9</b>Catégories et collections</li></ul>
363
+ </section>
364
+
365
+ <section class="chapter">
366
+ <div class="chapter-head"><div class="num">6</div><div><h1>Les produits</h1><p>Créer, publier, ranger et choisir les boutiques où un produit est vendu.</p></div></div>
367
+ <div class="inchapter"><b>Dans ce chapitre</b>6.1 La liste · 6.2 Créer un produit · 6.3 Modifier · 6.4 Publier ou masquer · 6.5 Dans quelles boutiques · 6.6 Importer / exporter · 6.7 Avis clients</div>
368
+
369
+ <h2><span class="n">6.1</span>La liste des produits</h2>
370
+ <div class="path">Produits</div>
371
+ <p>Pour chaque produit : sa collection, les <b>boutiques</b> où il est vendu (colonne « Canaux de vente »), le nombre de variantes et le statut (Publié / Brouillon).</p>
372
+ <figure class="crop"><img src="guide-images/produits-liste.jpg" alt=""><figcaption><b>Figure 6.1</b> — La liste des produits.</figcaption></figure>
373
+
374
+ <h2><span class="n">6.2</span>Créer un produit</h2>
375
+ <div class="path">Produits › Créer</div>
376
+ <p>La création se fait en trois onglets : <b>Détails</b>, <b>Organiser</b>, <b>Variants</b>.</p>
377
+ <ol class="steps">
378
+ <li><b>Détails</b> : titre, sous-titre et description (le texte de la fiche produit), puis les photos dans <span class="ui">Télécharger des images</span> (la première sert de vignette).</li>
379
+ <li>Le produit existe en plusieurs tailles ou couleurs ? Activez <span class="ui">Oui, c'est un produit avec des variantes</span> et déclarez les options (ex. Taille : S, M, L). Sinon, une variante unique est créée pour vous.</li>
380
+ <li><span class="ui">Continuer</span> › <b>Organiser</b> : catégorie, collection, et surtout les <b>canaux de vente</b> = les boutiques où le produit sera en vente.</li>
381
+ <li><span class="ui">Continuer</span> › <b>Variants</b> : pour chaque variante, le prix dans chaque devise ({{CURRENCIES}}) et la référence (SKU).</li>
382
+ <li><span class="ui">Publier</span> pour le mettre en vente, ou <span class="ui">Enregistrer comme brouillon</span> pour le finir plus tard.</li>
383
+ </ol>
384
+ <figure><img src="guide-images/produit-creer-details.jpg" alt=""><figcaption><b>Figure 6.2</b> — Création d'un produit, onglet Détails.</figcaption></figure>
385
+ <div class="note warn"><div><b class="t">Attention</b>Un produit sans prix dans la devise d'une boutique n'apparaît pas dans cette boutique. Donnez un prix dans chaque devise utilisée ({{CURRENCIES}}).</div></div>
386
+
387
+ <h2><span class="n">6.3</span>Modifier un produit</h2>
388
+ <div class="path">Produits › le produit</div>
389
+ <p>La fiche est découpée en blocs ; chacun a son <span class="ui">…</span> › <span class="ui">Modifier</span> : informations générales, <b>Media</b> (photos), <b>Options</b>, <b>Variantes</b>, et à droite <b>Canaux de vente</b>, <b>Organisation</b> (catégories, collection, tags) et <b>Attributs</b> (poids, dimensions).</p>
390
+ <figure><img src="guide-images/produit-detail.jpg" alt=""><figcaption><b>Figure 6.3</b> — La fiche d'un produit et ses blocs.</figcaption></figure>
391
+
392
+ <h2><span class="n">6.4</span>Publier ou masquer un produit</h2>
393
+ <p>Bloc du titre › <span class="ui">…</span> › <span class="ui">Modifier</span> › Statut : <b>Publié</b> (visible) ou <b>Brouillon</b> (caché partout). Pour retirer un produit d'une seule boutique, voir 6.5.</p>
394
+ <div class="note info"><div><b class="t">Bon à savoir</b>Sur le site, vos clients trouvent un produit avec le champ <span class="ui">Rechercher un produit</span> (en haut du site et sur la page Boutique) : la recherche porte sur le titre et la description, uniquement parmi les produits publiés de cette boutique. Un titre clair aide donc aussi à être trouvé.</div></div>
395
+
396
+ <h2><span class="n">6.5</span>Choisir les boutiques où un produit est vendu</h2>
397
+ <div class="path">Produits › le produit › bloc Canaux de vente</div>
398
+ <ol class="steps">
399
+ <li>Bloc <b>Canaux de vente</b> › <span class="ui">…</span> › <span class="ui">Modifier</span>.</li>
400
+ <li>Cochez les boutiques où le produit doit apparaître, décochez les autres, enregistrez.</li>
401
+ </ol>
402
+ <div class="note tip"><div><b class="t">Astuce</b>Pour ajouter plusieurs produits d'un coup à une boutique : <span class="ui">Paramètres</span> › <span class="ui">Canaux de vente</span> › la boutique › <span class="ui">Ajouter des produits</span>.</div></div>
403
+
404
+ <h2><span class="n">6.6</span>Importer ou exporter des produits</h2>
405
+ <p><span class="ui">Produits</span> › <span class="ui">Exporter</span> télécharge le catalogue en fichier tableur ; <span class="ui">Importer</span> crée ou met à jour des produits à partir d'un fichier (un modèle est proposé sur le même écran). Idéal pour modifier beaucoup de prix d'un coup.</p>
406
+
407
+ <h2><span class="n">6.7</span>Avis clients</h2>
408
+ <div class="path">Avis</div>
409
+ <p>À la livraison d'une commande, le client reçoit un e-mail avec un bouton <span class="ui">Laisser un avis</span>. Seuls les acheteurs peuvent donc noter un produit (badge « Achat vérifié »), une fois par produit commandé. Un avis n'apparaît sur vos boutiques qu'après votre validation.</p>
410
+ <ol class="steps">
411
+ <li>Ouvrez <span class="ui">Avis</span> dans le menu : la liste s'ouvre sur les avis <b>En attente</b>.</li>
412
+ <li>Lisez l'avis (note, titre, commentaire, client, boutique d'où vient la commande).</li>
413
+ <li><span class="ui">Valider</span> : l'avis s'affiche sur la fiche du produit et peut apparaître dans la section « Ce que nos clients en pensent » de l'accueil, en une minute environ. <span class="ui">Refuser</span> : il reste caché. La corbeille le supprime définitivement.</li>
414
+ </ol>
415
+ <p>Les filtres en haut à droite affichent les avis validés, refusés ou tous, et ceux d'une seule boutique.</p>
416
+ <div class="note info"><div><b class="t">Bon à savoir</b>Un produit vendu dans plusieurs boutiques affiche ses avis sur toutes. Si vous préférez que chaque boutique n'affiche que les siens, demandez-le à votre prestataire (réglage du projet).</div></div>
417
+ <div class="note warn"><div><b class="t">Attention</b>Refusez un avis injurieux ou hors sujet, mais gardez les avis négatifs honnêtes : ils rendent les autres crédibles, et répondre au client par e-mail règle souvent le problème.</div></div>
418
+ </section>
419
+
420
+ <section class="chapter">
421
+ <div class="chapter-head"><div class="num">7</div><div><h1>Variantes, prix et photos</h1><p>Tailles, couleurs, prix par devise et images.</p></div></div>
422
+ <div class="inchapter"><b>Dans ce chapitre</b>7.1 Options et variantes · 7.2 Ajouter une variante · 7.3 Modifier les prix · 7.4 Photos</div>
423
+
424
+ <h2><span class="n">7.1</span>Options et variantes</h2>
425
+ <p>Une <b>option</b> est un choix proposé au client (Taille, Couleur) avec ses valeurs (S, M, L). Chaque combinaison est une <b>variante</b> (ex. « M / Noir »), avec son propre prix, sa référence et son stock.</p>
426
+ <figure class="crop"><img src="guide-images/produit-variantes.jpg" alt=""><figcaption><b>Figure 7.1</b> — Les blocs Options et Variantes d'un produit.</figcaption></figure>
427
+
428
+ <h2><span class="n">7.2</span>Ajouter une option ou une variante</h2>
429
+ <ol class="steps">
430
+ <li>Nouvelle valeur d'option (ex. taille XL) : bloc <b>Options</b> › <span class="ui">…</span> › <span class="ui">Modifier</span>, ajoutez la valeur.</li>
431
+ <li>Bloc <b>Variantes</b> › <span class="ui">Créer</span> : choisissez la combinaison, le titre, la référence, puis les prix.</li>
432
+ <li>Réglez le stock de la nouvelle variante (chapitre 8).</li>
433
+ </ol>
434
+
435
+ <h2><span class="n">7.3</span>Modifier les prix</h2>
436
+ <div class="path">Produits › le produit › bloc Variantes › …</div>
437
+ <ol class="steps">
438
+ <li>Bloc <b>Variantes</b> › <span class="ui">…</span> › <span class="ui">Modifier les prix</span>.</li>
439
+ <li>Un tableau s'ouvre : une ligne par variante, une colonne par devise. Cliquez dans une case et tapez le prix.</li>
440
+ <li><span class="ui">Enregistrer</span>.</li>
441
+ </ol>
442
+ <figure class="crop"><img src="guide-images/produit-variantes-menu.jpg" alt=""><figcaption><b>Figure 7.2</b> — Menu du bloc Variantes : « Modifier les prix » et « Modifier les niveaux de stock ».</figcaption></figure>
443
+ <div class="note info"><div><b class="t">Bon à savoir</b>C'est le prix normal. Pour un prix barré (soldes), ne touchez pas au prix normal : utilisez une liste de prix (chapitre 11).</div></div>
444
+
445
+ <h2><span class="n">7.4</span>Photos</h2>
446
+ <div class="path">Produits › le produit › bloc Media › …</div>
447
+ <ul>
448
+ <li><span class="ui">…</span> › <span class="ui">Modifier</span> : <span class="ui">Télécharger des images</span> (glisser-déposer), réordonnez-les, supprimez-les.</li>
449
+ <li>La <b>vignette</b> (image principale des listes) : sur une image, <span class="ui">Faire de la vignette</span>.</li>
450
+ <li>Formats conseillés : JPG ou PNG, carré de 1200 × 1200 px, fond propre.</li>
451
+ </ul>
452
+ </section>
453
+
454
+ <section class="chapter">
455
+ <div class="chapter-head"><div class="num">8</div><div><h1>Le stock</h1><p>Quantités disponibles, réservées, et ajustements.</p></div></div>
456
+ <div class="inchapter"><b>Dans ce chapitre</b>8.1 L'inventaire · 8.2 Ajuster une quantité · 8.3 Rupture de stock</div>
457
+
458
+ <h2><span class="n">8.1</span>L'inventaire</h2>
459
+ <div class="path">Inventaire</div>
460
+ <p>Une ligne par article (variante) : quantité <b>en stock</b>, <b>réservée</b> (commandes pas encore expédiées) et <b>disponible</b>. Le stock baisse à chaque commande et remonte à l'annulation ou à la réception d'un retour.</p>
461
+ <figure class="crop"><img src="guide-images/inventaire.jpg" alt=""><figcaption><b>Figure 8.1</b> — L'inventaire.</figcaption></figure>
462
+
463
+ <h2><span class="n">8.2</span>Ajuster une quantité</h2>
464
+ <ol class="steps">
465
+ <li>Depuis le produit : bloc <b>Variantes</b> › <span class="ui">…</span> › <span class="ui">Modifier les niveaux de stock</span> (toutes les variantes d'un coup), ou depuis <span class="ui">Inventaire</span> › l'article.</li>
466
+ <li>Saisissez la nouvelle quantité en stock, enregistrez.</li>
467
+ </ol>
468
+
469
+ <h2><span class="n">8.3</span>Rupture de stock</h2>
470
+ <p>À zéro, le site affiche « Rupture de stock » et le bouton d'achat est désactivé. Pour continuer à vendre (précommande) : variante › <span class="ui">Modifier</span> › cochez <span class="ui">Autoriser les commandes partielles</span> (vente même sans stock).</p>
471
+ </section>
472
+
473
+ <section class="chapter">
474
+ <div class="chapter-head"><div class="num">9</div><div><h1>Catégories et collections</h1><p>Organiser le catalogue et la navigation des boutiques.</p></div></div>
475
+ <div class="inchapter"><b>Dans ce chapitre</b>9.1 Catégories · 9.2 Collections</div>
476
+
477
+ <h2><span class="n">9.1</span>Catégories</h2>
478
+ <div class="path">Produits › Catégories</div>
479
+ <ol class="steps">
480
+ <li><span class="ui">Créer</span> : nom et identifiant. Une catégorie peut être rangée sous une autre (ex. Déco › Lumières).</li>
481
+ <li>Ouvrez la catégorie › <span class="ui">Ajouter des produits</span>.</li>
482
+ <li>Image de la catégorie : bloc <b>Image de la catégorie</b> (à droite) › choisir le fichier › enregistrer.</li>
483
+ </ol>
484
+ <p>Les catégories principales s'affichent en tuiles sur l'accueil des boutiques qui les utilisent.</p>
485
+ <figure class="crop"><img src="guide-images/categories.jpg" alt=""><figcaption><b>Figure 9.1</b> — Les catégories.</figcaption></figure>
486
+
487
+ <h2><span class="n">9.2</span>Collections</h2>
488
+ <div class="path">Produits › Collections</div>
489
+ <p>Une collection est un regroupement libre (« Idées cadeaux », « Nouveautés »). Sur une fiche produit, les « produits similaires » proposés viennent de la même collection.</p>
490
+ </section>
491
+
492
+ <!-- ======================= PARTIE IV ======================= -->
493
+ <section class="part-page">
494
+ <small>Partie IV</small>
495
+ <h1>Boutiques et promotions</h1>
496
+ <p>Ouvrir ou fermer un site, rédiger les textes de campagne, afficher des prix barrés et créer des codes promo.</p>
497
+ <ul><li><b>10</b>Mes boutiques : sites, textes et visuels</li><li><b>11</b>Prix barrés (listes de prix)</li><li><b>12</b>Codes promo et promotions</li></ul>
52
498
  </section>
53
499
 
54
- <section class="part">
55
- <h2>A1. Créer et lancer le projet</h2>
56
- <p>Sur une machine avec <b>Docker</b> et <b>Node.js 20+</b> :</p>
57
- <pre>npx @salifbiaye/create-boutique {{PROJECT}} # questions : nom, e-mail, devise, pays, langue, thèmes, Stripe, catalogue
58
- cd {{PROJECT}}
59
- docker compose up -d # premier démarrage : 5 à 10 min (construction des images)
60
- docker compose logs -f backend # attendre « [backend] 4/4 démarrage »
61
- create-boutique check . # une commande test dans chaque boutique : OK / KO</pre>
62
- <p>Le dossier contient : <code>storefront/</code> et <code>backend/</code> (le code, à ne pas modifier), <code>config/project.json</code> (les boutiques), <code>config/campaigns/</code> (textes initiaux), <code>seed/</code> (catalogue initial), <code>.env</code> (secrets), <code>README.md</code>, ce guide et la fiche <code>GUIDE-CLIENT.pdf</code>.</p>
63
- <div class="box info">Au premier démarrage, le backend crée tout seul : la base, le compte admin, une région par devise, une boutique (canal de vente + clé) par ligne de <code>project.json</code>, les campagnes et les produits de <code>seed/products.csv</code>. Relancer ne recrée rien.</div>
64
-
65
- <h3>Changer la structure (équipe)</h3>
66
- <table>
67
- <tr><th>Besoin</th><th>Commande</th></tr>
68
- <tr><td>Ajouter une boutique (reçoit tout le catalogue existant)</td><td><code>create-boutique add . --boutique nom-boutique:black-friday</code></td></tr>
69
- <tr><td>Retirer une boutique (ses commandes restent dans l'admin)</td><td><code>create-boutique remove . --boutique nom-boutique</code></td></tr>
70
- <tr><td>Renommer une boutique, changer son thème, sa devise, son pays</td><td><code>create-boutique set . --boutique nom-boutique --name "…" --theme noel --currency eur --country fr</code></td></tr>
71
- <tr><td>Nom, devise, pays, langue communs</td><td><code>create-boutique set . --name "…" --currency usd --country us --language fr</code></td></tr>
72
- <tr><td>Après une modification à la main de <code>config/project.json</code></td><td><code>create-boutique apply .</code></td></tr>
73
- <tr><td>Mettre à jour le code (config, .env et données conservés)</td><td><code>create-boutique update .</code></td></tr>
74
- <tr><td>Sauvegarde base + images</td><td><code>create-boutique backup .</code></td></tr>
75
- <tr><td>Textes des campagnes : base → fichiers / fichiers → base</td><td><code>create-boutique campaign export .</code> / <code>campaign import .</code></td></tr>
76
- </table>
77
- <div class="box warn">Règles : un pays n'a qu'une devise dans un projet ; ne jamais renommer l'identifiant (slug) d'une boutique ; ne jamais modifier <code>docker-compose.yml</code> à la main.</div>
78
-
79
- <h2>A2. Identifiants admin</h2>
80
- <pre>create-boutique admin . # adresse, e-mail et mot de passe (lus dans .env)</pre>
81
- <p>Transmettez le mot de passe au client par un autre canal que ce guide. Il pourra le changer avec « Mot de passe oublié ? » (voir B1) une fois les e-mails configurés.</p>
82
-
83
- <h2>A3. Paiement Stripe</h2>
84
- <ol>
85
- <li>Dans Stripe (mode test pour essayer) : <span class="menu">Développeurs → Clés API</span>. Copier la clé publique <code>pk_…</code> et la clé secrète <code>sk_…</code>.</li>
86
- <li>Dans <code>.env</code> : <code>STRIPE_PUBLISHABLE_KEY=pk_…</code> et <code>STRIPE_API_KEY=sk_…</code>.</li>
87
- <li>Le plus simple, une fois le backend en ligne en HTTPS : <code>create-boutique stripe-webhook {{PROJECT}} --url https://api.votre-domaine.com</code> (crée l’endpoint, écrit le secret dans <code>.env</code> et relance le backend). Sinon, à la main : Stripe → <span class="menu">Développeurs → Webhooks → Ajouter un endpoint</span> : URL <code>&lt;adresse publique du backend&gt;/hooks/payment/stripe_stripe</code>, événements <code>payment_intent.succeeded</code>, <code>payment_intent.payment_failed</code>, <code>payment_intent.amount_capturable_updated</code>, <code>payment_intent.partially_funded</code>.</li>
88
- <li>Copier le secret <code>whsec_…</code> dans <code>STRIPE_WEBHOOK_SECRET</code>, puis <code>docker compose up -d</code> (le backend redémarre avec les clés et active Stripe sur toutes les régions).</li>
89
- <li>Tester : commande avec la carte <code>4242 4242 4242 4242</code>, date future, CVC quelconque.</li>
90
- <li>Apple Pay : Stripe → <span class="menu">Paramètres → Moyens de paiement → Apple Pay</span>, déclarer le domaine de chaque boutique.</li>
91
- </ol>
92
- <div class="box info">Sans clé Stripe, seul le paiement manuel existe (utile pour tester, à ne pas laisser en production).</div>
93
-
94
- <h2>A4. E-mails</h2>
95
- <ol>
96
- <li>Un compte Resend (une seule clé pour tous les projets) avec le domaine d'envoi de la plateforme vérifié (SPF/DKIM).</li>
97
- <li>Dans <code>.env</code> : <code>RESEND_API_KEY=re_…</code> et <code>EMAIL_FROM=orders@mail.votre-domaine.com</code>, puis <code>docker compose up -d</code>.</li>
98
- <li>Les e-mails partent au nom de la boutique ; « Répondre » va à l'e-mail du marchand.</li>
99
- </ol>
100
- <p>E-mails envoyés : confirmation de commande (+ copie au marchand), colis expédié (avec suivi), livré, annulé, remboursé, retour demandé / reçu, mot de passe oublié (admin), invitation d'un membre de l'équipe.</p>
101
-
102
- <h2>A5. Domaines et HTTPS (production)</h2>
103
- <ol>
104
- <li>Un nom de domaine par boutique (ex. <code>blackfriday.marque.com</code>) et un pour l'admin (ex. <code>admin.marque.com</code>), qui pointent vers le serveur.</li>
105
- <li>Un reverse proxy (Caddy, Nginx, Traefik) envoie chaque domaine vers le port de sa boutique (voir le tableau en première page) et l'admin vers le port du backend, en HTTPS.</li>
106
- <li>Dans <code>config/project.json</code>, ajouter <code>"url": "https://blackfriday.marque.com"</code> à chaque boutique, puis <code>create-boutique apply .</code> (CORS et liens mis à jour).</li>
107
- <li>Dans <code>.env</code> : <code>ADMIN_CORS</code>, <code>AUTH_CORS</code> et <code>ADMIN_URL</code> = adresse HTTPS de l'admin ; <code>S3_FILE_URL</code> = adresse publique des images.</li>
108
- </ol>
109
-
110
- <h2>A6. Checklist avant livraison</h2>
111
- <ul>
112
- <li>☐ Chaque boutique s'ouvre à son adresse, avec son thème, son logo et sa devise.</li>
113
- <li>☐ Chaque produit est publié, a un prix dans la devise de chaque boutique où il est vendu, du stock et au moins une image.</li>
114
- <li>☐ Campagnes : textes, dates, visuels vérifiés (B9).</li>
115
- <li>☐ Stripe : clés + webhook ; une commande test par carte réussie.</li>
116
- <li>☐ E-mails : confirmation reçue par le client et copie par le marchand ; « mot de passe oublié » testé.</li>
117
- <li>☐ Tarifs de livraison et taxes vérifiés (B12).</li>
118
- <li>☐ <code>create-boutique check .</code> : OK partout ; annuler ensuite les commandes de test (check@example.com).</li>
119
- <li>☐ Sauvegarde : <code>create-boutique backup .</code> programmée (tâche planifiée quotidienne).</li>
120
- </ul>
500
+ <section class="chapter">
501
+ <div class="chapter-head"><div class="num">10</div><div><h1>Mes boutiques</h1><p>Ouvrir ou fermer un site, et tout ce qui s'affiche sur l'accueil : textes, dates, visuels, logo.</p></div></div>
502
+ <div class="inchapter"><b>Dans ce chapitre</b>10.1 La page · 10.2 Ouvrir ou fermer un site · 10.3 Un seul site : changer de boutique · 10.4 Textes, visuels et dates · 10.5 Aperçu de partage · 10.6 Revenir aux textes d'origine</div>
503
+
504
+ <h2><span class="n">10.1</span>La page Mes boutiques</h2>
505
+ <div class="path">Mes boutiques</div>
506
+ <p>Une ligne par boutique : ses dates de campagne, le statut de la campagne (<span class="badge b-blue">À venir</span>, <span class="badge b-green">En cours</span>, <span class="badge b-grey">Terminée</span>), l'état du <b>site</b> et le bouton <span class="ui">Modifier</span>.</p>
507
+ <figure class="crop"><img src="guide-images/mes-boutiques.jpg" alt=""><figcaption><b>Figure 10.1</b> — Mes boutiques : une ligne par boutique.</figcaption></figure>
508
+ <div class="note info"><div><b class="t">Bon à savoir</b>Les dates de campagne pilotent seulement la <b>promo affichée</b> (compte à rebours, textes). Elles n'ouvrent ni ne ferment jamais un site : après la date de fin, la boutique reste ouverte, sans compte à rebours. C'est vous qui décidez d'ouvrir ou de fermer (10.2).</div></div>
509
+
510
+ <h2><span class="n">10.2</span>Ouvrir ou fermer un site</h2>
511
+ <p>Quand chaque boutique a son propre site, vous pouvez fermer un site (fin d'événement, pause) puis le rouvrir plus tard.</p>
512
+ <ol class="steps">
513
+ <li>Colonne <b>Site</b> : <span class="badge b-green">En ligne</span> ou <span class="badge b-grey">Hors ligne</span>.</li>
514
+ <li>Cliquez sur <span class="ui">Fermer</span> (ou <span class="ui">Ouvrir</span>) sur la ligne de la boutique, puis confirmez.</li>
515
+ <li>Le changement est visible sur le site en moins d'une minute.</li>
516
+ </ol>
517
+ <figure><img src="guide-images/mes-boutiques-fermer.jpg" alt=""><figcaption><b>Figure 10.2</b> — Confirmation avant de fermer un site.</figcaption></figure>
518
+ <p>Site fermé, les visiteurs voient « Boutique fermée pour le moment » ; les boutons d'achat disparaissent.</p>
519
+ <figure class="crop"><img src="guide-images/site-fermee.png" alt=""><figcaption><b>Figure 10.3</b> — Ce que voit le visiteur d'un site fermé.</figcaption></figure>
520
+ <div class="note tip"><div><b class="t">Rien n'est perdu</b>Même fermé : les clients en train de payer finissent leur commande, « Mon compte » et « Suivi de commande » restent accessibles, et les commandes ne sont pas touchées.</div></div>
521
+
522
+ <h2><span class="n">10.3</span>Un seul site : changer la boutique en ligne</h2>
523
+ <p>Si votre projet a <b>un seul site</b> qui change de visage selon l'événement, la colonne <b>Site</b> montre la boutique <span class="badge b-green">En ligne</span> et un bouton <span class="ui">Mettre en ligne</span> sur les autres. Il y a toujours exactement une boutique en ligne : en choisir une remplace la précédente. Les commandes et les paniers en cours ne sont pas perdus.</p>
524
+
525
+ <h2><span class="n">10.4</span>Textes, visuels et dates</h2>
526
+ <div class="path">Mes boutiques › Modifier</div>
527
+ <p>Le panneau s'ouvre à droite. Les champs affichent les textes actuels (ceux du thème au départ) : modifiez ce que vous voulez, puis <span class="ui">Enregistrer</span>. Visible sur le site en une minute.</p>
528
+ <figure><img src="guide-images/mes-boutiques-panneau.jpg" alt=""><figcaption><b>Figure 10.4</b> — Le panneau d'une boutique.</figcaption></figure>
529
+ <table>
530
+ <tr><th style="width:26%">Bloc</th><th>Contenu</th></tr>
531
+ <tr><td><b>Identité</b></td><td>Logo (sert aussi d'icône de l'onglet du navigateur) ; compte à rebours : comme le thème, toujours ou jamais.</td></tr>
532
+ <tr><td><b>Dates</b></td><td>Début et fin de la campagne (compte à rebours) ; « Campagne suivante » : boutique proposée aux visiteurs.</td></tr>
533
+ <tr><td><b>Variables</b></td><td>Remise (ex. 30 %) et seuil de livraison offerte (ex. 50 €), repris automatiquement dans les textes.</td></tr>
534
+ <tr><td><b>Bannière principale</b></td><td>Sur-titre, titre, mots mis en couleur (ils doivent faire partie du titre), sous-titre, boutons, bulle, visuel.</td></tr>
535
+ <tr><td><b>Barre du haut</b></td><td>Jusqu'à 3 messages défilants.</td></tr>
536
+ <tr><td><b>Bandeau promo</b></td><td>Sur-titre, titre, texte, bouton, pastille, image.</td></tr>
537
+ </table>
538
+ <div class="note info"><div><b class="t">Les variables</b><code>{discount}</code>, <code>{endDate}</code> et <code>{freeShipping}</code> sont remplacées sur le site par la remise, la date de fin et le seuil de livraison. Gardez-les dans vos textes pour qu'ils restent justes quand vous changez la remise ou les dates.</div></div>
539
+ <div class="note warn"><div><b class="t">Le texte n'applique pas la remise</b>Écrire « −30 % » dans un texte ne change aucun prix. La remise elle-même se crée dans les listes de prix (chapitre 11) ou les promotions (chapitre 12), avec les mêmes dates.</div></div>
540
+ <p>Textes simples uniquement (pas de mise en forme). Images : JPG, PNG ou WEBP, 5 Mo maximum.</p>
541
+
542
+ <h2><span class="n">10.5</span>Aperçu de partage</h2>
543
+ <p>Bloc <b>Partage sur les réseaux</b> : le titre, la description et l'image qui s'affichent quand on partage le lien de la boutique (WhatsApp, Facebook, LinkedIn…). Image idéale : 1200 × 630 px. Vide = nom de la boutique, sous-titre et visuel principal.</p>
544
+
545
+ <h2><span class="n">10.6</span>Revenir aux textes d'origine</h2>
546
+ <p><span class="ui">Réinitialiser aux textes du thème</span> (en bas du panneau) efface vos textes ; les images, le logo et les dates sont gardés.</p>
121
547
  </section>
122
548
 
123
- <section class="part">
124
- <h2>B1. Se connecter, équipe, mot de passe</h2>
125
- <ul>
126
- <li><b>Connexion</b> : {{ADMIN_URL}} avec votre e-mail et votre mot de passe.</li>
127
- <li><b>Mot de passe oublié / le changer</b> : page de connexion → <span class="menu">Mot de passe oublié ?</span>, saisir votre e-mail, suivre le lien reçu.</li>
128
- <li><b>Langue de l'admin</b> : <span class="menu">Paramètres → Profil</span> → Langue (Français).</li>
129
- <li><b>Inviter un collègue</b> : <span class="menu">Paramètres → Utilisateurs → Inviter</span>. Il reçoit un e-mail pour créer son compte. Retirer un accès : même écran, supprimer l'utilisateur.</li>
130
- </ul>
131
-
132
- <h2>B2. Commandes</h2>
133
- <p><span class="menu">Commandes (Orders)</span> : toutes les boutiques au même endroit. La colonne / le filtre <b>Canal de vente</b> indique de quelle boutique vient chaque commande.</p>
134
- <table>
135
- <tr><th>Étape</th><th>Où / comment</th><th>Le client reçoit</th></tr>
136
- <tr><td>Payée</td><td>Automatique (carte). Paiement manuel : bouton <b>Capturer</b> dans la partie Paiement.</td><td>Confirmation de commande</td></tr>
137
- <tr><td>Préparer</td><td>Partie <b>Traitement (Fulfillment)</b> → <b>Créer un traitement</b>, choisir les articles et l'entrepôt.</td><td>—</td></tr>
138
- <tr><td>Expédier</td><td>Sur le traitement → <b>Marquer comme expédié</b>, saisir le numéro et le lien de suivi.</td><td>« Votre colis est en route » + suivi</td></tr>
139
- <tr><td>Livrer</td><td>Sur le traitement → <b>Marquer comme livré</b>.</td><td>« Votre commande est livrée »</td></tr>
140
- <tr><td>Annuler</td><td>Menu « … » en haut de la commande → <b>Annuler</b> (avant expédition).</td><td>Confirmation d'annulation</td></tr>
141
- </table>
142
- <p>Aussi dans une commande : modifier les articles (<b>Modifier la commande</b>), ajouter une note interne, voir l'historique complet (activité).</p>
143
-
144
- <h2>B3. Retours, échanges, remboursements</h2>
145
- <ul>
146
- <li><b>Retour</b> : dans la commande → <b>Demander un retour</b>, choisir les articles et le motif. À réception du colis : <b>Recevoir</b> le retour. Le client est prévenu à chaque étape.</li>
147
- <li><b>Échange</b> : <b>Créer un échange</b> (articles rendus + articles envoyés à la place).</li>
148
- <li><b>Réclamation</b> (produit abîmé, manquant) : <b>Créer une réclamation</b>, avec renvoi ou remboursement.</li>
149
- <li><b>Rembourser</b> : partie Paiement → <b>Rembourser</b>, montant et motif. Le client reçoit un e-mail avec le montant.</li>
150
- <li>Motifs de retour : <span class="menu">Paramètres → Motifs de retour</span>.</li>
151
- </ul>
152
-
153
- <h2>B4. Produits et variantes</h2>
154
- <ol>
155
- <li><span class="menu">Produits → Créer</span> : titre, sous-titre, description, identifiant d'URL (handle).</li>
156
- <li><b>Médias</b> : glisser les photos ; la première sert de vignette sur le site.</li>
157
- <li><b>Options et variantes</b> : ex. option « Couleur » (Noir, Blanc) et « Taille » (S, M, L) → une variante par combinaison, chacune avec son SKU, son prix et son stock.</li>
158
- <li><b>Canaux de vente</b> : cocher les boutiques où le produit apparaît (voir B7).</li>
159
- <li><b>Organisation</b> : catégorie(s), collection, type, tags.</li>
160
- <li><b>Statut</b> : <b>Publié</b>. Un brouillon n'apparaît nulle part.</li>
161
- </ol>
162
- <p><b>Beaucoup de produits ?</b> <span class="menu">Produits → Importer</span> un fichier CSV (modèle téléchargeable sur le même écran) ; <b>Exporter</b> pour les modifier dans un tableur.</p>
163
-
164
- <h2>B5. Prix par devise et prix barrés</h2>
165
- <div class="box warn">Chaque variante doit avoir un prix <b>dans la devise de chaque boutique où elle est vendue</b> ({{CURRENCIES}}). Sans prix dans une devise, le produit n'apparaît pas dans la boutique concernée.</div>
166
- <ul>
167
- <li><b>Prix normal</b> : produit → variante → <b>Modifier les prix</b> : une colonne par devise.</li>
168
- <li><b>Prix barré (soldes)</b> : <span class="menu">Listes de prix → Créer</span>, type <b>Soldes (Sale)</b>, dates de début et de fin, ajouter les produits et le prix soldé par devise. Le site affiche l'ancien prix barré et le pourcentage.</li>
169
- <li><b>Prix réservés à un groupe</b> (ex. clients VIP, revendeurs) : liste de prix de type <b>Remplacement (Override)</b> limitée à un groupe de clients (B11).</li>
170
- </ul>
171
- <div class="box warn">Une liste de prix ne se limite pas à une boutique : le prix soldé s'applique dans <b>toutes les boutiques</b> qui vendent le produit (dans la même devise). Pour solder une seule boutique alors que ses produits sont aussi vendus ailleurs, utilisez une promotion avec la condition <b>Canal de vente</b> (B10).</div>
172
-
173
- <h2>B6. Catégories et collections</h2>
174
- <ul>
175
- <li><span class="menu">Produits → Catégories</span> : créer (nom, identifiant), organiser en arborescence, ajouter les produits. Les catégories principales s'affichent en tuiles sur l'accueil de chaque boutique.</li>
176
- <li><b>Image d'une catégorie</b> : ouvrir la catégorie → bloc <b>Image de la catégorie</b> (colonne de droite) → choisir le fichier → <b>Enregistrer l'image</b>.</li>
177
- <li><span class="menu">Produits → Collections</span> : regroupements libres (ex. « Idées cadeaux ») ; les produits liés d'une fiche produit viennent de la même collection.</li>
178
- </ul>
179
-
180
- <h2>B7. Boutiques (canaux de vente)</h2>
181
- <p>Chaque boutique est un <b>canal de vente</b> (<span class="menu">Paramètres → Canaux de vente</span>), nommé par son identifiant (première page). Un même produit peut être vendu dans plusieurs boutiques ; le stock est commun.</p>
182
- <ul>
183
- <li>Mettre un produit dans une boutique : fiche produit → <b>Canaux de vente</b> → cocher ; ou depuis le canal de vente → <b>Ajouter des produits</b> (plusieurs à la fois).</li>
184
- <li>Retirer un produit d'une boutique : décocher. Il reste vendu ailleurs.</li>
185
- </ul>
186
- <div class="box warn">Ne pas renommer ni supprimer un canal de vente, ni sa clé API : la boutique correspondante ne fonctionnerait plus. Nouvelle boutique = demande à l'équipe (A1).</div>
187
-
188
- <h2>B8. Stock</h2>
189
- <ul>
190
- <li><span class="menu">Inventaire</span> : quantité disponible par article et par entrepôt ; <b>réservé</b> = commandes non encore expédiées.</li>
191
- <li>Le stock baisse à chaque commande et remonte à l'annulation ou à la réception d'un retour.</li>
192
- <li>Rupture : le site affiche « Rupture de stock ». Pour vendre quand même : variante → <b>Autoriser les commandes en rupture</b>.</li>
193
- </ul>
194
-
195
- <h2>B9. Campagnes : textes, images, logo, compte à rebours</h2>
196
- <p><span class="menu">Campagnes</span> (menu ajouté pour vos boutiques) → ligne de la boutique → <b>Modifier</b>. Visible sur le site en environ une minute.</p>
197
- <table>
198
- <tr><th>Section</th><th>Champs</th></tr>
199
- <tr><td>Identité</td><td><b>Logo</b> (remplace la pastille ; sert aussi d'icône d'onglet), <b>compte à rebours</b> : comme le thème / toujours / jamais.</td></tr>
200
- <tr><td>Dates</td><td>Début et fin de l'offre (compte à rebours, et page « Cette vente est terminée » après la fin) ; <b>campagne suivante</b> : boutique proposée quand celle-ci est finie.</td></tr>
201
- <tr><td>Variables</td><td>Remise (ex. 30%) et seuil de livraison offerte, repris dans les textes du thème.</td></tr>
202
- <tr><td>Bannière principale</td><td>Sur-titre, titre, <b>mots mis en couleur</b> (doivent faire partie du titre), sous-titre, 2 boutons, bulle (3 textes), <b>visuel</b>.</td></tr>
203
- <tr><td>Barre du haut</td><td>Jusqu'à 3 messages.</td></tr>
204
- <tr><td>Bandeau promo</td><td>Sur-titre, titre, texte, bouton, pastille, <b>image</b>.</td></tr>
205
- </table>
206
- <p>Un champ laissé vide reprend le texte du thème. <b>Réinitialiser aux textes du thème</b> efface vos textes (images, logo et dates sont gardés). Texte simple uniquement ; images jpg, png ou webp, 5 Mo max.</p>
207
- <div class="box info">Ne pas confondre avec <span class="menu">Promotions → Campagnes</span> de Medusa, qui regroupe des codes promo avec un budget (B10).</div>
208
- <div class="box warn">Les textes et les dates de campagne ne font qu'<b>afficher</b> l'offre (« jusqu'à −35 % », compte à rebours). Ils n'appliquent <b>aucune remise</b> : créez la remise elle-même dans <span class="menu">Promotions</span> (B10) ou <span class="menu">Listes de prix</span> (B5), avec les mêmes dates, et vérifiez que le texte correspond.</div>
209
-
210
- <h3>Relancer une promo (prix barrés + compte à rebours alignés)</h3>
211
- <p>À la création, les prix barrés du catalogue sont regroupés dans une liste de prix <b>« Promotions jusqu'au &lt;date&gt; »</b> qui s'arrête à la fin de la campagne de la boutique : le compte à rebours et les remises finissent ensemble. Pour une nouvelle promo :</p>
212
- <ol>
213
- <li><span class="menu">Tarification</span> → ouvrir la liste « Promotions jusqu'au … » (ou <b>Créer</b> une liste de type <b>Soldes</b>) → <b>Modifier</b> : nouvelles <b>dates de début et de fin</b>. Pour changer les prix : onglet <b>Prix</b> → prix soldé par produit et par devise.</li>
214
- <li><span class="menu">Campagnes</span> → la boutique → <b>Modifier</b> : mettre <b>exactement les mêmes dates</b> de début et de fin, adapter les textes (« jusqu'à −40 % », variables Remise) et les images → <b>Enregistrer</b>.</li>
215
- <li>Vérifier sur le site (environ 1 minute) : compte à rebours, prix barrés et pourcentages.</li>
216
- </ol>
217
- <div class="box info">Le compte à rebours affiche la date de fin de la campagne ; les prix réels dépendent de la liste de prix. Mêmes dates aux deux endroits = une promo cohérente. Après la date de fin : les prix redeviennent normaux et la boutique affiche « Cette vente est terminée ».</div>
218
-
219
- <h2>B10. Codes promo et promotions</h2>
220
- <p><span class="menu">Promotions → Créer</span> :</p>
221
- <table>
222
- <tr><th>Type</th><th>Exemple</th></tr>
223
- <tr><td>Remise en % ou en montant sur la commande</td><td><code>BF20</code> = −20 % sur tout le panier</td></tr>
224
- <tr><td>Remise sur certains produits</td><td>−10 € sur la catégorie Audio</td></tr>
225
- <tr><td>Achetez X, obtenez Y</td><td>2 achetés = le 3e offert</td></tr>
226
- <tr><td>Livraison offerte</td><td>code <code>SHIPFREE</code></td></tr>
227
- </table>
228
- <ul>
229
- <li><b>Code</b> (saisi par le client dans le panier) ou <b>automatique</b> (appliqué sans code).</li>
230
- <li><b>Conditions</b> : produits, catégories, collections, groupes de clients, devise, montant minimum…</li>
231
- <li><b>Limites et dates</b> : rattacher la promotion à une <b>campagne de promotion</b> (dates de début/fin, budget en nombre d'utilisations ou en montant).</li>
232
- <li>Désactiver : passer la promotion en <b>Brouillon</b>.</li>
233
- </ul>
234
- <h3>Remise sur toute une boutique (ex. −35 % sur la boutique Nouvel An)</h3>
235
- <ol>
236
- <li><span class="menu">Promotions → Créer</span>, type <b>Automatique</b> (sans code) ou <b>Code</b>.</li>
237
- <li>Modèle <b>Pourcentage sur la commande</b>, valeur <b>35</b>.</li>
238
- <li>Conditions (« qui peut l'utiliser ») : <b>Canal de vente</b> = l'identifiant de la boutique (première page).</li>
239
- <li>Rattacher à une campagne de promotion avec <b>date de début et de fin</b> (les mêmes que la campagne de la boutique, B9).</li>
240
- <li>Vérifier : un produit au panier de cette boutique affiche la ligne −35 % ; dans une autre boutique, aucune remise.</li>
241
- </ol>
242
- <p>La remise porte sur tous les articles du panier (pas sur la livraison) et apparaît <b>dans le panier</b>. Pour afficher un <b>prix barré</b> sur les fiches produits, utilisez plutôt une liste de prix « Soldes » (B5). Pour exclure des produits : modèle <b>Pourcentage sur des produits</b> ciblant une catégorie ou une collection (ex. « Soldes »).</p>
243
- <div class="box warn">Une remise en montant (ex. −10) s'applique dans la devise choisie : créez une promotion par devise si besoin. Testez chaque code dans la bonne boutique avant de l'annoncer.</div>
244
-
245
- <h2>B11. Clients et groupes</h2>
246
- <ul>
247
- <li><span class="menu">Clients</span> : comptes créés sur les boutiques (un compte fonctionne dans toutes), adresses, historique des commandes.</li>
248
- <li><span class="menu">Clients → Groupes</span> : ex. « VIP », pour des listes de prix (B5) ou des promotions (B10) réservées.</li>
249
- </ul>
250
-
251
- <h2>B12. Livraison et taxes</h2>
252
- <ul>
253
- <li><b>Tarifs</b> : <span class="menu">Paramètres → Emplacements et livraison</span> → Entrepôt principal → Livraison → zone <b>Monde</b> → options <b>Standard</b> et <b>Express</b> → <b>Modifier les prix</b> (un prix par devise). Vous pouvez ajouter une option (ex. Retrait en magasin).</li>
254
- <li><b>Livraison offerte au-delà d'un montant</b> : promotion de type livraison offerte, automatique, avec condition de montant minimum (B10). Indiquer le seuil dans la variable de campagne (B9).</li>
255
- <li><b>Taxes</b> : par défaut 0 % (prix affichés TTC). Pour appliquer une TVA : <span class="menu">Paramètres → Régions de taxe</span> → pays → taux par défaut.</li>
256
- </ul>
257
-
258
- <h2>B13. À ne pas toucher</h2>
259
- <ul>
260
- <li><span class="menu">Paramètres → Régions</span> : générées depuis la configuration du projet (une par devise). Changer un pays ou une devise = demande à l'équipe.</li>
261
- <li><span class="menu">Paramètres → Canaux de vente</span> et <span class="menu">Clés API publiables</span> : une par boutique.</li>
262
- <li><span class="menu">Paramètres → Magasin</span> : devises du magasin.</li>
263
- </ul>
264
-
265
- <h2>B14. Dépannage</h2>
266
- <table>
267
- <tr><th>Problème</th><th>À vérifier</th></tr>
268
- <tr><td>Produit invisible sur une boutique</td><td>Publié ? coché dans le canal de vente de cette boutique ? prix dans sa devise ? (attendre 1 min)</td></tr>
269
- <tr><td>« Cette vente est terminée »</td><td>Date de fin de la campagne dépassée (B9) : prolonger ou renseigner la campagne suivante.</td></tr>
270
- <tr><td>Modification pas visible</td><td>Attendre une minute puis recharger la page.</td></tr>
271
- <tr><td>Le client ne reçoit pas d'e-mail</td><td>Dossier spam ; e-mails configurés (A4) ; adresse du client correcte dans la commande.</td></tr>
272
- <tr><td>Paiement carte impossible</td><td>Clés Stripe et webhook (A3) ; compte Stripe activé en mode production.</td></tr>
273
- <tr><td>Code promo refusé</td><td>Dates, budget, conditions (produits, devise, montant minimum), statut non brouillon.</td></tr>
274
- <tr><td>Autre</td><td>Contact : {{SUPPORT}}</td></tr>
275
- </table>
549
+ <section class="chapter">
550
+ <div class="chapter-head"><div class="num">11</div><div><h1>Prix barrés (listes de prix)</h1><p>Afficher un ancien prix barré et le pourcentage de remise, pour une période.</p></div></div>
551
+ <div class="inchapter"><b>Dans ce chapitre</b>11.1 Comprendre · 11.2 Relancer une promo · 11.3 Créer une liste de prix · 11.4 Prix réservés à un groupe</div>
552
+
553
+ <h2><span class="n">11.1</span>Comprendre les listes de prix</h2>
554
+ <div class="path">Listes de prix</div>
555
+ <p>Une liste de prix de type <b>Prix de vente</b> remplace temporairement le prix de certains produits : le site affiche l'ancien prix barré et le pourcentage. À la date de fin, les prix redeviennent normaux tout seuls.</p>
556
+ <p>Vos prix barrés d'origine sont rangés dans des listes « <b>Promotions jusqu'au &lt;date&gt;</b> », qui s'arrêtent à la fin de la campagne de la boutique : compte à rebours et remises finissent ensemble.</p>
557
+ <figure class="crop"><img src="guide-images/listes-prix.jpg" alt=""><figcaption><b>Figure 11.1</b> — Les listes de prix.</figcaption></figure>
558
+
559
+ <h2><span class="n">11.2</span>Relancer une promo</h2>
560
+ <ol class="steps">
561
+ <li><span class="ui">Listes de prix</span> › la liste « Promotions jusqu'au … » › <span class="ui">…</span> › <span class="ui">Modifier</span> : nouvelles dates de début et de fin.</li>
562
+ <li>Pour changer les prix soldés : onglet des prix de la liste, un prix par produit et par devise.</li>
563
+ <li><span class="ui">Mes boutiques</span> › la boutique › <span class="ui">Modifier</span> : mettez <b>les mêmes dates</b>, adaptez les textes (Remise) et les visuels, enregistrez.</li>
564
+ <li>Vérifiez sur le site (une minute) : compte à rebours, prix barrés, pourcentages.</li>
565
+ </ol>
566
+ <div class="note tip"><div><b class="t">La règle d'or</b>Mêmes dates dans la liste de prix et dans Mes boutiques = une promo cohérente : le compte à rebours s'arrête quand les prix redeviennent normaux.</div></div>
567
+
568
+ <h2><span class="n">11.3</span>Créer une liste de prix</h2>
569
+ <ol class="steps">
570
+ <li><span class="ui">Listes de prix</span> › <span class="ui">Créer</span>, type <b>Prix de vente</b>.</li>
571
+ <li>Nom, dates de début et de fin.</li>
572
+ <li>Ajoutez les produits, puis le prix soldé de chaque variante, dans chaque devise.</li>
573
+ <li>Enregistrez : la liste est active aux dates choisies.</li>
574
+ </ol>
575
+ <div class="note info"><div><b class="t">Bon à savoir</b>Une liste de prix s'applique dans toutes les boutiques qui vendent le produit (même devise). Pour une remise sur <b>une seule</b> boutique, utilisez une promotion limitée à cette boutique (12.4).</div></div>
576
+
577
+ <h2><span class="n">11.4</span>Prix réservés à un groupe</h2>
578
+ <p>Type <b>Remplacement</b> limité à un groupe de clients (5.2) : prix revendeurs, prix VIP… Seuls les clients connectés de ce groupe voient ces prix.</p>
579
+ </section>
580
+
581
+ <section class="chapter">
582
+ <div class="chapter-head"><div class="num">12</div><div><h1>Codes promo et promotions</h1><p>Remises saisies par le client ou appliquées automatiquement au panier.</p></div></div>
583
+ <div class="inchapter"><b>Dans ce chapitre</b>12.1 Les types · 12.2 Créer un code promo · 12.3 Remise automatique · 12.4 Une remise sur une seule boutique · 12.5 Dates et budget · 12.6 Désactiver</div>
584
+
585
+ <h2><span class="n">12.1</span>Les types de promotion</h2>
586
+ <div class="path">Promotions › Créer</div>
587
+ <table>
588
+ <tr><th style="width:42%">Type</th><th>Exemple</th></tr>
589
+ <tr><td>Pourcentage de réduction sur la commande</td><td>BIENVENUE10 = −10 % sur tout le panier</td></tr>
590
+ <tr><td>Montant réduit sur la commande</td><td>−5 € dès 50 € d'achat</td></tr>
591
+ <tr><td>Pourcentage / montant réduit sur les produits</td><td>−20 % sur la catégorie « Déco »</td></tr>
592
+ <tr><td>Achetez X, obtenez Y</td><td>2 achetés, le 3e offert</td></tr>
593
+ <tr><td>Livraison gratuite</td><td>code LIVRAISON offerte</td></tr>
594
+ </table>
595
+ <figure><img src="guide-images/promotion-type.jpg" alt=""><figcaption><b>Figure 12.1</b> — Choix du type de promotion.</figcaption></figure>
596
+
597
+ <h2><span class="n">12.2</span>Créer un code promo</h2>
598
+ <ol class="steps">
599
+ <li><span class="ui">Promotions</span> › <span class="ui">Créer</span>, choisissez le type, <span class="ui">Continuer</span>.</li>
600
+ <li>Méthode <b>Code de promotion</b>, saisissez le code (ex. NOEL20), statut <b>Active</b>.</li>
601
+ <li>Valeur de la remise (ex. 20 %) et, si besoin, <span class="ui">Ajouter une condition</span> (montant minimum, produits, groupe de clients, boutique…).</li>
602
+ <li><span class="ui">Continuer</span> › Campagne (dates et budget, 12.5), puis enregistrez.</li>
603
+ </ol>
604
+ <figure><img src="guide-images/promotion-details.jpg" alt=""><figcaption><b>Figure 12.2</b> — Détails de la promotion : méthode, statut, code, conditions.</figcaption></figure>
605
+
606
+ <h2><span class="n">12.3</span>Remise automatique (sans code)</h2>
607
+ <p>Même création, méthode <b>Automatique</b> : la remise s'applique au panier sans que le client saisisse de code.</p>
608
+
609
+ <h2><span class="n">12.4</span>Une remise sur une seule boutique</h2>
610
+ <ol class="steps">
611
+ <li>Créez la promotion (code ou automatique), type pourcentage sur la commande.</li>
612
+ <li><span class="ui">Ajouter une condition</span> › <b>Canal de vente</b> = l'identifiant de la boutique (2.3).</li>
613
+ <li>Vérifiez : dans cette boutique, le panier affiche la remise ; dans les autres, non.</li>
614
+ </ol>
615
+
616
+ <h2><span class="n">12.5</span>Dates et budget</h2>
617
+ <p>L'onglet <b>Campagne</b> de la promotion fixe ses dates et son budget (nombre d'utilisations ou montant maximal). Elle est gérée dans <span class="ui">Promotions</span> › <span class="ui">Campagnes</span>.</p>
618
+ <div class="note warn"><div><b class="t">Ne pas confondre</b>« Promotions › Campagnes » (dates et budget des codes promo) n'a rien à voir avec <b>Mes boutiques</b> (textes et visuels affichés sur vos sites).</div></div>
619
+
620
+ <h2><span class="n">12.6</span>Désactiver une promotion</h2>
621
+ <p>Ouvrez la promotion › statut <b>Brouillon</b> : elle ne s'applique plus, sans être supprimée.</p>
622
+ <div class="note tip"><div><b class="t">Astuce</b>Testez chaque code dans la bonne boutique, avec un panier réel, avant de l'annoncer. Une remise en montant (ex. −10 €) s'applique dans une devise : créez-en une par devise si besoin.</div></div>
623
+ </section>
624
+
625
+ <!-- ======================= PARTIE V ======================= -->
626
+ <section class="part-page">
627
+ <small>Partie V</small>
628
+ <h1>Réglages</h1>
629
+ <p>L'équipe, les régions et la livraison, et les bonnes pratiques pour que tout continue de fonctionner.</p>
630
+ <ul><li><b>13</b>Paramètres</li><li><b>14</b>Bonnes pratiques et dépannage</li></ul>
631
+ </section>
632
+
633
+ <section class="chapter">
634
+ <div class="chapter-head"><div class="num">13</div><div><h1>Paramètres</h1><p>Équipe, régions, canaux de vente, livraison et taxes.</p></div></div>
635
+ <div class="inchapter"><b>Dans ce chapitre</b>13.1 L'équipe · 13.2 Régions et devises · 13.3 Canaux de vente · 13.4 Livraison · 13.5 Taxes</div>
636
+
637
+ <h2><span class="n">13.1</span>Inviter un membre de l'équipe</h2>
638
+ <div class="path">Paramètres › Utilisateurs</div>
639
+ <ol class="steps">
640
+ <li><span class="ui">Inviter</span> (en haut à droite), saisissez l'e-mail de la personne.</li>
641
+ <li>Elle reçoit une invitation et choisit son propre mot de passe.</li>
642
+ <li>Pour retirer un accès : <span class="ui">…</span> sur la ligne › <span class="ui">Supprimer</span>.</li>
643
+ </ol>
644
+ <figure class="crop"><img src="guide-images/parametres-utilisateurs.jpg" alt=""><figcaption><b>Figure 13.1</b> — Les utilisateurs de l'administration.</figcaption></figure>
645
+
646
+ <h2><span class="n">13.2</span>Régions et devises</h2>
647
+ <div class="path">Paramètres › Régions</div>
648
+ <p>Une région regroupe les pays livrés dans une devise, avec les moyens de paiement. Elles ont été préparées pour vos boutiques : modifiez-les seulement si vous ajoutez ou retirez un pays de livraison.</p>
649
+
650
+ <h2><span class="n">13.3</span>Canaux de vente</h2>
651
+ <div class="path">Paramètres › Canaux de vente</div>
652
+ <p>Chaque boutique est un canal de vente. Cet écran sert surtout à <span class="ui">Ajouter des produits</span> à une boutique en grand nombre.</p>
653
+ <div class="note warn"><div><b class="t">À ne pas faire</b>Ne renommez pas, ne désactivez pas et ne supprimez pas un canal de vente, ni les clés API (Paramètres › Publishable API Keys) : la boutique correspondante cesserait de fonctionner.</div></div>
654
+
655
+ <h2><span class="n">13.4</span>Livraison</h2>
656
+ <div class="path">Paramètres › Emplacements &amp; Livraison</div>
657
+ <p>Les tarifs de livraison (Standard, Express) sont définis par emplacement et par zone. Pour changer un tarif : l'emplacement › la zone › l'option › <span class="ui">…</span> › <span class="ui">Modifier les prix</span>.</p>
658
+
659
+ <h2><span class="n">13.5</span>Taxes</h2>
660
+ <div class="path">Paramètres › Taxes par régions</div>
661
+ <p>Un taux par pays (0 % au départ). Réglez-le avec votre comptable selon votre situation.</p>
662
+ </section>
663
+
664
+ <section class="chapter">
665
+ <div class="chapter-head"><div class="num">14</div><div><h1>Bonnes pratiques et dépannage</h1><p>Les réflexes à prendre et les réponses aux questions fréquentes.</p></div></div>
666
+ <div class="inchapter"><b>Dans ce chapitre</b>14.1 Les bons réflexes · 14.2 Questions fréquentes · 14.3 Glossaire</div>
667
+
668
+ <h2><span class="n">14.1</span>Les bons réflexes</h2>
669
+ <ul>
670
+ <li>Chaque matin : <span class="ui">Commandes</span>, filtre « Non expédié ».</li>
671
+ <li>Avant une promo : liste de prix et Mes boutiques <b>aux mêmes dates</b>, puis vérification sur le site.</li>
672
+ <li>Après un événement : fermez le site (10.2) ou changez ses textes pour la suite.</li>
673
+ <li>Un compte par personne dans l'équipe, jamais de mot de passe partagé.</li>
674
+ <li>Après chaque modification importante, regardez le site : c'est ce que voient vos clients.</li>
675
+ </ul>
676
+
677
+ <h2><span class="n">14.2</span>Questions fréquentes</h2>
678
+ <table>
679
+ <tr><th style="width:40%">Le problème</th><th>La solution</th></tr>
680
+ <tr><td>Un produit n'apparaît pas sur une boutique</td><td>Vérifiez : statut Publié (6.4), boutique cochée (6.5), prix dans la devise de la boutique (7.3), stock (8).</td></tr>
681
+ <tr><td>Le prix barré ne s'affiche pas</td><td>La liste de prix est-elle active, aux bonnes dates, avec un prix pour la bonne devise (11) ?</td></tr>
682
+ <tr><td>Le compte à rebours a disparu</td><td>La date de fin de la campagne est passée : changez-la dans Mes boutiques (10.4).</td></tr>
683
+ <tr><td>Un code promo ne marche pas</td><td>Statut Active, dates de la campagne, conditions (montant minimum, boutique, devise) (12).</td></tr>
684
+ <tr><td>Une modification n'apparaît pas sur le site</td><td>Attendez une minute puis rechargez la page.</td></tr>
685
+ <tr><td>Le site affiche « Boutique fermée »</td><td>Mes boutiques › <span class="ui">Ouvrir</span> (10.2).</td></tr>
686
+ <tr><td>Le client n'a pas reçu d'e-mail</td><td>Vérifiez ses courriers indésirables ; sinon contactez l'assistance.</td></tr>
687
+ </table>
688
+
689
+ <h2><span class="n">14.3</span>Glossaire</h2>
690
+ <table>
691
+ <tr><th style="width:30%">Terme</th><th>Définition</th></tr>
692
+ <tr><td>Canal de vente</td><td>Une de vos boutiques, vue par l'administration.</td></tr>
693
+ <tr><td>Variante</td><td>Une version précise d'un produit (ex. taille M, noir), avec son prix et son stock.</td></tr>
694
+ <tr><td>Capturer</td><td>Encaisser un paiement réservé.</td></tr>
695
+ <tr><td>Liste de prix</td><td>Prix temporaires (soldes) ou réservés à un groupe.</td></tr>
696
+ <tr><td>Promotion</td><td>Remise appliquée au panier, avec ou sans code.</td></tr>
697
+ <tr><td>Campagne (Mes boutiques)</td><td>Textes, visuels et dates affichés sur l'accueil d'une boutique.</td></tr>
698
+ <tr><td>SKU</td><td>Référence interne d'une variante.</td></tr>
699
+ </table>
700
+ <p style="margin-top:10mm;color:var(--muted)">Assistance : {{SUPPORT}}</p>
276
701
  </section>
277
702
 
278
703
  </body>