create-brainerce-store 1.62.0 → 1.64.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 (203) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +71 -71
  3. package/dist/index.js +26 -3
  4. package/messages/en.json +502 -502
  5. package/messages/he.json +502 -502
  6. package/package.json +1 -1
  7. package/templates/nextjs/base/.claude/commands/design.md +60 -60
  8. package/templates/nextjs/base/.env.local.ejs +24 -24
  9. package/templates/nextjs/base/.eslintrc.json +57 -57
  10. package/templates/nextjs/base/.mcp.json +8 -8
  11. package/templates/nextjs/base/AI-GUIDE.md +174 -174
  12. package/templates/nextjs/base/TRANSLATIONS.md +200 -200
  13. package/templates/nextjs/base/package.json.ejs +52 -52
  14. package/templates/nextjs/base/src/app/agents.md/route.ts +87 -0
  15. package/templates/nextjs/base/src/app/blog/[slug]/page.tsx.ejs +308 -262
  16. package/templates/nextjs/base/src/app/blog/page.tsx.ejs +276 -276
  17. package/templates/nextjs/base/src/app/blog/rss.xml/route.ts +70 -0
  18. package/templates/nextjs/base/src/app/cart/page.tsx +7 -7
  19. package/templates/nextjs/base/src/app/category/[slug]/page.tsx +29 -3
  20. package/templates/nextjs/base/src/app/checkout/page.tsx +12 -0
  21. package/templates/nextjs/base/src/app/contact/layout.tsx.ejs +14 -0
  22. package/templates/nextjs/base/src/app/globals.css +36 -36
  23. package/templates/nextjs/base/src/app/indexnow-key.txt/route.ts +26 -26
  24. package/templates/nextjs/base/src/app/layout.tsx.ejs +30 -0
  25. package/templates/nextjs/base/src/app/llms.txt/route.ts +28 -5
  26. package/templates/nextjs/base/src/app/not-found.tsx.ejs +35 -0
  27. package/templates/nextjs/base/src/app/opengraph-image.tsx +109 -0
  28. package/templates/nextjs/base/src/app/order-confirmation/page.tsx +295 -278
  29. package/templates/nextjs/base/src/app/order-status/page.tsx +121 -121
  30. package/templates/nextjs/base/src/app/page.tsx +64 -64
  31. package/templates/nextjs/base/src/app/products/[slug]/page.tsx +14 -2
  32. package/templates/nextjs/base/src/app/products/page.tsx +19 -19
  33. package/templates/nextjs/base/src/app/robots.ts +73 -14
  34. package/templates/nextjs/base/src/app/sitemap.ts +89 -66
  35. package/templates/nextjs/base/src/components/account/order-history.tsx +385 -385
  36. package/templates/nextjs/base/src/components/brainerce-bot.tsx +70 -70
  37. package/templates/nextjs/base/src/components/checkout/checkout-form.tsx +612 -612
  38. package/templates/nextjs/base/src/components/checkout/custom-fields-step.tsx +292 -292
  39. package/templates/nextjs/base/src/components/checkout/date-picker.tsx +309 -309
  40. package/templates/nextjs/base/src/components/checkout/datetime-picker.tsx +144 -144
  41. package/templates/nextjs/base/src/components/checkout/order-bump-card.tsx +242 -242
  42. package/templates/nextjs/base/src/components/checkout/pickup-step.tsx +198 -198
  43. package/templates/nextjs/base/src/components/checkout/shipping-step.tsx +125 -125
  44. package/templates/nextjs/base/src/components/checkout/tax-display.tsx +74 -74
  45. package/templates/nextjs/base/src/components/seo/article-json-ld.tsx +59 -59
  46. package/templates/nextjs/base/src/components/seo/breadcrumbs.tsx +37 -37
  47. package/templates/nextjs/base/src/components/seo/category-json-ld.tsx +61 -61
  48. package/templates/nextjs/base/src/components/seo/organization-json-ld.tsx +97 -97
  49. package/templates/nextjs/base/src/components/seo/product-json-ld.tsx +23 -131
  50. package/templates/nextjs/base/src/components/tracking-bootstrap.tsx +62 -0
  51. package/templates/nextjs/base/src/components/ui/accordion.tsx +53 -53
  52. package/templates/nextjs/base/src/components/ui/badge.tsx +32 -32
  53. package/templates/nextjs/base/src/components/ui/button.tsx +49 -49
  54. package/templates/nextjs/base/src/components/ui/card.tsx +55 -55
  55. package/templates/nextjs/base/src/components/ui/checkbox.tsx +28 -28
  56. package/templates/nextjs/base/src/components/ui/dialog.tsx +107 -107
  57. package/templates/nextjs/base/src/components/ui/input.tsx +22 -22
  58. package/templates/nextjs/base/src/components/ui/label.tsx +21 -21
  59. package/templates/nextjs/base/src/components/ui/radio-group.tsx +38 -38
  60. package/templates/nextjs/base/src/components/ui/select.tsx +153 -153
  61. package/templates/nextjs/base/src/components/ui/separator.tsx +26 -26
  62. package/templates/nextjs/base/src/components/ui/sheet.tsx +125 -125
  63. package/templates/nextjs/base/src/components/ui/skeleton.tsx +7 -7
  64. package/templates/nextjs/base/src/components/ui/tabs.tsx +55 -55
  65. package/templates/nextjs/base/src/components/ui/textarea.tsx +21 -21
  66. package/templates/nextjs/base/src/components/ui/tooltip.tsx +32 -32
  67. package/templates/nextjs/base/src/core/hooks/use-cart-page.ts +58 -58
  68. package/templates/nextjs/base/src/core/hooks/use-home-data.ts +51 -51
  69. package/templates/nextjs/base/src/core/hooks/use-product-listing.ts +295 -295
  70. package/templates/nextjs/base/src/core/hooks/use-product-page.ts +20 -2
  71. package/templates/nextjs/base/src/core/lib/image-hosts.ts +7 -7
  72. package/templates/nextjs/base/src/core/lib/product-options.ts +121 -121
  73. package/templates/nextjs/base/src/core/lib/resolve-currency.ts +20 -20
  74. package/templates/nextjs/base/src/core/lib/safe-redirect.ts +38 -38
  75. package/templates/nextjs/base/src/core/lib/seo.ts +46 -46
  76. package/templates/nextjs/base/src/core/lib/store-info.ts +17 -0
  77. package/templates/nextjs/base/src/core/lib/tracking.ts +171 -0
  78. package/templates/nextjs/base/src/core/lib/use-currency.ts +19 -19
  79. package/templates/nextjs/base/src/core/lib/utils.ts +21 -21
  80. package/templates/nextjs/base/src/middleware.ts.ejs +54 -2
  81. package/templates/nextjs/base/src/ui/cart/cart-bundle-offer.tsx +117 -117
  82. package/templates/nextjs/base/src/ui/cart/cart-item.tsx +146 -146
  83. package/templates/nextjs/base/src/ui/cart/cart-nudges.tsx +28 -28
  84. package/templates/nextjs/base/src/ui/cart/cart-summary.tsx +110 -110
  85. package/templates/nextjs/base/src/ui/cart/cart-upgrade-banner.tsx +126 -126
  86. package/templates/nextjs/base/src/ui/cart/cart-view.tsx +140 -140
  87. package/templates/nextjs/base/src/ui/cart/coupon-input.tsx +134 -134
  88. package/templates/nextjs/base/src/ui/cart/free-shipping-bar.tsx +61 -61
  89. package/templates/nextjs/base/src/ui/cart/reservation-countdown.tsx +95 -95
  90. package/templates/nextjs/base/src/ui/home/discount-banner-strip.tsx +22 -20
  91. package/templates/nextjs/base/src/ui/home/featured-products-section.tsx +24 -24
  92. package/templates/nextjs/base/src/ui/home/hero-section.tsx +27 -27
  93. package/templates/nextjs/base/src/ui/home/home-client.tsx +29 -29
  94. package/templates/nextjs/base/src/ui/layout/announcement-bar.tsx.ejs +116 -116
  95. package/templates/nextjs/base/src/ui/layout/faq-section.tsx.ejs +90 -90
  96. package/templates/nextjs/base/src/ui/layout/header-account.tsx +40 -40
  97. package/templates/nextjs/base/src/ui/layout/language-switcher.tsx.ejs +80 -80
  98. package/templates/nextjs/base/src/ui/layout/site-footer.tsx.ejs +144 -144
  99. package/templates/nextjs/base/src/ui/layout/site-header.tsx.ejs +152 -152
  100. package/templates/nextjs/base/src/ui/product/customization-fields.tsx +457 -457
  101. package/templates/nextjs/base/src/ui/product/discount-badge.tsx +18 -18
  102. package/templates/nextjs/base/src/ui/product/frequently-bought-together.tsx +191 -191
  103. package/templates/nextjs/base/src/ui/product/modifier-group-selector.tsx +206 -206
  104. package/templates/nextjs/base/src/ui/product/price-display.tsx +62 -62
  105. package/templates/nextjs/base/src/ui/product/product-card.tsx +7 -2
  106. package/templates/nextjs/base/src/ui/product/product-client-section.tsx +455 -455
  107. package/templates/nextjs/base/src/ui/product/product-listing.tsx +446 -446
  108. package/templates/nextjs/base/src/ui/product/recommendation-section.tsx +102 -102
  109. package/templates/nextjs/base/src/ui/product/review-form.tsx +294 -294
  110. package/templates/nextjs/base/src/ui/product/reviews-section.tsx.ejs +108 -108
  111. package/templates/nextjs/base/src/ui/product/stock-badge.tsx +61 -61
  112. package/templates/nextjs/base/src/ui/product/variant-selector.tsx +291 -291
  113. package/templates/nextjs/base/src/ui/shared/cdn-image.tsx +26 -26
  114. package/templates/nextjs/base/tailwind.config.ts +69 -69
  115. package/templates/nextjs/designs/atelier/app-overlay/layout.tsx.ejs +30 -0
  116. package/templates/nextjs/designs/atelier/globals.css +402 -402
  117. package/templates/nextjs/designs/atelier/messages-patch/en.json +100 -100
  118. package/templates/nextjs/designs/atelier/messages-patch/he.json +100 -100
  119. package/templates/nextjs/designs/atelier/ui/cart/cart-bundle-offer.tsx +110 -110
  120. package/templates/nextjs/designs/atelier/ui/cart/cart-drawer.tsx +163 -163
  121. package/templates/nextjs/designs/atelier/ui/cart/cart-item.tsx +140 -140
  122. package/templates/nextjs/designs/atelier/ui/cart/cart-nudges.tsx +34 -34
  123. package/templates/nextjs/designs/atelier/ui/cart/cart-summary.tsx +107 -107
  124. package/templates/nextjs/designs/atelier/ui/cart/cart-upgrade-banner.tsx +123 -123
  125. package/templates/nextjs/designs/atelier/ui/cart/cart-view.tsx +147 -147
  126. package/templates/nextjs/designs/atelier/ui/cart/coupon-input.tsx +142 -142
  127. package/templates/nextjs/designs/atelier/ui/cart/free-shipping-bar.tsx +77 -77
  128. package/templates/nextjs/designs/atelier/ui/cart/reservation-countdown.tsx +89 -89
  129. package/templates/nextjs/designs/atelier/ui/home/benefits-band.tsx +34 -34
  130. package/templates/nextjs/designs/atelier/ui/home/category-tiles.tsx +151 -151
  131. package/templates/nextjs/designs/atelier/ui/home/discount-banner-strip.tsx +27 -27
  132. package/templates/nextjs/designs/atelier/ui/home/editorial-band.tsx +75 -75
  133. package/templates/nextjs/designs/atelier/ui/home/featured-products-section.tsx +36 -36
  134. package/templates/nextjs/designs/atelier/ui/home/hero-section.tsx +174 -174
  135. package/templates/nextjs/designs/atelier/ui/home/home-client.tsx +54 -54
  136. package/templates/nextjs/designs/atelier/ui/home/newsletter-section.tsx +78 -78
  137. package/templates/nextjs/designs/atelier/ui/home/testimonials-band.tsx +46 -46
  138. package/templates/nextjs/designs/atelier/ui/layout/announcement-bar.tsx +118 -118
  139. package/templates/nextjs/designs/atelier/ui/layout/faq-section.tsx +96 -96
  140. package/templates/nextjs/designs/atelier/ui/layout/header-account.tsx +36 -36
  141. package/templates/nextjs/designs/atelier/ui/layout/header-cart.tsx +36 -36
  142. package/templates/nextjs/designs/atelier/ui/layout/language-switcher.tsx.ejs +137 -137
  143. package/templates/nextjs/designs/atelier/ui/layout/nav-url.ts +14 -14
  144. package/templates/nextjs/designs/atelier/ui/layout/rich-text-block.tsx +34 -34
  145. package/templates/nextjs/designs/atelier/ui/layout/site-footer.tsx.ejs +141 -141
  146. package/templates/nextjs/designs/atelier/ui/layout/site-header.tsx.ejs +138 -138
  147. package/templates/nextjs/designs/atelier/ui/product/customization-fields.tsx +466 -466
  148. package/templates/nextjs/designs/atelier/ui/product/discount-badge.tsx +17 -17
  149. package/templates/nextjs/designs/atelier/ui/product/frequently-bought-together.tsx +196 -196
  150. package/templates/nextjs/designs/atelier/ui/product/modifier-group-selector.tsx +193 -193
  151. package/templates/nextjs/designs/atelier/ui/product/price-display.tsx +69 -69
  152. package/templates/nextjs/designs/atelier/ui/product/product-card.tsx +13 -11
  153. package/templates/nextjs/designs/atelier/ui/product/product-client-section.tsx +477 -477
  154. package/templates/nextjs/designs/atelier/ui/product/product-grid.tsx +42 -42
  155. package/templates/nextjs/designs/atelier/ui/product/product-listing.tsx +260 -260
  156. package/templates/nextjs/designs/atelier/ui/product/recommendation-section.tsx +95 -95
  157. package/templates/nextjs/designs/atelier/ui/product/review-form.tsx +267 -267
  158. package/templates/nextjs/designs/atelier/ui/product/reviews-section.tsx.ejs +148 -148
  159. package/templates/nextjs/designs/atelier/ui/product/stock-badge.tsx +66 -66
  160. package/templates/nextjs/designs/atelier/ui/product/variant-selector.tsx +206 -206
  161. package/templates/nextjs/designs/atelier/ui/shared/cdn-image.tsx +29 -29
  162. package/templates/nextjs/designs/atelier/ui/shared/fly-to-cart.ts +86 -86
  163. package/templates/nextjs/designs/atelier/ui/shared/icons.tsx +276 -276
  164. package/templates/nextjs/designs/atelier/ui/shared/loading-spinner.tsx +63 -63
  165. package/templates/nextjs/designs/atelier/ui/shared/reveal.tsx +71 -71
  166. package/templates/nextjs/designs/atelier/ui/shared/select-menu.tsx +125 -125
  167. package/templates/nextjs/ui-canvas/cart/cart-bundle-offer.tsx +89 -89
  168. package/templates/nextjs/ui-canvas/cart/cart-item.tsx +123 -123
  169. package/templates/nextjs/ui-canvas/cart/cart-nudges.tsx +29 -27
  170. package/templates/nextjs/ui-canvas/cart/cart-summary.tsx +99 -99
  171. package/templates/nextjs/ui-canvas/cart/cart-upgrade-banner.tsx +105 -105
  172. package/templates/nextjs/ui-canvas/cart/cart-view.tsx +106 -106
  173. package/templates/nextjs/ui-canvas/cart/coupon-input.tsx +119 -119
  174. package/templates/nextjs/ui-canvas/cart/free-shipping-bar.tsx +54 -54
  175. package/templates/nextjs/ui-canvas/cart/reservation-countdown.tsx +81 -81
  176. package/templates/nextjs/ui-canvas/home/discount-banner-strip.tsx +21 -19
  177. package/templates/nextjs/ui-canvas/home/featured-products-section.tsx +23 -23
  178. package/templates/nextjs/ui-canvas/home/hero-section.tsx +21 -21
  179. package/templates/nextjs/ui-canvas/home/home-client.tsx +26 -26
  180. package/templates/nextjs/ui-canvas/layout/announcement-bar.tsx.ejs +101 -101
  181. package/templates/nextjs/ui-canvas/layout/faq-section.tsx.ejs +71 -71
  182. package/templates/nextjs/ui-canvas/layout/header-account.tsx +31 -31
  183. package/templates/nextjs/ui-canvas/layout/language-switcher.tsx.ejs +76 -76
  184. package/templates/nextjs/ui-canvas/layout/rich-text-block.tsx.ejs +36 -36
  185. package/templates/nextjs/ui-canvas/layout/site-footer.tsx.ejs +82 -82
  186. package/templates/nextjs/ui-canvas/layout/site-header.tsx.ejs +119 -119
  187. package/templates/nextjs/ui-canvas/product/customization-fields.tsx +445 -445
  188. package/templates/nextjs/ui-canvas/product/discount-badge.tsx +19 -19
  189. package/templates/nextjs/ui-canvas/product/frequently-bought-together.tsx +168 -168
  190. package/templates/nextjs/ui-canvas/product/modifier-group-selector.tsx +165 -165
  191. package/templates/nextjs/ui-canvas/product/price-display.tsx +52 -52
  192. package/templates/nextjs/ui-canvas/product/product-card.tsx +7 -2
  193. package/templates/nextjs/ui-canvas/product/product-client-section.tsx +352 -352
  194. package/templates/nextjs/ui-canvas/product/product-grid.tsx +27 -27
  195. package/templates/nextjs/ui-canvas/product/product-listing.tsx +224 -224
  196. package/templates/nextjs/ui-canvas/product/recommendation-section.tsx +99 -99
  197. package/templates/nextjs/ui-canvas/product/review-form.tsx +266 -266
  198. package/templates/nextjs/ui-canvas/product/reviews-section.tsx.ejs +96 -96
  199. package/templates/nextjs/ui-canvas/product/stock-badge.tsx +45 -45
  200. package/templates/nextjs/ui-canvas/product/variant-selector.tsx +212 -212
  201. package/templates/nextjs/ui-canvas/shared/cdn-image.tsx +31 -31
  202. package/templates/nextjs/ui-canvas/shared/loading-spinner.tsx +27 -27
  203. package/templates/nextjs/base/tsconfig.tsbuildinfo +0 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-brainerce-store",
3
- "version": "1.62.0",
3
+ "version": "1.64.0",
4
4
  "description": "Scaffold a production-ready e-commerce storefront connected to Brainerce",
5
5
  "bin": {
6
6
  "create-brainerce-store": "dist/index.js"
@@ -1,60 +1,60 @@
1
- ---
2
- description: Redesign this storefront's presentation layer to a distinctive, production-grade look
3
- ---
4
-
5
- You are the design lead for this Brainerce storefront. Design brief from the
6
- merchant: **$ARGUMENTS** (if empty, ask for a one-line direction first — e.g.
7
- "dark cinematic jewelry gallery", "brutalist streetwear", "warm Mediterranean
8
- boutique").
9
-
10
- ## Rebuild, don't restyle
11
-
12
- The shipped `src/ui/` is a WORKING REFERENCE, not an aesthetic to preserve.
13
- (In a `--canvas` scaffold it's already a bare unstyled skeleton — each
14
- component carries a `DESIGN ME` marker telling you what the surface is and
15
- which hook feeds it; skip straight to designing.)
16
- You are expected to design from scratch: deleting entire files under
17
- `src/ui/` and rebuilding them around the same hooks is encouraged — that is
18
- what the folder exists for. Do not inherit the current look's layout,
19
- spacing, or component structure unless it genuinely serves your direction.
20
- Build the store YOU would build; the reference only shows which hooks feed
21
- which surface.
22
-
23
- ## Ground rules (non-negotiable)
24
-
25
- 1. Read `AI-GUIDE.md` and `src/ui/`'s current structure BEFORE writing code.
26
- 2. You may rewrite anything in `src/ui/**` and `src/app/globals.css`, and
27
- wire new ui components in the thin `src/app/**` routes. You may NOT touch
28
- `src/core/**`, `src/app/api/**`, or checkout/auth/account components.
29
- 3. All data via `@/core/hooks/*` and the store provider — no hardcoded
30
- products, prices, or currency symbols.
31
- 4. All copy via `useTranslations()`, keys added to every file in `messages/`.
32
-
33
- ## The process
34
-
35
- ## The quality bar (non-negotiable — from the AI-GUIDE)
36
-
37
- Exactly 3-5 colors (no purple unless asked, no gradients by default), max 2
38
- font families, tokens-only colors, Tailwind spacing scale, real imagery
39
- (never abstract filler), content-rich sections, mobile-first. After EACH
40
- major surface: screenshot → self-critique ("would a Lovable user accept
41
- this?") → fix → continue. See AI-GUIDE.md "The quality bar".
42
-
43
-
44
- 1. **Commit to ONE art direction** — write it down in 4 lines (typography
45
- pairing incl. a script-compatible webfont, 6-10 color tokens, layout
46
- concept, motion language) at the top of `DESIGN.md` in the project root.
47
- Bold and specific beats safe and generic; do not hedge toward the middle.
48
- 2. **Tokens first**: rewrite `globals.css` custom properties + font loading
49
- in the locale layout.
50
- 3. **Surfaces in order**: header/footer → homepage sections → product card +
51
- grid → product page → cart. Keep each step compiling.
52
- 4. **Micro-details**: hover states, loading states, one signature
53
- interaction. Wrap all motion in `prefers-reduced-motion` guards.
54
- 5. **Verify** (mandatory): `pnpm exec tsc --noEmit` = 0, then `pnpm dev` and
55
- drive home → product → add-to-cart → cart in a real browser; screenshot
56
- desktop (1440) AND mobile (390). For RTL locales check anchoring and
57
- arrow directions. Fix what looks off before reporting.
58
-
59
- Report with: the direction chosen, what changed, screenshots, and anything
60
- that needs merchant input (e.g. brand name, logo, photography).
1
+ ---
2
+ description: Redesign this storefront's presentation layer to a distinctive, production-grade look
3
+ ---
4
+
5
+ You are the design lead for this Brainerce storefront. Design brief from the
6
+ merchant: **$ARGUMENTS** (if empty, ask for a one-line direction first — e.g.
7
+ "dark cinematic jewelry gallery", "brutalist streetwear", "warm Mediterranean
8
+ boutique").
9
+
10
+ ## Rebuild, don't restyle
11
+
12
+ The shipped `src/ui/` is a WORKING REFERENCE, not an aesthetic to preserve.
13
+ (In a `--canvas` scaffold it's already a bare unstyled skeleton — each
14
+ component carries a `DESIGN ME` marker telling you what the surface is and
15
+ which hook feeds it; skip straight to designing.)
16
+ You are expected to design from scratch: deleting entire files under
17
+ `src/ui/` and rebuilding them around the same hooks is encouraged — that is
18
+ what the folder exists for. Do not inherit the current look's layout,
19
+ spacing, or component structure unless it genuinely serves your direction.
20
+ Build the store YOU would build; the reference only shows which hooks feed
21
+ which surface.
22
+
23
+ ## Ground rules (non-negotiable)
24
+
25
+ 1. Read `AI-GUIDE.md` and `src/ui/`'s current structure BEFORE writing code.
26
+ 2. You may rewrite anything in `src/ui/**` and `src/app/globals.css`, and
27
+ wire new ui components in the thin `src/app/**` routes. You may NOT touch
28
+ `src/core/**`, `src/app/api/**`, or checkout/auth/account components.
29
+ 3. All data via `@/core/hooks/*` and the store provider — no hardcoded
30
+ products, prices, or currency symbols.
31
+ 4. All copy via `useTranslations()`, keys added to every file in `messages/`.
32
+
33
+ ## The process
34
+
35
+ ## The quality bar (non-negotiable — from the AI-GUIDE)
36
+
37
+ Exactly 3-5 colors (no purple unless asked, no gradients by default), max 2
38
+ font families, tokens-only colors, Tailwind spacing scale, real imagery
39
+ (never abstract filler), content-rich sections, mobile-first. After EACH
40
+ major surface: screenshot → self-critique ("would a Lovable user accept
41
+ this?") → fix → continue. See AI-GUIDE.md "The quality bar".
42
+
43
+
44
+ 1. **Commit to ONE art direction** — write it down in 4 lines (typography
45
+ pairing incl. a script-compatible webfont, 6-10 color tokens, layout
46
+ concept, motion language) at the top of `DESIGN.md` in the project root.
47
+ Bold and specific beats safe and generic; do not hedge toward the middle.
48
+ 2. **Tokens first**: rewrite `globals.css` custom properties + font loading
49
+ in the locale layout.
50
+ 3. **Surfaces in order**: header/footer → homepage sections → product card +
51
+ grid → product page → cart. Keep each step compiling.
52
+ 4. **Micro-details**: hover states, loading states, one signature
53
+ interaction. Wrap all motion in `prefers-reduced-motion` guards.
54
+ 5. **Verify** (mandatory): `pnpm exec tsc --noEmit` = 0, then `pnpm dev` and
55
+ drive home → product → add-to-cart → cart in a real browser; screenshot
56
+ desktop (1440) AND mobile (390). For RTL locales check anchoring and
57
+ arrow directions. Fix what looks off before reporting.
58
+
59
+ Report with: the direction chosen, what changed, screenshots, and anything
60
+ that needs merchant input (e.g. brand name, logo, photography).
@@ -1,24 +1,24 @@
1
- # Brainerce Sales Channel — preferred env var name.
2
- NEXT_PUBLIC_BRAINERCE_SALES_CHANNEL_ID=<%= connectionId %>
3
- # Legacy alias kept for backwards compatibility — both are accepted by the SDK.
4
- # @deprecated will be removed when SDK 2.0 ships.
5
- NEXT_PUBLIC_BRAINERCE_CONNECTION_ID=<%= connectionId %>
6
-
7
- # Store info (pre-fetched during setup to avoid flash on first load)
8
- NEXT_PUBLIC_STORE_NAME=<%- storeNameEnv %>
9
- NEXT_PUBLIC_STORE_CURRENCY=<%- currencyEnv %>
10
-
11
- # Backend API URL (server-side only — used by BFF proxy and SSR, never exposed to browser)
12
- BRAINERCE_API_URL=<%- apiBaseUrlEnv %>
13
-
14
- # Public API origin for the AI chat widget (public, unauthenticated endpoints only).
15
- # The widget streams chat directly from the browser, so this one IS public.
16
- NEXT_PUBLIC_BRAINERCE_API_URL=<%- apiBaseUrlEnv %>
17
-
18
- # Public site URL — used for sitemap, robots.txt, and SEO metadata
19
- NEXT_PUBLIC_SITE_URL=http://localhost:3000
20
-
21
- # Optional: floating WhatsApp contact button (used by some designs, e.g.
22
- # passepartout). Digits only, international format without "+"
23
- # (e.g. 14155550123). Leave unset to hide the button.
24
- # NEXT_PUBLIC_WHATSAPP_PHONE=
1
+ # Brainerce Sales Channel — preferred env var name.
2
+ NEXT_PUBLIC_BRAINERCE_SALES_CHANNEL_ID=<%= connectionId %>
3
+ # Legacy alias kept for backwards compatibility — both are accepted by the SDK.
4
+ # @deprecated will be removed when SDK 2.0 ships.
5
+ NEXT_PUBLIC_BRAINERCE_CONNECTION_ID=<%= connectionId %>
6
+
7
+ # Store info (pre-fetched during setup to avoid flash on first load)
8
+ NEXT_PUBLIC_STORE_NAME=<%- storeNameEnv %>
9
+ NEXT_PUBLIC_STORE_CURRENCY=<%- currencyEnv %>
10
+
11
+ # Backend API URL (server-side only — used by BFF proxy and SSR, never exposed to browser)
12
+ BRAINERCE_API_URL=<%- apiBaseUrlEnv %>
13
+
14
+ # Public API origin for the AI chat widget (public, unauthenticated endpoints only).
15
+ # The widget streams chat directly from the browser, so this one IS public.
16
+ NEXT_PUBLIC_BRAINERCE_API_URL=<%- apiBaseUrlEnv %>
17
+
18
+ # Public site URL — used for sitemap, robots.txt, and SEO metadata
19
+ NEXT_PUBLIC_SITE_URL=http://localhost:3000
20
+
21
+ # Optional: floating WhatsApp contact button (used by some designs, e.g.
22
+ # passepartout). Digits only, international format without "+"
23
+ # (e.g. 14155550123). Leave unset to hide the button.
24
+ # NEXT_PUBLIC_WHATSAPP_PHONE=
@@ -1,57 +1,57 @@
1
- {
2
- "extends": [
3
- "next/core-web-vitals"
4
- ],
5
- "overrides": [
6
- {
7
- "files": [
8
- "src/ui/**/*.{ts,tsx}"
9
- ],
10
- "rules": {
11
- "no-restricted-imports": [
12
- "error",
13
- {
14
- "patterns": [
15
- {
16
- "group": [
17
- "@/core/lib/*",
18
- "!@/core/lib/auth",
19
- "!@/core/lib/brainerce",
20
- "!@/core/lib/image-hosts",
21
- "!@/core/lib/navigation",
22
- "!@/core/lib/product-options",
23
- "!@/core/lib/sanitize",
24
- "!@/core/lib/sanitize-html",
25
- "!@/core/lib/translations",
26
- "!@/core/lib/use-currency",
27
- "!@/core/lib/utils"
28
- ],
29
- "message": "UI consumes data via @/core/hooks/* and @/core/providers/* — not core internals. (Approved presentation helpers are exempt.)"
30
- }
31
- ]
32
- }
33
- ]
34
- }
35
- },
36
- {
37
- "files": [
38
- "src/core/**/*.{ts,tsx}"
39
- ],
40
- "rules": {
41
- "no-restricted-imports": [
42
- "error",
43
- {
44
- "patterns": [
45
- {
46
- "group": [
47
- "@/ui/*"
48
- ],
49
- "message": "core/ must never depend on presentation (ui/)."
50
- }
51
- ]
52
- }
53
- ]
54
- }
55
- }
56
- ]
57
- }
1
+ {
2
+ "extends": [
3
+ "next/core-web-vitals"
4
+ ],
5
+ "overrides": [
6
+ {
7
+ "files": [
8
+ "src/ui/**/*.{ts,tsx}"
9
+ ],
10
+ "rules": {
11
+ "no-restricted-imports": [
12
+ "error",
13
+ {
14
+ "patterns": [
15
+ {
16
+ "group": [
17
+ "@/core/lib/*",
18
+ "!@/core/lib/auth",
19
+ "!@/core/lib/brainerce",
20
+ "!@/core/lib/image-hosts",
21
+ "!@/core/lib/navigation",
22
+ "!@/core/lib/product-options",
23
+ "!@/core/lib/sanitize",
24
+ "!@/core/lib/sanitize-html",
25
+ "!@/core/lib/translations",
26
+ "!@/core/lib/use-currency",
27
+ "!@/core/lib/utils"
28
+ ],
29
+ "message": "UI consumes data via @/core/hooks/* and @/core/providers/* — not core internals. (Approved presentation helpers are exempt.)"
30
+ }
31
+ ]
32
+ }
33
+ ]
34
+ }
35
+ },
36
+ {
37
+ "files": [
38
+ "src/core/**/*.{ts,tsx}"
39
+ ],
40
+ "rules": {
41
+ "no-restricted-imports": [
42
+ "error",
43
+ {
44
+ "patterns": [
45
+ {
46
+ "group": [
47
+ "@/ui/*"
48
+ ],
49
+ "message": "core/ must never depend on presentation (ui/)."
50
+ }
51
+ ]
52
+ }
53
+ ]
54
+ }
55
+ }
56
+ ]
57
+ }
@@ -1,8 +1,8 @@
1
- {
2
- "mcpServers": {
3
- "brainerce-docs": {
4
- "type": "http",
5
- "url": "https://mcp-docs.brainerce.com/mcp"
6
- }
7
- }
8
- }
1
+ {
2
+ "mcpServers": {
3
+ "brainerce-docs": {
4
+ "type": "http",
5
+ "url": "https://mcp-docs.brainerce.com/mcp"
6
+ }
7
+ }
8
+ }