@decocms/start 0.19.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 (185) hide show
  1. package/.cursor/skills/deco-api-call-dedup/SKILL.md +443 -0
  2. package/.cursor/skills/deco-apps-architecture/SKILL.md +255 -0
  3. package/.cursor/skills/deco-apps-architecture/app-pattern.md +288 -0
  4. package/.cursor/skills/deco-apps-architecture/commerce-types.md +239 -0
  5. package/.cursor/skills/deco-apps-architecture/new-app-guide.md +268 -0
  6. package/.cursor/skills/deco-apps-architecture/scripts-codegen.md +148 -0
  7. package/.cursor/skills/deco-apps-architecture/shared-utils.md +181 -0
  8. package/.cursor/skills/deco-apps-architecture/vtex-deep-structure.md +253 -0
  9. package/.cursor/skills/deco-apps-architecture/website-app.md +169 -0
  10. package/.cursor/skills/deco-apps-vtex-porting/SKILL.md +189 -0
  11. package/.cursor/skills/deco-apps-vtex-porting/adaptation-patterns.md +335 -0
  12. package/.cursor/skills/deco-apps-vtex-porting/commerce-porting.md +155 -0
  13. package/.cursor/skills/deco-apps-vtex-porting/cookie-auth-patterns.md +148 -0
  14. package/.cursor/skills/deco-apps-vtex-porting/structure-map.md +234 -0
  15. package/.cursor/skills/deco-apps-vtex-porting/transform-mapping.md +99 -0
  16. package/.cursor/skills/deco-apps-vtex-porting/website-porting.md +194 -0
  17. package/.cursor/skills/deco-apps-vtex-review/SKILL.md +234 -0
  18. package/.cursor/skills/deco-async-rendering-architecture/SKILL.md +270 -0
  19. package/.cursor/skills/deco-async-rendering-site-guide/SKILL.md +417 -0
  20. package/.cursor/skills/deco-cms-layout-caching/SKILL.md +293 -0
  21. package/.cursor/skills/deco-cms-route-config/SKILL.md +388 -0
  22. package/.cursor/skills/deco-core-architecture/SKILL.md +185 -0
  23. package/.cursor/skills/deco-core-architecture/blocks.md +196 -0
  24. package/.cursor/skills/deco-core-architecture/deco-vs-deco-start.md +191 -0
  25. package/.cursor/skills/deco-core-architecture/engine.md +220 -0
  26. package/.cursor/skills/deco-core-architecture/hooks-components.md +157 -0
  27. package/.cursor/skills/deco-core-architecture/plugins-clients.md +136 -0
  28. package/.cursor/skills/deco-core-architecture/runtime.md +116 -0
  29. package/.cursor/skills/deco-core-architecture/site-usage.md +165 -0
  30. package/.cursor/skills/deco-e2e-testing/SKILL.md +372 -0
  31. package/.cursor/skills/deco-e2e-testing/discovery.md +337 -0
  32. package/.cursor/skills/deco-e2e-testing/scripts/scaffold.sh +81 -0
  33. package/.cursor/skills/deco-e2e-testing/selectors.md +175 -0
  34. package/.cursor/skills/deco-e2e-testing/templates/package.json +18 -0
  35. package/.cursor/skills/deco-e2e-testing/templates/playwright.config.ts +65 -0
  36. package/.cursor/skills/deco-e2e-testing/templates/scripts/baseline.ts +279 -0
  37. package/.cursor/skills/deco-e2e-testing/templates/scripts/run-e2e.ts +194 -0
  38. package/.cursor/skills/deco-e2e-testing/templates/specs/ecommerce-flow.spec.ts +612 -0
  39. package/.cursor/skills/deco-e2e-testing/templates/tsconfig.json +12 -0
  40. package/.cursor/skills/deco-e2e-testing/templates/utils/metrics-collector.ts +918 -0
  41. package/.cursor/skills/deco-e2e-testing/troubleshooting.md +602 -0
  42. package/.cursor/skills/deco-edge-caching/SKILL.md +316 -0
  43. package/.cursor/skills/deco-full-analysis/SKILL.md +898 -0
  44. package/.cursor/skills/deco-full-analysis/checklists/asset-optimization.md +251 -0
  45. package/.cursor/skills/deco-full-analysis/checklists/bug-fix.md +189 -0
  46. package/.cursor/skills/deco-full-analysis/checklists/cache-strategy.md +144 -0
  47. package/.cursor/skills/deco-full-analysis/checklists/dependency-update.md +150 -0
  48. package/.cursor/skills/deco-full-analysis/checklists/hydration-fix.md +191 -0
  49. package/.cursor/skills/deco-full-analysis/checklists/image-optimization.md +180 -0
  50. package/.cursor/skills/deco-full-analysis/checklists/loader-optimization.md +165 -0
  51. package/.cursor/skills/deco-full-analysis/checklists/seo-fix.md +183 -0
  52. package/.cursor/skills/deco-full-analysis/checklists/site-cleanup.md +281 -0
  53. package/.cursor/skills/deco-full-analysis/discovery.md +548 -0
  54. package/.cursor/skills/deco-incident-debugging/SKILL.md +378 -0
  55. package/.cursor/skills/deco-incident-debugging/headless-mode.md +510 -0
  56. package/.cursor/skills/deco-incident-debugging/learnings-index.md +227 -0
  57. package/.cursor/skills/deco-incident-debugging/triage-workflow.md +312 -0
  58. package/.cursor/skills/deco-islands-migration/SKILL.md +251 -0
  59. package/.cursor/skills/deco-loader-n-plus-1-detector/SKILL.md +275 -0
  60. package/.cursor/skills/deco-performance-audit/SKILL.md +530 -0
  61. package/.cursor/skills/deco-performance-audit/tools-reference.md +428 -0
  62. package/.cursor/skills/deco-performance-audit/workflow.md +457 -0
  63. package/.cursor/skills/deco-server-functions-invoke/SKILL.md +92 -0
  64. package/.cursor/skills/deco-server-functions-invoke/architecture.md +166 -0
  65. package/.cursor/skills/deco-server-functions-invoke/generator.md +122 -0
  66. package/.cursor/skills/deco-server-functions-invoke/problem.md +98 -0
  67. package/.cursor/skills/deco-server-functions-invoke/troubleshooting.md +110 -0
  68. package/.cursor/skills/deco-site-deployment/SKILL.md +396 -0
  69. package/.cursor/skills/deco-site-memory-debugging/SKILL.md +121 -0
  70. package/.cursor/skills/deco-site-memory-debugging/cdp-connection.md +222 -0
  71. package/.cursor/skills/deco-site-memory-debugging/memory-analysis.md +362 -0
  72. package/.cursor/skills/deco-site-patterns/SKILL.md +124 -0
  73. package/.cursor/skills/deco-site-patterns/app-composition.md +337 -0
  74. package/.cursor/skills/deco-site-patterns/client-patterns.md +341 -0
  75. package/.cursor/skills/deco-site-patterns/cms-wiring.md +230 -0
  76. package/.cursor/skills/deco-site-patterns/section-patterns.md +340 -0
  77. package/.cursor/skills/deco-site-scaling-tuning/SKILL.md +240 -0
  78. package/.cursor/skills/deco-site-scaling-tuning/analysis-scripts.md +267 -0
  79. package/.cursor/skills/deco-start-architecture/SKILL.md +218 -0
  80. package/.cursor/skills/deco-start-architecture/admin-protocol.md +156 -0
  81. package/.cursor/skills/deco-start-architecture/cms-resolution.md +201 -0
  82. package/.cursor/skills/deco-start-architecture/code-quality.md +158 -0
  83. package/.cursor/skills/deco-start-architecture/gap-analysis.md +129 -0
  84. package/.cursor/skills/deco-start-architecture/sdk-utilities.md +197 -0
  85. package/.cursor/skills/deco-start-architecture/worker-entry-caching.md +154 -0
  86. package/.cursor/skills/deco-startup-analysis/SKILL.md +248 -0
  87. package/.cursor/skills/deco-storefront-test-checklist/SKILL.md +369 -0
  88. package/.cursor/skills/deco-tanstack-hydration-fixes/SKILL.md +468 -0
  89. package/.cursor/skills/deco-tanstack-navigation/SKILL.md +681 -0
  90. package/.cursor/skills/deco-tanstack-search/SKILL.md +411 -0
  91. package/.cursor/skills/deco-tanstack-storefront-patterns/SKILL.md +1013 -0
  92. package/.cursor/skills/deco-to-tanstack-migration/SKILL.md +518 -0
  93. package/.cursor/skills/deco-to-tanstack-migration/references/codemod-commands.md +174 -0
  94. package/.cursor/skills/deco-to-tanstack-migration/references/commerce/README.md +78 -0
  95. package/.cursor/skills/deco-to-tanstack-migration/references/deco-framework/README.md +128 -0
  96. package/.cursor/skills/deco-to-tanstack-migration/references/gotchas.md +719 -0
  97. package/.cursor/skills/deco-to-tanstack-migration/references/imports/README.md +70 -0
  98. package/.cursor/skills/deco-to-tanstack-migration/references/platform-hooks/README.md +154 -0
  99. package/.cursor/skills/deco-to-tanstack-migration/references/signals/README.md +220 -0
  100. package/.cursor/skills/deco-to-tanstack-migration/references/vite-config/README.md +78 -0
  101. package/.cursor/skills/deco-to-tanstack-migration/templates/package-json.md +55 -0
  102. package/.cursor/skills/deco-to-tanstack-migration/templates/root-route.md +110 -0
  103. package/.cursor/skills/deco-to-tanstack-migration/templates/router.md +96 -0
  104. package/.cursor/skills/deco-to-tanstack-migration/templates/setup-ts.md +167 -0
  105. package/.cursor/skills/deco-to-tanstack-migration/templates/vite-config.md +122 -0
  106. package/.cursor/skills/deco-to-tanstack-migration/templates/worker-entry.md +67 -0
  107. package/.cursor/skills/deco-typescript-fixes/SKILL.md +178 -0
  108. package/.cursor/skills/deco-typescript-fixes/common-fixes.md +330 -0
  109. package/.cursor/skills/deco-typescript-fixes/strategy.md +148 -0
  110. package/.cursor/skills/deco-variant-selection-perf/SKILL.md +272 -0
  111. package/.cursor/skills/deco-vtex-fetch-cache/SKILL.md +225 -0
  112. package/.cursor/skills/find-skills/SKILL.md +133 -0
  113. package/.cursor/skills/incident-report/SKILL.md +179 -0
  114. package/.cursor/skills/incident-report/references/5-whys.md +75 -0
  115. package/.cursor/skills/incident-report/templates/client-report.md +187 -0
  116. package/.cursor/skills/incident-report/templates/internal-report.md +206 -0
  117. package/.cursor/skills/template-skill/SKILL.md +38 -0
  118. package/.github/workflows/release.yml +32 -0
  119. package/.releaserc.json +25 -0
  120. package/CLAUDE.md +135 -0
  121. package/GAP_ANALYSIS.md +224 -0
  122. package/GAP_ANALYSIS_V2.md +1013 -0
  123. package/biome.json +39 -0
  124. package/knip.json +5 -0
  125. package/package.json +87 -0
  126. package/scripts/generate-blocks.ts +69 -0
  127. package/scripts/generate-invoke.ts +378 -0
  128. package/scripts/generate-schema.ts +657 -0
  129. package/src/admin/cors.ts +29 -0
  130. package/src/admin/decofile.ts +72 -0
  131. package/src/admin/index.ts +24 -0
  132. package/src/admin/invoke.ts +163 -0
  133. package/src/admin/liveControls.ts +29 -0
  134. package/src/admin/meta.ts +70 -0
  135. package/src/admin/render.ts +205 -0
  136. package/src/admin/schema.ts +686 -0
  137. package/src/admin/setup.ts +44 -0
  138. package/src/cms/index.ts +59 -0
  139. package/src/cms/loader.ts +180 -0
  140. package/src/cms/registry.ts +162 -0
  141. package/src/cms/resolve.ts +1005 -0
  142. package/src/cms/sectionLoaders.ts +294 -0
  143. package/src/hooks/DecoPageRenderer.tsx +444 -0
  144. package/src/hooks/LazySection.tsx +109 -0
  145. package/src/hooks/LiveControls.tsx +108 -0
  146. package/src/hooks/SectionErrorFallback.tsx +85 -0
  147. package/src/hooks/index.ts +8 -0
  148. package/src/index.ts +5 -0
  149. package/src/matchers/builtins.ts +184 -0
  150. package/src/matchers/posthog.ts +154 -0
  151. package/src/middleware/decoState.ts +55 -0
  152. package/src/middleware/healthMetrics.ts +131 -0
  153. package/src/middleware/index.ts +80 -0
  154. package/src/middleware/liveness.ts +21 -0
  155. package/src/middleware/observability.ts +205 -0
  156. package/src/routes/adminRoutes.ts +83 -0
  157. package/src/routes/cmsRoute.ts +302 -0
  158. package/src/routes/components.tsx +34 -0
  159. package/src/routes/index.ts +15 -0
  160. package/src/sdk/analytics.ts +72 -0
  161. package/src/sdk/cacheHeaders.ts +268 -0
  162. package/src/sdk/cachedLoader.ts +206 -0
  163. package/src/sdk/clx.ts +3 -0
  164. package/src/sdk/cookie.ts +39 -0
  165. package/src/sdk/createInvoke.ts +57 -0
  166. package/src/sdk/csp.ts +59 -0
  167. package/src/sdk/env.ts +27 -0
  168. package/src/sdk/index.ts +63 -0
  169. package/src/sdk/instrumentedFetch.ts +137 -0
  170. package/src/sdk/invoke.ts +133 -0
  171. package/src/sdk/mergeCacheControl.ts +150 -0
  172. package/src/sdk/redirects.ts +217 -0
  173. package/src/sdk/requestContext.ts +184 -0
  174. package/src/sdk/serverTimings.ts +68 -0
  175. package/src/sdk/signal.ts +41 -0
  176. package/src/sdk/sitemap.ts +143 -0
  177. package/src/sdk/urlUtils.ts +117 -0
  178. package/src/sdk/useDevice.ts +82 -0
  179. package/src/sdk/useId.ts +7 -0
  180. package/src/sdk/useScript.ts +101 -0
  181. package/src/sdk/workerEntry.ts +703 -0
  182. package/src/sdk/wrapCaughtErrors.ts +107 -0
  183. package/src/types/index.ts +39 -0
  184. package/src/types/widgets.ts +13 -0
  185. package/tsconfig.json +13 -0
@@ -0,0 +1,369 @@
1
+ ---
2
+ name: deco-storefront-test-checklist
3
+ description: Generate a context-aware QA checklist for any Deco storefront by analyzing its sections, components, routes, and interactive patterns. Use when testing after migrations, upgrades, major refactors, or before deploying to production. Produces checklists scoped to the actual components in the site, not generic boilerplate.
4
+ ---
5
+
6
+ # Deco Storefront Test Checklist Generator
7
+
8
+ Generates a **context-aware** QA checklist by reading the site's actual component inventory, registered sections, interactive patterns, and route structure. The output is scoped to what exists — no phantom items for features the site doesn't have.
9
+
10
+ ## When to Use This Skill
11
+
12
+ - After a Fresh → TanStack migration
13
+ - After removing/refactoring islands
14
+ - After upgrading `@decocms/start` or `@decocms/apps`
15
+ - After changing caching configuration
16
+ - After modifying the section registry or resolution engine
17
+ - Before deploying a new version to production
18
+ - When onboarding a QA tester to a specific storefront
19
+
20
+ ## Step 1 — Discover the Site Inventory
21
+
22
+ Run these commands from the site root to build context. The checklist MUST be scoped to what actually exists.
23
+
24
+ ### 1.1 Registered Sections
25
+
26
+ ```bash
27
+ # Find setup file and list all registered sections
28
+ rg 'registerSections' src/ -l
29
+ # Then read the registration map to get every section key
30
+ rg '"site/sections/' src/setup.ts
31
+ ```
32
+
33
+ ### 1.2 Routes (Page Types)
34
+
35
+ ```bash
36
+ ls src/routes/
37
+ # Identify: home (index.tsx), catch-all ($.tsx), custom routes
38
+ ```
39
+
40
+ ### 1.3 Interactive Components
41
+
42
+ ```bash
43
+ # Components with client-side state
44
+ rg 'useState|useEffect|useCart|useUI|useSignal|displayCart|displayMenu' src/components/ --glob '*.{tsx,ts}' -l
45
+
46
+ # Components with event listeners (potential hydration issues)
47
+ rg 'addEventListener|onClick|onChange|onSubmit' src/components/ --glob '*.{tsx,ts}' -l
48
+
49
+ # Vanilla JS DOM access (fragile patterns)
50
+ rg 'document\.(getElementById|querySelector|querySelectorAll)' src/components/ --glob '*.{tsx,ts}' -l
51
+ ```
52
+
53
+ ### 1.4 Section Loaders
54
+
55
+ ```bash
56
+ rg 'registerSectionLoaders' src/setup.ts -A 20
57
+ ```
58
+
59
+ ### 1.5 External Integrations
60
+
61
+ ```bash
62
+ # VTEX calls
63
+ rg 'vtex|VTEX' src/lib/ src/hooks/ --glob '*.{tsx,ts}' -l
64
+
65
+ # Analytics
66
+ rg 'sendEvent|dataLayer|DECO.*events' src/ --glob '*.{tsx,ts}' -l
67
+
68
+ # Third-party (Trustvox, Autodesk, etc.)
69
+ rg 'trustvox|Autodesk|forge|instagram|whatsapp' src/ --glob '*.{tsx,ts}' -i -l
70
+ ```
71
+
72
+ ### 1.6 UI State Signals
73
+
74
+ ```bash
75
+ rg 'signal\(|useUI' src/sdk/ src/hooks/ --glob '*.{tsx,ts}'
76
+ ```
77
+
78
+ This reveals which drawers, modals, and popups are managed by signals (cart, menu, search, etc.).
79
+
80
+ ## Step 2 — Generate the Checklist
81
+
82
+ Using the inventory from Step 1, build the checklist below. **Only include sections that exist in the site.** Mark items with context from the actual file paths.
83
+
84
+ ---
85
+
86
+ ## Checklist Template
87
+
88
+ ### A. Server Startup & Build
89
+
90
+ | # | Test | How to Verify | Component/File |
91
+ |---|------|--------------|----------------|
92
+ | A1 | Dev server starts without errors | `npm run dev` — no red errors in terminal | `worker-entry.ts`, `setup.ts` |
93
+ | A2 | Production build succeeds | `npm run build` — exit code 0 | `vite.config.ts` |
94
+ | A3 | All sections register without warnings | Check terminal for `[DecoSection]` warnings | `setup.ts` |
95
+ | A4 | Section loaders resolve | No `undefined` loader errors in terminal | `setup.ts` → `registerSectionLoaders` |
96
+
97
+ ### B. Page Loading (per route)
98
+
99
+ For each route in `src/routes/`, verify:
100
+
101
+ | # | Test | How to Verify | Route |
102
+ |---|------|--------------|-------|
103
+ | B1 | Home page renders all sections | Visual inspection + DevTools console clean | `index.tsx` |
104
+ | B2 | PLP (category/search) renders product grid | Navigate to a category URL | `$.tsx` (catch-all) |
105
+ | B3 | PDP renders all product sections | Navigate to a product URL | `$.tsx` (catch-all) |
106
+ | B4 | Institutional pages render | Navigate to `/quem-somos` or similar | `$.tsx` (catch-all) |
107
+ | B5 | 404 page renders | Navigate to `/nonexistent-page-xyz` | `$.tsx` → `notFoundComponent` |
108
+ | B6 | House Catalog pages render | Navigate to a house catalog product | `$.tsx` (catch-all) |
109
+
110
+ ### C. Header
111
+
112
+ For sites with `sections/Header/Header.tsx`:
113
+
114
+ | # | Test | How to Verify | Component |
115
+ |---|------|--------------|-----------|
116
+ | C1 | Alert bar renders and slides | Visual — top banner rotates | `header/Alert.tsx` + `ui/SliderJS.tsx` |
117
+ | C2 | Menu button opens drawer (mobile) | Click hamburger icon | `header/Buttons/Menu.tsx` → `useUI().displayMenu` |
118
+ | C3 | Menu drawer closes with Escape | Press Escape while open | `ui/Drawer.tsx` → `window.addEventListener("keydown")` |
119
+ | C4 | Menu drawer closes on overlay click | Click dark overlay | `ui/Drawer.tsx` → `<label htmlFor={id}>` |
120
+ | C5 | Search opens popup/drawer | Click search icon | `header/Searchbar.tsx` → `useUI().displaySearchPopup` |
121
+ | C6 | Search returns results | Type a product name | `search/SearchBar.tsx` or `SearchbarNew.tsx` |
122
+ | C7 | Cart icon opens cart drawer | Click cart icon | `header/Buttons/Cart/common.tsx` → `useUI().displayCart` |
123
+ | C8 | Cart badge shows item count | Add item, check badge | `header/Buttons/Cart/vtex.tsx` → `useCart()` |
124
+ | C9 | Location modal opens | Click location icon | `header/Location.tsx` → `UserLocationModal` |
125
+ | C10 | Login/user icon works | Click user icon | `header/Navbar.tsx` → Login component |
126
+ | C11 | NavItems show mega-menu on hover | Hover over top-level nav | `header/NavItem.tsx` |
127
+
128
+ ### D. Sliders & Carousels
129
+
130
+ For every component that imports `SliderJS`:
131
+
132
+ | # | Test | How to Verify | Component |
133
+ |---|------|--------------|-----------|
134
+ | D1 | Previous/Next buttons work | Click arrows | `ui/SliderJS.tsx` → `prev/next addEventListener` |
135
+ | D2 | Dot indicators work | Click dots | `ui/SliderJS.tsx` → `dotHandlers[]` |
136
+ | D3 | Autoplay advances slides | Wait 3-5 seconds | `ui/SliderJS.tsx` → `setInterval(timeout)` |
137
+ | D4 | No listener memory leak | Navigate away and back, check Performance tab | `ui/SliderJS.tsx` → cleanup `return () => {}` |
138
+ | D5 | Intersection Observer triggers | Scroll to a slider, first visible slide is active | `ui/SliderJS.tsx` → `IntersectionObserver` |
139
+
140
+ **Apply to each slider instance:**
141
+ - Home banner carousel (`ui/BannerCarousel.tsx`, `ui/BannerClientSide.tsx`)
142
+ - Product shelf (`product/ProductShelf.tsx`, `ProductShelfTabbed.tsx`)
143
+ - Category list (`Category/CategoryList.tsx`)
144
+ - Testimonials, Cases de Sucesso, Client Logos
145
+ - Mini banners, Image double blocks
146
+ - Footer benefits
147
+
148
+ ### E. PDP — Product Detail Page
149
+
150
+ For sites with `ProductMain/ProductMain.tsx`:
151
+
152
+ | # | Test | How to Verify | Component |
153
+ |---|------|--------------|-----------|
154
+ | E1 | Product image gallery loads | Images visible, slider works | `Gallery/ImageSlider.tsx` |
155
+ | E2 | Image zoom works | Click/hover on main image | `ProductImageZoom.tsx` |
156
+ | E3 | Variant selector changes SKU | Click color/size chips | `ProductVariantSelector.tsx`, `SkuVariation.tsx` |
157
+ | E4 | Variant selector stays on same page | URL changes path only, no redirect to external domain | `SkuVariation.tsx` → `relative(product.url)` |
158
+ | E5 | Price updates on variant change | Select different SKU, price changes | `ProductMain.tsx` → price display |
159
+ | E6 | Add to Cart button works | Click "Comprar", cart drawer opens | `AddToCartButton/common.tsx` → `useCart().addItems` + `displayCart.value = true` |
160
+ | E7 | Add to Cart button shows loading | Click and observe spinner | `AddToCartButton/common.tsx` → `loading` state |
161
+ | E8 | Shipping simulation returns options | Type CEP, click "Calcular" | `ui/ShippingSimulation.tsx` → `useCart().simulate` |
162
+ | E9 | Shipping simulation doesn't append `/p?` | Check URL bar after calculating | No `f-partial` / `f-client-nav` attributes |
163
+ | E10 | Wishlist button toggles | Click heart icon | `wishlist/WishlistButton/common.tsx` |
164
+ | E11 | Share button opens modal | Click share icon | `SociaShareTrigger.tsx` → `SocialShareModal.tsx` |
165
+ | E12 | Payment methods display | Scroll to payment section | `ProductMain/components/PaymentMethods.tsx` |
166
+ | E13 | Trustvox stars render | Check star rating area | `TrustVox/ProductStars.tsx`, `TrustVox/Trustvox.tsx` |
167
+ | E14 | "Buy Together" renders (when available) | Product with cross-selling data | `BuyTogether/BuyTogether.tsx` |
168
+ | E15 | "Buy Together" handles missing data | Product without cross-selling | Guard `!buyTogetherPricesSimulation` |
169
+ | E16 | "Also bought" shelf renders | Scroll to recommendations | `ProductMain/components/ProductShelfAlso.tsx` |
170
+ | E17 | Breadcrumb links work | Click breadcrumb items | `ui/Breadcrumb.tsx` |
171
+ | E18 | Quantity selector works | Click +/- buttons | `ui/QuantitySelector.tsx` |
172
+ | E19 | Out of Stock message shows | Visit OOS product | `OutOfStock.tsx` |
173
+ | E20 | Download options work | If product has downloads | `DownloadOptions.tsx` |
174
+
175
+ ### F. Cart (Minicart)
176
+
177
+ For sites with `minicart/`:
178
+
179
+ | # | Test | How to Verify | Component |
180
+ |---|------|--------------|-----------|
181
+ | F1 | Cart drawer opens on add to cart | Add item, drawer slides in | `header/Drawers.tsx` → `CartDrawer` |
182
+ | F2 | Cart drawer closes on Escape | Press Escape | `ui/Drawer.tsx` → keydown handler |
183
+ | F3 | Cart drawer closes on overlay | Click overlay | `ui/Drawer.tsx` → label overlay |
184
+ | F4 | Cart items display correctly | Image, name, price, quantity | `minicart/common/CartItem.tsx` |
185
+ | F5 | Quantity can be changed | Click +/- in cart | `useCart().updateItems` |
186
+ | F6 | Item can be removed | Click X/trash | `useCart().removeItem` |
187
+ | F7 | Coupon can be applied | Type code, submit | `minicart/common/Coupon.tsx` → `useCart().addCouponsToCart` |
188
+ | F8 | Total updates on changes | Change quantity or remove | `minicart/common/Cart.tsx` |
189
+ | F9 | Free shipping bar progresses | Add items near threshold | `minicart/common/FreeShippingProgressBar.tsx` |
190
+ | F10 | Checkout button redirects | Click "Finalizar Compra" | Redirect to VTEX checkout |
191
+ | F11 | Cross-selling in cart shows | Products appear below items | `ProductCardCrossSelling.tsx` |
192
+
193
+ ### G. Search / PLP
194
+
195
+ For sites with `search/SearchResult.tsx`:
196
+
197
+ | # | Test | How to Verify | Component |
198
+ |---|------|--------------|-----------|
199
+ | G1 | Products display in grid | Category page shows cards | `search/SearchResult.tsx` |
200
+ | G2 | Filters work | Click a filter, results update | `search/Filters.tsx` |
201
+ | G3 | Sort dropdown works | Change order, results reorder | `search/Sort.tsx` |
202
+ | G4 | Pagination works | Click page 2 | `search/PageControls.tsx` |
203
+ | G5 | Price range filter works | Drag slider or type values | `search/PriceRange.tsx` |
204
+ | G6 | Search not found shows fallback | Search for "asdqwe123xyz" | `search/NotFound.tsx` → `SectionList` |
205
+ | G7 | Product cards are clickable | Click a product card | `product/ProductCard.tsx` |
206
+ | G8 | Discount flags display | Product with discount | `product/FlagDiscount.tsx` |
207
+ | G9 | Category SEO renders | Check meta tags | `Category/CategorySeo.tsx` |
208
+
209
+ ### H. Modals & Drawers (Signal-Based)
210
+
211
+ | # | Test | Signal | Component |
212
+ |---|------|--------|-----------|
213
+ | H1 | Cart drawer | `displayCart` | `ui/Drawer.tsx` |
214
+ | H2 | Menu drawer | `displayMenu` | `ui/Drawer.tsx` |
215
+ | H3 | Search popup | `displaySearchPopup` | Searchbar |
216
+ | H4 | Search drawer (mobile) | `displaySearchDrawer` | Searchbar mobile |
217
+ | H5 | Modal shelf product | `displayModalShelfProduct` | Product modal |
218
+ | H6 | Cookie consent | localStorage `store-cookie-consent` | `ui/CookieConsent.tsx` |
219
+
220
+ For each: verify opens, closes on Escape, closes on overlay/X, and **signal.value resets to false**.
221
+
222
+ ### I. Footer
223
+
224
+ For sites with `sections/Footer/Footer.tsx`:
225
+
226
+ | # | Test | How to Verify | Component |
227
+ |---|------|--------------|-----------|
228
+ | I1 | Newsletter email input works | Type email, submit | `footer/Newsletter.tsx` |
229
+ | I2 | Footer links render | All sections visible | `footer/FooterItems.tsx` |
230
+ | I3 | Social icons link correctly | Click, opens new tab | `footer/Social.tsx` |
231
+ | I4 | Payment methods display | Icons visible | `footer/PaymentMethods.tsx` |
232
+ | I5 | Benefits slider works | Arrows/dots | `footer/Benefits.tsx` + `ui/SliderJS.tsx` |
233
+ | I6 | Our Stores links work | Click a store | `footer/OurStores.tsx` |
234
+ | I7 | Back to top works | Click arrow, page scrolls | `footer/BackToTop.tsx` |
235
+
236
+ ### J. House Catalog (when present)
237
+
238
+ For sites with `product/HouseCatalog/`:
239
+
240
+ | # | Test | How to Verify | Component |
241
+ |---|------|--------------|-----------|
242
+ | J1 | ForgeViewer 3D loads | 3D model visible (if URN exists) | `ForgeViewer/ForgeViewer.tsx` |
243
+ | J2 | ForgeViewer fallback | "Não possui visualização 3D" message | `ForgeViewer.tsx` → `!urn` guard |
244
+ | J3 | SKU selector tabs work | Click different house types | `HouseCatalog/components/Sku/SkuSelector.tsx` |
245
+ | J4 | SKU image gallery | Slider of SKU images | `HouseCatalog/components/Sku/ImagesSku.tsx` |
246
+ | J5 | Memorial modal opens | Click memorial button | `HouseCatalog/components/Sku/ModalMemorial.tsx` |
247
+ | J6 | Comparative table opens | Click compare button | `HouseCatalog/components/ModalComparativeTable.tsx` |
248
+ | J7 | House info images | Slider works | `HouseCatalog/components/HouseInfos/ImagesHouseInfos.tsx` |
249
+ | J8 | Design section images | Slider works | `HouseCatalog/components/Design/ImagesDesign.tsx` |
250
+ | J9 | Cronograma images | Slider works | `HouseCatalog/components/CronogramaObra/ImagesCronograma.tsx` |
251
+ | J10 | Summary kit modal | Opens with correct data | `HouseCatalog/components/ModalSummaryKit.tsx` |
252
+ | J11 | Add to cart (house) | Adds full kit | `HouseCatalog/components/AddToCartButton.tsx` |
253
+
254
+ ### K. Institucional
255
+
256
+ For sites with `institucional/`:
257
+
258
+ | # | Test | How to Verify | Component |
259
+ |---|------|--------------|-----------|
260
+ | K1 | Stages of the Work wizard | Steps navigate correctly | `StagesOfTheWork/index.tsx` |
261
+ | K2 | Stages navigation buttons | Next/Previous work | `StagesOfTheWork/components/NavigationButtons.tsx` |
262
+ | K3 | Stages result renders | Final result page shows | `StagesOfTheWork/components/Result/Result.tsx` |
263
+ | K4 | Financing simulator | Steps and calculation work | `FinancingSimulator/index.tsx` |
264
+ | K5 | Cases de Sucesso slider | Slider works | `institucional/CasesDeSucesso.tsx` |
265
+ | K6 | Our Stores map/list | Stores display correctly | `institucional/OurStores.tsx` |
266
+ | K7 | FAQ accordion opens/closes | Click question, answer shows | Sections: `FaqAccordion.tsx` |
267
+ | K8 | Ready Project modal | Opens with project details | `product/ReadyProject/` |
268
+
269
+ ### L. Calculators
270
+
271
+ For sites with calculator sections:
272
+
273
+ | # | Test | How to Verify | Component |
274
+ |---|------|--------------|-----------|
275
+ | L1 | Shingle calculator | Input values, get result | `product/Calculators/ShingleCalculator/` |
276
+ | L2 | Forro Gesso calculator | Input values, get result | `product/Calculators/ForroGessoCalculator/` |
277
+ | L3 | Forro Modular calculator | Input values, get result | `product/Calculators/ForroModularCalculator/` |
278
+ | L4 | Calculator trigger button | Opens calculator overlay | `triggers/TriggerCalculadorasButton.tsx` |
279
+
280
+ ### M. Analytics & Tracking
281
+
282
+ | # | Test | How to Verify | Component |
283
+ |---|------|--------------|-----------|
284
+ | M1 | Page view fires | Check `dataLayer` or `DECO.events` on load | `Analytics.tsx` → `SendEventOnView` |
285
+ | M2 | Product click fires | Click product card, check events | `Analytics.tsx` → `SendEventOnClick` |
286
+ | M3 | Add to cart event fires | Add item, check `add_to_cart` event | `AddToCartButton/common.tsx` → `sendEvent` |
287
+ | M4 | View item event fires | PDP load, check `view_item` | Route loader analytics |
288
+
289
+ ### N. Console Health
290
+
291
+ | # | Test | What to Check |
292
+ |---|------|--------------|
293
+ | N1 | No `Element type is invalid` errors | Means a section failed to resolve |
294
+ | N2 | No `Invalid tag: site/sections/...` | Means nested section rendered as HTML tag |
295
+ | N3 | No `Cannot read properties of undefined` | Means loader data is missing guards |
296
+ | N4 | No hydration mismatch warnings | `Prop did not match. Server: ... Client: ...` |
297
+ | N5 | No `addEventListener` errors | Missing `window.` prefix or SSR execution |
298
+ | N6 | No `[DecoSection]` warnings | Section key not in registry |
299
+ | N7 | No CORS errors from admin | `/live/_meta`, `/.decofile` working |
300
+
301
+ ### O. Performance Sanity
302
+
303
+ | # | Test | How to Verify |
304
+ |---|------|--------------|
305
+ | O1 | No memory growth on SPA navigation | DevTools → Performance → Memory (navigate 10 pages) |
306
+ | O2 | Slider listeners clean up | Navigate away from page with slider, back, check listener count |
307
+ | O3 | No duplicate event listeners | Use `getEventListeners(element)` in DevTools |
308
+ | O4 | Cache working in production | Check `Cache-Control` headers, `CF-Cache-Status: HIT` |
309
+ | O5 | Lazy sections load on demand | Network tab shows chunk load when section enters viewport |
310
+
311
+ ---
312
+
313
+ ## Step 3 — Adapt to the Specific Site
314
+
315
+ After generating the base checklist:
316
+
317
+ 1. **Remove sections the site doesn't have** — If no HouseCatalog, remove section J entirely
318
+ 2. **Add site-specific sections** — Custom sections from `setup.ts` that aren't covered above
319
+ 3. **Check integrations** — If the site uses Shopify instead of VTEX, adapt cart/checkout tests
320
+ 4. **Note known issues** — Add items for bugs found in previous test rounds
321
+ 5. **Prioritize** — Mark critical path items (home → PLP → PDP → cart → checkout) as P0
322
+
323
+ ## Discovery Commands for Custom Sections
324
+
325
+ To find sections not covered by the template:
326
+
327
+ ```bash
328
+ # All registered sections
329
+ rg '"site/sections/' src/setup.ts | sed 's/.*"site\/sections\///' | sed 's/".*//' | sort
330
+
331
+ # Sections with loaders (higher risk)
332
+ rg 'export const loader' src/sections/ --glob '*.tsx' -l
333
+
334
+ # Sections with client state (interactive)
335
+ rg 'useState|useEffect' src/sections/ --glob '*.tsx' -l
336
+
337
+ # Sections importing SliderJS (slider tests needed)
338
+ rg 'SliderJS' src/sections/ src/components/ --glob '*.tsx' -l
339
+ ```
340
+
341
+ ## Automation Hooks
342
+
343
+ For sites with CI/CD, these checks can be automated:
344
+
345
+ ```bash
346
+ # Build check
347
+ npm run build && echo "PASS: Build" || echo "FAIL: Build"
348
+
349
+ # Console error check (requires headless browser)
350
+ # Use with deco-e2e-testing skill for full automation
351
+
352
+ # Section registry completeness
353
+ node -e "
354
+ const setup = require('./src/setup.ts');
355
+ // Compare registered sections vs section files on disk
356
+ "
357
+ ```
358
+
359
+ ## Related Skills
360
+
361
+ | Skill | Purpose |
362
+ |-------|---------|
363
+ | `deco-to-tanstack-migration` | Full migration playbook (imports, signals, architecture) |
364
+ | `deco-tanstack-navigation` | SPA navigation patterns (`<a>` → `<Link>`, `useNavigate`, `loaderDeps`, forms) |
365
+ | `deco-tanstack-storefront-patterns` | Runtime fixes post-migration (nested sections, caching, SliderJS, async_hooks, cart, server functions) |
366
+ | `deco-islands-migration` | Islands removal guide with its own verification checklist |
367
+ | `deco-e2e-testing` | Automated e2e performance tests with lazy section tracking |
368
+ | `deco-full-analysis` | Full site analysis with 9 optimization checklists |
369
+ | `deco-startup-analysis` | Analyze startup logs for issues before testing |