@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.
- package/package.json +1 -1
- package/skills/wix-app/SKILL.md +115 -12
- package/skills/wix-app/references/APP_MARKET_REVIEW.md +1 -1
- package/skills/wix-app/references/BACKEND_API.md +18 -0
- package/skills/wix-app/references/CUSTOM_ELEMENT_WIDGET.md +6 -0
- package/skills/wix-app/references/DASHBOARD_MODAL.md +10 -2
- package/skills/wix-app/references/DASHBOARD_PAGE.md +32 -70
- package/skills/wix-app/references/EDITOR_REACT_COMPONENT.md +145 -127
- package/skills/wix-app/references/SITE_PLUGIN.md +14 -2
- package/skills/wix-app/references/WIX_PATTERNS_DOCS.md +74 -68
- package/skills/wix-app/references/backend-event/COMMON-EVENTS.md +2 -2
- package/skills/wix-app/references/dashboard-page/COLLECTION_TOOLKIT.md +79 -0
- package/skills/wix-app/references/dashboard-page/ENTITY_PAGE_TOOLKIT.md +73 -0
- package/skills/wix-app/references/dashboard-page/PATTERNS_BUNDLE_READING.md +52 -0
- package/skills/wix-app/references/dashboard-page/UX_SUCCESS_MODEL.md +184 -0
- package/skills/wix-app/references/editor-react-component/ACCESSIBILITY.md +182 -99
- package/skills/wix-app/references/editor-react-component/ANIMATED-COMPONENTS.md +94 -49
- package/skills/wix-app/references/editor-react-component/BRANDED-COMPONENTS.md +16 -6
- package/skills/wix-app/references/editor-react-component/BROWSER-SUPPORT.md +56 -0
- package/skills/wix-app/references/editor-react-component/COMPONENT-CONTRACT.md +275 -0
- package/skills/wix-app/references/editor-react-component/COMPONENT-PREVIEW.md +35 -40
- package/skills/wix-app/references/editor-react-component/CSS-GUIDELINES.md +167 -445
- package/skills/wix-app/references/editor-react-component/DESIGN-STATES.md +56 -29
- package/skills/wix-app/references/editor-react-component/DIRECTIONALITY.md +53 -158
- package/skills/wix-app/references/editor-react-component/EDITOR-EXTENSION-CONFIGURATION.md +78 -0
- package/skills/wix-app/references/editor-react-component/FUNCTION-HANDLERS.md +42 -134
- package/skills/wix-app/references/editor-react-component/MANIFEST-ERRORS.md +11 -3
- package/skills/wix-app/references/editor-react-component/PARTS.md +46 -24
- package/skills/wix-app/references/editor-react-component/PROPS-VS-CSS.md +63 -179
- package/skills/wix-app/references/editor-react-component/REACT-GUIDELINES.md +79 -163
- package/skills/wix-app/references/editor-react-component/SITE-CONTEXT-HOOKS.md +36 -21
- package/skills/wix-app/references/editor-react-component/SSR.md +30 -99
- package/skills/wix-base44-connector/SKILL.md +156 -50
- package/skills/wix-base44-connector/references/CAPABILITY_MAP.md +78 -0
- package/skills/wix-base44-connector/scripts/utils.js +239 -45
- package/skills/wix-headless/entry/bootstrap.mjs +9 -2
- package/skills/wix-headless/entry/skill.md +1 -1
- package/skills/wix-headless/references/CAPABILITIES.md +9 -1
- package/skills/wix-headless/references/DESIGN.md +1 -0
- package/skills/wix-headless/references/DISCOVERY.md +2 -1
- package/skills/wix-headless/references/IMAGE_GENERATION.md +1 -0
- package/skills/wix-headless/references/SDK_HANDOFF.md +5 -2
- package/skills/wix-headless/references/SEED.md +2 -1
- package/skills/wix-headless/references/SETUP.md +1 -0
- package/skills/wix-headless/references/inline-recipes/how-to-code-a-blog.md +2 -2
- package/skills/wix-headless/references/inline-recipes/how-to-code-a-store.md +68 -31
- package/skills/wix-headless/references/inline-recipes/how-to-code-forms.md +26 -10
- package/skills/wix-headless/references/inline-recipes/how-to-code-members-astro.md +8 -8
- package/skills/wix-headless/references/inline-recipes/how-to-code-members-custom-login.md +1 -1
- package/skills/wix-headless/references/inline-recipes/how-to-code-members-non-astro.md +1 -1
- package/skills/wix-headless/references/inline-recipes/how-to-code-pricing-plans.md +10 -8
- package/skills/wix-headless/references/inline-recipes/how-to-code-rentals.md +254 -0
- package/skills/wix-headless/references/inline-recipes/how-to-code-restaurant-orders.md +27 -24
- package/skills/wix-headless/references/inline-recipes/setup-online-store.md +13 -0
- package/skills/wix-headless/references/inline-recipes/setup-rentals.md +254 -0
- package/skills/wix-headless/references/managed/AUTHENTICATION.md +5 -0
- package/skills/wix-headless/references/non-astro.md +1 -1
- package/skills/wix-headless-fast/SKILL.md +166 -0
- package/skills/wix-headless-fast/entry/skill.md +99 -0
- package/skills/wix-headless-fast/install/deploy.mjs +433 -0
- package/skills/wix-headless-fast/install/fast-path.mjs +141 -0
- package/skills/wix-headless-fast/references/blog/INSTRUCTIONS.md +137 -0
- package/skills/wix-headless-fast/references/blog/app/components/blog/BlogFeedView.tsx +137 -0
- package/skills/wix-headless-fast/references/blog/app/components/blog/PostView.tsx +113 -0
- package/skills/wix-headless-fast/references/blog/app/components/blog/RichContent.tsx +42 -0
- package/skills/wix-headless-fast/references/blog/app/hooks/blog/useBlogFeed.ts +123 -0
- package/skills/wix-headless-fast/references/blog/app/hooks/blog/usePost.ts +70 -0
- package/skills/wix-headless-fast/references/blog/app/wix/blog/posts.ts +99 -0
- package/skills/wix-headless-fast/references/blog/app/wix/blog/taxonomy.ts +76 -0
- package/skills/wix-headless-fast/references/blog/app/wix/blog/types.ts +62 -0
- package/skills/wix-headless-fast/references/blog/app-astro/layouts/SiteLayout.astro +40 -0
- package/skills/wix-headless-fast/references/blog/app-astro/pages/blog/[...slug].astro +99 -0
- package/skills/wix-headless-fast/references/blog/app-astro/pages/blog.astro +24 -0
- package/skills/wix-headless-fast/references/blog/lock/astro/package-lock.json +16156 -0
- package/skills/wix-headless-fast/references/blog/seed/SEED.md +72 -0
- package/skills/wix-headless-fast/references/blog/seed/seed-blog.mjs +287 -0
- package/skills/wix-headless-fast/references/bookings/INSTRUCTIONS.md +129 -0
- package/skills/wix-headless-fast/references/bookings/app/components/bookings/ServiceBookingView.tsx +143 -0
- package/skills/wix-headless-fast/references/bookings/app/components/bookings/ServicesView.tsx +119 -0
- package/skills/wix-headless-fast/references/bookings/app/hooks/bookings/useBookingFlow.ts +138 -0
- package/skills/wix-headless-fast/references/bookings/app/hooks/bookings/useServices.ts +54 -0
- package/skills/wix-headless-fast/references/bookings/app/wix/bookings/booking.ts +206 -0
- package/skills/wix-headless-fast/references/bookings/app/wix/bookings/services.ts +96 -0
- package/skills/wix-headless-fast/references/bookings/app/wix/bookings/types.ts +70 -0
- package/skills/wix-headless-fast/references/bookings/app-astro/layouts/SiteLayout.astro +40 -0
- package/skills/wix-headless-fast/references/bookings/app-astro/pages/services/[slug].astro +76 -0
- package/skills/wix-headless-fast/references/bookings/app-astro/pages/services.astro +22 -0
- package/skills/wix-headless-fast/references/bookings/lock/astro/package-lock.json +11962 -0
- package/skills/wix-headless-fast/references/bookings/seed/SEED.md +61 -0
- package/skills/wix-headless-fast/references/bookings/seed/seed-bookings.mjs +302 -0
- package/skills/wix-headless-fast/references/cms/INSTRUCTIONS.md +179 -0
- package/skills/wix-headless-fast/references/cms/app/hooks/cms/useCollection.ts +83 -0
- package/skills/wix-headless-fast/references/cms/app/hooks/cms/useItem.ts +57 -0
- package/skills/wix-headless-fast/references/cms/app/wix/cms/items.ts +151 -0
- package/skills/wix-headless-fast/references/cms/app/wix/cms/types.ts +75 -0
- package/skills/wix-headless-fast/references/cms/app-astro/layouts/SiteLayout.astro +41 -0
- package/skills/wix-headless-fast/references/cms/lock/astro/package-lock.json +11262 -0
- package/skills/wix-headless-fast/references/cms/seed/SEED.md +103 -0
- package/skills/wix-headless-fast/references/cms/seed/seed-cms.mjs +324 -0
- package/skills/wix-headless-fast/references/events/INSTRUCTIONS.md +149 -0
- package/skills/wix-headless-fast/references/events/app/components/events/EventConfirmationView.tsx +66 -0
- package/skills/wix-headless-fast/references/events/app/components/events/EventRegistrationView.tsx +176 -0
- package/skills/wix-headless-fast/references/events/app/components/events/EventsView.tsx +118 -0
- package/skills/wix-headless-fast/references/events/app/hooks/events/useEventRegistration.ts +117 -0
- package/skills/wix-headless-fast/references/events/app/hooks/events/useEvents.ts +59 -0
- package/skills/wix-headless-fast/references/events/app/wix/events/events.ts +136 -0
- package/skills/wix-headless-fast/references/events/app/wix/events/registration.ts +128 -0
- package/skills/wix-headless-fast/references/events/app/wix/events/types.ts +61 -0
- package/skills/wix-headless-fast/references/events/app-astro/layouts/SiteLayout.astro +40 -0
- package/skills/wix-headless-fast/references/events/app-astro/pages/event-confirmation.astro +12 -0
- package/skills/wix-headless-fast/references/events/app-astro/pages/events/[slug].astro +80 -0
- package/skills/wix-headless-fast/references/events/app-astro/pages/events.astro +21 -0
- package/skills/wix-headless-fast/references/events/lock/astro/package-lock.json +11884 -0
- package/skills/wix-headless-fast/references/events/seed/SEED.md +86 -0
- package/skills/wix-headless-fast/references/events/seed/seed-events.mjs +276 -0
- package/skills/wix-headless-fast/references/forms/INSTRUCTIONS.md +150 -0
- package/skills/wix-headless-fast/references/forms/app/hooks/forms/useWixForm.ts +317 -0
- package/skills/wix-headless-fast/references/forms/app/wix/forms/forms.ts +269 -0
- package/skills/wix-headless-fast/references/forms/app/wix/forms/submissions.ts +231 -0
- package/skills/wix-headless-fast/references/forms/app/wix/forms/types.ts +135 -0
- package/skills/wix-headless-fast/references/forms/lock/astro/package-lock.json +10593 -0
- package/skills/wix-headless-fast/references/forms/seed/SEED.md +108 -0
- package/skills/wix-headless-fast/references/forms/seed/seed-forms.mjs +320 -0
- package/skills/wix-headless-fast/references/members/INSTRUCTIONS.md +63 -0
- package/skills/wix-headless-fast/references/members/app/components/members/AccountView.tsx +60 -0
- package/skills/wix-headless-fast/references/members/app/components/members/LoginForm.tsx +155 -0
- package/skills/wix-headless-fast/references/members/app/components/members/MemberMenu.tsx +78 -0
- package/skills/wix-headless-fast/references/members/app/components/members/RequireAuth.tsx +47 -0
- package/skills/wix-headless-fast/references/members/app/hooks/members/useMember.ts +66 -0
- package/skills/wix-headless-fast/references/members/app/wix/members/auth.ts +88 -0
- package/skills/wix-headless-fast/references/members/app/wix/members/client.ts +53 -0
- package/skills/wix-headless-fast/references/members/app/wix/members/member-store.ts +122 -0
- package/skills/wix-headless-fast/references/members/app/wix/members/members.ts +50 -0
- package/skills/wix-headless-fast/references/members/app/wix/members/types.ts +21 -0
- package/skills/wix-headless-fast/references/members/app-astro/layouts/SiteLayout.astro +42 -0
- package/skills/wix-headless-fast/references/members/app-astro/pages/account.astro +10 -0
- package/skills/wix-headless-fast/references/members/app-astro/pages/login.astro +11 -0
- package/skills/wix-headless-fast/references/members/lock/astro/package-lock.json +10329 -0
- package/skills/wix-headless-fast/references/members/seed/SEED.md +39 -0
- package/skills/wix-headless-fast/references/members/seed/seed-members.mjs +94 -0
- package/skills/wix-headless-fast/references/portfolio/INSTRUCTIONS.md +134 -0
- package/skills/wix-headless-fast/references/portfolio/app/components/portfolio/CollectionProjectsView.tsx +110 -0
- package/skills/wix-headless-fast/references/portfolio/app/components/portfolio/CollectionsView.tsx +90 -0
- package/skills/wix-headless-fast/references/portfolio/app/components/portfolio/ProjectDetailView.tsx +115 -0
- package/skills/wix-headless-fast/references/portfolio/app/hooks/portfolio/useCollectionProjects.ts +59 -0
- package/skills/wix-headless-fast/references/portfolio/app/hooks/portfolio/useCollections.ts +39 -0
- package/skills/wix-headless-fast/references/portfolio/app/hooks/portfolio/useProjectDetail.ts +58 -0
- package/skills/wix-headless-fast/references/portfolio/app/wix/portfolio/portfolio.ts +165 -0
- package/skills/wix-headless-fast/references/portfolio/app/wix/portfolio/types.ts +55 -0
- package/skills/wix-headless-fast/references/portfolio/app-astro/layouts/SiteLayout.astro +40 -0
- package/skills/wix-headless-fast/references/portfolio/app-astro/pages/portfolio/[slug].astro +30 -0
- package/skills/wix-headless-fast/references/portfolio/app-astro/pages/portfolio.astro +21 -0
- package/skills/wix-headless-fast/references/portfolio/app-astro/pages/projects/[slug].astro +29 -0
- package/skills/wix-headless-fast/references/portfolio/lock/astro/package-lock.json +10197 -0
- package/skills/wix-headless-fast/references/portfolio/seed/SEED.md +78 -0
- package/skills/wix-headless-fast/references/portfolio/seed/seed-portfolio.mjs +258 -0
- package/skills/wix-headless-fast/references/pricing-plans/INSTRUCTIONS.md +133 -0
- package/skills/wix-headless-fast/references/pricing-plans/app/components/pricing-plans/PlanDetailView.tsx +58 -0
- package/skills/wix-headless-fast/references/pricing-plans/app/components/pricing-plans/PlansView.tsx +126 -0
- package/skills/wix-headless-fast/references/pricing-plans/app/hooks/pricing-plans/usePlanPurchase.ts +37 -0
- package/skills/wix-headless-fast/references/pricing-plans/app/hooks/pricing-plans/usePlans.ts +39 -0
- package/skills/wix-headless-fast/references/pricing-plans/app/wix/pricing-plans/plans.ts +75 -0
- package/skills/wix-headless-fast/references/pricing-plans/app/wix/pricing-plans/purchase.ts +45 -0
- package/skills/wix-headless-fast/references/pricing-plans/app/wix/pricing-plans/types.ts +30 -0
- package/skills/wix-headless-fast/references/pricing-plans/app-astro/layouts/SiteLayout.astro +41 -0
- package/skills/wix-headless-fast/references/pricing-plans/app-astro/pages/plans/[slug].astro +40 -0
- package/skills/wix-headless-fast/references/pricing-plans/app-astro/pages/plans.astro +21 -0
- package/skills/wix-headless-fast/references/pricing-plans/lock/astro/package-lock.json +11226 -0
- package/skills/wix-headless-fast/references/pricing-plans/seed/SEED.md +71 -0
- package/skills/wix-headless-fast/references/pricing-plans/seed/seed-pricing-plans.mjs +279 -0
- package/skills/wix-headless-fast/references/restaurants/INSTRUCTIONS.md +165 -0
- package/skills/wix-headless-fast/references/restaurants/app/components/restaurants/MenuView.tsx +142 -0
- package/skills/wix-headless-fast/references/restaurants/app/components/restaurants/OrderCartButton.tsx +26 -0
- package/skills/wix-headless-fast/references/restaurants/app/components/restaurants/OrderCartDrawer.tsx +121 -0
- package/skills/wix-headless-fast/references/restaurants/app/components/restaurants/ReservationView.tsx +155 -0
- package/skills/wix-headless-fast/references/restaurants/app/hooks/restaurants/useMenus.ts +55 -0
- package/skills/wix-headless-fast/references/restaurants/app/hooks/restaurants/useOrderCart.ts +43 -0
- package/skills/wix-headless-fast/references/restaurants/app/hooks/restaurants/useReservation.ts +177 -0
- package/skills/wix-headless-fast/references/restaurants/app/wix/restaurants/menu.ts +165 -0
- package/skills/wix-headless-fast/references/restaurants/app/wix/restaurants/order-store.ts +103 -0
- package/skills/wix-headless-fast/references/restaurants/app/wix/restaurants/ordering.ts +254 -0
- package/skills/wix-headless-fast/references/restaurants/app/wix/restaurants/reservations.ts +146 -0
- package/skills/wix-headless-fast/references/restaurants/app/wix/restaurants/types.ts +168 -0
- package/skills/wix-headless-fast/references/restaurants/app-astro/layouts/SiteLayout.astro +47 -0
- package/skills/wix-headless-fast/references/restaurants/app-astro/pages/menu.astro +22 -0
- package/skills/wix-headless-fast/references/restaurants/app-astro/pages/reservations.astro +12 -0
- package/skills/wix-headless-fast/references/restaurants/lock/astro/package-lock.json +12560 -0
- package/skills/wix-headless-fast/references/restaurants/seed/SEED.md +81 -0
- package/skills/wix-headless-fast/references/restaurants/seed/seed-restaurants.mjs +479 -0
- package/skills/wix-headless-fast/references/shared/CONTENT.md +22 -0
- package/skills/wix-headless-fast/references/shared/CUSTOM_OPERATIONS.md +73 -0
- package/skills/wix-headless-fast/references/shared/DESIGN.md +26 -0
- package/skills/wix-headless-fast/references/shared/app/styles/global.css +52 -0
- package/skills/wix-headless-fast/references/shared/app/wix/config.ts +15 -0
- package/skills/wix-headless-fast/references/shared/app/wix/media.ts +27 -0
- package/skills/wix-headless-fast/references/shared/app/wix/money.ts +24 -0
- package/skills/wix-headless-fast/references/shared/app/wix/sdk.ts +76 -0
- package/skills/wix-headless-fast/references/shared/capabilities/media-upload/app/wix/media-upload/client.ts +46 -0
- package/skills/wix-headless-fast/references/shared/capabilities/media-upload/app-astro/pages/api/wix/media-upload.ts +46 -0
- package/skills/wix-headless-fast/references/shared/seed/images.mjs +145 -0
- package/skills/wix-headless-fast/references/storefront/INSTRUCTIONS.md +149 -0
- package/skills/wix-headless-fast/references/storefront/app/components/storefront/CartButton.tsx +26 -0
- package/skills/wix-headless-fast/references/storefront/app/components/storefront/CartDrawer.tsx +121 -0
- package/skills/wix-headless-fast/references/storefront/app/components/storefront/ProductCard.tsx +100 -0
- package/skills/wix-headless-fast/references/storefront/app/components/storefront/ProductDetailView.tsx +130 -0
- package/skills/wix-headless-fast/references/storefront/app/components/storefront/ProductGrid.tsx +48 -0
- package/skills/wix-headless-fast/references/storefront/app/components/storefront/ShopView.tsx +66 -0
- package/skills/wix-headless-fast/references/storefront/app/components/storefront/VariantPicker.tsx +103 -0
- package/skills/wix-headless-fast/references/storefront/app/hooks/storefront/useCart.ts +48 -0
- package/skills/wix-headless-fast/references/storefront/app/hooks/storefront/useProductDetail.ts +140 -0
- package/skills/wix-headless-fast/references/storefront/app/hooks/storefront/useShop.ts +80 -0
- package/skills/wix-headless-fast/references/storefront/app/wix/storefront/cart-store.ts +101 -0
- package/skills/wix-headless-fast/references/storefront/app/wix/storefront/cart.ts +221 -0
- package/skills/wix-headless-fast/references/storefront/app/wix/storefront/catalog.ts +215 -0
- package/skills/wix-headless-fast/references/storefront/app/wix/storefront/types.ts +109 -0
- package/skills/wix-headless-fast/references/storefront/app-astro/layouts/SiteLayout.astro +46 -0
- package/skills/wix-headless-fast/references/storefront/app-astro/pages/products/[slug].astro +56 -0
- package/skills/wix-headless-fast/references/storefront/app-astro/pages/shop.astro +23 -0
- package/skills/wix-headless-fast/references/storefront/lock/astro/package-lock.json +12247 -0
- package/skills/wix-headless-fast/references/storefront/seed/SEED.md +85 -0
- package/skills/wix-headless-fast/references/storefront/seed/seed-store.mjs +415 -0
- package/skills/wix-manage/SKILL.md +28 -2
- package/skills/wix-manage/references/bookings/booking-system-integration-gaps.md +20 -13
- package/skills/wix-manage/references/bookings/end-to-end-booking-flow.md +24 -11
- package/skills/wix-manage/references/cms/cms-ecommerce-catalog-integration.md +5 -5
- package/skills/wix-manage/references/google-ads/manage-campaign-success-guide.md +141 -0
- package/skills/wix-manage/references/google-business-profile/connect-google-business-profile.md +134 -0
- package/skills/wix-manage/references/google-business-profile/manage-google-business-profile-locations.md +182 -0
- package/skills/wix-manage/references/marketing/create-and-publish-social-post.md +3 -0
- package/skills/wix-manage/references/seo/manage-seo-tags.md +315 -0
- package/skills/wix-manage/references/seo/manage-url-redirects.md +250 -0
- package/skills/wix-manage/references/sites/query-sites.md +72 -161
- package/skills/wix-manage/references/stores/create-product-catalog-v3.md +21 -6
- package/skills/wix-manage/references/stores/update-product-with-options.md +83 -0
- package/skills/wix-replatform/resources/rp-mapper/wix-business-solutions-taxonomy.md +5 -6
- package/skills/wix-vibe-headless/SKILL.md +18 -4
- package/skills/wix-vibe-headless/install/deploy.cjs +12 -4
- package/skills/wix-vibe-headless/install/pin-agents-md.cjs +2 -1
- package/skills/wix-vibe-headless/platforms/base44-ecom-light-seed.md +16 -10
- package/skills/wix-vibe-headless/platforms/base44-ecom-light.md +13 -8
- package/skills/wix-vibe-headless/platforms/base44.md +27 -62
- package/skills/wix-vibe-headless/platforms/generic.md +6 -3
- package/skills/wix-vibe-headless/references/bookings/INSTRUCTIONS.md +45 -0
- package/skills/wix-vibe-headless/references/bookings/app/components/RentalDurationPicker.jsx +67 -0
- package/skills/wix-vibe-headless/references/bookings/app/hooks/useRentalDuration.js +128 -0
- package/skills/wix-vibe-headless/references/bookings/app/hooks/useServiceDetail.js +5 -3
- package/skills/wix-vibe-headless/references/bookings/app/rest/wix-bookings-checkout.js +9 -8
- package/skills/wix-vibe-headless/references/bookings/app/rest/wix-bookings-rentals.js +250 -0
- package/skills/wix-vibe-headless/references/bookings/app/rest/wix-bookings-services.js +12 -5
- package/skills/wix-vibe-headless/references/bookings/seed/SEED.md +41 -0
- package/skills/wix-vibe-headless/references/bookings/seed/seed-rentals.js +267 -0
- package/skills/wix-vibe-headless/references/cms/INSTRUCTIONS.md +6 -3
- package/skills/wix-vibe-headless/references/forms/INSTRUCTIONS.md +470 -0
- package/skills/wix-vibe-headless/references/forms/app/hooks/useWixForm.js +425 -0
- package/skills/wix-vibe-headless/references/forms/app/lib/wix-form-schema-utils.js +187 -0
- package/skills/wix-vibe-headless/references/forms/app/rest/wix-forms-submissions.js +238 -0
- package/skills/wix-vibe-headless/references/forms/app/rest/wix-forms.js +108 -0
- package/skills/wix-vibe-headless/references/forms/seed/SEED.md +1762 -0
- package/skills/wix-vibe-headless/references/rentals/INSTRUCTIONS.md +13 -0
- package/skills/wix-vibe-headless/references/restaurants/INSTRUCTIONS.md +4 -1
- package/skills/wix-vibe-headless/references/restaurants/app/components/OrderCartDrawer.jsx +23 -11
- package/skills/wix-vibe-headless/references/restaurants/app/context/OrderCartContext.jsx +1 -1
- package/skills/wix-vibe-headless/references/restaurants/app/rest/wix-restaurants-ordering.js +29 -31
- package/skills/wix-vibe-headless/references/storefront/INSTRUCTIONS.md +152 -92
- package/skills/wix-vibe-headless/references/storefront/app/components/CartDrawer.jsx +37 -38
- package/skills/wix-vibe-headless/references/storefront/app/context/CartContext.jsx +2 -2
- package/skills/wix-vibe-headless/references/storefront/app/hooks/useProductDetail.js +15 -8
- package/skills/wix-vibe-headless/references/storefront/app/lib/storeImage.js +37 -0
- package/skills/wix-vibe-headless/references/storefront/app/rest/wix-store-cart.js +35 -35
- package/skills/wix-vibe-headless/references/storefront/app/rest/wix-store-catalog.js +18 -6
- package/skills/wix-vibe-headless/references/storefront/seed/SEED.md +30 -7
- package/skills/wix-vibe-headless/references/storefront/seed/seed-store.js +46 -10
- package/skills/wix-app/references/editor-react-component/A11Y-REVIEW-REFERENCE.md +0 -172
- package/skills/wix-app/references/editor-react-component/A11Y-REVIEW.md +0 -143
- package/skills/wix-app/references/editor-react-component/COMPONENT-API.md +0 -516
- package/skills/wix-app/references/editor-react-component/COMPONENT-CONFIGURATION.md +0 -225
- package/skills/wix-app/references/editor-react-component/EDIT-FLOW.md +0 -6
- package/skills/wix-app/references/editor-react-component/REACT-PATTERNS.md +0 -95
- package/skills/wix-vibe-headless/references/storefront/app/components/ProductCard.jsx +0 -110
- package/skills/wix-vibe-headless/references/storefront/app/components/ProductGallery.jsx +0 -51
- package/skills/wix-vibe-headless/references/storefront/app/components/ProductGrid.jsx +0 -49
- package/skills/wix-vibe-headless/references/storefront/app/components/VariantPicker.jsx +0 -92
- 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
|
|
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` |
|
|
100
|
-
| `current-cart` |
|
|
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,
|
|
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
|
-
|
|
|
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
|
|
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
|
-
|
|
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
|
-
- **
|
|
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
|
-
>
|
|
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
|
|
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-
|
|
18
|
-
|
|
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
|
|
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-
|
|
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-
|
|
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-
|
|
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
|
|
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-
|
|
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
|
-
>
|
|
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
|
|
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-
|
|
18
|
-
|
|
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
|
|
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-
|
|
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
|
|
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-
|
|
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
|
-
>
|
|
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
|
|
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
|
|
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
|
-
| `
|
|
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'];
|
|
43
|
-
|
|
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-
|
|
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
|
|
105
|
-
|
|
106
|
-
shape → the **`wix-
|
|
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
|
-
**
|
|
121
|
-
|
|
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
|
-
|
|
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
|
-
**
|
|
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-
|
|
115
|
+
`wix-base44-connector` doc discovery — all over the connector.
|
|
151
116
|
|
|
152
|
-
version:
|
|
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
|
|
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
|
-
|
|
|
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
|
|
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
|