create-brainerce-store 1.62.0 → 1.63.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.
- package/LICENSE +21 -21
- package/README.md +71 -71
- package/dist/index.js +5 -2
- package/messages/en.json +502 -502
- package/messages/he.json +502 -502
- package/package.json +1 -1
- package/templates/nextjs/base/.claude/commands/design.md +60 -60
- package/templates/nextjs/base/.env.local.ejs +24 -24
- package/templates/nextjs/base/.eslintrc.json +57 -57
- package/templates/nextjs/base/.mcp.json +8 -8
- package/templates/nextjs/base/AI-GUIDE.md +174 -174
- package/templates/nextjs/base/TRANSLATIONS.md +200 -200
- package/templates/nextjs/base/package.json.ejs +52 -52
- package/templates/nextjs/base/src/app/blog/[slug]/page.tsx.ejs +262 -262
- package/templates/nextjs/base/src/app/blog/page.tsx.ejs +276 -276
- package/templates/nextjs/base/src/app/cart/page.tsx +7 -7
- package/templates/nextjs/base/src/app/category/[slug]/page.tsx +106 -106
- package/templates/nextjs/base/src/app/checkout/page.tsx +12 -0
- package/templates/nextjs/base/src/app/globals.css +36 -36
- package/templates/nextjs/base/src/app/indexnow-key.txt/route.ts +26 -26
- package/templates/nextjs/base/src/app/layout.tsx.ejs +10 -0
- package/templates/nextjs/base/src/app/llms.txt/route.ts +44 -44
- package/templates/nextjs/base/src/app/order-confirmation/page.tsx +295 -278
- package/templates/nextjs/base/src/app/order-status/page.tsx +121 -121
- package/templates/nextjs/base/src/app/page.tsx +64 -64
- package/templates/nextjs/base/src/app/products/[slug]/page.tsx +175 -175
- package/templates/nextjs/base/src/app/products/page.tsx +19 -19
- package/templates/nextjs/base/src/components/account/order-history.tsx +385 -385
- package/templates/nextjs/base/src/components/brainerce-bot.tsx +70 -70
- package/templates/nextjs/base/src/components/checkout/checkout-form.tsx +612 -612
- package/templates/nextjs/base/src/components/checkout/custom-fields-step.tsx +292 -292
- package/templates/nextjs/base/src/components/checkout/date-picker.tsx +309 -309
- package/templates/nextjs/base/src/components/checkout/datetime-picker.tsx +144 -144
- package/templates/nextjs/base/src/components/checkout/order-bump-card.tsx +242 -242
- package/templates/nextjs/base/src/components/checkout/pickup-step.tsx +198 -198
- package/templates/nextjs/base/src/components/checkout/shipping-step.tsx +125 -125
- package/templates/nextjs/base/src/components/checkout/tax-display.tsx +74 -74
- package/templates/nextjs/base/src/components/seo/article-json-ld.tsx +59 -59
- package/templates/nextjs/base/src/components/seo/breadcrumbs.tsx +37 -37
- package/templates/nextjs/base/src/components/seo/category-json-ld.tsx +61 -61
- package/templates/nextjs/base/src/components/seo/organization-json-ld.tsx +97 -97
- package/templates/nextjs/base/src/components/seo/product-json-ld.tsx +179 -179
- package/templates/nextjs/base/src/components/tracking-bootstrap.tsx +62 -0
- package/templates/nextjs/base/src/components/ui/accordion.tsx +53 -53
- package/templates/nextjs/base/src/components/ui/badge.tsx +32 -32
- package/templates/nextjs/base/src/components/ui/button.tsx +49 -49
- package/templates/nextjs/base/src/components/ui/card.tsx +55 -55
- package/templates/nextjs/base/src/components/ui/checkbox.tsx +28 -28
- package/templates/nextjs/base/src/components/ui/dialog.tsx +107 -107
- package/templates/nextjs/base/src/components/ui/input.tsx +22 -22
- package/templates/nextjs/base/src/components/ui/label.tsx +21 -21
- package/templates/nextjs/base/src/components/ui/radio-group.tsx +38 -38
- package/templates/nextjs/base/src/components/ui/select.tsx +153 -153
- package/templates/nextjs/base/src/components/ui/separator.tsx +26 -26
- package/templates/nextjs/base/src/components/ui/sheet.tsx +125 -125
- package/templates/nextjs/base/src/components/ui/skeleton.tsx +7 -7
- package/templates/nextjs/base/src/components/ui/tabs.tsx +55 -55
- package/templates/nextjs/base/src/components/ui/textarea.tsx +21 -21
- package/templates/nextjs/base/src/components/ui/tooltip.tsx +32 -32
- package/templates/nextjs/base/src/core/hooks/use-cart-page.ts +58 -58
- package/templates/nextjs/base/src/core/hooks/use-home-data.ts +51 -51
- package/templates/nextjs/base/src/core/hooks/use-product-listing.ts +295 -295
- package/templates/nextjs/base/src/core/hooks/use-product-page.ts +20 -2
- package/templates/nextjs/base/src/core/lib/image-hosts.ts +7 -7
- package/templates/nextjs/base/src/core/lib/product-options.ts +121 -121
- package/templates/nextjs/base/src/core/lib/resolve-currency.ts +20 -20
- package/templates/nextjs/base/src/core/lib/safe-redirect.ts +38 -38
- package/templates/nextjs/base/src/core/lib/seo.ts +46 -46
- package/templates/nextjs/base/src/core/lib/store-info.ts +9 -0
- package/templates/nextjs/base/src/core/lib/tracking.ts +171 -0
- package/templates/nextjs/base/src/core/lib/use-currency.ts +19 -19
- package/templates/nextjs/base/src/core/lib/utils.ts +21 -21
- package/templates/nextjs/base/src/middleware.ts.ejs +54 -2
- package/templates/nextjs/base/src/ui/cart/cart-bundle-offer.tsx +117 -117
- package/templates/nextjs/base/src/ui/cart/cart-item.tsx +146 -146
- package/templates/nextjs/base/src/ui/cart/cart-nudges.tsx +28 -28
- package/templates/nextjs/base/src/ui/cart/cart-summary.tsx +110 -110
- package/templates/nextjs/base/src/ui/cart/cart-upgrade-banner.tsx +126 -126
- package/templates/nextjs/base/src/ui/cart/cart-view.tsx +140 -140
- package/templates/nextjs/base/src/ui/cart/coupon-input.tsx +134 -134
- package/templates/nextjs/base/src/ui/cart/free-shipping-bar.tsx +61 -61
- package/templates/nextjs/base/src/ui/cart/reservation-countdown.tsx +95 -95
- package/templates/nextjs/base/src/ui/home/discount-banner-strip.tsx +20 -20
- package/templates/nextjs/base/src/ui/home/featured-products-section.tsx +24 -24
- package/templates/nextjs/base/src/ui/home/hero-section.tsx +27 -27
- package/templates/nextjs/base/src/ui/home/home-client.tsx +29 -29
- package/templates/nextjs/base/src/ui/layout/announcement-bar.tsx.ejs +116 -116
- package/templates/nextjs/base/src/ui/layout/faq-section.tsx.ejs +90 -90
- package/templates/nextjs/base/src/ui/layout/header-account.tsx +40 -40
- package/templates/nextjs/base/src/ui/layout/language-switcher.tsx.ejs +80 -80
- package/templates/nextjs/base/src/ui/layout/site-footer.tsx.ejs +144 -144
- package/templates/nextjs/base/src/ui/layout/site-header.tsx.ejs +152 -152
- package/templates/nextjs/base/src/ui/product/customization-fields.tsx +457 -457
- package/templates/nextjs/base/src/ui/product/discount-badge.tsx +18 -18
- package/templates/nextjs/base/src/ui/product/frequently-bought-together.tsx +191 -191
- package/templates/nextjs/base/src/ui/product/modifier-group-selector.tsx +206 -206
- package/templates/nextjs/base/src/ui/product/price-display.tsx +62 -62
- package/templates/nextjs/base/src/ui/product/product-card.tsx +7 -2
- package/templates/nextjs/base/src/ui/product/product-client-section.tsx +455 -455
- package/templates/nextjs/base/src/ui/product/product-listing.tsx +446 -446
- package/templates/nextjs/base/src/ui/product/recommendation-section.tsx +102 -102
- package/templates/nextjs/base/src/ui/product/review-form.tsx +294 -294
- package/templates/nextjs/base/src/ui/product/reviews-section.tsx.ejs +108 -108
- package/templates/nextjs/base/src/ui/product/stock-badge.tsx +61 -61
- package/templates/nextjs/base/src/ui/product/variant-selector.tsx +291 -291
- package/templates/nextjs/base/src/ui/shared/cdn-image.tsx +26 -26
- package/templates/nextjs/base/tailwind.config.ts +69 -69
- package/templates/nextjs/designs/atelier/app-overlay/layout.tsx.ejs +10 -0
- package/templates/nextjs/designs/atelier/globals.css +402 -402
- package/templates/nextjs/designs/atelier/messages-patch/en.json +100 -100
- package/templates/nextjs/designs/atelier/messages-patch/he.json +100 -100
- package/templates/nextjs/designs/atelier/ui/cart/cart-bundle-offer.tsx +110 -110
- package/templates/nextjs/designs/atelier/ui/cart/cart-drawer.tsx +163 -163
- package/templates/nextjs/designs/atelier/ui/cart/cart-item.tsx +140 -140
- package/templates/nextjs/designs/atelier/ui/cart/cart-nudges.tsx +34 -34
- package/templates/nextjs/designs/atelier/ui/cart/cart-summary.tsx +107 -107
- package/templates/nextjs/designs/atelier/ui/cart/cart-upgrade-banner.tsx +123 -123
- package/templates/nextjs/designs/atelier/ui/cart/cart-view.tsx +147 -147
- package/templates/nextjs/designs/atelier/ui/cart/coupon-input.tsx +142 -142
- package/templates/nextjs/designs/atelier/ui/cart/free-shipping-bar.tsx +77 -77
- package/templates/nextjs/designs/atelier/ui/cart/reservation-countdown.tsx +89 -89
- package/templates/nextjs/designs/atelier/ui/home/benefits-band.tsx +34 -34
- package/templates/nextjs/designs/atelier/ui/home/category-tiles.tsx +151 -151
- package/templates/nextjs/designs/atelier/ui/home/discount-banner-strip.tsx +27 -27
- package/templates/nextjs/designs/atelier/ui/home/editorial-band.tsx +75 -75
- package/templates/nextjs/designs/atelier/ui/home/featured-products-section.tsx +36 -36
- package/templates/nextjs/designs/atelier/ui/home/hero-section.tsx +174 -174
- package/templates/nextjs/designs/atelier/ui/home/home-client.tsx +54 -54
- package/templates/nextjs/designs/atelier/ui/home/newsletter-section.tsx +78 -78
- package/templates/nextjs/designs/atelier/ui/home/testimonials-band.tsx +46 -46
- package/templates/nextjs/designs/atelier/ui/layout/announcement-bar.tsx +118 -118
- package/templates/nextjs/designs/atelier/ui/layout/faq-section.tsx +96 -96
- package/templates/nextjs/designs/atelier/ui/layout/header-account.tsx +36 -36
- package/templates/nextjs/designs/atelier/ui/layout/header-cart.tsx +36 -36
- package/templates/nextjs/designs/atelier/ui/layout/language-switcher.tsx.ejs +137 -137
- package/templates/nextjs/designs/atelier/ui/layout/nav-url.ts +14 -14
- package/templates/nextjs/designs/atelier/ui/layout/rich-text-block.tsx +34 -34
- package/templates/nextjs/designs/atelier/ui/layout/site-footer.tsx.ejs +141 -141
- package/templates/nextjs/designs/atelier/ui/layout/site-header.tsx.ejs +138 -138
- package/templates/nextjs/designs/atelier/ui/product/customization-fields.tsx +466 -466
- package/templates/nextjs/designs/atelier/ui/product/discount-badge.tsx +17 -17
- package/templates/nextjs/designs/atelier/ui/product/frequently-bought-together.tsx +196 -196
- package/templates/nextjs/designs/atelier/ui/product/modifier-group-selector.tsx +193 -193
- package/templates/nextjs/designs/atelier/ui/product/price-display.tsx +69 -69
- package/templates/nextjs/designs/atelier/ui/product/product-card.tsx +13 -11
- package/templates/nextjs/designs/atelier/ui/product/product-client-section.tsx +477 -477
- package/templates/nextjs/designs/atelier/ui/product/product-grid.tsx +42 -42
- package/templates/nextjs/designs/atelier/ui/product/product-listing.tsx +260 -260
- package/templates/nextjs/designs/atelier/ui/product/recommendation-section.tsx +95 -95
- package/templates/nextjs/designs/atelier/ui/product/review-form.tsx +267 -267
- package/templates/nextjs/designs/atelier/ui/product/reviews-section.tsx.ejs +148 -148
- package/templates/nextjs/designs/atelier/ui/product/stock-badge.tsx +66 -66
- package/templates/nextjs/designs/atelier/ui/product/variant-selector.tsx +206 -206
- package/templates/nextjs/designs/atelier/ui/shared/cdn-image.tsx +29 -29
- package/templates/nextjs/designs/atelier/ui/shared/fly-to-cart.ts +86 -86
- package/templates/nextjs/designs/atelier/ui/shared/icons.tsx +276 -276
- package/templates/nextjs/designs/atelier/ui/shared/loading-spinner.tsx +63 -63
- package/templates/nextjs/designs/atelier/ui/shared/reveal.tsx +71 -71
- package/templates/nextjs/designs/atelier/ui/shared/select-menu.tsx +125 -125
- package/templates/nextjs/ui-canvas/cart/cart-bundle-offer.tsx +89 -89
- package/templates/nextjs/ui-canvas/cart/cart-item.tsx +123 -123
- package/templates/nextjs/ui-canvas/cart/cart-nudges.tsx +27 -27
- package/templates/nextjs/ui-canvas/cart/cart-summary.tsx +99 -99
- package/templates/nextjs/ui-canvas/cart/cart-upgrade-banner.tsx +105 -105
- package/templates/nextjs/ui-canvas/cart/cart-view.tsx +106 -106
- package/templates/nextjs/ui-canvas/cart/coupon-input.tsx +119 -119
- package/templates/nextjs/ui-canvas/cart/free-shipping-bar.tsx +54 -54
- package/templates/nextjs/ui-canvas/cart/reservation-countdown.tsx +81 -81
- package/templates/nextjs/ui-canvas/home/discount-banner-strip.tsx +19 -19
- package/templates/nextjs/ui-canvas/home/featured-products-section.tsx +23 -23
- package/templates/nextjs/ui-canvas/home/hero-section.tsx +21 -21
- package/templates/nextjs/ui-canvas/home/home-client.tsx +26 -26
- package/templates/nextjs/ui-canvas/layout/announcement-bar.tsx.ejs +101 -101
- package/templates/nextjs/ui-canvas/layout/faq-section.tsx.ejs +71 -71
- package/templates/nextjs/ui-canvas/layout/header-account.tsx +31 -31
- package/templates/nextjs/ui-canvas/layout/language-switcher.tsx.ejs +76 -76
- package/templates/nextjs/ui-canvas/layout/rich-text-block.tsx.ejs +36 -36
- package/templates/nextjs/ui-canvas/layout/site-footer.tsx.ejs +82 -82
- package/templates/nextjs/ui-canvas/layout/site-header.tsx.ejs +119 -119
- package/templates/nextjs/ui-canvas/product/customization-fields.tsx +445 -445
- package/templates/nextjs/ui-canvas/product/discount-badge.tsx +19 -19
- package/templates/nextjs/ui-canvas/product/frequently-bought-together.tsx +168 -168
- package/templates/nextjs/ui-canvas/product/modifier-group-selector.tsx +165 -165
- package/templates/nextjs/ui-canvas/product/price-display.tsx +52 -52
- package/templates/nextjs/ui-canvas/product/product-card.tsx +7 -2
- package/templates/nextjs/ui-canvas/product/product-client-section.tsx +352 -352
- package/templates/nextjs/ui-canvas/product/product-grid.tsx +27 -27
- package/templates/nextjs/ui-canvas/product/product-listing.tsx +224 -224
- package/templates/nextjs/ui-canvas/product/recommendation-section.tsx +99 -99
- package/templates/nextjs/ui-canvas/product/review-form.tsx +266 -266
- package/templates/nextjs/ui-canvas/product/reviews-section.tsx.ejs +96 -96
- package/templates/nextjs/ui-canvas/product/stock-badge.tsx +45 -45
- package/templates/nextjs/ui-canvas/product/variant-selector.tsx +212 -212
- package/templates/nextjs/ui-canvas/shared/cdn-image.tsx +31 -31
- package/templates/nextjs/ui-canvas/shared/loading-spinner.tsx +27 -27
- package/templates/nextjs/base/tsconfig.tsbuildinfo +0 -1
package/package.json
CHANGED
|
@@ -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
|
+
}
|