@wix/agent-skills 1.16.3 → 1.18.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 (283) hide show
  1. package/package.json +1 -1
  2. package/skills/wix-app/SKILL.md +115 -12
  3. package/skills/wix-app/references/APP_MARKET_REVIEW.md +1 -1
  4. package/skills/wix-app/references/BACKEND_API.md +18 -0
  5. package/skills/wix-app/references/CUSTOM_ELEMENT_WIDGET.md +6 -0
  6. package/skills/wix-app/references/DASHBOARD_MODAL.md +10 -2
  7. package/skills/wix-app/references/DASHBOARD_PAGE.md +32 -70
  8. package/skills/wix-app/references/EDITOR_REACT_COMPONENT.md +145 -127
  9. package/skills/wix-app/references/SITE_PLUGIN.md +14 -2
  10. package/skills/wix-app/references/WIX_PATTERNS_DOCS.md +74 -68
  11. package/skills/wix-app/references/backend-event/COMMON-EVENTS.md +2 -2
  12. package/skills/wix-app/references/dashboard-page/COLLECTION_TOOLKIT.md +79 -0
  13. package/skills/wix-app/references/dashboard-page/ENTITY_PAGE_TOOLKIT.md +73 -0
  14. package/skills/wix-app/references/dashboard-page/PATTERNS_BUNDLE_READING.md +52 -0
  15. package/skills/wix-app/references/dashboard-page/UX_SUCCESS_MODEL.md +184 -0
  16. package/skills/wix-app/references/editor-react-component/ACCESSIBILITY.md +182 -99
  17. package/skills/wix-app/references/editor-react-component/ANIMATED-COMPONENTS.md +94 -49
  18. package/skills/wix-app/references/editor-react-component/BRANDED-COMPONENTS.md +16 -6
  19. package/skills/wix-app/references/editor-react-component/BROWSER-SUPPORT.md +56 -0
  20. package/skills/wix-app/references/editor-react-component/COMPONENT-CONTRACT.md +275 -0
  21. package/skills/wix-app/references/editor-react-component/COMPONENT-PREVIEW.md +35 -40
  22. package/skills/wix-app/references/editor-react-component/CSS-GUIDELINES.md +167 -445
  23. package/skills/wix-app/references/editor-react-component/DESIGN-STATES.md +56 -29
  24. package/skills/wix-app/references/editor-react-component/DIRECTIONALITY.md +53 -158
  25. package/skills/wix-app/references/editor-react-component/EDITOR-EXTENSION-CONFIGURATION.md +78 -0
  26. package/skills/wix-app/references/editor-react-component/FUNCTION-HANDLERS.md +42 -134
  27. package/skills/wix-app/references/editor-react-component/MANIFEST-ERRORS.md +11 -3
  28. package/skills/wix-app/references/editor-react-component/PARTS.md +46 -24
  29. package/skills/wix-app/references/editor-react-component/PROPS-VS-CSS.md +63 -179
  30. package/skills/wix-app/references/editor-react-component/REACT-GUIDELINES.md +79 -163
  31. package/skills/wix-app/references/editor-react-component/SITE-CONTEXT-HOOKS.md +36 -21
  32. package/skills/wix-app/references/editor-react-component/SSR.md +30 -99
  33. package/skills/wix-base44-connector/SKILL.md +156 -50
  34. package/skills/wix-base44-connector/references/CAPABILITY_MAP.md +78 -0
  35. package/skills/wix-base44-connector/scripts/utils.js +239 -45
  36. package/skills/wix-headless/entry/bootstrap.mjs +9 -2
  37. package/skills/wix-headless/entry/skill.md +1 -1
  38. package/skills/wix-headless/references/CAPABILITIES.md +9 -1
  39. package/skills/wix-headless/references/DESIGN.md +1 -0
  40. package/skills/wix-headless/references/DISCOVERY.md +2 -1
  41. package/skills/wix-headless/references/IMAGE_GENERATION.md +1 -0
  42. package/skills/wix-headless/references/SDK_HANDOFF.md +5 -2
  43. package/skills/wix-headless/references/SEED.md +2 -1
  44. package/skills/wix-headless/references/SETUP.md +1 -0
  45. package/skills/wix-headless/references/inline-recipes/how-to-code-a-blog.md +2 -2
  46. package/skills/wix-headless/references/inline-recipes/how-to-code-a-store.md +68 -31
  47. package/skills/wix-headless/references/inline-recipes/how-to-code-forms.md +26 -10
  48. package/skills/wix-headless/references/inline-recipes/how-to-code-members-astro.md +8 -8
  49. package/skills/wix-headless/references/inline-recipes/how-to-code-members-custom-login.md +1 -1
  50. package/skills/wix-headless/references/inline-recipes/how-to-code-members-non-astro.md +1 -1
  51. package/skills/wix-headless/references/inline-recipes/how-to-code-pricing-plans.md +10 -8
  52. package/skills/wix-headless/references/inline-recipes/how-to-code-rentals.md +254 -0
  53. package/skills/wix-headless/references/inline-recipes/how-to-code-restaurant-orders.md +27 -24
  54. package/skills/wix-headless/references/inline-recipes/setup-online-store.md +13 -0
  55. package/skills/wix-headless/references/inline-recipes/setup-rentals.md +254 -0
  56. package/skills/wix-headless/references/managed/AUTHENTICATION.md +5 -0
  57. package/skills/wix-headless/references/non-astro.md +1 -1
  58. package/skills/wix-headless-fast/SKILL.md +166 -0
  59. package/skills/wix-headless-fast/entry/skill.md +99 -0
  60. package/skills/wix-headless-fast/install/deploy.mjs +433 -0
  61. package/skills/wix-headless-fast/install/fast-path.mjs +141 -0
  62. package/skills/wix-headless-fast/references/blog/INSTRUCTIONS.md +137 -0
  63. package/skills/wix-headless-fast/references/blog/app/components/blog/BlogFeedView.tsx +137 -0
  64. package/skills/wix-headless-fast/references/blog/app/components/blog/PostView.tsx +113 -0
  65. package/skills/wix-headless-fast/references/blog/app/components/blog/RichContent.tsx +42 -0
  66. package/skills/wix-headless-fast/references/blog/app/hooks/blog/useBlogFeed.ts +123 -0
  67. package/skills/wix-headless-fast/references/blog/app/hooks/blog/usePost.ts +70 -0
  68. package/skills/wix-headless-fast/references/blog/app/wix/blog/posts.ts +99 -0
  69. package/skills/wix-headless-fast/references/blog/app/wix/blog/taxonomy.ts +76 -0
  70. package/skills/wix-headless-fast/references/blog/app/wix/blog/types.ts +62 -0
  71. package/skills/wix-headless-fast/references/blog/app-astro/layouts/SiteLayout.astro +40 -0
  72. package/skills/wix-headless-fast/references/blog/app-astro/pages/blog/[...slug].astro +99 -0
  73. package/skills/wix-headless-fast/references/blog/app-astro/pages/blog.astro +24 -0
  74. package/skills/wix-headless-fast/references/blog/lock/astro/package-lock.json +16156 -0
  75. package/skills/wix-headless-fast/references/blog/seed/SEED.md +72 -0
  76. package/skills/wix-headless-fast/references/blog/seed/seed-blog.mjs +287 -0
  77. package/skills/wix-headless-fast/references/bookings/INSTRUCTIONS.md +129 -0
  78. package/skills/wix-headless-fast/references/bookings/app/components/bookings/ServiceBookingView.tsx +143 -0
  79. package/skills/wix-headless-fast/references/bookings/app/components/bookings/ServicesView.tsx +119 -0
  80. package/skills/wix-headless-fast/references/bookings/app/hooks/bookings/useBookingFlow.ts +138 -0
  81. package/skills/wix-headless-fast/references/bookings/app/hooks/bookings/useServices.ts +54 -0
  82. package/skills/wix-headless-fast/references/bookings/app/wix/bookings/booking.ts +206 -0
  83. package/skills/wix-headless-fast/references/bookings/app/wix/bookings/services.ts +96 -0
  84. package/skills/wix-headless-fast/references/bookings/app/wix/bookings/types.ts +70 -0
  85. package/skills/wix-headless-fast/references/bookings/app-astro/layouts/SiteLayout.astro +40 -0
  86. package/skills/wix-headless-fast/references/bookings/app-astro/pages/services/[slug].astro +76 -0
  87. package/skills/wix-headless-fast/references/bookings/app-astro/pages/services.astro +22 -0
  88. package/skills/wix-headless-fast/references/bookings/lock/astro/package-lock.json +11962 -0
  89. package/skills/wix-headless-fast/references/bookings/seed/SEED.md +61 -0
  90. package/skills/wix-headless-fast/references/bookings/seed/seed-bookings.mjs +302 -0
  91. package/skills/wix-headless-fast/references/cms/INSTRUCTIONS.md +179 -0
  92. package/skills/wix-headless-fast/references/cms/app/hooks/cms/useCollection.ts +83 -0
  93. package/skills/wix-headless-fast/references/cms/app/hooks/cms/useItem.ts +57 -0
  94. package/skills/wix-headless-fast/references/cms/app/wix/cms/items.ts +151 -0
  95. package/skills/wix-headless-fast/references/cms/app/wix/cms/types.ts +75 -0
  96. package/skills/wix-headless-fast/references/cms/app-astro/layouts/SiteLayout.astro +41 -0
  97. package/skills/wix-headless-fast/references/cms/lock/astro/package-lock.json +11262 -0
  98. package/skills/wix-headless-fast/references/cms/seed/SEED.md +103 -0
  99. package/skills/wix-headless-fast/references/cms/seed/seed-cms.mjs +324 -0
  100. package/skills/wix-headless-fast/references/events/INSTRUCTIONS.md +149 -0
  101. package/skills/wix-headless-fast/references/events/app/components/events/EventConfirmationView.tsx +66 -0
  102. package/skills/wix-headless-fast/references/events/app/components/events/EventRegistrationView.tsx +176 -0
  103. package/skills/wix-headless-fast/references/events/app/components/events/EventsView.tsx +118 -0
  104. package/skills/wix-headless-fast/references/events/app/hooks/events/useEventRegistration.ts +117 -0
  105. package/skills/wix-headless-fast/references/events/app/hooks/events/useEvents.ts +59 -0
  106. package/skills/wix-headless-fast/references/events/app/wix/events/events.ts +136 -0
  107. package/skills/wix-headless-fast/references/events/app/wix/events/registration.ts +128 -0
  108. package/skills/wix-headless-fast/references/events/app/wix/events/types.ts +61 -0
  109. package/skills/wix-headless-fast/references/events/app-astro/layouts/SiteLayout.astro +40 -0
  110. package/skills/wix-headless-fast/references/events/app-astro/pages/event-confirmation.astro +12 -0
  111. package/skills/wix-headless-fast/references/events/app-astro/pages/events/[slug].astro +80 -0
  112. package/skills/wix-headless-fast/references/events/app-astro/pages/events.astro +21 -0
  113. package/skills/wix-headless-fast/references/events/lock/astro/package-lock.json +11884 -0
  114. package/skills/wix-headless-fast/references/events/seed/SEED.md +86 -0
  115. package/skills/wix-headless-fast/references/events/seed/seed-events.mjs +276 -0
  116. package/skills/wix-headless-fast/references/forms/INSTRUCTIONS.md +150 -0
  117. package/skills/wix-headless-fast/references/forms/app/hooks/forms/useWixForm.ts +317 -0
  118. package/skills/wix-headless-fast/references/forms/app/wix/forms/forms.ts +269 -0
  119. package/skills/wix-headless-fast/references/forms/app/wix/forms/submissions.ts +231 -0
  120. package/skills/wix-headless-fast/references/forms/app/wix/forms/types.ts +135 -0
  121. package/skills/wix-headless-fast/references/forms/lock/astro/package-lock.json +10593 -0
  122. package/skills/wix-headless-fast/references/forms/seed/SEED.md +108 -0
  123. package/skills/wix-headless-fast/references/forms/seed/seed-forms.mjs +320 -0
  124. package/skills/wix-headless-fast/references/members/INSTRUCTIONS.md +63 -0
  125. package/skills/wix-headless-fast/references/members/app/components/members/AccountView.tsx +60 -0
  126. package/skills/wix-headless-fast/references/members/app/components/members/LoginForm.tsx +155 -0
  127. package/skills/wix-headless-fast/references/members/app/components/members/MemberMenu.tsx +78 -0
  128. package/skills/wix-headless-fast/references/members/app/components/members/RequireAuth.tsx +47 -0
  129. package/skills/wix-headless-fast/references/members/app/hooks/members/useMember.ts +66 -0
  130. package/skills/wix-headless-fast/references/members/app/wix/members/auth.ts +88 -0
  131. package/skills/wix-headless-fast/references/members/app/wix/members/client.ts +53 -0
  132. package/skills/wix-headless-fast/references/members/app/wix/members/member-store.ts +122 -0
  133. package/skills/wix-headless-fast/references/members/app/wix/members/members.ts +50 -0
  134. package/skills/wix-headless-fast/references/members/app/wix/members/types.ts +21 -0
  135. package/skills/wix-headless-fast/references/members/app-astro/layouts/SiteLayout.astro +42 -0
  136. package/skills/wix-headless-fast/references/members/app-astro/pages/account.astro +10 -0
  137. package/skills/wix-headless-fast/references/members/app-astro/pages/login.astro +11 -0
  138. package/skills/wix-headless-fast/references/members/lock/astro/package-lock.json +10329 -0
  139. package/skills/wix-headless-fast/references/members/seed/SEED.md +39 -0
  140. package/skills/wix-headless-fast/references/members/seed/seed-members.mjs +94 -0
  141. package/skills/wix-headless-fast/references/portfolio/INSTRUCTIONS.md +134 -0
  142. package/skills/wix-headless-fast/references/portfolio/app/components/portfolio/CollectionProjectsView.tsx +110 -0
  143. package/skills/wix-headless-fast/references/portfolio/app/components/portfolio/CollectionsView.tsx +90 -0
  144. package/skills/wix-headless-fast/references/portfolio/app/components/portfolio/ProjectDetailView.tsx +115 -0
  145. package/skills/wix-headless-fast/references/portfolio/app/hooks/portfolio/useCollectionProjects.ts +59 -0
  146. package/skills/wix-headless-fast/references/portfolio/app/hooks/portfolio/useCollections.ts +39 -0
  147. package/skills/wix-headless-fast/references/portfolio/app/hooks/portfolio/useProjectDetail.ts +58 -0
  148. package/skills/wix-headless-fast/references/portfolio/app/wix/portfolio/portfolio.ts +165 -0
  149. package/skills/wix-headless-fast/references/portfolio/app/wix/portfolio/types.ts +55 -0
  150. package/skills/wix-headless-fast/references/portfolio/app-astro/layouts/SiteLayout.astro +40 -0
  151. package/skills/wix-headless-fast/references/portfolio/app-astro/pages/portfolio/[slug].astro +30 -0
  152. package/skills/wix-headless-fast/references/portfolio/app-astro/pages/portfolio.astro +21 -0
  153. package/skills/wix-headless-fast/references/portfolio/app-astro/pages/projects/[slug].astro +29 -0
  154. package/skills/wix-headless-fast/references/portfolio/lock/astro/package-lock.json +10197 -0
  155. package/skills/wix-headless-fast/references/portfolio/seed/SEED.md +78 -0
  156. package/skills/wix-headless-fast/references/portfolio/seed/seed-portfolio.mjs +258 -0
  157. package/skills/wix-headless-fast/references/pricing-plans/INSTRUCTIONS.md +133 -0
  158. package/skills/wix-headless-fast/references/pricing-plans/app/components/pricing-plans/PlanDetailView.tsx +58 -0
  159. package/skills/wix-headless-fast/references/pricing-plans/app/components/pricing-plans/PlansView.tsx +126 -0
  160. package/skills/wix-headless-fast/references/pricing-plans/app/hooks/pricing-plans/usePlanPurchase.ts +37 -0
  161. package/skills/wix-headless-fast/references/pricing-plans/app/hooks/pricing-plans/usePlans.ts +39 -0
  162. package/skills/wix-headless-fast/references/pricing-plans/app/wix/pricing-plans/plans.ts +75 -0
  163. package/skills/wix-headless-fast/references/pricing-plans/app/wix/pricing-plans/purchase.ts +45 -0
  164. package/skills/wix-headless-fast/references/pricing-plans/app/wix/pricing-plans/types.ts +30 -0
  165. package/skills/wix-headless-fast/references/pricing-plans/app-astro/layouts/SiteLayout.astro +41 -0
  166. package/skills/wix-headless-fast/references/pricing-plans/app-astro/pages/plans/[slug].astro +40 -0
  167. package/skills/wix-headless-fast/references/pricing-plans/app-astro/pages/plans.astro +21 -0
  168. package/skills/wix-headless-fast/references/pricing-plans/lock/astro/package-lock.json +11226 -0
  169. package/skills/wix-headless-fast/references/pricing-plans/seed/SEED.md +71 -0
  170. package/skills/wix-headless-fast/references/pricing-plans/seed/seed-pricing-plans.mjs +279 -0
  171. package/skills/wix-headless-fast/references/restaurants/INSTRUCTIONS.md +165 -0
  172. package/skills/wix-headless-fast/references/restaurants/app/components/restaurants/MenuView.tsx +142 -0
  173. package/skills/wix-headless-fast/references/restaurants/app/components/restaurants/OrderCartButton.tsx +26 -0
  174. package/skills/wix-headless-fast/references/restaurants/app/components/restaurants/OrderCartDrawer.tsx +121 -0
  175. package/skills/wix-headless-fast/references/restaurants/app/components/restaurants/ReservationView.tsx +155 -0
  176. package/skills/wix-headless-fast/references/restaurants/app/hooks/restaurants/useMenus.ts +55 -0
  177. package/skills/wix-headless-fast/references/restaurants/app/hooks/restaurants/useOrderCart.ts +43 -0
  178. package/skills/wix-headless-fast/references/restaurants/app/hooks/restaurants/useReservation.ts +177 -0
  179. package/skills/wix-headless-fast/references/restaurants/app/wix/restaurants/menu.ts +165 -0
  180. package/skills/wix-headless-fast/references/restaurants/app/wix/restaurants/order-store.ts +103 -0
  181. package/skills/wix-headless-fast/references/restaurants/app/wix/restaurants/ordering.ts +254 -0
  182. package/skills/wix-headless-fast/references/restaurants/app/wix/restaurants/reservations.ts +146 -0
  183. package/skills/wix-headless-fast/references/restaurants/app/wix/restaurants/types.ts +168 -0
  184. package/skills/wix-headless-fast/references/restaurants/app-astro/layouts/SiteLayout.astro +47 -0
  185. package/skills/wix-headless-fast/references/restaurants/app-astro/pages/menu.astro +22 -0
  186. package/skills/wix-headless-fast/references/restaurants/app-astro/pages/reservations.astro +12 -0
  187. package/skills/wix-headless-fast/references/restaurants/lock/astro/package-lock.json +12560 -0
  188. package/skills/wix-headless-fast/references/restaurants/seed/SEED.md +81 -0
  189. package/skills/wix-headless-fast/references/restaurants/seed/seed-restaurants.mjs +479 -0
  190. package/skills/wix-headless-fast/references/shared/CONTENT.md +22 -0
  191. package/skills/wix-headless-fast/references/shared/CUSTOM_OPERATIONS.md +73 -0
  192. package/skills/wix-headless-fast/references/shared/DESIGN.md +26 -0
  193. package/skills/wix-headless-fast/references/shared/app/styles/global.css +52 -0
  194. package/skills/wix-headless-fast/references/shared/app/wix/config.ts +15 -0
  195. package/skills/wix-headless-fast/references/shared/app/wix/media.ts +27 -0
  196. package/skills/wix-headless-fast/references/shared/app/wix/money.ts +24 -0
  197. package/skills/wix-headless-fast/references/shared/app/wix/sdk.ts +76 -0
  198. package/skills/wix-headless-fast/references/shared/capabilities/media-upload/app/wix/media-upload/client.ts +46 -0
  199. package/skills/wix-headless-fast/references/shared/capabilities/media-upload/app-astro/pages/api/wix/media-upload.ts +46 -0
  200. package/skills/wix-headless-fast/references/shared/seed/images.mjs +145 -0
  201. package/skills/wix-headless-fast/references/storefront/INSTRUCTIONS.md +149 -0
  202. package/skills/wix-headless-fast/references/storefront/app/components/storefront/CartButton.tsx +26 -0
  203. package/skills/wix-headless-fast/references/storefront/app/components/storefront/CartDrawer.tsx +121 -0
  204. package/skills/wix-headless-fast/references/storefront/app/components/storefront/ProductCard.tsx +100 -0
  205. package/skills/wix-headless-fast/references/storefront/app/components/storefront/ProductDetailView.tsx +130 -0
  206. package/skills/wix-headless-fast/references/storefront/app/components/storefront/ProductGrid.tsx +48 -0
  207. package/skills/wix-headless-fast/references/storefront/app/components/storefront/ShopView.tsx +66 -0
  208. package/skills/wix-headless-fast/references/storefront/app/components/storefront/VariantPicker.tsx +103 -0
  209. package/skills/wix-headless-fast/references/storefront/app/hooks/storefront/useCart.ts +48 -0
  210. package/skills/wix-headless-fast/references/storefront/app/hooks/storefront/useProductDetail.ts +140 -0
  211. package/skills/wix-headless-fast/references/storefront/app/hooks/storefront/useShop.ts +80 -0
  212. package/skills/wix-headless-fast/references/storefront/app/wix/storefront/cart-store.ts +101 -0
  213. package/skills/wix-headless-fast/references/storefront/app/wix/storefront/cart.ts +221 -0
  214. package/skills/wix-headless-fast/references/storefront/app/wix/storefront/catalog.ts +215 -0
  215. package/skills/wix-headless-fast/references/storefront/app/wix/storefront/types.ts +109 -0
  216. package/skills/wix-headless-fast/references/storefront/app-astro/layouts/SiteLayout.astro +46 -0
  217. package/skills/wix-headless-fast/references/storefront/app-astro/pages/products/[slug].astro +56 -0
  218. package/skills/wix-headless-fast/references/storefront/app-astro/pages/shop.astro +23 -0
  219. package/skills/wix-headless-fast/references/storefront/lock/astro/package-lock.json +12247 -0
  220. package/skills/wix-headless-fast/references/storefront/seed/SEED.md +85 -0
  221. package/skills/wix-headless-fast/references/storefront/seed/seed-store.mjs +415 -0
  222. package/skills/wix-manage/SKILL.md +28 -2
  223. package/skills/wix-manage/references/bookings/booking-system-integration-gaps.md +20 -13
  224. package/skills/wix-manage/references/bookings/end-to-end-booking-flow.md +24 -11
  225. package/skills/wix-manage/references/cms/cms-ecommerce-catalog-integration.md +5 -5
  226. package/skills/wix-manage/references/google-ads/manage-campaign-success-guide.md +141 -0
  227. package/skills/wix-manage/references/google-business-profile/connect-google-business-profile.md +134 -0
  228. package/skills/wix-manage/references/google-business-profile/manage-google-business-profile-locations.md +182 -0
  229. package/skills/wix-manage/references/marketing/create-and-publish-social-post.md +3 -0
  230. package/skills/wix-manage/references/seo/manage-seo-tags.md +315 -0
  231. package/skills/wix-manage/references/seo/manage-url-redirects.md +250 -0
  232. package/skills/wix-manage/references/sites/query-sites.md +72 -161
  233. package/skills/wix-manage/references/stores/create-product-catalog-v3.md +21 -6
  234. package/skills/wix-manage/references/stores/update-product-with-options.md +83 -0
  235. package/skills/wix-replatform/resources/rp-mapper/wix-business-solutions-taxonomy.md +5 -6
  236. package/skills/wix-vibe-headless/SKILL.md +18 -4
  237. package/skills/wix-vibe-headless/install/deploy.cjs +12 -4
  238. package/skills/wix-vibe-headless/install/pin-agents-md.cjs +2 -1
  239. package/skills/wix-vibe-headless/platforms/base44-ecom-light-seed.md +16 -10
  240. package/skills/wix-vibe-headless/platforms/base44-ecom-light.md +13 -8
  241. package/skills/wix-vibe-headless/platforms/base44.md +27 -62
  242. package/skills/wix-vibe-headless/platforms/generic.md +6 -3
  243. package/skills/wix-vibe-headless/references/bookings/INSTRUCTIONS.md +45 -0
  244. package/skills/wix-vibe-headless/references/bookings/app/components/RentalDurationPicker.jsx +67 -0
  245. package/skills/wix-vibe-headless/references/bookings/app/hooks/useRentalDuration.js +128 -0
  246. package/skills/wix-vibe-headless/references/bookings/app/hooks/useServiceDetail.js +5 -3
  247. package/skills/wix-vibe-headless/references/bookings/app/rest/wix-bookings-checkout.js +9 -8
  248. package/skills/wix-vibe-headless/references/bookings/app/rest/wix-bookings-rentals.js +250 -0
  249. package/skills/wix-vibe-headless/references/bookings/app/rest/wix-bookings-services.js +12 -5
  250. package/skills/wix-vibe-headless/references/bookings/seed/SEED.md +41 -0
  251. package/skills/wix-vibe-headless/references/bookings/seed/seed-rentals.js +267 -0
  252. package/skills/wix-vibe-headless/references/cms/INSTRUCTIONS.md +6 -3
  253. package/skills/wix-vibe-headless/references/forms/INSTRUCTIONS.md +470 -0
  254. package/skills/wix-vibe-headless/references/forms/app/hooks/useWixForm.js +425 -0
  255. package/skills/wix-vibe-headless/references/forms/app/lib/wix-form-schema-utils.js +187 -0
  256. package/skills/wix-vibe-headless/references/forms/app/rest/wix-forms-submissions.js +238 -0
  257. package/skills/wix-vibe-headless/references/forms/app/rest/wix-forms.js +108 -0
  258. package/skills/wix-vibe-headless/references/forms/seed/SEED.md +1762 -0
  259. package/skills/wix-vibe-headless/references/rentals/INSTRUCTIONS.md +13 -0
  260. package/skills/wix-vibe-headless/references/restaurants/INSTRUCTIONS.md +4 -1
  261. package/skills/wix-vibe-headless/references/restaurants/app/components/OrderCartDrawer.jsx +23 -11
  262. package/skills/wix-vibe-headless/references/restaurants/app/context/OrderCartContext.jsx +1 -1
  263. package/skills/wix-vibe-headless/references/restaurants/app/rest/wix-restaurants-ordering.js +29 -31
  264. package/skills/wix-vibe-headless/references/storefront/INSTRUCTIONS.md +152 -92
  265. package/skills/wix-vibe-headless/references/storefront/app/components/CartDrawer.jsx +37 -38
  266. package/skills/wix-vibe-headless/references/storefront/app/context/CartContext.jsx +2 -2
  267. package/skills/wix-vibe-headless/references/storefront/app/hooks/useProductDetail.js +15 -8
  268. package/skills/wix-vibe-headless/references/storefront/app/lib/storeImage.js +37 -0
  269. package/skills/wix-vibe-headless/references/storefront/app/rest/wix-store-cart.js +35 -35
  270. package/skills/wix-vibe-headless/references/storefront/app/rest/wix-store-catalog.js +18 -6
  271. package/skills/wix-vibe-headless/references/storefront/seed/SEED.md +30 -7
  272. package/skills/wix-vibe-headless/references/storefront/seed/seed-store.js +46 -10
  273. package/skills/wix-app/references/editor-react-component/A11Y-REVIEW-REFERENCE.md +0 -172
  274. package/skills/wix-app/references/editor-react-component/A11Y-REVIEW.md +0 -143
  275. package/skills/wix-app/references/editor-react-component/COMPONENT-API.md +0 -516
  276. package/skills/wix-app/references/editor-react-component/COMPONENT-CONFIGURATION.md +0 -225
  277. package/skills/wix-app/references/editor-react-component/EDIT-FLOW.md +0 -6
  278. package/skills/wix-app/references/editor-react-component/REACT-PATTERNS.md +0 -95
  279. package/skills/wix-vibe-headless/references/storefront/app/components/ProductCard.jsx +0 -110
  280. package/skills/wix-vibe-headless/references/storefront/app/components/ProductGallery.jsx +0 -51
  281. package/skills/wix-vibe-headless/references/storefront/app/components/ProductGrid.jsx +0 -49
  282. package/skills/wix-vibe-headless/references/storefront/app/components/VariantPicker.jsx +0 -92
  283. package/skills/wix-vibe-headless/references/storefront/app/pages/ProductDetail.jsx +0 -139
@@ -275,6 +275,8 @@ curl -X POST "https://www.wixapis.com/stores/v3/bulk/inventory-items/create" \
275
275
 
276
276
  ### Update Media Only
277
277
 
278
+ Sets the product-level gallery (`media.itemsInfo.items`). For an image shown per option choice (a swatch's photo), see **Per-choice media** below.
279
+
278
280
  ```bash
279
281
  curl -X PATCH "https://www.wixapis.com/stores/v3/products/{productId}" \
280
282
  -H "Content-Type: application/json" \
@@ -297,6 +299,56 @@ curl -X PATCH "https://www.wixapis.com/stores/v3/products/{productId}" \
297
299
  }'
298
300
  ```
299
301
 
302
+ ### Choice & variant fields (what you can set)
303
+
304
+ Send these inside the `options` / `variantsInfo.variants` arrays — **both arrays complete, in the
305
+ same PATCH**, with the current `revision`, and **identity-preserving** (see *Update Options and
306
+ Variants*): keep the option's `id` and every `choiceId`, or the ids are re-minted and the existing
307
+ variants no longer resolve (`400 "Variant choice not found in product options"`). Each variant needs
308
+ its `id`, its `choices` (by `optionChoiceIds` — or `optionChoiceNames`, see *Gotchas*) **and** a
309
+ `price` — omitting price is `400 "price must not be empty"`.
310
+
311
+ **Option choice** (`options[].choicesSettings.choices[]`):
312
+ - `name`, `choiceType`, `colorCode` — the choice's identity and swatch colour.
313
+ - `media` = `{ "items": [ { "mediaId" } | { "url" } ] }` — the product photos shown when this choice is picked. `url` is write-only; on read you get `mediaId` (request the `PRODUCT_CHOICES_MEDIA_REFERENCES` mask). Use `media`, **not** `linkedMedia` (a separate display-filter, returned empty when you read `media`).
314
+ - **Gallery-first; the id you link is the gallery item's, not the upload's.** Add the `url` to the gallery, then read the product back and link the id you see there:
315
+
316
+ ```
317
+ GET /stores/v3/products/{id}?fields=MEDIA_ITEMS_INFO
318
+ # → media.itemsInfo.items[].id = "abc~mv2.jpg" ← link THIS as choice media.items[].mediaId
319
+ # the id from POST /site-media/v1/files/import or /files/get-file-by-id 400s as a choice mediaId
320
+ ```
321
+ `{ "url" }` works in place of `{ "mediaId" }` too, but only once the image is already in the gallery.
322
+ - `displayImage` — the image shown on the swatch itself (distinct from `media`).
323
+ - Read-only, don't send: `inStock`, `visible`, `key`.
324
+
325
+ **Variant** (`variantsInfo.variants[]`, by its `id` from Get Product; always send `choices` + `price` with it):
326
+ - `price` = `{ "actualPrice": { "amount" }, "compareAtPrice": { "amount" } }` — set `compareAtPrice` above `actualPrice` for a strikethrough sale; omit it for full price.
327
+ - `sku`, `barcode` — per combination.
328
+ - `visible` — hide a single variant.
329
+ - `revenueDetails` — cost / profit tracking.
330
+ - Read-only, don't send: `media` (derived from the choices' media), `inventoryStatus` (stock — use the Inventory API, see *Set Stock for New Variants*), `subscriptionPricesInfo`.
331
+
332
+ ```bash
333
+ # A choice image + a variant's sale price, one PATCH. Both arrays are complete and keep their ids —
334
+ # this exact shape is the one that succeeds; the two shortcuts (choices by name only, or a variant
335
+ # without its choices/price) each 400.
336
+ curl -X PATCH "https://www.wixapis.com/stores/v3/products/{productId}" \
337
+ -H "Content-Type: application/json" -H "Authorization: <AUTH>" \
338
+ -d '{ "product": { "id": "{productId}", "revision": "{currentRevision}",
339
+ "options": [ { "id": "{optionId}", "name": "Color", "optionRenderType": "COLOR_CHOICES",
340
+ "choicesSettings": { "choices": [
341
+ { "choiceId": "{choiceId1}", "name": "Red", "choiceType": "ONE_COLOR", "colorCode": "#C0392B",
342
+ "media": { "items": [ { "mediaId": "abc~mv2.jpg" } ] } },
343
+ { "choiceId": "{choiceId2}", "name": "Blue", "choiceType": "ONE_COLOR", "colorCode": "#2C3E50" } ] } } ],
344
+ "variantsInfo": { "variants": [
345
+ { "id": "{variantId1}", "sku": "TEE-RED-L",
346
+ "price": { "actualPrice": { "amount": "20" }, "compareAtPrice": { "amount": "30" } },
347
+ "choices": [ { "optionChoiceIds": { "optionId": "{optionId}", "choiceId": "{choiceId1}" } } ] },
348
+ { "id": "{variantId2}", "price": { "actualPrice": { "amount": "20" } },
349
+ "choices": [ { "optionChoiceIds": { "optionId": "{optionId}", "choiceId": "{choiceId2}" } } ] } ] } } }'
350
+ ```
351
+
300
352
  ### Update Variant Price Only
301
353
 
302
354
  Read `{existingVariantId}` off the Get Product response; a Search or Query Products result does not carry it.
@@ -325,6 +377,35 @@ curl -X PATCH "https://www.wixapis.com/stores/v3/products/{productId}" \
325
377
  }'
326
378
  ```
327
379
 
380
+ ### Attach a Digital File
381
+
382
+ A `DIGITAL` product is **sellable** only when its variant carries both a digital file and stock. Upload the file first ([Upload Media to Wix](../media/upload-media-to-wix.md) → Generate Upload URL, then `PUT` the bytes), then send its `file.id` on the variant — `digitalProperties` is a variant field, never a product field.
383
+
384
+ ```bash
385
+ curl -X PATCH "https://www.wixapis.com/stores/v3/products/{productId}" \
386
+ -H "Content-Type: application/json" \
387
+ -H "Authorization: <AUTH>" \
388
+ -d '{
389
+ "product": {
390
+ "id": "{productId}",
391
+ "revision": "{currentRevision}",
392
+ "variantsInfo": {
393
+ "variants": [
394
+ {
395
+ "id": "{existingVariantId}",
396
+ "price": { "actualPrice": { "amount": "9.99" } },
397
+ "visible": true,
398
+ "inventoryItem": { "inStock": true },
399
+ "digitalProperties": { "digitalFile": { "id": "{fileId}" } }
400
+ }
401
+ ]
402
+ }
403
+ }
404
+ }'
405
+ ```
406
+
407
+ Confirm from `product.variantsInfo.variants[].digitalProperties.digitalFile` in the response.
408
+
328
409
  ## Important Notes
329
410
 
330
411
  - A request to hide a product is a `visible: false` update on the product, never a Delete Product call and never a variant-only change.
@@ -348,3 +429,5 @@ curl -X PATCH "https://www.wixapis.com/stores/v3/products/{productId}" \
348
429
  | `variantsInfo is invalid: variants has size 0, expected 1 or more` | Variants were read from a Search or Query Products response, which does not return them | Re-read the product with Get Product and send its `variantsInfo.variants` |
349
430
  | `Missing option choices` or `INVALID_DEFAULT_VARIANT` | Product has options but at least one variant has no matching choices | Rebuild `variantsInfo.variants` so every variant includes choices for all product options |
350
431
  | `DIGITAL_PRODUCT_CANNOT_BE_VISIBLE_IN_POS` | Sent `visibleInPos: true` on a digital product | Digital products can't be visible in POS; leave `visibleInPos` out of the body |
432
+ | `ITEM_NOT_FOUND_IN_CATALOG` at add-to-cart, product exists | A `DIGITAL` variant has no `digitalProperties.digitalFile` | Attach a file — see [Attach a Digital File](#attach-a-digital-file) |
433
+ | `exceeds available inventory` at add-to-cart, product exists | The variant has no stock (`DIGITAL` products included) | Set `inventoryItem.inStock: true` on the variant |
@@ -25,8 +25,7 @@ This distinction must stay explicit in mapper output.
25
25
  It owns the purchase flow and operational commerce entities that are reused across multiple vertical apps.
26
26
 
27
27
  Typical `eCommerce` entities:
28
- - carts
29
- - checkouts
28
+ - carts (the unified cart + checkout entity)
30
29
  - orders
31
30
  - order billing / refunds
32
31
  - payment and fulfillment state tied to orders
@@ -90,19 +89,19 @@ Main page:
90
89
  - [Integrating with Wix's Business Solutions](https://dev.wix.com/docs/build-apps/get-started/overview/integrating-with-wix-s-business-solutions)
91
90
 
92
91
  Short description:
93
- - Shared commerce platform for purchase flow and order operations. It is the canonical target for carts, checkouts, and orders, even when catalog data originates in a vertical app such as Stores or Bookings.
92
+ - Shared commerce platform for purchase flow and order operations. It is the canonical target for carts (Cart V2, which now also covers checkout) and orders, even when catalog data originates in a vertical app such as Stores or Bookings.
94
93
 
95
94
  Primary entities:
96
95
 
97
96
  | Entity | What it does | Docs |
98
97
  | --- | --- | --- |
99
- | `cart` | First phase of the purchase flow; holds line items, buyer references, discounts, and pricing context before checkout | [About the eCommerce Cart API](https://dev.wix.com/docs/rest/business-solutions/e-commerce/purchase-flow/cart/cart/introduction) |
100
- | `current-cart` | Visitor/member scoped cart used in live purchase flows | [About the eCommerce Current Cart API](https://dev.wix.com/docs/sdk/backend-modules/ecom/current-cart/introduction) |
101
- | `checkout` | Second phase of purchase flow; holds calculated prices, tax, billing, shipping, and discount state before order creation | [About the eCommerce Checkout API](https://dev.wix.com/docs/sdk/backend-modules/ecom/checkout/introduction) |
98
+ | `cart` | The unified purchase-flow entity — holds line items, buyer/contact info, discounts, delivery, billing, and payment context all the way through placing the order. | [About the Cart API](https://dev.wix.com/docs/rest/business-solutions/e-commerce/purchase-flow/cart-v2/introduction) |
99
+ | `current-cart` | The current cart for a visitor/member session — the same entity as `cart`, addressed by the shopper's session rather than a cart id. | [About the Cart API](https://dev.wix.com/docs/rest/business-solutions/e-commerce/purchase-flow/cart-v2/introduction) |
102
100
  | `order` | Final commerce record for completed or externally recorded purchases | [About the Orders API](https://dev.wix.com/docs/rest/business-solutions/e-commerce/orders/orders/introduction) |
103
101
  | `order-billing` | Payment capture, void, and refund operations for eCommerce orders | [About the Order Billing API](https://dev.wix.com/docs/api-reference/business-solutions/e-commerce/orders/order-billing/introduction) |
104
102
 
105
103
  Mapper notes:
104
+ - **A source system's separate "checkout" has no distinct Wix target.** The cart is the unified purchase-flow entity (there's no separate checkout), so map a source checkout's *input* state onto `cart`: billing → `paymentInfo.billingAddress`, shipping/delivery → `deliveryInfo`, applied coupons → cart `coupons`. **Calculated price *and* payment figures are NOT stored on the cart** — both the price totals (`summary.priceSummary`) and the payment breakdown (`summary.paymentSummary` — amount due, gift-card deductions, and the like) are computed on demand by Calculate/Estimate Cart (returned in a `CartSummary`), and the final figures live on the `order` after placement — so don't try to persist a source checkout's computed totals on the cart.
106
105
  - If the source platform exposes products and orders in one model, split catalog entities into the vertical app and transaction entities into `ecommerce`.
107
106
  - If the source has historical orders but no cart or checkout history, map directly to `order` and document missing pre-purchase state.
108
107
 
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: wix-vibe-headless
3
- description: "Client-only, dependency-free REST scaffolds for connecting an already-built front end (a vibe-coded app, an HTML/JSX/Vite project, a design-tool export) to a live Wix site over the site's public WIX_CLIENT_ID — the browser talks to Wix directly, no SDK, no backend, no build step. One skill covering every Wix business solution: Stores/eCommerce storefront (products, cart, checkout), Bookings (services, slots, appointments), Blog (posts, categories, tags), Events & Tickets (browse, RSVP, ticketing), Portfolio (collections, projects, galleries), Restaurants (menu, online ordering, reservations), CMS / Wix Data (list, detail, filter, forms, CRUD), Pricing Plans (memberships, subscriptions, checkout), and Members (custom login — email+password, Google/Facebook, and custom SSO — plus account areas and member-gated content). Each vertical ships a copy-as-is REST layer plus wiring instructions. Read-only over the owner's content — never provisions, never mocks data. Triggers: connect my Wix store/shop, build a storefront over Wix, add a cart and checkout, connect Wix Bookings, take appointments/reservations, show my Wix blog, list my Wix events, sell tickets, take RSVPs, build a portfolio from Wix Portfolio, show my restaurant menu / order online / book a table, display my Wix CMS collection, wire a contact form to Wix, sell membership/subscription plans, add member login / sign up, let members log in with Google or Facebook, custom login page, account / profile page, gate content behind login, sign in with SSO/Okta, 'here is my WIX_CLIENT_ID', connect this app to my Wix site over REST. Use this for CLIENT-ONLY REST integration over an existing site; use `wix-headless` instead for SDK + Wix CLI builds, hosting, and one-prompt new-site creation."
3
+ description: "Client-only, dependency-free REST scaffolds for connecting an already-built front end (a vibe-coded app, an HTML/JSX/Vite project, a design-tool export) to a live Wix site over the site's public WIX_CLIENT_ID — the browser talks to Wix directly, no SDK, no backend, no build step. One skill covering every Wix business solution: Stores/eCommerce storefront (products, cart, checkout), Bookings (services, slots, appointments), Blog (posts, categories, tags), Events & Tickets (browse, RSVP, ticketing), Portfolio (collections, projects, galleries), Restaurants (menu, online ordering, reservations), Forms (any visitor-fillable form — contact/enquiry, signup, waitlist, application, survey, quote request; schema-driven render + submit), CMS / Wix Data (list, detail, filter, CRUD), Pricing Plans (memberships, subscriptions, checkout), and Members (custom login — email+password, Google/Facebook, and custom SSO — plus account areas and member-gated content). Each vertical ships a copy-as-is REST layer plus wiring instructions. Read-only over the owner's content — never provisions, never mocks data. Triggers: connect my Wix store/shop, build a storefront over Wix, add a cart and checkout, connect Wix Bookings, take appointments/reservations, show my Wix blog, list my Wix events, sell tickets, take RSVPs, build a portfolio from Wix Portfolio, show my restaurant menu / order online / book a table, display my Wix CMS collection, wire a contact form to Wix, add a contact/enquiry form, build a signup or application form, take survey responses, sell membership/subscription plans, add member login / sign up, let members log in with Google or Facebook, custom login page, account / profile page, gate content behind login, sign in with SSO/Okta, 'here is my WIX_CLIENT_ID', connect this app to my Wix site over REST. Use this for CLIENT-ONLY REST integration over an existing site; use `wix-headless` instead for SDK + Wix CLI builds, hosting, and one-prompt new-site creation."
4
4
  ---
5
5
 
6
6
  # Wix Vibe Headless — client-only REST connectors
@@ -119,15 +119,29 @@ Each vertical's UI + helpers ship in `references/<vertical>/app/`; copy that dir
119
119
  | The user wants… | Vertical | Read |
120
120
  |---|---|---|
121
121
  | Online store: products, categories, cart, checkout | **storefront** | `references/storefront/INSTRUCTIONS.md` |
122
- | Appointments: services, time slots, booking, checkout | **bookings** | `references/bookings/INSTRUCTIONS.md` |
122
+ | Appointments: services, time slots, booking, checkout — **and the form attached to a bookable service** | **bookings** | `references/bookings/INSTRUCTIONS.md` |
123
+ | Rentals: an item hired for a length **the customer picks** (by the hour or by the day) — Wix Rentals runs on the Bookings APIs, so it is the same vertical | **bookings** | `references/bookings/INSTRUCTIONS.md` ("Rentals") |
123
124
  | Blog/news: post feed, post pages, categories, tags | **blog** | `references/blog/INSTRUCTIONS.md` |
124
- | Events: browse, event page, RSVP, ticketing | **events** | `references/events/INSTRUCTIONS.md` |
125
+ | Events: browse, event page, RSVP, ticketing — **an RSVP is here, not `forms`**, even for one occasion with no tickets | **events** | `references/events/INSTRUCTIONS.md` |
125
126
  | Portfolio/showcase: collections, projects, media galleries | **portfolio** | `references/portfolio/INSTRUCTIONS.md` |
126
127
  | Restaurant: menu, online ordering, table reservations | **restaurants** | `references/restaurants/INSTRUCTIONS.md` |
127
- | CMS content: list/detail, filter/search, forms, data CRUD | **cms** | `references/cms/INSTRUCTIONS.md` |
128
+ | Any visitor-fillable form: contact/enquiry, lead, signup, waitlist, application, feedback/survey, quote request, intake or registration. **Not** an event RSVP (`events`) or a per-service booking form (`bookings`) | **forms** | `references/forms/INSTRUCTIONS.md` |
129
+ | CMS content: list/detail, filter/search, data CRUD. **A visitor-fillable form is `forms`** — cms only when the app must read the entries back | **cms** | `references/cms/INSTRUCTIONS.md` |
128
130
  | Plans & pricing: memberships/subscriptions, subscribe, my plans | **pricing-plans** | `references/pricing-plans/INSTRUCTIONS.md` |
129
131
  | Member accounts: custom login/sign-up (email+password, Google/Facebook, SSO), account area, gated content | **members** | `references/members/INSTRUCTIONS.md` |
130
132
 
133
+ **⚠️ Anything a visitor fills in and submits is `forms` — with three exceptions:**
134
+
135
+ 1. **The app must read the entries back → `cms`.** A public gallery, a listing, a member's "my
136
+ submissions". A visitor cannot read Forms submissions, so those need a collection. Submit-only is
137
+ always `forms`: a form wired to `insertDataItem` works, but gives up the dashboard form builder,
138
+ spam protection, submission notifications and CRM contact mapping, and needs the owner to set
139
+ collection permissions by hand before anyone can submit at all.
140
+ 2. **Confirming attendance to an event or occasion → `events`.** A wedding, party or gathering —
141
+ events ships a built-in RSVP registration form. Route there even for a single occasion with no
142
+ tickets.
143
+ 3. **A form attached to a bookable service → `bookings`.**
144
+
131
145
  ### When the request doesn't name a Wix Business Solution — ask, or check the site
132
146
 
133
147
  Don't infer which Wix Business Solution to build (stores, bookings, blog, events, portfolio,
@@ -1,6 +1,6 @@
1
1
  // Post-install deploy — run by base44.md STEP 1 with the vertical(s) the app needs:
2
2
  // node deploy.cjs <vertical> [<vertical> …] --client-id <id> --metasite-id <id>
3
- // (storefront | bookings | blog | cms | portfolio | pricing-plans | events | members)
3
+ // (storefront | bookings | blog | cms | forms | portfolio | pricing-plans | events | members | restaurants)
4
4
  // Pass the two ids from the prompt and this writes src/rest/wix-config.js for you — see WRITE below.
5
5
  // Retyping those ids into the file by hand is how a storefront ships with a dead client id.
6
6
  // ONE mechanism: recursively copy `app/` -> /app/src. The shared transport (app/rest/wix-client.js,
@@ -9,7 +9,7 @@
9
9
  // members and cms names both, and its CMS helpers then come from the skill instead of being
10
10
  // hand-written. Order matters only where two verticals ship a file at the SAME path (both have
11
11
  // components/…, pages/…): the first one listed wins, since the copy never overwrites. Verticals whose
12
- // file sets don't overlap (cms ships utils only, no UI) combine freely.
12
+ // file sets don't overlap (cms and forms ship utils only, no UI) combine freely.
13
13
  // paths are the Base44 sandbox's /app. Re-running is non-destructive: it fills in only missing files,
14
14
  // never overwriting the agent's edits (see COPY), so a later call can add a vertical safely.
15
15
  // No vertical arg -> deploys just the shared transport; re-run with the vertical(s) once known.
@@ -19,7 +19,7 @@ const { existsSync, cpSync, readFileSync, writeFileSync } = require('fs');
19
19
 
20
20
  const REF = '/app/.agents/skills/wix-vibe-headless/references';
21
21
  const WIX_CONFIG = '/app/src/rest/wix-config.js';
22
- const VERTICALS = ['storefront', 'bookings', 'blog', 'cms', 'portfolio', 'pricing-plans', 'events', 'members', 'restaurants'];
22
+ const VERTICALS = ['storefront', 'bookings', 'blog', 'cms', 'forms', 'portfolio', 'pricing-plans', 'events', 'members', 'restaurants'];
23
23
 
24
24
  // force:false + errorOnExist:false — fill in only files that AREN'T there yet; never overwrite.
25
25
  // A re-run (e.g. the "files missing? re-run" fallback) then restores what's missing without
@@ -117,8 +117,16 @@ const clientId = flag('client-id');
117
117
  const metaSiteId = flag('metasite-id');
118
118
  // Verticals are the positional args — drop the flags and their values.
119
119
  const flagArgs = new Set(['--client-id', '--metasite-id', clientId, metaSiteId].filter(Boolean));
120
- const requested = [...new Set(argv.filter((a) => !flagArgs.has(a)))];
120
+ // `rentals` is an alias of the Bookings vertical — Wix Rentals runs on the Bookings APIs. A rental
121
+ // business picks `rentals` and gets the bookings scaffolds; it resolves to bookings everywhere.
122
+ const ALIASES = { rentals: 'bookings' };
123
+ const positional = argv.filter((a) => !flagArgs.has(a));
124
+ const requested = [...new Set(positional.map((a) => ALIASES[a] || a))];
121
125
  const deployed = { verticals: [] };
126
+ // Report any alias resolution so the caller sees an intended mapping (rentals -> bookings), not a
127
+ // silent `bookings` result it might read as "rentals unsupported" and wastefully re-deploy.
128
+ const aliased = [...new Set(positional.filter((a) => ALIASES[a]))].map((a) => `${a} -> ${ALIASES[a]}`);
129
+ if (aliased.length) deployed.aliased = aliased;
122
130
 
123
131
  // Shared transport — always (app/rest/wix-client.js, wix-config.js -> src/rest/).
124
132
  if (existsSync(`${REF}/shared/app`)) cpSync(`${REF}/shared/app`, '/app/src', COPY);
@@ -18,7 +18,8 @@ The Wix skills live under \`.agents/skills/\` — on ANY turn, read them from th
18
18
  - **storefront** — sell physical or digital products online.
19
19
  - **bookings** — let customers book appointments or services with your business.
20
20
  - **blog** — publish articles for visitors to read.
21
- - **cms** — model and serve your own custom, structured content — for anything the other verticals don't cover.
21
+ - **forms** — any visitor-fillable form: contact/enquiry, lead, signup, waitlist, application, feedback/survey, quote request, intake or registration. **Not forms** — an event or occasion RSVP is **events** (built-in RSVP registration form), and a per-service booking form is **bookings**.
22
+ - **cms** — model and serve your own custom, structured content — for anything the other verticals don't cover. **Not cms** — a visitor-fillable form is **forms**; reach for cms only when the app must read the entries back.
22
23
  - **portfolio** — showcase creative work in collections and project pages.
23
24
  - **pricing-plans** — sell memberships or subscriptions to your service.
24
25
  - **events** — publish events and handle RSVPs or ticket sales.
@@ -6,24 +6,27 @@ initial prompt, and the Wix connector is already configured.
6
6
  Your Wix client id is in your prompt — a public, buyer-facing credential (anonymous visitor tokens
7
7
  only), safe in the frontend; use it directly for the Wix client setup.
8
8
 
9
- > **`wix-vibe-headless` and `wix-docs` are the complete build and seed path for this app.** **Do NOT use the Base44 commerce kit (or any Base44 solution kit).**
9
+ > **The Wix skills installed below are the complete build and seed path for this app.** **Do NOT use the Base44 commerce kit (or any Base44 solution kit).**
10
10
 
11
11
  Follow STEPs 1–4 below exactly (run STEP 3 in parallel with STEP 2).
12
12
 
13
13
  ## STEP 1 — Install the Wix skills and deploy the storefront vertical to the app
14
14
 
15
- Install two skills — they land under `.agents/skills/`:
15
+ Install three skills — they land under `.agents/skills/`:
16
16
  - **`wix-vibe-headless`** — the storefront build + seed guide (STEPs 2–3): your main source of truth.
17
- - **`wix-docs`** — a **fallback**: search + read the Wix API docs for anything `wix-vibe-headless`
18
- doesn't cover.
17
+ - **`wix-manage`** — REST recipes for managing and configuring the site (install apps, seed
18
+ catalogs, business setup).
19
+ - **`wix-base44-connector`** — building on Wix from the Base44 sandbox: site context, API
20
+ contracts, and the docs **fallback** — find + read the Wix API docs for anything
21
+ `wix-vibe-headless` doesn't cover.
19
22
 
20
- Run this through exec_tool, exactly as written — installs both skills, deploys the `storefront` REST scaffolds + UI into `src/`, and pins the AGENTS.md note.
23
+ Run this through exec_tool, exactly as written — installs all three skills, deploys the `storefront` REST scaffolds + UI into `src/`, and pins the AGENTS.md note.
21
24
 
22
25
  ```js
23
26
  const { execSync } = require('child_process');
24
27
  const { existsSync, readdirSync } = require('fs');
25
28
  const results = {};
26
- for (const skill of ['wix-vibe-headless', 'wix-docs']) {
29
+ for (const skill of ['wix-vibe-headless', 'wix-manage', 'wix-base44-connector']) {
27
30
  if (existsSync(`/app/.agents/skills/${skill}/SKILL.md`)) { results[skill] = 'already_installed'; continue; }
28
31
  try {
29
32
  const out = execSync(`CI=1 npx -y skills add wix/skills/skills/${skill} --yes 2>&1`,
@@ -58,7 +61,7 @@ cleanup truly seems needed, ask the user first.
58
61
  Seed by calling the storefront's ready-made seed module — read
59
62
  `.agents/skills/wix-vibe-headless/references/storefront/seed/SEED.md` and load its `seed-*.js` via
60
63
  its loader snippet (build-time exec_tool); call its functions with your data. Gaps or an unexpected
61
- shape → the **`wix-docs`** skill.
64
+ shape → the **`wix-base44-connector`** skill's doc discovery.
62
65
 
63
66
  **Auth for these admin calls is the already-configured Wix headless connector — nothing else.** Get its
64
67
  access token and send it as a bearer token:
@@ -73,7 +76,8 @@ Inline via exec_tool, `base44` is already declared — use it directly; do **not
73
76
  inline it throws *"Identifier 'base44' has already been declared."*).
74
77
 
75
78
  **Product images.** Generate with **Base44's built-in image generation**, then attach via the
76
- storefront seed module's image-attach step — `wix-docs` if the module doesn't cover it.
79
+ storefront seed module's image-attach step — `wix-base44-connector` doc discovery if the module
80
+ doesn't cover it.
77
81
 
78
82
  **Seed images with the FINAL url, in one call.** Use the real `https://media.base44.com/...` url
79
83
  from the **completed** `generate_image` result and pass it straight into your single `setupStore`
@@ -83,7 +87,9 @@ urls are ready by the time you seed.
83
87
 
84
88
  ## STEP 4 — Wrap up
85
89
 
86
- **Do NOT add the `<WixManageBanner/>` component** and do not send the user Wix dashboard links — this flow does not include the manage banner or back-office handoff.
90
+ **Do NOT add the `<WixManageBanner/>` component** and never paste a Wix dashboard link or path.
91
+
92
+ **Hand off with one call, before you write anything** — `search_base44_docs(query="how do I manage my store's products, orders and inventory?", prefer_dashboard=true)`. It comes back telling you what to say; add only that the catalog you seeded is mock data they can edit, replace or delete.
87
93
 
88
94
  **Preview briefly, don't chase images.** Broken images are expected — `generate_image` returns a `/__generating__/…` placeholder that the platform swaps for the final url automatically at turn end (failures get a stock fallback). **Do NOT edit or debug image urls.** Leave them and finish.
89
95
 
@@ -101,4 +107,4 @@ const res = await fetch("https://www.wixapis.com/<api-path>", {
101
107
  return await res.json();
102
108
  ```
103
109
 
104
- `base44` is already declared inline in exec_tool — use it directly; do **not** import `@base44/sdk` or call `createClient()`. For what to call, check the storefront seed module (`.agents/skills/wix-vibe-headless/references/storefront/seed/SEED.md`) or look up the endpoint via `wix-docs`.
110
+ `base44` is already declared inline in exec_tool — use it directly; do **not** import `@base44/sdk` or call `createClient()`. For what to call, check the storefront seed module (`.agents/skills/wix-vibe-headless/references/storefront/seed/SEED.md`) or look up the endpoint via the `wix-base44-connector` skill's doc discovery.
@@ -6,24 +6,27 @@ initial prompt, and the Wix connector is already configured.
6
6
  Your Wix client id is in your prompt — a public, buyer-facing credential (anonymous visitor tokens
7
7
  only), safe in the frontend; use it directly for the Wix client setup.
8
8
 
9
- > **`wix-vibe-headless` and `wix-docs` are the complete build path for this app.** **Do NOT use the Base44 commerce kit (or any Base44 solution kit).** **This flow builds the client only — there is no seeding step.**
9
+ > **The Wix skills installed below are the complete build path for this app.** **Do NOT use the Base44 commerce kit (or any Base44 solution kit).** **This flow builds the client only — there is no seeding step.**
10
10
 
11
11
  Follow STEPs 1–3 below exactly.
12
12
 
13
13
  ## STEP 1 — Install the Wix skills and deploy the storefront vertical to the app
14
14
 
15
- Install two skills — they land under `.agents/skills/`:
15
+ Install three skills — they land under `.agents/skills/`:
16
16
  - **`wix-vibe-headless`** — the storefront build guide (STEP 2): your main source of truth.
17
- - **`wix-docs`** — a **fallback**: search + read the Wix API docs for anything `wix-vibe-headless`
18
- doesn't cover.
17
+ - **`wix-manage`** — REST recipes for managing and configuring the site (install apps, seed
18
+ catalogs, business setup).
19
+ - **`wix-base44-connector`** — building on Wix from the Base44 sandbox: site context, API
20
+ contracts, and the docs **fallback** — find + read the Wix API docs for anything
21
+ `wix-vibe-headless` doesn't cover.
19
22
 
20
- Run this through exec_tool, exactly as written — installs both skills, deploys the `storefront` REST scaffolds + UI into `src/`, and pins the AGENTS.md note.
23
+ Run this through exec_tool, exactly as written — installs all three skills, deploys the `storefront` REST scaffolds + UI into `src/`, and pins the AGENTS.md note.
21
24
 
22
25
  ```js
23
26
  const { execSync } = require('child_process');
24
27
  const { existsSync, readdirSync } = require('fs');
25
28
  const results = {};
26
- for (const skill of ['wix-vibe-headless', 'wix-docs']) {
29
+ for (const skill of ['wix-vibe-headless', 'wix-manage', 'wix-base44-connector']) {
27
30
  if (existsSync(`/app/.agents/skills/${skill}/SKILL.md`)) { results[skill] = 'already_installed'; continue; }
28
31
  try {
29
32
  const out = execSync(`CI=1 npx -y skills add wix/skills/skills/${skill} --yes 2>&1`,
@@ -53,7 +56,9 @@ rejects the write. Wire routes/imports in with `find_replace`, leave the rest as
53
56
 
54
57
  **No seeding in this flow** — the client is the only deliverable. Do not seed, populate, or write data to Wix.
55
58
 
56
- **Do NOT add the `<WixManageBanner/>` component** and do not send the user Wix dashboard links — this flow does not include the manage banner or back-office handoff.
59
+ **Do NOT add the `<WixManageBanner/>` component** and never paste a Wix dashboard link or path.
60
+
61
+ **Hand off with one call, before you write anything** — `search_base44_docs(query="how do I manage my store's products, orders and inventory?", prefer_dashboard=true)`. It comes back telling you what to say.
57
62
 
58
63
  **Preview briefly, don't chase images.** Broken images are expected — `generate_image` returns a `/__generating__/…` placeholder that the platform swaps for the final url automatically at turn end (failures get a stock fallback). **Do NOT edit or debug image urls.** Leave them and finish.
59
64
 
@@ -71,4 +76,4 @@ const res = await fetch("https://www.wixapis.com/<api-path>", {
71
76
  return await res.json();
72
77
  ```
73
78
 
74
- `base44` is already declared inline in exec_tool — use it directly; do **not** import `@base44/sdk` or call `createClient()`. For what to call, check the storefront seed module (`.agents/skills/wix-vibe-headless/references/storefront/seed/SEED.md`) or look up the endpoint via `wix-docs`.
79
+ `base44` is already declared inline in exec_tool — use it directly; do **not** import `@base44/sdk` or call `createClient()`. For what to call, check the storefront seed module (`.agents/skills/wix-vibe-headless/references/storefront/seed/SEED.md`) or look up the endpoint via the `wix-base44-connector` skill's doc discovery.
@@ -6,47 +6,40 @@ initial prompt, and the Wix connector is already configured; use it for all admi
6
6
  Your Wix client id is in your prompt — a public, buyer-facing credential (anonymous visitor tokens
7
7
  only), safe in the frontend; use it directly for the Wix client setup.
8
8
 
9
- > **`wix-vibe-headless` and `wix-docs` are the complete build and seed path for this app — the Wix connector supplies the token for admin API calls.** **Do NOT use the Base44 commerce kit (or any Base44 solution kit).**
9
+ > **The Wix skills installed below are the complete build and seed path for this app — the Wix connector supplies the token for admin API calls.** **Do NOT use the Base44 commerce kit (or any Base44 solution kit).**
10
10
 
11
- Follow STEPs 1–5 below exactly (run STEP 4 in parallel with STEP 3).
11
+ Follow STEPs 1–5 below exactly (run STEP 4 in parallel with STEP 3 — **except `forms`**, see STEP 3).
12
12
 
13
13
  ## STEP 1 — Install the Wix skills locally
14
14
 
15
- Install two skills — they land under `.agents/skills/`:
16
- - **`wix-vibe-headless`** — the client build **and** seed guide (STEPs 3–4): your main source of
17
- truth. Seeding lives here too, per-vertical under `references/<vertical>/seed/`.
18
- - **`wix-docs`** — a **fallback**: search + read the Wix API docs for anything `wix-vibe-headless`
19
- doesn't cover.
15
+ Install three skills under `.agents/skills/`: **`wix-vibe-headless`** (the client build + seed guide — your main source of truth), **`wix-manage`** (REST recipes to manage/configure the site), and **`wix-base44-connector`** (site context + API-doc discovery, the fallback for anything the others don't cover).
20
16
 
21
- Run this through exec_tool, exactly as written — installs both skills, deploys REST scaffolds + UI into `src/`, writes `wix-config.js`, and pins the AGENTS.md note.
17
+ Run this through exec_tool, exactly as written — installs all three skills, deploys REST scaffolds + UI into `src/`, writes `wix-config.js`, and pins the AGENTS.md note.
22
18
 
23
- **Set `VERTICALS`** to what the prompt asks for (too vague to tell? do STEP 2 first, then set it):
19
+ **Set `VERTICALS`** to what the prompt asks for — **list every vertical the app uses**, since several often join the main one (too vague to tell? do STEP 2 first, then set it). Adding one later: re-run with the extra name.
24
20
 
25
21
  | vertical | pick it when the app needs to |
26
22
  |---|---|
27
23
  | `storefront` | sell products |
28
24
  | `bookings` | take appointments or service bookings |
25
+ | `rentals` | rent out an item for a length the customer picks (by the hour or by the day) |
29
26
  | `blog` | publish articles |
30
27
  | `events` | publish events with RSVPs or ticket sales |
31
28
  | `portfolio` | showcase creative work |
32
- | `pricing-plans` | sell memberships or subscriptions |
29
+ | `pricing-plans` | sell memberships or subscriptions, incl. paid enrollment/access to an online course or program — but an "online store selling courses" is still `storefront` |
33
30
  | `restaurants` | show a menu, take orders, book tables |
34
31
  | `members` | let visitors sign in — this is **auth** |
35
- | `cms` | keep its own structured content — user submissions, galleries, listings, anything the rows above don't already cover |
36
-
37
- **List every vertical the app uses.** `cms` for app-stored content, `members` for visitor sign-in — these often join the main vertical. Adding one later: re-run with the extra name.
32
+ | `forms` | any visitor-fillable form: contact, signup, waitlist, application, survey, quote request (an event RSVP is `events`; a per-service booking form is `bookings`) |
33
+ | `cms` | structured content the app reads back — galleries, listings, "my submissions" (a visitor-fillable form is `forms`) |
38
34
 
39
35
  ```js
40
36
  const { execSync } = require('child_process');
41
37
  const { existsSync, readdirSync } = require('fs');
42
- const VERTICALS = ['storefront']; // ← set from the prompt; list every vertical the app uses
43
- // const VERTICALS = ['members', 'cms']; // ← e.g. visitors sign in AND the app stores what they submit
44
- // COPY these two straight from the prompt — deploy writes them into src/rest/wix-config.js, so never
45
- // retype either one into a file by hand afterwards.
46
- const WIX_CLIENT_ID = '<client id from the prompt>';
38
+ const VERTICALS = ['storefront']; // ← set from the prompt; list every vertical the app uses (e.g. ['members','cms'])
39
+ const WIX_CLIENT_ID = '<client id from the prompt>'; // copy both from the prompt — deploy writes them into src/rest/wix-config.js
47
40
  const WIX_METASITE_ID = '<site id from the prompt>';
48
41
  const results = {};
49
- for (const skill of ['wix-vibe-headless', 'wix-docs']) {
42
+ for (const skill of ['wix-vibe-headless', 'wix-manage', 'wix-base44-connector']) {
50
43
  if (existsSync(`/app/.agents/skills/${skill}/SKILL.md`)) { results[skill] = 'already_installed'; continue; }
51
44
  try {
52
45
  const out = execSync(`CI=1 npx -y skills add wix/skills/skills/${skill} --yes 2>&1`,
@@ -90,63 +83,35 @@ truth for how the client is built.
90
83
 
91
84
  **REST scaffolds + `wix-config.js` are already in `src/rest/`** (STEP 1 wrote them). Some verticals also ship a ready UI client in `src/` — theme + wire it per `INSTRUCTIONS.md`, don't rebuild. **Don't `read_file` deployed files** — every field shape is in `INSTRUCTIONS.md`; read one only on a real error or gap.
92
85
 
86
+ **⚠️ `forms` is the ONE vertical that does NOT run in parallel with STEP 4** — its UI is gated on a
87
+ file the seed writes. Read its `INSTRUCTIONS.md` **Prerequisites** before building any form UI; seed
88
+ it first (STEP 4) and build the rest of the app meanwhile.
89
+
93
90
  **`src/App.jsx`: edit surgically, never rewrite.** It carries required platform auth scaffolding
94
91
  (`AuthProvider`/`useAuth` from `@/lib/AuthContext`); a full rewrite drops them → the validator
95
92
  rejects the write. Wire routes/imports in with `find_replace`, leave the rest as-is.
96
93
 
97
94
  ## STEP 4 — Manage and seed the business
98
95
 
99
- **Never delete or clean up anything on the user's site — seeding is additive only.** It's a live
100
- user-owned business, so never delete or overwrite existing content, even apparent sample data. If a
101
- cleanup truly seems needed, ask the user first.
102
-
103
96
  Seed by calling your vertical's ready-made seed module — read
104
- `.agents/skills/wix-vibe-headless/references/<vertical>/seed/SEED.md` and load its `seed-*.js` via
105
- its loader snippet (build-time exec_tool); call its functions with your data. Gaps or an unexpected
106
- shape → the **`wix-docs`** skill.
107
-
108
- **Auth for these admin calls is the already-configured Wix connector — nothing else.** Get its
109
- access token and send it as a bearer token:
110
-
111
- ```js
112
- const { accessToken } = await base44.asServiceRole.connectors.getConnection("wix");
113
- // then: fetch(url, { headers: { Authorization: `Bearer ${accessToken}`, "Content-Type": "application/json" }, ... })
114
- ```
115
-
116
- Inline via exec_tool, `base44` is already declared — use it directly; do **not** import
117
- `@base44/sdk`, re-declare it, or call `createClient()` (that's for standalone `.js` files only;
118
- inline it throws *"Identifier 'base44' has already been declared."*).
97
+ `.agents/skills/wix-vibe-headless/references/<vertical>/seed/SEED.md` and follow it (the loader
98
+ snippet, admin connector token, entity images with the final `media.base44.com` url, and every field
99
+ shape are there). Gaps or an unexpected shape → the **`wix-base44-connector`** skill's doc discovery.
100
+ Seeding is **admin-only** — not part of the client, which is built solely per the `wix-vibe-headless` skill.
119
101
 
120
- **Entity images.** For image-bearing entities (store products, blog covers, bookings services,
121
- restaurant items, portfolio projects, event heroes, CMS items), generate with **Base44's built-in
122
- image generation**, then attach via the vertical seed module's image-attach step — `wix-docs` if the
123
- module doesn't cover that entity.
124
-
125
- **Seed images with the FINAL url, in one call.** Seeding writes to Wix, so use the real
126
- `https://media.base44.com/...` url from the **completed** `generate_image` result and pass it straight
127
- into your single `setupStore`/seed call (images included). A still-generating `/__generating__/<id>.png`
128
- placeholder is not a real url — Wix can't fetch it. `generate_image` runs in the background while you
129
- build the client, so the urls are ready by the time you seed.
130
-
131
- The connector + seeding are **admin-only** (STEP 4) — **not** part of the client, which is built
132
- solely per the `wix-vibe-headless` skill.
102
+ - **Additive only:** never delete or overwrite the user's content, even apparent sample data; ask first if a cleanup truly seems needed.
103
+ - Inline in exec_tool, `base44` is already declared — use it directly; do **not** `import @base44/sdk`, re-declare it, or call `createClient()` (throws *"Identifier 'base44' has already been declared."*).
133
104
 
134
105
  ## STEP 5 — Wrap up
135
106
 
136
- Once the site is built and seeded:
137
-
138
- 1. **Mount the preview-only manage banner** (required; links the app to its Wix back office; shipped,
139
- self-gates to the preview, never on the published site): render the `<WixManageBanner/>` component
140
- in your Layout's fixed top region, above the header, per your vertical's INSTRUCTIONS STEP 4.
141
- 2. **Ask the user to open** `https://manage.wix.com/dashboard/{metaSiteId}` (substitute your
142
- metasite id) to complete setup in Wix (required), and mention that the preview shows a dismissible
143
- top banner linking to this same dashboard.
107
+ 1. **Mount `<WixManageBanner/>`** (required) in your Layout's fixed top region, above the header, per your vertical's INSTRUCTIONS — it links the app to its Wix back office, self-gates to the preview, and never shows on the published site.
108
+ 2. **Ask the user to open** `https://manage.wix.com/dashboard/{metaSiteId}` (your metasite id) to complete setup in Wix.
144
109
 
145
- **Preview briefly, don't chase images.** Broken images are expected — `generate_image` returns a `/__generating__/…` placeholder that the platform swaps for the final url automatically at turn end (failures get a stock fallback). **Do NOT edit, re-seed, or debug image urls.** Leave them and finish.
110
+ **Don't chase images.** A `/__generating__/…` placeholder is swapped for the final url automatically at turn end — do **not** edit, re-seed, or debug image urls.
146
111
 
147
112
  ## Later admin requests
148
113
 
149
114
  For any later admin/management request, work as in STEP 4: your vertical's seed module first, else
150
- `wix-docs` — all over the connector.
115
+ `wix-base44-connector` doc discovery — all over the connector.
151
116
 
152
- version: v1338
117
+ version: v1341
@@ -27,7 +27,7 @@ Everything is under `.agents/skills/wix-vibe-headless/references/`.
27
27
  - `INSTRUCTIONS.md` — the vertical's build guide + field-shape snippets; `seed/SEED.md` — how the seed
28
28
  module is run.
29
29
 
30
- **The nine verticals — data layer (`app/rest/`) + seed module (`seed/`):**
30
+ **The verticals — data layer (`app/rest/`) + seed module (`seed/`):**
31
31
 
32
32
  | vertical | `app/rest/` data layer | seed module |
33
33
  |---|---|---|
@@ -37,7 +37,8 @@ Everything is under `.agents/skills/wix-vibe-headless/references/`.
37
37
  | events | `wix-events-browse.js`, `wix-events-registration.js` — events & categories; RSVP / ticketing + checkout | `seed-events.js` |
38
38
  | portfolio | `wix-portfolio.js` — collections, projects, galleries | `seed-portfolio.js` |
39
39
  | restaurants | `wix-restaurants-menu.js`, `-ordering.js`, `-reservations.js` — menu; online ordering; table reservations | `seed-restaurants.js` |
40
- | cms | `wix-cms.js` — Wix Data collections: list / detail / filter + form CRUD | `seed-cms.js` |
40
+ | forms | `wix-forms.js`, `wix-forms-submissions.js` — any visitor-fillable form: read the schema; upload attachments, create a submission (schema accessors ship alongside in `lib/wix-form-schema-utils.js`) | *(none — REST shapes in `seed/SEED.md`)* |
41
+ | cms | `wix-cms.js` — Wix Data collections: list / detail / filter | `seed-cms.js` |
41
42
  | pricing-plans | `wix-pricing-plans.js` — plans list + subscribe/checkout | `seed-pricing-plans.js` |
42
43
  | members | `wix-members-auth.js` — custom login/signup (email+password, social, SSO), session, account | *(none — members sign up at runtime; nothing to seed)* |
43
44
 
@@ -49,7 +50,9 @@ the token set) is **universal — follow it as-is**.
49
50
 
50
51
  ## The flow — install → build client → seed → done
51
52
 
52
- Run **build the client** (step 2) and **seed** (step 3) in parallel; parallelize independent work within each.
53
+ Run **build the client** (step 2) and **seed** (step 3) in parallel; parallelize independent work
54
+ within each. **One exception — `forms` must be seeded before its UI is built; read that gate in
55
+ `references/forms/INSTRUCTIONS.md` (Prerequisites) first.** Everything else still parallelizes.
53
56
 
54
57
  ### 1 · Install the skills
55
58
 
@@ -165,6 +165,8 @@ stale render.
165
165
  ## Using the client from your own UI
166
166
  The two shipped hooks are the whole flow. If you build a custom surface, drive it the same way:
167
167
 
168
+ > Migrating from Cart V1 / Checkout V1? These helpers are V2-only — see the [migration guide](https://dev.wix.com/docs/api-reference/business-solutions/e-commerce/purchase-flow/cart-v2/migration-guide) for the before/after.
169
+
168
170
  ```jsx
169
171
  // LIST — every list helper returns an OBJECT, not a bare array. Destructure it:
170
172
  const { services, total, nextOffset } = await queryServices({ limit: 24 }); // total 0 → empty state
@@ -223,6 +225,49 @@ the areas they sit in:
223
225
  - eCommerce checkout (paid bookings): https://dev.wix.com/docs/api-reference/business-solutions/e-commerce.md
224
226
  - Headless redirect session (hosted checkout): https://dev.wix.com/docs/api-reference/business-management/headless/redirects.md
225
227
 
228
+ ## Rentals — the same client, one extra step
229
+
230
+ **Wix Rentals has no APIs of its own.** A rental is a Bookings *service* with rentals-specific
231
+ field values, so this whole client works on it: the catalog read, the booking form, and the
232
+ `createBooking → cart → checkout` chain are all unchanged. `rest/wix-bookings-rentals.js` and
233
+ `hooks/useRentalDuration.js` carry the only differences.
234
+
235
+ **What tells a rental apart — the DATA, never the brief.** A service carries either a fixed
236
+ session length or a duration RANGE the customer picks within; the two are mutually exclusive:
237
+
238
+ ```js
239
+ import { isRental, rentalDuration, rentalRateLabel } from "@/rest/wix-bookings-rentals";
240
+ isRental(service) // true only when schedule.availabilityConstraints.durationRange is present
241
+ ```
242
+
243
+ A 60-minute yoga class and a 60-minute massage are **not** rentals even though a massage is
244
+ `type: "APPOINTMENT"` exactly like a rental is. Never branch on the service's name, its
245
+ category, or what the brief called it.
246
+
247
+ **The extra step.** An ordinary service is one choice (a slot). A rental is two: pick a START,
248
+ then pick HOW LONG — and the price follows the length.
249
+
250
+ ```jsx
251
+ const detail = useServiceDetail(serviceId); // service + start times
252
+ const rental = useRentalDuration(detail.service, detail.selectedSlot, detail.timeZone);
253
+
254
+ <SlotPicker … /> {/* pick a start, as ever */}
255
+ {rental.isRental && <RentalDurationPicker rental={rental} />} {/* then pick a length */}
256
+ ```
257
+
258
+ Book with `rental.endDate` as the slot's `localEndDate`; everything else in the booking call is
259
+ identical.
260
+
261
+ **Hard rules on top of the ones below:**
262
+
263
+ - **Filter every catalog read by `appId`.** `queryRentals()` does it. On a site with both apps
264
+ an unfiltered `queryServices` returns haircuts next to meeting rooms.
265
+ - **Never compute the total yourself.** A rental is charged as a rate, hourly at per-minute
266
+ granularity — 90 minutes of a $10/hour room is $15. `useRentalDuration` prices the chosen
267
+ length on the server; multiplying the displayed rate disagrees with checkout.
268
+ - **Show the total before the customer commits.** A rate alone is not a price.
269
+ - **One unit type per service.** A room rented by the hour *and* by the day is two services.
270
+
226
271
  ## Hard rules
227
272
  - Style via base44 design tokens (`index.css` / shadcn Tailwind classes), never by rewriting the shipped components or adding a parallel theme file.
228
273
  - Header/footer live in a `Layout` around `<Outlet/>` (STEP 3) — never edit the shipped