@wix/agent-skills 1.15.0 → 1.16.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 (355) hide show
  1. package/README.md +5 -1
  2. package/package.json +1 -1
  3. package/skills/wix-app/SKILL.md +4 -1
  4. package/skills/wix-app/references/APP_TOOLS.md +134 -0
  5. package/skills/wix-app/references/CUSTOM_ELEMENT_WIDGET.md +1 -1
  6. package/skills/wix-app/references/DASHBOARD_PAGE.md +0 -10
  7. package/skills/wix-app/references/DATA_COLLECTION.md +6 -4
  8. package/skills/wix-app/references/EDITOR_REACT_COMPONENT.md +28 -7
  9. package/skills/wix-app/references/SERVICE_PLUGIN.md +12 -10
  10. package/skills/wix-app/references/STORES_VERSIONING.md +9 -211
  11. package/skills/wix-app/references/app-tools/TOOLS.md +75 -0
  12. package/skills/wix-app/references/backend-event/COMMON-EVENTS.md +5 -0
  13. package/skills/wix-app/references/dashboard-page/DASHBOARD_API.md +2 -2
  14. package/skills/wix-app/references/editor-react-component/A11Y-REVIEW-REFERENCE.md +172 -0
  15. package/skills/wix-app/references/editor-react-component/A11Y-REVIEW.md +138 -0
  16. package/skills/wix-app/references/editor-react-component/ANIMATED-COMPONENTS.md +172 -0
  17. package/skills/wix-app/references/editor-react-component/BRANDED-COMPONENTS.md +29 -0
  18. package/skills/wix-app/references/editor-react-component/COMPONENT-API.md +1 -1
  19. package/skills/wix-app/references/editor-react-component/COMPONENT-PREVIEW.md +57 -0
  20. package/skills/wix-app/references/editor-react-component/CSS-GUIDELINES.md +33 -2
  21. package/skills/wix-app/references/editor-react-component/DESIGN-STATES.md +5 -3
  22. package/skills/wix-app/references/editor-react-component/DIRECTIONALITY.md +18 -1
  23. package/skills/wix-app/references/editor-react-component/PARTS.md +15 -2
  24. package/skills/wix-app/references/editor-react-component/REACT-GUIDELINES.md +4 -3
  25. package/skills/wix-app/references/service-plugin/BOOKINGS-STAFF-SORTING.md +13 -9
  26. package/skills/wix-app/references/service-plugin/DISCOUNT-TRIGGERS.md +4 -0
  27. package/skills/wix-app/references/service-plugin/GIFT-CARDS.md +4 -0
  28. package/skills/wix-app/references/service-plugin/PAYMENT-SETTINGS.md +3 -1
  29. package/skills/wix-app/references/service-plugin/SHIPPING-RATES.md +4 -0
  30. package/skills/wix-app/references/service-plugin/TOOLS_PROVIDER.md +54 -0
  31. package/skills/wix-app/references/stores/CATEGORIES.md +22 -0
  32. package/skills/wix-app/references/stores/GET_PRODUCT.md +99 -0
  33. package/skills/wix-app/references/stores/INVENTORY.md +37 -0
  34. package/skills/wix-app/references/stores/QUERY.md +119 -0
  35. package/skills/wix-app/references/stores/WRITE.md +55 -0
  36. package/skills/wix-docs/SKILL.md +35 -3
  37. package/skills/wix-headless/SKILL.md +9 -2
  38. package/skills/wix-headless/entry/bootstrap.mjs +2 -2
  39. package/skills/wix-headless/entry/skill.md +0 -2
  40. package/skills/wix-headless/references/CAPABILITIES.md +6 -4
  41. package/skills/wix-headless/references/CONTENT.md +36 -0
  42. package/skills/wix-headless/references/DESIGN.md +54 -0
  43. package/skills/wix-headless/references/DISCOVERY.md +25 -1
  44. package/skills/wix-headless/references/FEEDBACK.md +16 -5
  45. package/skills/wix-headless/references/IMAGE_GENERATION.md +10 -0
  46. package/skills/wix-headless/references/SDK_HANDOFF.md +2 -0
  47. package/skills/wix-headless/references/SEED.md +3 -1
  48. package/skills/wix-headless/references/SETUP.md +1 -1
  49. package/skills/wix-headless/references/inline-recipes/how-to-code-a-store.md +3 -2
  50. package/skills/wix-headless/references/inline-recipes/how-to-code-restaurant-reservations.md +42 -2
  51. package/skills/wix-headless/references/inline-recipes/setup-bookings.md +5 -1
  52. package/skills/wix-headless/references/inline-recipes/setup-forms.md +1 -1
  53. package/skills/wix-headless/references/inline-recipes/setup-online-store.md +33 -8
  54. package/skills/wix-headless/references/inline-recipes/setup-portfolio.md +3 -1
  55. package/skills/wix-headless/references/inline-recipes/setup-restaurant-experiences.md +73 -0
  56. package/skills/wix-headless/references/inline-recipes/setup-restaurant-orders.md +38 -2
  57. package/skills/wix-headless/references/inline-recipes/setup-restaurant-reservations.md +20 -1
  58. package/skills/wix-headless/references/inline-recipes/setup-restaurants.md +1 -1
  59. package/skills/wix-headless/references/managed/CONNECT.md +2 -2
  60. package/skills/wix-headless/references/managed/CREATE.md +15 -1
  61. package/skills/wix-headless/references/managed/DEPLOYMENT.md +47 -0
  62. package/skills/wix-headless/references/self-managed/DEPLOYMENT.md +8 -0
  63. package/skills/wix-headless/references/stripe/DEPLOYMENT.md +8 -0
  64. package/skills/wix-manage/SKILL.md +131 -12
  65. package/skills/wix-manage/references/analytics/analytics-dashboard-navigation.md +41 -0
  66. package/skills/wix-manage/references/analytics/query-site-analytics.md +66 -9
  67. package/skills/wix-manage/references/app-installation/app-installation-dashboard-navigation.md +28 -0
  68. package/skills/wix-manage/references/app-installation/install-wix-apps.md +3 -0
  69. package/skills/wix-manage/references/blog/blog-dashboard-navigation.md +56 -0
  70. package/skills/wix-manage/references/blog/how-to-create-blog-posts.md +31 -6
  71. package/skills/wix-manage/references/bookings/booking-service-policy-setup.md +3 -1
  72. package/skills/wix-manage/references/bookings/bookings-dashboard-navigation.md +63 -0
  73. package/skills/wix-manage/references/bookings/create-booking-service-from-prompt.md +6 -5
  74. package/skills/wix-manage/references/bookings/create-course-service.md +30 -5
  75. package/skills/wix-manage/references/bookings/diagnose-availability-issues.md +85 -42
  76. package/skills/wix-manage/references/cms/cms-dashboard-navigation.md +44 -0
  77. package/skills/wix-manage/references/cms/cms-data-items-crud.md +31 -3
  78. package/skills/wix-manage/references/cms/cms-publishing-flow.md +287 -0
  79. package/skills/wix-manage/references/cms/cms-schema-management.md +33 -1
  80. package/skills/wix-manage/references/contacts/contacts-dashboard-navigation.md +46 -0
  81. package/skills/wix-manage/references/contacts/create-a-contact.md +82 -0
  82. package/skills/wix-manage/references/contacts/update-a-contact.md +119 -0
  83. package/skills/wix-manage/references/dashboard-navigation/dashboard-navigation.md +82 -0
  84. package/skills/wix-manage/references/dashboard-navigation/routes.json +1733 -0
  85. package/skills/wix-manage/references/domains/domains-dashboard-navigation.md +32 -0
  86. package/skills/wix-manage/references/ecommerce/ecom-pricing.md +4 -4
  87. package/skills/wix-manage/references/ecommerce/ecom-shipping.md +1 -1
  88. package/skills/wix-manage/references/ecommerce/gift-cards/ecom-gift-cards-goal-sell-gift-cards.md +338 -0
  89. package/skills/wix-manage/references/ecommerce/pricing-promotions/ecom-pricing-create-discount-rule.md +42 -78
  90. package/skills/wix-manage/references/ecommerce/pricing-promotions/ecom-pricing-flow-bundle-and-save.md +1 -1
  91. package/skills/wix-manage/references/ecommerce/pricing-promotions/ecom-pricing-flow-stock-mover.md +1 -1
  92. package/skills/wix-manage/references/ecommerce/pricing-promotions/ecom-pricing-flow-upsell-boost.md +1 -1
  93. package/skills/wix-manage/references/ecommerce/recommend-ecommerce-strategy.md +90 -92
  94. package/skills/wix-manage/references/events/create-wix-event.md +176 -0
  95. package/skills/wix-manage/references/events/manage-wix-events.md +174 -0
  96. package/skills/wix-manage/references/forms/forms-dashboard-navigation.md +44 -0
  97. package/skills/wix-manage/references/get-paid/get-paid-dashboard-navigation.md +52 -0
  98. package/skills/wix-manage/references/get-paid/how-to-setup-wix-payments.md +30 -7
  99. package/skills/wix-manage/references/google-ads/billing-and-payment.md +80 -0
  100. package/skills/wix-manage/references/google-ads/create-performance-max-campaign.md +212 -0
  101. package/skills/wix-manage/references/google-ads/get-campaign-suggestions.md +110 -0
  102. package/skills/wix-manage/references/google-ads/google-ads-dashboard-navigation.md +25 -0
  103. package/skills/wix-manage/references/google-ads/install-and-create-account.md +155 -0
  104. package/skills/wix-manage/references/google-ads/manage-campaign-lifecycle.md +63 -0
  105. package/skills/wix-manage/references/google-ads/query-campaign-analytics.md +155 -0
  106. package/skills/wix-manage/references/marketing/create-and-publish-social-post.md +225 -144
  107. package/skills/wix-manage/references/marketing/generate-and-publish-marketing-plan.md +19 -10
  108. package/skills/wix-manage/references/marketing/marketing-dashboard-navigation.md +52 -0
  109. package/skills/wix-manage/references/pricing-plans/create-and-update-pricing-plans.md +99 -1
  110. package/skills/wix-manage/references/pricing-plans/pricing-plans-dashboard-navigation.md +45 -0
  111. package/skills/wix-manage/references/restaurants/restaurants-dashboard-navigation.md +68 -0
  112. package/skills/wix-manage/references/restaurants/wix-restaurants-setup.md +94 -125
  113. package/skills/wix-manage/references/site-properties/change-payment-currency-site-properties.md +48 -9
  114. package/skills/wix-manage/references/site-properties/site-properties-dashboard-navigation.md +31 -0
  115. package/skills/wix-manage/references/sites/create-headless-site.md +52 -0
  116. package/skills/wix-manage/references/sites/create-site-from-template.md +2 -25
  117. package/skills/wix-manage/references/sites/site-import.md +243 -0
  118. package/skills/wix-manage/references/sites/sites-dashboard-navigation.md +29 -0
  119. package/skills/wix-manage/references/stores/add-store-pages-to-site.md +17 -1
  120. package/skills/wix-manage/references/stores/create-product-from-image.md +8 -6
  121. package/skills/wix-manage/references/stores/create-product-with-options-catalog-v3.md +16 -10
  122. package/skills/wix-manage/references/stores/find-products-query-and-search-catalog-v3.md +26 -8
  123. package/skills/wix-manage/references/stores/stores-dashboard-navigation.md +65 -0
  124. package/skills/wix-manage/references/stores/update-product-with-options.md +39 -7
  125. package/skills/wix-replatform/.publish-manifest.json +8 -0
  126. package/skills/wix-replatform/SKILL.md +693 -0
  127. package/skills/wix-replatform/lib/artifact-freshness.js +215 -0
  128. package/skills/wix-replatform/lib/completion-report.js +200 -0
  129. package/skills/wix-replatform/lib/config-env.js +59 -0
  130. package/skills/wix-replatform/lib/execution-manifest.js +185 -0
  131. package/skills/wix-replatform/lib/execution-state.js +173 -0
  132. package/skills/wix-replatform/lib/import-recovery.js +313 -0
  133. package/skills/wix-replatform/lib/local-state.js +642 -0
  134. package/skills/wix-replatform/lib/orchestration-preflight.js +143 -0
  135. package/skills/wix-replatform/lib/orchestration-router.js +122 -0
  136. package/skills/wix-replatform/lib/orchestration-state.js +455 -0
  137. package/skills/wix-replatform/lib/progress-log.js +224 -0
  138. package/skills/wix-replatform/lib/progress-log.sh +140 -0
  139. package/skills/wix-replatform/lib/url-preservation-state.js +391 -0
  140. package/skills/wix-replatform/resources/rp-discovery/SKILL.md +184 -0
  141. package/skills/wix-replatform/resources/rp-execute-import/SKILL.md +529 -0
  142. package/skills/wix-replatform/resources/rp-execute-setup/SKILL.md +316 -0
  143. package/skills/wix-replatform/resources/rp-execute-setup/scripts/mint-token.sh +64 -0
  144. package/skills/wix-replatform/resources/rp-import-codegen/SKILL.md +1114 -0
  145. package/skills/wix-replatform/resources/rp-mapper/SKILL.md +430 -0
  146. package/skills/wix-replatform/resources/rp-mapper/lib/mapping-resolve.js +217 -0
  147. package/skills/wix-replatform/resources/rp-mapper/scripts/resolve-mapping.js +148 -0
  148. package/skills/wix-replatform/resources/rp-mapper/wix-business-solutions-taxonomy.md +378 -0
  149. package/skills/wix-replatform/resources/rp-setup-discovery/SKILL.md +183 -0
  150. package/skills/wix-replatform/resources/rp-source-csv/SKILL.md +478 -0
  151. package/skills/wix-replatform/resources/rp-source-csv/lib/canonical-record.js +136 -0
  152. package/skills/wix-replatform/resources/rp-source-csv/lib/csv-fileset.js +0 -0
  153. package/skills/wix-replatform/resources/rp-source-csv/lib/csv-fingerprint.js +310 -0
  154. package/skills/wix-replatform/resources/rp-source-csv/lib/csv-layout.js +1081 -0
  155. package/skills/wix-replatform/resources/rp-source-csv/lib/csv-parse.js +618 -0
  156. package/skills/wix-replatform/resources/rp-source-csv/scripts/csv-discovery.js +949 -0
  157. package/skills/wix-replatform/resources/rp-source-csv/source-schema.example.json +196 -0
  158. package/skills/wix-replatform/resources/rp-source-csv/vendors/bigcommerce.json +66 -0
  159. package/skills/wix-replatform/resources/rp-source-csv/vendors/magento.json +60 -0
  160. package/skills/wix-replatform/resources/rp-source-csv/vendors/shopify.json +95 -0
  161. package/skills/wix-replatform/resources/rp-source-csv/vendors/woocommerce.json +82 -0
  162. package/skills/wix-replatform/resources/rp-source-wordpress/SKILL.md +256 -0
  163. package/skills/wix-replatform/resources/rp-source-wordpress/lib/wp-http.js +249 -0
  164. package/skills/wix-replatform/resources/rp-source-wordpress/lib/wp-route-classifier.js +444 -0
  165. package/skills/wix-replatform/resources/rp-source-wordpress/scripts/wp-discovery.js +774 -0
  166. package/skills/wix-replatform/resources/rp-source-wordpress/source-schema.example.json +71 -0
  167. package/skills/wix-replatform/resources/rp-target-wix/SKILL.md +632 -0
  168. package/skills/wix-replatform/resources/rp-target-wix/SPEC-product-reviews-and-blog-authorship.md +330 -0
  169. package/skills/wix-replatform/resources/rp-target-wix/domains/README.md +21 -0
  170. package/skills/wix-replatform/resources/rp-target-wix/domains/blog/domain.json +19 -0
  171. package/skills/wix-replatform/resources/rp-target-wix/domains/blog/entities/category.json +37 -0
  172. package/skills/wix-replatform/resources/rp-target-wix/domains/blog/entities/comment.json +37 -0
  173. package/skills/wix-replatform/resources/rp-target-wix/domains/blog/entities/post.json +39 -0
  174. package/skills/wix-replatform/resources/rp-target-wix/domains/blog/entities/tag.json +35 -0
  175. package/skills/wix-replatform/resources/rp-target-wix/domains/cms/domain.json +14 -0
  176. package/skills/wix-replatform/resources/rp-target-wix/domains/cms/entities/collection.json +35 -0
  177. package/skills/wix-replatform/resources/rp-target-wix/domains/cms/entities/data-item.json +36 -0
  178. package/skills/wix-replatform/resources/rp-target-wix/domains/cms/entities/reference.json +35 -0
  179. package/skills/wix-replatform/resources/rp-target-wix/domains/crm/domain.json +14 -0
  180. package/skills/wix-replatform/resources/rp-target-wix/domains/crm/entities/contact.json +131 -0
  181. package/skills/wix-replatform/resources/rp-target-wix/domains/crm/entities/email-subscription.json +37 -0
  182. package/skills/wix-replatform/resources/rp-target-wix/domains/crm/entities/label.json +37 -0
  183. package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/domain.json +21 -0
  184. package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/order-line-item.json +37 -0
  185. package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/order-refund.json +37 -0
  186. package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/order.json +97 -0
  187. package/skills/wix-replatform/resources/rp-target-wix/domains/index.json +528 -0
  188. package/skills/wix-replatform/resources/rp-target-wix/domains/media/domain.json +14 -0
  189. package/skills/wix-replatform/resources/rp-target-wix/domains/media/entities/media-file.json +38 -0
  190. package/skills/wix-replatform/resources/rp-target-wix/domains/media/entities/media-folder.json +37 -0
  191. package/skills/wix-replatform/resources/rp-target-wix/domains/members/domain.json +13 -0
  192. package/skills/wix-replatform/resources/rp-target-wix/domains/members/entities/badge.json +37 -0
  193. package/skills/wix-replatform/resources/rp-target-wix/domains/members/entities/member.json +53 -0
  194. package/skills/wix-replatform/resources/rp-target-wix/domains/schema.json +84 -0
  195. package/skills/wix-replatform/resources/rp-target-wix/domains/stores/domain.json +25 -0
  196. package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/category.json +37 -0
  197. package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/coupon.json +37 -0
  198. package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/inventory-item.json +38 -0
  199. package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/product-tag.json +37 -0
  200. package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/product.json +90 -0
  201. package/skills/wix-replatform/resources/rp-target-wix/lib/audit-summary.js +64 -0
  202. package/skills/wix-replatform/resources/rp-target-wix/lib/contract-ledger.js +141 -0
  203. package/skills/wix-replatform/resources/rp-target-wix/lib/domain-knowledge.js +384 -0
  204. package/skills/wix-replatform/resources/rp-target-wix/lib/ndjson.js +260 -0
  205. package/skills/wix-replatform/resources/rp-target-wix/lib/stores-verification.js +238 -0
  206. package/skills/wix-replatform/resources/rp-target-wix/lib/wix-build.js +237 -0
  207. package/skills/wix-replatform/resources/rp-target-wix/lib/wix-target-spec.js +238 -0
  208. package/skills/wix-replatform/resources/rp-target-wix/lib/wix-writers.js +2219 -0
  209. package/skills/wix-replatform/resources/rp-target-wix/scripts/domain-knowledge-validate.js +31 -0
  210. package/skills/wix-replatform/resources/rp-target-wix/scripts/domain-knowledge.js +100 -0
  211. package/skills/wix-replatform/resources/rp-target-wix/scripts/verify-stores.js +107 -0
  212. package/skills/wix-replatform/resources/rp-telemetry/SKILL.md +344 -0
  213. package/skills/wix-replatform/resources/rp-telemetry/lib/bi-sink.js +250 -0
  214. package/skills/wix-replatform/resources/rp-telemetry/lib/telemetry-recorder.js +1927 -0
  215. package/skills/wix-replatform/resources/rp-telemetry/scripts/meter-from-audit.js +83 -0
  216. package/skills/wix-replatform/resources/rp-telemetry/scripts/rp-telemetry.js +141 -0
  217. package/skills/wix-replatform/scripts/artifact-freshness.js +76 -0
  218. package/skills/wix-replatform/scripts/execution-manifest-validate.js +43 -0
  219. package/skills/wix-replatform/scripts/execution-state-prepare.js +128 -0
  220. package/skills/wix-replatform/scripts/orchestration-preflight.js +48 -0
  221. package/skills/wix-replatform/scripts/orchestration-route.js +46 -0
  222. package/skills/wix-replatform/scripts/orchestration-state.js +245 -0
  223. package/skills/wix-vibe-headless/SKILL.md +54 -25
  224. package/skills/wix-vibe-headless/install/deploy.cjs +95 -0
  225. package/skills/wix-vibe-headless/install/pin-agents-md.cjs +34 -0
  226. package/skills/wix-vibe-headless/platforms/README.md +26 -0
  227. package/skills/wix-vibe-headless/platforms/base44.md +177 -0
  228. package/skills/wix-vibe-headless/platforms/generic.md +122 -0
  229. package/skills/wix-vibe-headless/references/blog/INSTRUCTIONS.md +230 -119
  230. package/skills/wix-vibe-headless/references/blog/app/components/PostCard.jsx +43 -0
  231. package/skills/wix-vibe-headless/references/blog/app/components/PostChips.jsx +25 -0
  232. package/skills/wix-vibe-headless/references/blog/app/components/PostGrid.jsx +15 -0
  233. package/skills/wix-vibe-headless/references/blog/app/context/TaxonomyContext.jsx +35 -0
  234. package/skills/wix-vibe-headless/references/blog/app/hooks/usePostDetail.js +38 -0
  235. package/skills/wix-vibe-headless/references/blog/app/pages/Blog.jsx +40 -0
  236. package/skills/wix-vibe-headless/references/blog/app/pages/CategoryPage.jsx +54 -0
  237. package/skills/wix-vibe-headless/references/blog/app/pages/PostDetail.jsx +65 -0
  238. package/skills/wix-vibe-headless/references/blog/app/pages/TagPage.jsx +50 -0
  239. package/skills/wix-vibe-headless/references/blog/seed/SEED.md +103 -0
  240. package/skills/wix-vibe-headless/references/blog/seed/seed-blog.js +270 -0
  241. package/skills/wix-vibe-headless/references/bookings/INSTRUCTIONS.md +260 -145
  242. package/skills/wix-vibe-headless/references/bookings/app/components/BookingForm.jsx +65 -0
  243. package/skills/wix-vibe-headless/references/bookings/app/components/ServiceCard.jsx +47 -0
  244. package/skills/wix-vibe-headless/references/bookings/app/components/ServiceGrid.jsx +13 -0
  245. package/skills/wix-vibe-headless/references/bookings/app/components/SlotPicker.jsx +126 -0
  246. package/skills/wix-vibe-headless/references/bookings/app/hooks/useServiceDetail.js +108 -0
  247. package/skills/wix-vibe-headless/references/bookings/app/hooks/useServices.js +58 -0
  248. package/skills/wix-vibe-headless/references/bookings/app/lib/serviceFacts.js +95 -0
  249. package/skills/wix-vibe-headless/references/bookings/app/pages/ServiceDetail.jsx +94 -0
  250. package/skills/wix-vibe-headless/references/bookings/app/pages/Services.jsx +89 -0
  251. package/skills/wix-vibe-headless/references/bookings/{wix-bookings-checkout.js → app/rest/wix-bookings-checkout.js} +1 -1
  252. package/skills/wix-vibe-headless/references/bookings/{wix-bookings-services.js → app/rest/wix-bookings-services.js} +90 -12
  253. package/skills/wix-vibe-headless/references/bookings/seed/SEED.md +117 -0
  254. package/skills/wix-vibe-headless/references/bookings/seed/seed-bookings.js +333 -0
  255. package/skills/wix-vibe-headless/references/cms/INSTRUCTIONS.md +169 -147
  256. package/skills/wix-vibe-headless/references/cms/app/collection.config.js +31 -0
  257. package/skills/wix-vibe-headless/references/cms/app/lib/wixImage.js +18 -0
  258. package/skills/wix-vibe-headless/references/cms/{wix-cms.js → app/rest/wix-cms.js} +47 -2
  259. package/skills/wix-vibe-headless/references/cms/seed/SEED.md +145 -0
  260. package/skills/wix-vibe-headless/references/events/INSTRUCTIONS.md +228 -131
  261. package/skills/wix-vibe-headless/references/events/app/components/CategoryFilter.jsx +23 -0
  262. package/skills/wix-vibe-headless/references/events/app/components/EventCard.jsx +43 -0
  263. package/skills/wix-vibe-headless/references/events/app/components/EventGrid.jsx +13 -0
  264. package/skills/wix-vibe-headless/references/events/app/components/EventRegistration.jsx +29 -0
  265. package/skills/wix-vibe-headless/references/events/app/components/RsvpForm.jsx +57 -0
  266. package/skills/wix-vibe-headless/references/events/app/components/TicketPicker.jsx +78 -0
  267. package/skills/wix-vibe-headless/references/events/app/hooks/useEventDetail.js +27 -0
  268. package/skills/wix-vibe-headless/references/events/app/hooks/useEventsList.js +54 -0
  269. package/skills/wix-vibe-headless/references/events/app/hooks/useRsvpForm.js +40 -0
  270. package/skills/wix-vibe-headless/references/events/app/hooks/useTicketing.js +81 -0
  271. package/skills/wix-vibe-headless/references/events/app/pages/EventDetail.jsx +48 -0
  272. package/skills/wix-vibe-headless/references/events/app/pages/Events.jsx +36 -0
  273. package/skills/wix-vibe-headless/references/events/{wix-events-browse.js → app/rest/wix-events-browse.js} +3 -2
  274. package/skills/wix-vibe-headless/references/events/seed/SEED.md +107 -0
  275. package/skills/wix-vibe-headless/references/events/seed/seed-events.js +251 -0
  276. package/skills/wix-vibe-headless/references/members/INSTRUCTIONS.md +276 -188
  277. package/skills/wix-vibe-headless/references/members/app/components/LoginForm.jsx +101 -0
  278. package/skills/wix-vibe-headless/references/members/app/components/MemberMenu.jsx +33 -0
  279. package/skills/wix-vibe-headless/references/members/app/components/RequireAuth.jsx +21 -0
  280. package/skills/wix-vibe-headless/references/members/app/components/SocialButtons.jsx +29 -0
  281. package/skills/wix-vibe-headless/references/members/app/context/MemberContext.jsx +54 -0
  282. package/skills/wix-vibe-headless/references/members/app/hooks/useLoginForm.js +77 -0
  283. package/skills/wix-vibe-headless/references/members/app/pages/Account.jsx +36 -0
  284. package/skills/wix-vibe-headless/references/members/app/pages/Callback.jsx +32 -0
  285. package/skills/wix-vibe-headless/references/members/app/pages/Login.jsx +35 -0
  286. package/skills/wix-vibe-headless/references/members/{wix-members-auth.js → app/rest/wix-members-auth.js} +6 -3
  287. package/skills/wix-vibe-headless/references/members/install/Register.jsx +22 -0
  288. package/skills/wix-vibe-headless/references/members/seed/SEED.md +22 -0
  289. package/skills/wix-vibe-headless/references/portfolio/INSTRUCTIONS.md +233 -104
  290. package/skills/wix-vibe-headless/references/portfolio/app/components/CollectionCard.jsx +31 -0
  291. package/skills/wix-vibe-headless/references/portfolio/app/components/CollectionGrid.jsx +15 -0
  292. package/skills/wix-vibe-headless/references/portfolio/app/components/ProjectCard.jsx +39 -0
  293. package/skills/wix-vibe-headless/references/portfolio/app/components/ProjectGrid.jsx +15 -0
  294. package/skills/wix-vibe-headless/references/portfolio/app/components/ProjectMedia.jsx +29 -0
  295. package/skills/wix-vibe-headless/references/portfolio/app/hooks/useCollectionProjects.js +35 -0
  296. package/skills/wix-vibe-headless/references/portfolio/app/hooks/usePortfolioGallery.js +27 -0
  297. package/skills/wix-vibe-headless/references/portfolio/app/hooks/useProjectDetail.js +25 -0
  298. package/skills/wix-vibe-headless/references/portfolio/app/pages/CollectionPage.jsx +39 -0
  299. package/skills/wix-vibe-headless/references/portfolio/app/pages/Portfolio.jsx +27 -0
  300. package/skills/wix-vibe-headless/references/portfolio/app/pages/ProjectDetail.jsx +60 -0
  301. package/skills/wix-vibe-headless/references/portfolio/{wix-portfolio.js → app/rest/wix-portfolio.js} +84 -55
  302. package/skills/wix-vibe-headless/references/portfolio/seed/SEED.md +94 -0
  303. package/skills/wix-vibe-headless/references/portfolio/seed/seed-portfolio.js +236 -0
  304. package/skills/wix-vibe-headless/references/pricing-plans/INSTRUCTIONS.md +240 -117
  305. package/skills/wix-vibe-headless/references/pricing-plans/app/components/OrderCard.jsx +35 -0
  306. package/skills/wix-vibe-headless/references/pricing-plans/app/components/PlanCard.jsx +48 -0
  307. package/skills/wix-vibe-headless/references/pricing-plans/app/components/PlanGrid.jsx +16 -0
  308. package/skills/wix-vibe-headless/references/pricing-plans/app/components/PlanPrice.jsx +35 -0
  309. package/skills/wix-vibe-headless/references/pricing-plans/app/hooks/useMyPlans.js +25 -0
  310. package/skills/wix-vibe-headless/references/pricing-plans/app/hooks/usePlanDetail.js +28 -0
  311. package/skills/wix-vibe-headless/references/pricing-plans/app/hooks/usePlans.js +30 -0
  312. package/skills/wix-vibe-headless/references/pricing-plans/app/pages/MyPlans.jsx +30 -0
  313. package/skills/wix-vibe-headless/references/pricing-plans/app/pages/PlanDetail.jsx +53 -0
  314. package/skills/wix-vibe-headless/references/pricing-plans/app/pages/Plans.jsx +28 -0
  315. package/skills/wix-vibe-headless/references/pricing-plans/seed/SEED.md +86 -0
  316. package/skills/wix-vibe-headless/references/pricing-plans/seed/seed-pricing-plans.js +251 -0
  317. package/skills/wix-vibe-headless/references/restaurants/INSTRUCTIONS.md +248 -124
  318. package/skills/wix-vibe-headless/references/restaurants/app/components/ItemDialog.jsx +81 -0
  319. package/skills/wix-vibe-headless/references/restaurants/app/components/MenuItemCard.jsx +71 -0
  320. package/skills/wix-vibe-headless/references/restaurants/app/components/MenuList.jsx +43 -0
  321. package/skills/wix-vibe-headless/references/restaurants/app/components/OrderCartButton.jsx +21 -0
  322. package/skills/wix-vibe-headless/references/restaurants/app/components/OrderCartDrawer.jsx +60 -0
  323. package/skills/wix-vibe-headless/references/restaurants/app/context/OrderCartContext.jsx +63 -0
  324. package/skills/wix-vibe-headless/references/restaurants/app/hooks/useItemOrder.js +32 -0
  325. package/skills/wix-vibe-headless/references/restaurants/app/hooks/useReservation.js +73 -0
  326. package/skills/wix-vibe-headless/references/restaurants/app/pages/Menu.jsx +28 -0
  327. package/skills/wix-vibe-headless/references/restaurants/app/pages/Reservations.jsx +102 -0
  328. package/skills/wix-vibe-headless/references/restaurants/seed/SEED.md +180 -0
  329. package/skills/wix-vibe-headless/references/restaurants/seed/seed-restaurants.js +452 -0
  330. package/skills/wix-vibe-headless/references/shared/app/components/WixManageBanner.jsx +56 -0
  331. package/skills/wix-vibe-headless/references/shared/{wix-client.js → app/rest/wix-client.js} +6 -8
  332. package/skills/wix-vibe-headless/references/shared/app/rest/wix-config.js +6 -0
  333. package/skills/wix-vibe-headless/references/storefront/INSTRUCTIONS.md +263 -148
  334. package/skills/wix-vibe-headless/references/storefront/app/components/CartButton.jsx +20 -0
  335. package/skills/wix-vibe-headless/references/storefront/app/components/CartDrawer.jsx +150 -0
  336. package/skills/wix-vibe-headless/references/storefront/app/components/ProductCard.jsx +167 -0
  337. package/skills/wix-vibe-headless/references/storefront/app/components/ProductGallery.jsx +51 -0
  338. package/skills/wix-vibe-headless/references/storefront/app/components/ProductGrid.jsx +54 -0
  339. package/skills/wix-vibe-headless/references/storefront/app/components/VariantPicker.jsx +119 -0
  340. package/skills/wix-vibe-headless/references/storefront/app/context/CartContext.jsx +71 -0
  341. package/skills/wix-vibe-headless/references/storefront/app/hooks/useProductDetail.js +109 -0
  342. package/skills/wix-vibe-headless/references/storefront/app/hooks/useShop.js +98 -0
  343. package/skills/wix-vibe-headless/references/storefront/app/lib/storeImage.js +27 -0
  344. package/skills/wix-vibe-headless/references/storefront/app/pages/ProductDetail.jsx +139 -0
  345. package/skills/wix-vibe-headless/references/storefront/app/pages/Shop.jsx +75 -0
  346. package/skills/wix-vibe-headless/references/storefront/{wix-store-cart.js → app/rest/wix-store-cart.js} +1 -1
  347. package/skills/wix-vibe-headless/references/storefront/{wix-store-catalog.js → app/rest/wix-store-catalog.js} +25 -2
  348. package/skills/wix-vibe-headless/references/storefront/seed/SEED.md +111 -0
  349. package/skills/wix-vibe-headless/references/storefront/seed/seed-store.js +299 -0
  350. /package/skills/wix-vibe-headless/references/blog/{wix-blog.js → app/rest/wix-blog.js} +0 -0
  351. /package/skills/wix-vibe-headless/references/events/{wix-events-registration.js → app/rest/wix-events-registration.js} +0 -0
  352. /package/skills/wix-vibe-headless/references/pricing-plans/{wix-pricing-plans.js → app/rest/wix-pricing-plans.js} +0 -0
  353. /package/skills/wix-vibe-headless/references/restaurants/{wix-restaurants-menu.js → app/rest/wix-restaurants-menu.js} +0 -0
  354. /package/skills/wix-vibe-headless/references/restaurants/{wix-restaurants-ordering.js → app/rest/wix-restaurants-ordering.js} +0 -0
  355. /package/skills/wix-vibe-headless/references/restaurants/{wix-restaurants-reservations.js → app/rest/wix-restaurants-reservations.js} +0 -0
@@ -1,155 +1,270 @@
1
+ # Wix Storefront — ready-made client
1
2
 
2
- # Wix Storefront Skill
3
+ The storefront client is **shipped as real files**, not snippets to regenerate. It's a complete
4
+ catalog + PDP + server-cart + checkout, styled with your app's design tokens (base44's
5
+ `src/index.css` — the shadcn palette the design phase already set). Copy it into the app and wire
6
+ the routes — you generate almost none of the commerce code (variant resolution, modifiers, stock
7
+ gating, the server cart all ship and are correct).
3
8
 
4
- > **Source files (in this skill):** the shared transport `references/shared/wix-client.js` and both storefront helpers from `references/storefront/`. All helpers import from `"./wix-client.js"`, so copy them into the same folder (e.g. `src/rest/`). Copy **both** for a full storefront:
5
- >
6
- > | File | What it covers |
7
- > |---|---|
8
- > | `wix-store-catalog.js` | Products, categories, product detail, search |
9
- > | `wix-store-cart.js` | Add to cart, cart management, checkout |
9
+ Talks to Wix directly over the public `WIX_CLIENT_ID` (anonymous visitor tokens). Never mock
10
+ products; never hand-build a `/checkout` URL — the shipped cart goes through the eCom
11
+ redirect-session.
10
12
 
11
- Builds a real, client-only Wix storefront. The browser talks to Wix directly over a
12
- public `WIX_CLIENT_ID`. Never mock products; never hand-build `/checkout` URLs — always
13
- go through the eCom cart + redirect-session.
13
+ ## Prerequisites
14
+ - The site's **Wix Stores** catalog is the read/cart target. It's installed and seeded separately (see **Seeding** below), in parallel with this build — so it may be empty at build time; the client renders the shipped empty state until products land.
15
+ - The public headless **`WIX_CLIENT_ID`** from your prompt (buyer-facing, safe to hardcode/commit).
14
16
 
15
- ## When to use
16
- - User wants a Wix eCommerce store or asks to "connect Wix".
17
- - Replacing placeholder/mock products with live Wix data.
18
- - Adding cart, checkout, categories, or product detail pages over an existing Wix Stores catalog.
17
+ ## STEP 1 — The client is already in `src/`
18
+ The install step (base44.md STEP 1) deployed the whole storefront UI client + REST scaffolds into
19
+ `src/` (imports use the `@/` alias → `src/`). Here's every file and what it is — **this is your map,
20
+ so you don't need to open them:**
19
21
 
20
- ## Prerequisites
21
- 1. A Wix site with **Wix Stores installed and products already added** (this skill does
22
- NOT provision — it's read-only over the catalog).
23
- 2. The site's public headless **`WIX_CLIENT_ID`**, provided in the handoff prompt (the
24
- Wix Business Manager surfaces a copyable prompt with the id filled in — see
25
- the router `SKILL.md`). Paste it into `src/rest/wix-client.js` in place of the placeholder. It is a
26
- buyer-facing credential (it only mints anonymous visitor tokens), **not** a secret, so
27
- hardcoding/committing it is fine.
28
- 3. The deployed app domain must be allow-listed on the OAuth client for Wix-hosted
29
- checkout to return. This is a **separate Wix setup flow the user completes later** —
30
- out of this skill's scope. If checkout return fails before that setup is done, that's
31
- expected; flag it and continue.
32
-
33
- ## The API (copy as-is; do not re-derive it)
34
- This skill ships only the REST layer — no UI components. Build the storefront's UI
35
- however the project wants; wire it to these two snippets. Copy them into the app (e.g.
36
- `src/api/`) and only adjust import paths:
37
- - `src/rest/wix-client.js` — visitor-token mint/refresh + transport. Set `WIX_CLIENT_ID` to
38
- the id from the prompt (replace the `<YOUR-CLIENT-ID>` placeholder). The visitor refresh
39
- token IS the cart identity; it is persisted to localStorage. Do not re-mint anonymously
40
- per load or the cart silently empties.
41
- - `src/rest/wix-store-catalog.js` — **Catalog:**
42
- `queryProducts`, `queryProductsByCategory`, `getProductBySlug`, `countProducts`,
43
- `queryCategories`, `getCategoryBySlug`
44
- - `src/rest/wix-store-cart.js` — **Cart & checkout:**
45
- `addToCart`, `getCurrentCart`, `updateCartItemQuantity`, `removeFromCart`, `checkout`
46
-
47
- The Product and Cart shapes are documented as JSDoc comments at the top of each helper file.
48
- Read them before building the UI — they describe the key fields and link to the full API
49
- reference for anything not shown.
50
-
51
- ## How to wire it (UI is the project's choice)
52
- - **Product grid** — `queryProducts()` for the listing (visible products only); pass
53
- `nextCursor` back as `cursor` to load the next page. Render fields directly from the Wix
54
- product object (see the `Product` typedef in `wix-store.js` for key fields). For price, use
55
- `actualPriceRange.minValue.formattedAmount` (already includes the currency symbol) — no
56
- manual formatting needed.
57
- - **PDP** — `getProductBySlug(slug)` keyed off the URL slug; returns null on miss — show
58
- a not-found state, never invent a product. **Drive the whole PDP from the returned product
59
- object at runtime — build it generically, not around the one product you happened to inspect.**
60
- A catalog is heterogeneous: some products have `options`, some have `modifiers` (mandatory or
61
- optional), some track inventory, some none of these. Render a selector for **every** entry the
62
- product actually carries: one control per `product.options` (variant choices) **and** one per
63
- `product.modifiers` (TEXT_CHOICES → choice buttons/select; FREE_TEXT → a text input); render
64
- neither when the arrays are empty. Skipping modifiers is a common miss — a product with a
65
- **mandatory** modifier (e.g. "gift wrap?") whose control isn't rendered can never be added: the
66
- buyer can't satisfy the requirement, so `add-to-cart` returns 200 with an **empty** `lineItems`
67
- and the add silently no-ops.
68
- - **Gate the Add-to-cart button** — disable it only until the requirements the product *actually
69
- has* are met, computed from the product object (never assume every product has options or
70
- modifiers): if `product.options` is non-empty, a variant must resolve from the selections; every
71
- `modifier.mandatory === true` must have a value. A product with no options and no mandatory
72
- modifiers is immediately addable — don't leave the button stuck. Optional modifiers never block.
73
- Then pass the selections to `addToCart` (see Cart below); never call it with a required selection missing.
74
- - **Reflect stock in the UI** — the product object already carries availability at three levels; surface
75
- it rather than letting the buyer discover it only on click. Read it from the data at runtime (never
76
- hardcode):
77
- - **Grid / card:** `product.inventory.availabilityStatus` (`IN_STOCK` / `OUT_OF_STOCK` /
78
- `PARTIALLY_OUT_OF_STOCK`) — badge an out-of-stock product as sold out.
79
- - **Option choice:** `product.options[].choicesSettings.choices[].inStock` — disable/strike a choice
80
- (e.g. size L) that has no in-stock variant, before a full variant is even resolved.
81
- - **Variant:** `variantsInfo.variants[].inventoryStatus.inStock` — once selections resolve to a
82
- variant, disable Add-to-cart (label "Out of stock") when that variant is `inStock: false`.
83
- A product/variant with inventory tracking **off** reports `availabilityStatus: IN_STOCK` /
84
- `inStock: true` and stays freely addable — tracking-off is not "no data", it's "always available".
85
- `addToCart` still throws on a sold-out line as a backstop, but the UI should prevent reaching it.
86
- - **Categories** — `queryCategories()` for a category menu; `getCategoryBySlug(slug)` for
87
- a category landing page. Pass `category.id` to `queryProductsByCategory(categoryId, { limit?, cursor? })`
88
- to list only the products in that category; paginate exactly like `queryProducts`.
89
- - **Cart** — `addToCart(catalogItemId, variantId?, qty?, { modifierChoices?, customTextFields? }?)`,
90
- `updateCartItemQuantity(lineItemId, qty)`, `removeFromCart(lineItemId)`.
91
- - `variantId` (`variantsInfo.variants[].id` from `getProductBySlug`) — required for products with
92
- options; resolve it by matching the buyer's selections to `variant.choices[].optionChoiceIds`.
93
- - `modifierChoices` — `{ [modifier.key]: choiceKey }` for `TEXT_CHOICES` modifiers.
94
- - `customTextFields` — `{ [modifier.freeTextSettings.key]: userInput }` for `FREE_TEXT` modifiers.
95
- Mandatory modifiers must be included. See the eCommerce integration guide:
96
- https://dev.wix.com/docs/api-reference/business-solutions/stores/catalog-v3/e-commerce-integration.md
97
- - Use `cart.lineItems[].id` as `lineItemId` (not `catalogItemId`) for mutations.
98
- - Read the cart back with `getCurrentCart()` rather than mirroring it locally.
99
- - **Checkout** — `window.location.href = await checkout()`. After the buyer returns from
100
- hosted checkout the order is placed and the cart is empty — re-fetch with
101
- `getCurrentCart()` on return (e.g. on mount + `visibilitychange`) to clear the UI.
102
- - **Empty state** — if `countProducts()` is 0, show an empty state telling the user to
103
- add products in their Wix dashboard. Never invent products.
104
-
105
- ## Hard rules (do not violate)
106
- - ✅ Checkout ONLY via `checkout()` (`create-checkout` → `/headless/v1/redirect-session`
107
- `fullUrl`), then redirect.
108
- - ❌ Never hand-build `/checkout`, cart-add, or product permalinks for purchase.
109
- - ❌ Never mock products — render live Wix data or the empty state.
110
- - ❌ Never generate fake reviews, ratings, or testimonials. Empty review UI only.
111
- - ✅ Set `WIX_CLIENT_ID` from the prompt's value (public client id — safe to hardcode).
112
- - ✅ `lineItemId` for cart mutations is `cart.lineItems[].id`, not `catalogItemId`.
113
- - ✅ On the PDP, render a control for **every** `product.options` entry **and** every `product.modifiers`
114
- entry — never only variants. Keep Add-to-cart disabled until a variant resolves and every
115
- `modifier.mandatory === true` has a value; a mandatory modifier with no rendered control makes the
116
- product unbuyable (add-to-cart returns 200 with empty `lineItems`).
117
- - ✅ Pass `addToCart`'s `variantId` (`variantsInfo.variants[].id`) for products with variants; omit for products without.
118
- - ✅ Pass `modifierChoices` (`{ [modifier.key]: choiceKey }`) for TEXT_CHOICES modifiers; pass `customTextFields`
119
- (`{ [modifier.freeTextSettings.key]: userInput }`) for FREE_TEXT modifiers. Include mandatory modifiers.
120
- - The engine fails loudly on purpose: `addToCart`/`checkout` throw on out-of-stock or
121
- empty carts. A green path means it is really buyable — don't swallow these.
122
-
123
- ## Beyond the snippets
124
- The snippets cover the common storefront paths. If you hit a use case they don't cover
125
- (e.g. coupons, members/auth, a product field not shown in the typedef), make the call
126
- yourself with `wixApiRequest` — but look up the exact endpoint, HTTP method, and request
127
- body in the **official Wix API reference** first; never guess:
128
- - Official Wix API reference: https://dev.wix.com/docs/api-reference.md
129
- - eCommerce integration guide (modifiers, custom text, variants): https://dev.wix.com/docs/api-reference/business-solutions/stores/catalog-v3/e-commerce-integration.md
130
- - Member login + a "my orders" account view → the **members** vertical (`references/members/INSTRUCTIONS.md`): custom login on your own UI so buyers can sign in and see their account.
131
-
132
- Keep the snippets as the default for everything they already do; reach for the API
133
- reference only for the gap.
22
+ | file | what it is |
23
+ |---|---|
24
+ | `context/CartContext.jsx` | `useCart()` provider: server cart, add/update/remove, checkout |
25
+ | `hooks/useProductDetail.js` | PDP data — product + variant resolution for a slug, plus load/add state |
26
+ | `hooks/useShop.js` | catalog listing — category menu, cursor paging, sort, failure state |
27
+ | `components/ProductCard.jsx`, `ProductGrid.jsx` | product listing UI (grid + card, skeletons, empty state). The tile carries quick add for single-variant products, colour dots + an option summary, and pre-order / sold-out / limited-stock / percent-off / merchant-ribbon badges — all from the list query, no extra request |
28
+ | `components/ProductGallery.jsx` | PDP main image + thumbnails |
29
+ | `lib/storeImage.js` | `productImage()` / `productGallery()` / `storeImage()` — normalise Wix image urls |
30
+ | `components/CartButton.jsx` | header cart **icon** button with a live-count badge |
31
+ | `components/CartDrawer.jsx` | slide-over cart (mount once; opens from `useCart`) |
32
+ | `components/VariantPicker.jsx` | option/variant selector used on the PDP — colour options render as real swatches, and picking one moves the gallery to that colour's photo |
33
+ | `components/WixManageBanner.jsx` | preview-only manage banner — drop it into your Layout (STEP 4) |
34
+ | `pages/Shop.jsx`, `pages/ProductDetail.jsx` | the two shipped routes (`/shop`, `/product/:slug`) |
35
+ | `rest/wix-config.js` | **you set the ids here** (STEP 2) |
36
+ | `rest/wix-client.js` + `rest/wix-store-*.js` | REST transport + catalog/cart helpers |
37
+
38
+ They're already in place — go **straight to theming + wiring**, nothing to verify first. **Don't
39
+ `read_file` the shipped page/component/hook source to inspect it** — the table above says what each is
40
+ and every field shape you need is in the snippets below. Read a shipped file's source **only** on a
41
+ real fallback — a runtime error, or a field the snippets don't cover (see "Fallback only" at the
42
+ end). (Files missing? the install's `deploy` result lists what it wrote; re-run install, or copy
43
+ `references/storefront/app/` → `src/`.)
44
+
45
+ ## STEP 2 — Credentials
46
+ Write `src/rest/wix-config.js` with your `WIX_CLIENT_ID` and `WIX_METASITE_ID` from the prompt — the
47
+ one place both ids live.
48
+
49
+ ## STEP 3 — Theme (nothing to style on the shipped components)
50
+ The shipped components carry **no palette of their own** — they render from base44's design tokens
51
+ in `src/index.css` (`:root`/`.dark`: `--background`, `--foreground`, `--card`, `--primary`,
52
+ `--muted`, `--border`, `--radius`, `--font-*`) via shadcn Tailwind classes (`bg-card`,
53
+ `text-foreground`, `bg-primary`, `text-muted-foreground`, `border-border`, `rounded-lg`,
54
+ `font-display`). Those tokens are **already set to the brand by the design phase**, so the shipped
55
+ pages are themed with zero work here. To adjust the palette, edit `index.css` (`:root` **and**
56
+ `.dark`) — the base44 way; **never add a parallel theme file (e.g. a `theme.css`) or restyle the
57
+ shipped JSX.** Build the Home/Header you add (STEP 4) from the **same** base44 tokens/classes so it
58
+ matches automatically. A dark brand is just base44's dark palette in `index.css` — no per-component work.
59
+
60
+ ## STEP 4 — Wire routes + provider (surgical `find_replace` on `src/App.jsx`, never a rewrite)
61
+ **No file reads needed to wire this.** Every shipped page and `WixManageBanner` is a default export that takes **no props** — wire them exactly as the snippet shows; nothing in those files needs looking up.
62
+ `App.jsx` carries required platform auth scaffolding (`AuthProvider`/`useAuth`) — edit it in, don't
63
+ replace it.
64
+ - Wrap the routed tree in `<CartProvider>` (from `@/context/CartContext`).
65
+ - Put your **header + footer in a `Layout`** that renders `<Outlet/>` between them, and nest every
66
+ route under one pathless `<Route element={<Layout/>}>`. Your brand chrome then wraps **every** page
67
+ — including the shipped `Shop` / `ProductDetail` — so you **never edit the shipped pages to add a
68
+ header/footer** (they render inside `<Outlet/>` as-is). Mount `<CartDrawer/>` once in the Layout.
69
+ - **Pin the top chrome as one fixed block.** Put `<WixManageBanner/>` (shipped, preview-only) **above**
70
+ your `<Header/>` inside a single `position:fixed` top region — the header itself is plain in-flow
71
+ markup, the region owns the fixing — so banner + header ride together (no scroll drift/gap). Pad
72
+ the content by the region's measured height so it clears the chrome and self-corrects when the
73
+ banner is dismissed.
74
+ - Routes under the Layout: `/shop` → `Shop`, `/product/:slug` → `ProductDetail` (both shipped, as-is).
75
+ **You add `/` → your own Home** page.
76
+
77
+ ```jsx
78
+ import { useRef, useState, useEffect } from "react";
79
+ import { Routes, Route, Outlet } from "react-router-dom";
80
+ import { CartProvider } from "@/context/CartContext";
81
+ import CartDrawer from "@/components/CartDrawer";
82
+ import WixManageBanner from "@/components/WixManageBanner"; // shipped, preview-only · default export, no props
83
+ import Shop from "@/pages/Shop"; // shipped · default export, no props
84
+ import ProductDetail from "@/pages/ProductDetail"; // shipped · default export, no props
85
+ import Home from "@/pages/Home"; // YOU build
86
+ import Header from "@/components/Header"; // YOU build — plain in-flow markup, NOT position:fixed
87
+ import Footer from "@/components/Footer"; // YOU build
88
+
89
+ function Layout() {
90
+ const topRef = useRef(null);
91
+ const [offset, setOffset] = useState(0);
92
+ useEffect(() => { // measure the fixed region → pad content below it
93
+ const ro = new ResizeObserver(() => setOffset(topRef.current?.offsetHeight ?? 0));
94
+ if (topRef.current) ro.observe(topRef.current);
95
+ return () => ro.disconnect();
96
+ }, []);
97
+ return (<>
98
+ <div ref={topRef} style={{ position: "fixed", top: 0, left: 0, right: 0, zIndex: 50 }}>
99
+ <WixManageBanner /> {/* null on the published site / when dismissed */}
100
+ <Header /> {/* your brand header, in-flow inside this fixed block */}
101
+ </div>
102
+ <div style={{ paddingTop: offset }}> {/* clears the chrome; shrinks when the banner is dismissed */}
103
+ <Outlet /> {/* shipped Shop/ProductDetail render here, untouched */}
104
+ <Footer />
105
+ </div>
106
+ <CartDrawer /> {/* overlays every page */}
107
+ </>);
108
+ }
109
+
110
+ <CartProvider>
111
+ <Routes>
112
+ <Route element={<Layout />}> {/* chrome wraps all */}
113
+ <Route path="/" element={<Home />} /> {/* yours */}
114
+ <Route path="/shop" element={<Shop />} /> {/* shipped, as-is */}
115
+ <Route path="/product/:slug" element={<ProductDetail />} /> {/* shipped, as-is */}
116
+ </Route>
117
+ </Routes>
118
+ </CartProvider>
119
+ ```
120
+
121
+ ## What you build (not shipped)
122
+ The **home / landing page**, the **`Header`** (mount `<CartButton/>` in it) and a **`Footer`** — the
123
+ two you drop into the `Layout` (STEP 4) so they wrap every route — plus the overall brand story,
124
+ styled from the same base44 tokens/classes. **Compose the shipped pieces** — a
125
+ featured strip is just `queryProducts` + the shipped `ProductGrid`; the nav is a `<CartButton/>`
126
+ (a clean cart-**icon** button with a live-count badge — render it as-is, don't wrap it in your own
127
+ text button) + a link to `/shop`:
128
+
129
+ ```jsx
130
+ import { useState, useEffect } from "react";
131
+ import { Link } from "react-router-dom";
132
+ import { queryProducts } from "@/rest/wix-store-catalog";
133
+ import ProductGrid from "@/components/ProductGrid";
134
+ import CartButton from "@/components/CartButton";
135
+
136
+ // Responsive header: choose ONE branch with a state flag, so <CartButton/> mounts once.
137
+ // Do NOT render a desktop nav AND a mobile nav toggled by `hidden md:flex` / `md:hidden`:
138
+ // these navs are inline-styled, and an inline `display` beats a Tailwind class, so `hidden`
139
+ // never applies — BOTH branches render and you get two cart buttons. One branch = one cart.
140
+ export function Header() { // in your nav
141
+ const [mobile, setMobile] = useState(() => window.innerWidth < 768);
142
+ useEffect(() => {
143
+ const onResize = () => setMobile(window.innerWidth < 768);
144
+ window.addEventListener("resize", onResize); // keep it reactive to viewport changes
145
+ return () => window.removeEventListener("resize", onResize);
146
+ }, []);
147
+ return (
148
+ <nav style={{ display: "flex", alignItems: "center", justifyContent: "space-between" }}>
149
+ {/* brand/logo */}
150
+ {mobile
151
+ ? <YourMenu /> // your hamburger + <CartButton/> here
152
+ : <div style={{ display: "flex", gap: 24 }}><Link to="/shop">Shop</Link><CartButton /></div>}
153
+ </nav>
154
+ );
155
+ }
156
+ export function Featured() { // on your home page
157
+ const [products, setProducts] = useState(null); // null → ProductGrid shows skeletons
158
+ // NB: queryProducts returns { products, nextCursor } — destructure the array.
159
+ useEffect(() => {
160
+ queryProducts({ limit: 8 })
161
+ .then(({ products }) => setProducts(products))
162
+ .catch(() => setProducts([])); // land on the empty state, not a spinner
163
+ }, []);
164
+ return <ProductGrid products={products} loading={products === null} empty="Products coming soon." />;
165
+ }
166
+ ```
167
+ Everything reads base44's design tokens (`index.css`), so your home/nav match the shipped pages
168
+ automatically. `<CartButton/>` is an icon button (live-count badge) — drop it in as-is, it inherits `currentColor`.
169
+
170
+ **Editing a component and the change doesn't show? It's the preview, not your code.** The dev preview
171
+ can serve a stale module after a write. Before diagnosing a visual bug you just "fixed", do a fresh
172
+ full navigate/reload of the preview and re-check — don't keep rewriting correct code against a stale
173
+ render.
174
+
175
+ ## Using the client from your own UI (cart, hand-built images)
176
+
177
+ ```jsx
178
+ import { Link } from "react-router-dom";
179
+ import { useCart } from "@/context/CartContext";
180
+
181
+ // useCart() gives:
182
+ // { cart, itemCount, isOpen, setIsOpen, loading, error, clearError(),
183
+ // addToCart(productId, variantId?, qty=1, { modifierChoices?, customTextFields? }?),
184
+ // removeItem(lineItemId), updateQuantity(lineItemId, qty), checkout(), refreshCart() }
185
+ // Every mutation catches its own failure into `error` (the shipped CartDrawer renders it), so a
186
+ // refusal — an empty cart, or a line item that stopped being AVAILABLE — reaches the buyer instead
187
+ // of becoming an unhandled rejection.
188
+ //
189
+ // Cart money: every amount is { amount, convertedAmount, formattedAmount, formattedConvertedAmount } —
190
+ // show a formatted one so the currency symbol and grouping come from Wix. Read
191
+ // `cart.subtotalAfterDiscounts` rather than `cart.subtotal`: the two match until a cart-level coupon
192
+ // applies, and then `subtotal` is the pre-discount figure. `cart.discount` + `cart.appliedDiscounts`
193
+ // carry the reduction. Never sum line items yourself — tax and shipping resolve at checkout.
194
+ // `lineItems[].availability.quantityAvailable` is the stock cap for a quantity control.
195
+
196
+ function CartCount() { // header badge
197
+ const { itemCount, setIsOpen } = useCart();
198
+ return <button onClick={() => setIsOpen(true)}>Cart ({itemCount})</button>;
199
+ }
200
+
201
+ // Buy from a card → link to the PDP; the shipped ProductDetail owns options/variants + add-to-cart.
202
+ // (Listing helpers return no variants — only getProductBySlug does — so buying happens on the PDP.)
203
+ const CardBuy = ({ product }) => <Link to={`/product/${product.slug}`}>View</Link>;
204
+
205
+ // Doing add-to-cart yourself? addToCart resolves for an option-less product; wrap it — it rejects on
206
+ // out-of-stock / empty cart / a missing required selection, and you show that message.
207
+ async function quickAdd(addToCart, product) {
208
+ try { await addToCart(product.id); } catch (e) { alert(e.message); }
209
+ }
210
+
211
+ // An image you render yourself (hero / custom card): normalise the url through lib/storeImage — Wix
212
+ // returns these protocol-relative — and keep a token bg so a just-generated url that 404s for a
213
+ // second reads as a surface, not a blank block.
214
+ import { storeImage, productImage, productGallery } from "@/lib/storeImage";
215
+ function BrandImage({ url, alt }) {
216
+ return <div className="bg-card"><img src={storeImage(url)} alt={alt} /></div>;
217
+ }
218
+ // productImage(product) → the catalog image · productGallery(product) → every image, main first,
219
+ // de-duplicated (media.itemsInfo.items repeats the main one and video items carry no image url).
220
+ ```
221
+
222
+ ## Extending the client
223
+ Building something beyond the shipped pages? Copy these:
224
+
225
+ ```jsx
226
+ // Every catalog/cart list helper returns { <plural>, nextCursor } — destructure the array:
227
+ const { products, nextCursor } = await queryProducts({ limit: 24 });
228
+ const { categories } = await queryCategories();
229
+ const menu = categories.filter((c) => c.slug !== "all-products"); // drop Wix's system category
230
+ const { products: inCategory } = await queryProductsByCategory(menu[0].id, { limit: 24 });
231
+
232
+ // product.plainDescription is HTML → render as HTML (the PDP does this):
233
+ <div dangerouslySetInnerHTML={{ __html: product.plainDescription }} />
234
+ // image urls live at: product.media.main.image.url · cart lineItems[].image.url
235
+ ```
236
+
237
+ Fallback only — when you hit an error or need something not shown here (coupons, members, a field
238
+ these snippets don't have): read the relevant shipped file under `src/`, or look it up via the
239
+ **`wix-docs`** skill. Each helper in `wix-store-catalog.js` / `wix-store-cart.js` links its own
240
+ reference page inline; these are the areas they sit in:
241
+ - Stores catalog (products, categories, inventory): https://dev.wix.com/docs/api-reference/business-solutions/stores/catalog-v3.md
242
+ - eCommerce (cart, checkout, orders): https://dev.wix.com/docs/api-reference/business-solutions/e-commerce.md
243
+ - Headless redirect session (hosted checkout): https://dev.wix.com/docs/api-reference/business-management/headless/redirects.md
244
+
245
+ ## Hard rules
246
+ - Set `WIX_CLIENT_ID` (STEP 2) — not the placeholder.
247
+ - Style via base44 design tokens (`index.css` / shadcn Tailwind classes), never by rewriting the shipped components or adding a parallel theme file.
248
+ - Header/footer live in a `Layout` around `<Outlet/>` (STEP 4) — never edit the shipped `Shop`/`ProductDetail` to add chrome.
249
+ - The Layout's fixed top region owns positioning: `<WixManageBanner/>` above `<Header/>`; your `Header` is plain in-flow markup (not `position:fixed`).
250
+ - Checkout goes through the shipped cart (redirect-session) — never a hand-built `/checkout` URL.
251
+ - Render live Wix data or the shipped empty state — never mock products.
134
252
 
135
253
  ## Point the user to their dashboard
136
- In some cases, users need to access the Wix dashboard in order to edit the store content for their site. To facilitate this, provide the user with deep links directly to the relevant dashboard pages. For store data those pages are:
137
- - **Products** — `https://manage.wix.com/dashboard/{metaSiteId}/wix-stores/products` (`Dashboard → Store → Products`; add/edit products, variants, inventory)
138
- - **Categories** — `https://manage.wix.com/dashboard/{metaSiteId}/wix-stores/categories/list` (`Dashboard → Store → Categories`; organize products into the category menu)
139
-
140
- Substitute the site's `metaSiteId` to complete the links (you have it from the handoff / `ListWixSites`). Include the in-dashboard navigation as a fallback.
141
-
142
- ## Verification checklist (before declaring done)
143
- - [ ] `WIX_CLIENT_ID` set to the prompt's value (not the `<YOUR-CLIENT-ID>` placeholder)
144
- - [ ] Visitor token persists across reload (cart survives reload, same visitor)
145
- - [ ] Every product choice renders on the PDP — variant options **and** modifiers (mandatory ones included)
146
- - [ ] Add-to-cart button stays disabled until all required choices are made (variant + mandatory modifiers)
147
- - [ ] A product with a mandatory modifier adds successfully (its selection is sent, cart line appears)
148
- - [ ] Stock reflected in the UI — sold-out product badged (grid), out-of-stock option choices and variants disabled/labelled (PDP)
149
- - [ ] Add to cart works; out-of-stock items throw rather than add a dead line
150
- - [ ] Quantity update / remove reflect in `getCurrentCart()`
151
- - [ ] Checkout redirects via redirect-session `fullUrl` (no hand-built URL)
152
- - [ ] Cart re-fetched on return from checkout (clears once the order is placed)
153
- - [ ] Empty state shown when `countProducts()` is 0
154
- - [ ] No mock products anywhere
155
- - [ ] Told the user at least once that they can continue setting up their store in the dashboard and provided deep links.
254
+ Provide deep links so the owner can edit content (substitute the site's `metaSiteId`):
255
+ - **Products** — `https://manage.wix.com/dashboard/{metaSiteId}/wix-stores/products`
256
+ - **Categories** — `https://manage.wix.com/dashboard/{metaSiteId}/wix-stores/categories/list`
257
+
258
+ ## Seeding
259
+ Seed the catalog per `seed/SEED.md` (the build-time `setupStore` module) — separate from this
260
+ client build; run in parallel.
261
+
262
+ ## Verify (before declaring done)
263
+ - [ ] Client files copied into `src/`; `WIX_CLIENT_ID` set (not the placeholder).
264
+ - [ ] Brand palette lives in `index.css` (`:root`/`.dark`); no parallel theme file; shipped components/pages not restyled or rewritten.
265
+ - [ ] **Opened `/shop` and a product detail page** (not just the home page) and confirmed the shipped cards render themed (surface, text, brand color) with images.
266
+ - [ ] `Layout` (fixed `<WixManageBanner/>` + `<Header/>` region, then `<Outlet/>` + Footer) wraps all routes; shipped `Shop`/`ProductDetail` untouched; content clears the fixed chrome; `<CartProvider>` wraps the tree; `<CartDrawer/>` mounted; `<CartButton/>` in the header.
267
+ - [ ] Cart survives reload (same visitor); add / update-qty / remove work; checkout redirects; the drawer shows a **subtotal**.
268
+ - [ ] Empty catalog shows the shipped empty state; no mock products anywhere.
269
+ - [ ] A product with several images shows **thumbnails** on the PDP, and one with per-variant prices shows a **range** on its card.
270
+ - [ ] Categories seeded? The `/shop` menu lists them (minus the auto-created `all-products`) and filters; a catalog past one page shows **Load more**.
@@ -0,0 +1,20 @@
1
+ // Header cart trigger — an icon button with a live item-count badge. Drop into the app header; opens the CartDrawer.
2
+ // Icon-only by design (no "Cart" text): reads the header's currentColor, so it inherits the brand automatically.
3
+ import { useCart } from "@/context/CartContext";
4
+
5
+ export default function CartButton() {
6
+ const { itemCount, setIsOpen } = useCart();
7
+ return (
8
+ <button onClick={() => setIsOpen(true)} aria-label={`Open cart${itemCount ? `, ${itemCount} item${itemCount > 1 ? "s" : ""}` : ""}`}
9
+ className="relative inline-flex items-center justify-center w-10 h-10 p-0 cursor-pointer bg-transparent text-current border-none rounded-sm">
10
+ <svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="1.8" strokeLinecap="round" strokeLinejoin="round" aria-hidden="true">
11
+ <path d="M6 2 3 6v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2V6l-3-4Z" />
12
+ <path d="M3 6h18" />
13
+ <path d="M16 10a4 4 0 0 1-8 0" />
14
+ </svg>
15
+ {itemCount > 0 && (
16
+ <span className="absolute -top-0.5 -right-0.5 min-w-[18px] h-[18px] px-[5px] py-0 inline-flex items-center justify-center text-[11px] font-semibold bg-primary text-primary-foreground rounded-full">{itemCount}</span>
17
+ )}
18
+ </button>
19
+ );
20
+ }