@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
@@ -0,0 +1,182 @@
1
+ ---
2
+ name: "Manage Google Business Profile Locations for a Wix Site"
3
+ description: Import Google Business Profile locations into the authenticated Wix site, list and query them with or without live Google data, update Wix-side and Google-side details through the correct method for each, create a new Google listing, check whether a profile is actually live on Google, and remove a location from Wix or delete its Google listing. Checks the site's Google connection first and reports a missing one as a setup step, warns before destructive or Google-visible writes, and respects Google's shared rate budget.
4
+ ---
5
+
6
+ # Manage Google Business Profile Locations for a Wix Site
7
+
8
+ Use the public **Google Business Profile Locations API** to manage the
9
+ authenticated Wix site's Business Profile locations — the entries that decide
10
+ how the business appears on Google Search and Maps. The REST requests do not
11
+ contain a site ID — the site comes from the caller's authorization context.
12
+ Use the site the environment already supplies; if no site is selected, list
13
+ the user's sites once and auto-select the only one, or ask the user to choose
14
+ by site name when several are available. Never invent a site ID or ask the
15
+ user to type one.
16
+
17
+ > **Unconnected-site fast path — read first.** Read the connection once. Treat
18
+ > `NEVER_CONNECTED`, `NEEDS_RECONNECT`, or a single
19
+ > `CONNECTION_NOT_FOUND`/not-found response from that connection check as the
20
+ > same setup state. Query Wix-only GBP locations once to answer what the site
21
+ > already has, report the result, explain the connect → account selection →
22
+ > unimported-location selection → bulk-create flow, and stop — after that one
23
+ > query the **next action is the final response**, with no other tool call. Do
24
+ > not call a Google-backed location method, probe for Business Profile
25
+ > accounts, guess an endpoint, or make further API probes or documentation
26
+ > searches until the connection is `VALID`. A `403` or `PERMISSION_DENIED` is
27
+ > terminal: the **next action is the final response** explaining it. Stop
28
+ > without the Wix-only query, documentation search, or any other tool call.
29
+
30
+ The API is a live view onto Google, not a copy: most calls make a real Google
31
+ request, with Google's latency and rate limits. A location's ID is Google's
32
+ opaque location ID and is what identifies it everywhere.
33
+
34
+ ## Direct calls for the unconnected-site path
35
+
36
+ Use these request shapes directly; do not search the API reference before
37
+ calling them.
38
+
39
+ | Method | Call |
40
+ |---|---|
41
+ | **Get Connection** | `GET https://www.wixapis.com/gbp/v1/connection` — no body or parameters |
42
+ | **Query GBP Locations** | `POST https://www.wixapis.com/gbp/v1/locations/query` with body below |
43
+
44
+ ```json
45
+ { "query": { "paging": { "limit": 100 } } }
46
+ ```
47
+
48
+ Make **Get Connection** first, then branch before making any other call:
49
+
50
+ - `403` or `PERMISSION_DENIED` — stop. The next action is the final response;
51
+ explain that the current Wix identity cannot inspect the site's GBP state.
52
+ Do not query locations, inspect installed apps, search documentation, or try
53
+ another endpoint.
54
+ - `NEVER_CONNECTED`, `NEEDS_RECONNECT`, or `CONNECTION_NOT_FOUND` — make one
55
+ **Query GBP Locations** call, report the Wix-stored result, explain the future
56
+ import steps, and stop. The next action is the final response.
57
+ - `VALID` — proceed with the requested Google-backed flow.
58
+
59
+ Do not call **List GBP Accounts** or another Google-backed method until the
60
+ connection is `VALID` — account discovery requires the connection, and its
61
+ request shape is not the locations query. Never guess an endpoint that is not
62
+ in the table above or in the loaded reference.
63
+
64
+ ## Check the connection first
65
+
66
+ Google-backed methods require a Google connection, established through the
67
+ **Google Business Profile Connection API** (see the connect recipe). Before
68
+ Google-backed work, call **Get Connection**:
69
+
70
+ - `VALID` — proceed.
71
+ - `NEVER_CONNECTED` or `NEEDS_RECONNECT` — report a setup step, not an error,
72
+ and offer to run the connect flow. Do not retry location calls until the
73
+ connection is `VALID`.
74
+
75
+ Wix-only reads and deletes still work without active Google credentials:
76
+ **Get GBP Location**, **Query GBP Locations**, **Update Location**,
77
+ **Delete Location**, and **Bulk Delete Locations**.
78
+
79
+ ## Import locations
80
+
81
+ Importing registers listings that already exist at Google; it never creates
82
+ one. Each step narrows the next:
83
+
84
+ 1. Call **List GBP Accounts**. One Google login can hold several Business
85
+ Profile accounts, so present the list and let the owner pick — never assume
86
+ the first one.
87
+ 2. Call **List Unimported Locations** with the chosen `accountId`. It returns
88
+ only what the site hasn't imported yet, so re-running never offers
89
+ duplicates.
90
+ 3. Let the owner select which locations to import, and confirm before writing.
91
+ 4. Call **Bulk Create Locations** with the selected locations, supplying `id`
92
+ and `accountId` on each.
93
+ 5. Inspect every `results[].itemMetadata.error`. The call reports per-item
94
+ failures instead of aborting, so a `200` does not mean every location
95
+ imported. Report failures explicitly.
96
+
97
+ Repeat steps 2–5 per account if the owner wants locations from more than one.
98
+
99
+ ## List and query locations
100
+
101
+ Choose by whether live Google data is needed:
102
+
103
+ - **Just the site's locations:** call **Query GBP Locations**. Wix-stored rows
104
+ only — fast, no Google round-trip, no Google rate limit. Use it for counts,
105
+ ID lookups, and anything driven by `id`, `googleLocationId`, or `accountId`.
106
+ - **Locations with live business details:** call **Query Google Locations**
107
+ (or **Get Google Location** for one). Each row is hydrated with a live
108
+ Google fetch. Check each row for `googleError` — one location failing at
109
+ Google does not fail the request or break paging, so render it as a
110
+ per-location problem, not an empty result.
111
+
112
+ ## Update the correct side
113
+
114
+ Wix stores almost nothing; the method name tells you which side a write
115
+ reaches. Check before calling anything destructive:
116
+
117
+ | Method | Wix row | Google listing |
118
+ |---|---|---|
119
+ | **Create Location**, **Bulk Create Locations** | created | untouched (imports an existing listing) |
120
+ | **Create Google Location** | created | **created** |
121
+ | **Update Location** | updated | untouched (writes Wix-stored fields only) |
122
+ | **Update Google Location** | untouched | **updated** |
123
+ | **Delete Location**, **Bulk Delete Locations** | deleted | untouched |
124
+ | **Delete Google Location** | deleted | **deleted** |
125
+
126
+ - **Update Location** is not the way to edit a Business Profile — it writes
127
+ only Wix-stored fields. To change Google-owned data (title, address, hours,
128
+ categories), call **Update Google Location**, and confirm with the owner
129
+ first: the change is publicly visible on Google.
130
+ - To create a brand-new Google listing, call **Create Google Location** after
131
+ explicit confirmation. Use the API's reference-data methods (address schema,
132
+ category and region suggestions) rather than inventing values.
133
+ - Google allows roughly 10 profile edits per minute per Business Profile, and
134
+ the budget is shared across every write method. Pace the profile as a whole
135
+ and treat a `429` as worth retrying after a delay, not as a rejection.
136
+
137
+ ## Remove a location
138
+
139
+ Decide first whether the owner is removing it from Wix or deleting the real
140
+ Google listing — these are different operations and one is irreversible.
141
+ Confirm which they mean before calling anything:
142
+
143
+ - **Un-import from Wix, leave Google alone:** call **Delete Location**, or
144
+ **Bulk Delete Locations** for several. Inspect every
145
+ `results[].itemMetadata` entry — the bulk call can partially succeed.
146
+ - **Delete the Google listing as well:** call **Delete Google Location** once
147
+ per location; there is no bulk Google delete. Require explicit confirmation
148
+ naming the location — the listing disappears from Google Search and Maps.
149
+ - If **Delete Google Location** returns `LOCATION_DB_PERSIST_FAILED`, Google
150
+ deleted the listing but Wix didn't record it. The error payload carries the
151
+ location ID; call **Delete Location** with it to reconcile.
152
+
153
+ ## Check whether a profile is actually live
154
+
155
+ A location existing in Wix does not mean it appears on Google — verification
156
+ can be pending, the profile suspended, or ownership contested. Call
157
+ **Get Voice of Merchant** for the location and act on what Google reports:
158
+ wait, verify, comply, or resolve the conflict.
159
+
160
+ ## Recovery rules
161
+
162
+ - **`FAILED_PRECONDITION` with `CONNECTION_NOT_FOUND`:** the site has no
163
+ usable Google connection. Report the setup step and offer the connect flow;
164
+ do not retry the same call.
165
+ - **`GOOGLE_API_CALL_FAILED`:** read the carried Google code and description.
166
+ Some failures are permanent (profile suspended, field not editable) —
167
+ retrying will not help; explain instead.
168
+ - **Per-row `googleError` on hydrating reads:** report it per location and
169
+ continue with the rest of the page.
170
+ - **Rate limited (`429`):** wait, then retry; interleaved writes share one
171
+ budget per profile.
172
+ - **Permission denied:** stop after the first `403` or `PERMISSION_DENIED`.
173
+ Do not retry with other locations, request shapes, or sites, and do not
174
+ search for an alternate API or method. Deleting locations requires the
175
+ site's `GBP_ADMIN` role.
176
+
177
+ The same API also covers reviews and replies, photos and bulk media uploads,
178
+ attributes, verification, performance insights, and location admins — load the
179
+ specific public method reference needed before constructing a request so field
180
+ names, filters, permissions, and errors come from the live contract. Once a
181
+ connection state or typed error selects a branch above, do not search or browse
182
+ for an alternate API, method, or request shape.
@@ -359,6 +359,8 @@ Build the request from `item.channel` (`name` + the `accountId` from STEP 4b), `
359
359
  - Otherwise, build it from the STEP 3 table row for your channel + `type`: the text field (`caption` for Instagram/Facebook/LinkedIn/X, `description` for YouTube/Pinterest/GBP/TikTok), the media (`mediaWrapper`, or `imageUrl`/`videoUrl` for a single item), and any channel-specific IDs from the STEP 4b account object, plus `title` where the channel uses one.
360
360
  - Instagram and story types require media.
361
361
 
362
+ **Attribution (always set this).** Set `item.consumerInfo` to `{ "name": "wix-skills-social" }` on **every** create-draft call, for every channel. `consumerInfo.name` identifies what created the post — the Social Media Marketing dashboard sets `social-marketing`, and this recipe sets `wix-skills-social`. Set it on the draft: `name` is applied on creation only, and Update Item ignores it.
363
+
362
364
  **Idempotency (retry safety).** Set a stable, caller-defined `item.referenceId` on the draft. The Publisher enforces its uniqueness — a second item created/published with the same `referenceId` is rejected with `REFERENCE_ID_ALREADY_EXIST` instead of posting a duplicate. So if a create or publish call times out, retry with the **same** `referenceId` rather than risk double-posting.
363
365
 
364
366
  **Example — Instagram image post:**
@@ -368,6 +370,7 @@ Build the request from `item.channel` (`name` + the `accountId` from STEP 4b), `
368
370
  "item": {
369
371
  "channel": { "name": "INSTAGRAM", "accountId": "17841405822304914" },
370
372
  "type": "POST",
373
+ "consumerInfo": { "name": "wix-skills-social" },
371
374
  "instagramPost": {
372
375
  "imageUrl": "https://static.wixstatic.com/media/cf2434_4b3a2d8eb7f54bc89c0d4524430a2af3~mv2.jpg",
373
376
  "caption": "Summer collection just dropped! Shop the look now. #summerstyle #newarrivals"
@@ -0,0 +1,315 @@
1
+ ---
2
+ name: "Manage a Wix Site's SEO Tags"
3
+ description: Read and update the SEO tags of a Wix site at the right level — site-wide tags, page-type patterns, or one item's tags. Discover item IDs and pattern variables instead of inventing them, read before every full-replace write, and report resolved tags with the source each one came from.
4
+ ---
5
+
6
+ # Manage a Wix Site's SEO Tags
7
+
8
+ Use the public **SEO APIs** to read and write the titles, descriptions, social
9
+ share tags, canonical links, structured data, and indexing directives of the
10
+ authenticated Wix site. The API selects the site from the caller's
11
+ authorization context; never ask for or send a site ID.
12
+
13
+ Writing tags requires the **Manage SEO Settings** permission. Reading tags or
14
+ listing pattern variables does not prove that the caller can write.
15
+
16
+ ## The one rule that must never be skipped
17
+
18
+ **Every write replaces the target's tags in full, so a Get always immediately
19
+ precedes a Set.** There is no partial update: sending only the tag the user
20
+ asked about deletes every other tag that item, pattern, or site had. So before
21
+ any Set, call the matching Get for that exact target, merge the requested change
22
+ into the tags it returns, and send the complete set back.
23
+
24
+ Never write from the user's request alone, and never skip the Get because the
25
+ change looks small, because a list call already returned something, or because
26
+ the target looks empty. The Set response returns the updated tags and
27
+ `resolvedTags`, so report the outcome from that response instead of issuing
28
+ another read.
29
+
30
+ ## Choose the level
31
+
32
+ Wix combines tags from several sources, where a more specific source wins.
33
+ Match the user's request to the level that owns the change:
34
+
35
+ | User intent | Level | API |
36
+ |---|---|---|
37
+ | "Change my site's default social image", site verification tags, site-wide indexing | Site | **Site SEO Tags** |
38
+ | "All my product/blog/event pages should be titled like X" — a convention for every item of a page type | Pattern | **SEO Patterns** |
39
+ | "Change the title of this page/product/post" — one specific item | Item | **Item SEO Tags** |
40
+
41
+ Work at the level that matches the change. Writing the same title onto many
42
+ items is the same outcome as one pattern and much harder to undo. If the user's
43
+ words fit more than one level, ask one short question before writing. An
44
+ explicit request to change a specific tag at a clear level is already
45
+ confirmation to make that write.
46
+
47
+ All three APIs live under the **SEO** category of the Wix REST API reference.
48
+ The request shapes are in the section below — construct requests from them. The
49
+ reference article URLs follow this pattern (for edge cases not covered here):
50
+
51
+ `https://dev.wix.com/docs/api-reference/business-management/seo/{api}/` + method slug
52
+
53
+ | Level | API slug | Methods (slug) |
54
+ |---|---|---|
55
+ | Site | `site-seo-tags-v1` | Get Site SEO Tags (`get-site-seo-tags`), Set Site SEO Tags (`set-site-seo-tags`) |
56
+ | Pattern | `seo-pattern-v1` | Get SEO Pattern (`get-seo-pattern`), List SEO Patterns (`list-seo-patterns`), List SEO Pattern Variables (`list-seo-pattern-variables`), Create SEO Pattern (`create-seo-pattern`), Set SEO Pattern (`set-seo-pattern`), Reset SEO Pattern To Default (`reset-seo-pattern-to-default`) |
57
+ | Item | `item-seo-tags-v1` | Get Item SEO Tags (`get-item-seo-tags`), List Item SEO Tags (`list-item-seo-tags`), Set Item SEO Tags (`set-item-seo-tags`), Bulk Set Item SEO Tags (`bulk-set-item-seo-tags`), Reset Item SEO Tags To Default (`reset-item-seo-tags-to-default`) |
58
+
59
+ ## REST request and response shapes
60
+
61
+ Use these shapes directly — do not go looking for them in the docs first.
62
+
63
+ Build requests from the shapes below. Do not search the API schemas or read
64
+ the reference article to construct them.
65
+
66
+ ### Set Item SEO Tags — `PATCH /item-seo-tags/{itemType}/{itemId}`
67
+
68
+ ```json
69
+ {
70
+ "itemSeoTags": {
71
+ "tags": [
72
+ { "type": "title", "children": "Page title here" },
73
+ { "type": "meta", "props": { "name": "description", "content": "Description here" } }
74
+ ]
75
+ },
76
+ "fieldMask": "tags"
77
+ }
78
+ ```
79
+
80
+ ### Get Item SEO Tags — `GET /item-seo-tags/{itemType}/{itemId}`
81
+
82
+ No request body. Returns `itemSeoTags` with `tags`, `resolvedTags`,
83
+ `hasOverride`, `publishStatus`, and `hostPageId`.
84
+
85
+ ### List Item SEO Tags — `GET /item-seo-tags/{itemType}?paging.limit=100`
86
+
87
+ No request body. Returns `itemSeoTagsList[]` and `pagingMetadata` with cursors.
88
+
89
+ ### Set Site SEO Tags — `PATCH /site-seo-tags`
90
+
91
+ ```json
92
+ {
93
+ "siteSeoTags": {
94
+ "tags": [
95
+ { "type": "meta", "props": { "name": "google-site-verification", "content": "token" } }
96
+ ]
97
+ },
98
+ "fieldMask": "tags"
99
+ }
100
+ ```
101
+
102
+ ### Set SEO Pattern — `PATCH /seo-patterns/{pageType}`
103
+
104
+ ```json
105
+ {
106
+ "seoPattern": {
107
+ "pattern": {
108
+ "tags": [
109
+ { "type": "title", "children": "{{item.name}} | {{site.name}}" }
110
+ ]
111
+ }
112
+ },
113
+ "fieldMask": "pattern"
114
+ }
115
+ ```
116
+
117
+ ### Common rules across all shapes
118
+
119
+ A tag is `{type, props, children}`: `title` and `script` carry their text in
120
+ `children`; `meta` and `link` carry theirs in `props` (`name`/`content` for a
121
+ meta tag, `rel`/`href` for a link).
122
+
123
+ `fieldMask` over REST is a comma-separated **string** (`"fieldMask": "tags"`);
124
+ the SDK takes an **array** (`fieldMask: ["tags"]`). Sending an array to REST
125
+ returns `INVALID_FIELD_MASK`. `publish` is a boolean.
126
+
127
+ `resolvedTags` in any Get or Set response is an array of
128
+ `{tag, source, inheritedTag}`. `source` is one of `TAG_SOURCE_SITE`,
129
+ `TAG_SOURCE_DEFAULT_PATTERN`, `TAG_SOURCE_USER_PATTERN`, `TAG_SOURCE_HOST_PAGE`,
130
+ `TAG_SOURCE_ITEM`, or `TAG_SOURCE_UNSPECIFIED`. `inheritedTag` appears only when
131
+ this source replaced a value a lower source had set.
132
+
133
+ All paths are relative to `https://www.wixapis.com/promote/seo/v1`.
134
+
135
+ ## Discover, never invent
136
+
137
+ - An item is addressed by an **item type and item ID together**, not by URL.
138
+ Common item types: `STATIC_PAGE`, `STORES_PRODUCT`, `STORES_CATEGORY`,
139
+ `BLOG_POST`, `BLOG_CATEGORY`, `BOOKINGS_SERVICE`, `EVENTS_PAGE`,
140
+ `PORTFOLIO_PROJECTS`, `PORTFOLIO_COLLECTIONS`, `RESTAURANTS_MENU_PAGE`.
141
+ - To find an item's ID when the user refers to it by name (e.g. a product
142
+ name), use Search Products v3: `POST /stores/v3/products/search`
143
+ to get the product ID, then use that ID as the `itemId` with item type
144
+ `STORES_PRODUCT`. Do not call List Item SEO Tags and scan through all items
145
+ to match by name — use the vertical API.
146
+ - Never fabricate an item ID. If you cannot find the item through its vertical
147
+ API or List Item SEO Tags, ask the user.
148
+ - Item types exist on a site only when the business solution providing them is
149
+ installed. The authoritative list of supported item types is in the
150
+ `UNSUPPORTED_ITEM_TYPE` error message; do not hardcode one beyond the common
151
+ values listed above.
152
+ - Before writing a pattern, call **List SEO Pattern Variables** for the page
153
+ type and build the pattern only from returned variables. Never invent a
154
+ variable name.
155
+ - Dynamic Wix Data pages are addressed by `pageId`; addressing a pattern by
156
+ collection name is not supported.
157
+
158
+ ## The write sequence
159
+
160
+ Exactly three calls, in this order, with no extra probing:
161
+
162
+ 1. **Get** the current tags or pattern for the target. Required — see the rule
163
+ above.
164
+ 2. **Set** the complete merged set, naming only the changed fields in the field
165
+ mask.
166
+ 3. Report from the **Set response**, which returns the updated tags and
167
+ `resolvedTags`. Do not issue a verification read: the write response is the
168
+ confirmation. Read again only to check a static page's published revision
169
+ after `publish: true`, or when the user asks about a target you have not read
170
+ in this session.
171
+
172
+ To remove an item's own tags so it inherits again, call **Reset Item SEO Tags To
173
+ Default** (or **Reset SEO Pattern To Default**) — never set an empty list to
174
+ mean "reset".
175
+
176
+ ## Worked example: set a product's SEO title and description
177
+
178
+ The user asks: *"Set the SEO title of my product 'Handmade Mug' to 'Handmade
179
+ Ceramic Mug | Studio Shop' and its description to 'A stoneware mug.'"*
180
+
181
+ **Step 1 — find the product ID.** Search Products v3 by name:
182
+
183
+ ```
184
+ POST https://www.wixapis.com/stores/v3/products/search
185
+ { "search": { "search": { "expression": "Handmade Mug" } } }
186
+ ```
187
+
188
+ ```json
189
+ { "products": [{ "id": "a1b2c3d4-...", "name": "Handmade Mug", ... }] }
190
+ ```
191
+
192
+ Take `products[0].id`. The item type is `STORES_PRODUCT`. Do not use Query
193
+ Products with a `name` filter — `name` is not filterable and returns 400.
194
+
195
+ **Step 2 — read the current tags.**
196
+
197
+ ```
198
+ GET https://www.wixapis.com/promote/seo/v1/item-seo-tags/STORES_PRODUCT/{productId}
199
+ ```
200
+
201
+ ```json
202
+ {
203
+ "itemSeoTags": {
204
+ "tags": [],
205
+ "hasOverride": false,
206
+ "resolvedTags": [
207
+ { "tag": { "type": "title", "children": "Handmade Mug | My Site" },
208
+ "source": "TAG_SOURCE_DEFAULT_PATTERN" }
209
+ ]
210
+ }
211
+ }
212
+ ```
213
+
214
+ `tags` is empty because the item has no overrides yet. `resolvedTags` shows
215
+ what the page currently renders with and where each tag comes from.
216
+
217
+ **Step 3 — merge and write.** Take the full `tags` array from step 2, replace
218
+ or add the title and description, and send the complete set back:
219
+
220
+ ```json
221
+ PATCH /item-seo-tags/STORES_PRODUCT/{productId}
222
+ {
223
+ "itemSeoTags": {
224
+ "tags": [
225
+ { "type": "title", "children": "Handmade Ceramic Mug | Studio Shop" },
226
+ { "type": "meta", "props": { "name": "description", "content": "A stoneware mug." } }
227
+ ]
228
+ },
229
+ "fieldMask": "tags"
230
+ }
231
+ ```
232
+
233
+ **Step 4 — report from the response.** The Set response returns the updated
234
+ `tags` and `resolvedTags`. Report each resolved tag with its source. Do not
235
+ issue another Get — the write response is the confirmation.
236
+
237
+ ## Common agent mistakes — do not make these
238
+
239
+ - **Searching the API schemas or reading the reference article before the first
240
+ call.** The request shapes are in this recipe. If you get a 400, compare your
241
+ request against the shapes in this recipe — do not go to the docs.
242
+ - **Searching for the SEO endpoints through API spec tools.** The shapes are
243
+ above; searching wastes a turn.
244
+ - **Sending `fieldMask` as an array over REST.** Over REST it is a
245
+ comma-separated string: `"fieldMask": "tags"`. The SDK's `["tags"]` array
246
+ returns `INVALID_FIELD_MASK`.
247
+ - **Guessing the item type.** Use the values in the Discover section. A store
248
+ product is `STORES_PRODUCT`, not `StoresProduct`, `product`, or `Product`.
249
+
250
+ - **Issuing a verification Get after a successful Set.** The Set response
251
+ already carries `resolvedTags`. A second read is redundant.
252
+ - **Using Products v1 or filtering by `name` on Query Products.** Both return
253
+ 400. Use Search Products v3: `POST /stores/v3/products/search` with
254
+ `{"search":{"search":{"expression":"..."}}}`.
255
+ - **Calling List Item SEO Tags expecting product names.** List returns IDs
256
+ and tags, not names. Use Search Products to find the ID by name first.
257
+ - **Retrying a 400 with a different request shape without checking why.** A 400
258
+ means the shape was wrong. Compare against the shapes in this recipe, fix the
259
+ mismatch, send once. Three retries with guessed shapes is three wasted calls.
260
+
261
+ Tags can currently be written only for the site's primary language: leave
262
+ `language` unset on every write. There is no revision checking — the last write
263
+ wins and dashboard edits write to the same data, so read immediately before
264
+ writing.
265
+
266
+ **Static pages** keep a draft and a published revision: a write updates the
267
+ draft unless `publish` is `true`, and `publish: true` updates only the
268
+ published revision. Say clearly which revision the change reached. Item types
269
+ that are always live, such as store products, need no publish step.
270
+
271
+ ## Bulk writes
272
+
273
+ To set tags on many items, call **Bulk Set Item SEO Tags** once, not Set in a
274
+ loop. Expected per-item failures (invalid tags, item not found) fail only that
275
+ entry and are reported on that entry's `itemMetadata.error`; map results back
276
+ to the request with `originalIndex` and retry only the failed entries. Report
277
+ partial failures truthfully — never present a partially failed bulk write as a
278
+ success.
279
+
280
+ ## Present results
281
+
282
+ - When reporting what a page will render with, use the `resolvedTags` already
283
+ returned by the last Get or Set — not a fresh call — and name the source of
284
+ each tag (site, default pattern, user pattern, host page, or the item
285
+ itself). Naming the source of each reported tag is required, not optional.
286
+ `hasOverride: false` does not mean built-in defaults — the item may inherit
287
+ from a customized pattern or the site.
288
+ - `resolvedTags` excludes tags added by site code or apps at render time, so
289
+ present it as what Wix manages, not a literal copy of the rendered page head.
290
+
291
+
292
+ ## Recovery rules
293
+
294
+ - **Permission denied:** stop after the first `403` or `PERMISSION_DENIED`. Do
295
+ not retry with another item, level, request shape, or site. Explain that the
296
+ current Wix identity lacks **Manage SEO Settings** and must be reconnected or
297
+ authorized. Never imply that a successful read means the write ran.
298
+ - **`UNSUPPORTED_ITEM_TYPE`:** the error message lists the item types the API
299
+ supports; use it to redirect the request rather than retrying blindly.
300
+ - **`ITEM_NOT_FOUND`:** re-discover the item ID; do not guess a new one.
301
+ - **Invalid tags:** tags are validated before anything is saved, so nothing
302
+ changed; fix the tag and resend the same complete set.
303
+ - **`400` on a request you built from this recipe:** compare the request you
304
+ sent against the shapes in this recipe's "REST request and response shapes"
305
+ section. Fix the mismatch — a wrong nesting level, a missing wrapper key, or
306
+ `fieldMask` sent as an array instead of a string — and send again. Never
307
+ resend the same shape, and never walk through variations hoping one is
308
+ accepted.
309
+ - **Setting tags for `EVENTS_PAGE` items:** not supported yet, although reading
310
+ them is; say so instead of retrying.
311
+
312
+ This recipe is self-contained for the common flows: request shapes, field
313
+ masks, tag structure, `resolvedTags` format, discovery, and error handling are
314
+ all above. Do not read the method's reference article and do not search the
315
+ API schemas — build every request from this recipe alone.