@wix/agent-skills 1.17.0 → 1.18.1
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 +74 -83
- package/skills/wix-app/references/SITE_PLUGIN.md +12 -0
- package/skills/wix-app/references/WIX_PATTERNS_DOCS.md +74 -68
- 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/ANIMATED-COMPONENTS.md +12 -11
- package/skills/wix-app/references/editor-react-component/BRANDED-COMPONENTS.md +1 -0
- package/skills/wix-app/references/editor-react-component/BROWSER-SUPPORT.md +56 -0
- package/skills/wix-app/references/editor-react-component/COMPONENT-PREVIEW.md +16 -8
- package/skills/wix-app/references/editor-react-component/CSS-GUIDELINES.md +47 -14
- package/skills/wix-app/references/editor-react-component/DESIGN-STATES.md +3 -0
- package/skills/wix-base44-connector/SKILL.md +133 -44
- package/skills/wix-base44-connector/references/CAPABILITY_MAP.md +78 -0
- package/skills/wix-base44-connector/scripts/utils.js +216 -30
- 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 +4 -1
- 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 +26 -8
- 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-rentals.md +254 -0
- package/skills/wix-headless/references/inline-recipes/setup-forms.md +57 -10
- 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/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 +113 -89
- package/skills/wix-manage/references/dashboard-navigation/routes.json +12 -52
- package/skills/wix-manage/references/ecommerce/shipping/ecom-shipping-api.md +0 -2
- package/skills/wix-manage/references/forms/create-form.md +272 -184
- package/skills/wix-manage/references/forms/forms-dashboard-navigation.md +13 -10
- package/skills/wix-manage/references/forms/update-form.md +122 -0
- 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/media/generate-image-with-ai.md +86 -0
- package/skills/wix-manage/references/stores/create-product-catalog-v3.md +37 -7
- package/skills/wix-manage/references/stores/update-product-with-options.md +83 -0
- 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 +3 -1
- package/skills/wix-vibe-headless/platforms/base44-ecom-light.md +3 -1
- package/skills/wix-vibe-headless/platforms/base44.md +27 -61
- package/skills/wix-vibe-headless/platforms/generic.md +6 -3
- package/skills/wix-vibe-headless/references/bookings/INSTRUCTIONS.md +43 -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-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 +486 -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 +1836 -0
- package/skills/wix-vibe-headless/references/rentals/INSTRUCTIONS.md +13 -0
- package/skills/wix-vibe-headless/references/storefront/INSTRUCTIONS.md +137 -84
- 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-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-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
|
@@ -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,86 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: "Generate an Image with AI"
|
|
3
|
+
description: Generates an image from a text prompt with the Wix AI APIs (Runware). Returns a short-lived URL that must be imported to be kept — importing is Upload Media to Wix's job, and this recipe hands off to it. Covers choosing a model and its cost/latency/content-filter trade-off, the accepted output sizes, per-model batching limits, the AI credit each call spends, and why a content refusal arrives as a success response with no image.
|
|
4
|
+
---
|
|
5
|
+
# RECIPE: Generate an Image with AI
|
|
6
|
+
|
|
7
|
+
For an image the user does not have. An image they supplied — an attachment or a public URL — is uploaded instead: [Upload Media to Wix](upload-media-to-wix.md).
|
|
8
|
+
|
|
9
|
+
**API reference:** [About the Wix AI APIs](https://dev.wix.com/docs/api-reference/articles/ai-tools/ai-apis/about-the-wix-ai-apis), *Generating images* — endpoint, auth, and the full model table. Developer Preview, so confirm the contract there.
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## AI credits
|
|
14
|
+
|
|
15
|
+
Each call spends roughly **one AI credit**, billed to the site owner, or to the Wix user who installed the calling app. `numberResults: n` spends n. Importing is free.
|
|
16
|
+
|
|
17
|
+
Generate one image per entity that needs one, and say how many a run will generate before starting it. Regenerate only when the user asks.
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## Step 1: Generate
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
curl -X POST 'https://www.wixapis.com/runwareschemaless/v1/request' \
|
|
25
|
+
-H 'Content-Type: application/json' \
|
|
26
|
+
-H 'Authorization: <AUTH>' \
|
|
27
|
+
-H 'wix-site-id: <METASITE_ID>' \
|
|
28
|
+
-d '[{
|
|
29
|
+
"taskType": "imageInference",
|
|
30
|
+
"taskUUID": "3f8c1e42-9b7a-4d16-8a5e-2c0f7b9d4e11",
|
|
31
|
+
"outputType": "URL",
|
|
32
|
+
"outputFormat": "PNG",
|
|
33
|
+
"positivePrompt": "a ceramic pour-over coffee dripper on a walnut counter, morning light",
|
|
34
|
+
"width": 1024,
|
|
35
|
+
"height": 1024,
|
|
36
|
+
"model": "runware:400@1",
|
|
37
|
+
"numberResults": 1
|
|
38
|
+
}]'
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
| Parameter | Value |
|
|
42
|
+
|---|---|
|
|
43
|
+
| `taskUUID` | A real UUIDv4. Anything else returns `400 invalidTaskUUID` |
|
|
44
|
+
| `width` / `height` | `1024×1024` (square — products, services, menu items), `1376×768` (16:9 hero), `1200×896` (4:3 editorial). Free-form sizes return 400 |
|
|
45
|
+
| `model` | See below |
|
|
46
|
+
| `numberResults` | `1` |
|
|
47
|
+
|
|
48
|
+
Omit `steps` and `CFGScale`: Runware accepts them, other models return `400 unsupportedParameter`.
|
|
49
|
+
|
|
50
|
+
### Models
|
|
51
|
+
|
|
52
|
+
| `model` | Latency | Content filter |
|
|
53
|
+
|---|---|---|
|
|
54
|
+
| `runware:400@1` | ~5s | Loosest — the default |
|
|
55
|
+
| `google:4@2` | ~25s | Medium, best fidelity |
|
|
56
|
+
| `bfl:5@1` | — | Strictest; refuses trademark-ish prompts |
|
|
57
|
+
|
|
58
|
+
Any Runware-supported model works — the reference's *Suggested models* table has the current AIR IDs.
|
|
59
|
+
|
|
60
|
+
### Read the response
|
|
61
|
+
|
|
62
|
+
```json
|
|
63
|
+
{ "data": [ { "imageURL": "https://im.runware.ai/image/ws/2/ii/<id>.png" } ] }
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
**A refusal is a success response with no `imageURL`** — test for the field, not the status. On a refusal, reword the prompt or switch model, and report the image as not created.
|
|
67
|
+
|
|
68
|
+
---
|
|
69
|
+
|
|
70
|
+
## Step 2: Import
|
|
71
|
+
|
|
72
|
+
`imageURL` expires, so import it as it lands. [Upload Media to Wix](upload-media-to-wix.md) owns that endpoint and its `PENDING` / `READY` rules; pass the `imageURL` as `url` and `image/png` as `mimeType`.
|
|
73
|
+
|
|
74
|
+
The result is the returned `file.id` / `file.url` — permanent, and what an entity field takes.
|
|
75
|
+
|
|
76
|
+
---
|
|
77
|
+
|
|
78
|
+
## Batches
|
|
79
|
+
|
|
80
|
+
`runware:400@1` and `bfl:5@1` take several tasks in one body. `google:4@2` returns 504 at three or more, so fire parallel single-task requests for it.
|
|
81
|
+
|
|
82
|
+
Failure is per image: attach the ones that succeeded, create the rest of the entities text-only, and name which entities have no image and why. A failed image stays missing rather than being swapped for another.
|
|
83
|
+
|
|
84
|
+
---
|
|
85
|
+
|
|
86
|
+
For JavaScript callers there is an SDK path — `generateImage()` from the Vercel AI SDK with `runware.image(...)` from `@wix/ai`: [Set up the Wix AI SDK](https://dev.wix.com/docs/api-reference/articles/ai-tools/ai-apis/set-up-the-wix-ai-sdk).
|
|
@@ -20,6 +20,19 @@ Canonical example:
|
|
|
20
20
|
- Assistant: “What product would you like to create? You can upload up to 3 images and I’ll generate the product information from them, or describe the product in text.”
|
|
21
21
|
- Result: **Stop. Do not request structured product fields yet.**
|
|
22
22
|
|
|
23
|
+
## Sections
|
|
24
|
+
|
|
25
|
+
- [Preflight](#preflight-respond-and-return-before-mutation) — whether this turn may mutate at all, and what to answer when it may not
|
|
26
|
+
- [Core flow](#core-flow) — the order the rest of this recipe runs in
|
|
27
|
+
- [Choose the endpoint](#choose-the-endpoint) — single vs bulk, with or without inventory
|
|
28
|
+
- [Build each product](#build-each-product) — the product object: type, media, options, variants, prices, SKUs
|
|
29
|
+
- [Generated descriptions and SEO](#generated-descriptions-and-seo) — what copy written from an image may claim
|
|
30
|
+
- [Add images](#add-images) — uploading a supplied image, or generating one
|
|
31
|
+
- [Wrap the request](#wrap-the-request) — the envelope the chosen endpoint expects
|
|
32
|
+
- [Request projected media](#request-projected-media-when-validating-images) — which fields to project so images are proven on create
|
|
33
|
+
- [Validate before reporting success](#validate-before-reporting-success) — what counts as proof, and what may be claimed
|
|
34
|
+
- [Failure guide](#failure-guide) — reading a rejection
|
|
35
|
+
|
|
23
36
|
## Preflight: respond and return before mutation
|
|
24
37
|
|
|
25
38
|
Name and price are mandatory **workflow inputs for every product**, even when the API schema accepts an omitted price or initializes it to zero. Evaluate the cases below in order. When a case says **RETURN**, end the turn immediately: do not call a create endpoint, do not continue to examples, and do not create first and ask afterward.
|
|
@@ -65,14 +78,14 @@ If any product is missing a price, **do not call the API**. Ask for the missing
|
|
|
65
78
|
- Bulk endpoints accept 1–100 products, so a compatible bulk endpoint is also valid for one product.
|
|
66
79
|
- For multiple products requested as one batch, send one bulk call. Use the with-inventory endpoint when any product needs inventory; include `inventoryItem` only on tracked variants.
|
|
67
80
|
- Never send `inventoryItem` to a no-inventory endpoint. Do not invent inventory.
|
|
68
|
-
- Digital products
|
|
81
|
+
- Digital products use a with-inventory endpoint: an unstocked digital variant is unsellable.
|
|
69
82
|
- Per bulk request, allow at most 100 products, 100 total options, 100 modifiers, 100 info sections, and 1000 variants. Split larger input into compliant batches.
|
|
70
83
|
|
|
71
84
|
## Build each product
|
|
72
85
|
|
|
73
86
|
| Concern | Rule |
|
|
74
87
|
|---|---|
|
|
75
|
-
| Type | `PHYSICAL` uses product- and variant-level `physicalProperties`; `DIGITAL` omits
|
|
88
|
+
| Type | `PHYSICAL` uses product- and variant-level `physicalProperties`; `DIGITAL` omits them and carries `inventoryItem.inStock` plus `digitalProperties.digitalFile` on each variant. |
|
|
76
89
|
| Variants | Include at least one. Price, SKU, barcode, inventory, and digital file are variant-level fields. |
|
|
77
90
|
| Price | Use a string in `price.actualPrice.amount`; add `compareAtPrice` only when supplied. |
|
|
78
91
|
| SKU | Preserve supplied strings exactly, including `#`, punctuation, and leading zeroes. Keep variant SKUs unique unless explicitly requested otherwise. |
|
|
@@ -127,9 +140,20 @@ This inventory-aware physical product is the reusable shape. Remove `inventoryIt
|
|
|
127
140
|
}
|
|
128
141
|
```
|
|
129
142
|
|
|
130
|
-
For a color option, use `SWATCH_CHOICES`; each choice uses `choiceType: ONE_COLOR` and `colorCode`, and the variant reference uses `renderType: SWATCH_CHOICES`.
|
|
143
|
+
For a color option, use `SWATCH_CHOICES`; each choice uses `choiceType: ONE_COLOR` and `colorCode`, and the variant reference uses `renderType: SWATCH_CHOICES`. For a different **image** per colour (not just the swatch), each choice also carries its own `media`:
|
|
144
|
+
|
|
145
|
+
```json
|
|
146
|
+
"choicesSettings": {"choices": [
|
|
147
|
+
{"choiceType": "ONE_COLOR", "name": "Black", "colorCode": "#000000",
|
|
148
|
+
"media": {"items": [{"url": "https://static.wixstatic.com/media/<black>.jpg"}]}},
|
|
149
|
+
{"choiceType": "ONE_COLOR", "name": "White", "colorCode": "#FFFFFF",
|
|
150
|
+
"media": {"items": [{"url": "https://static.wixstatic.com/media/<white>.jpg"}]}}
|
|
151
|
+
]}
|
|
152
|
+
```
|
|
131
153
|
|
|
132
|
-
|
|
154
|
+
The image must be in the product gallery first, and the id/ordering has a trap — assign per-choice media via **[Update Product with Options](update-product-with-options.md) → Choice & variant fields** (also the full choice-vs-variant field split: choice `media`/`colorCode`; variant `price`/`sku`/`barcode`/stock).
|
|
155
|
+
|
|
156
|
+
A digital variant is **sellable** only when it carries both a digital file and stock; miss either and the product reads back healthy and is rejected at add-to-cart. Upload the file first ([Upload Media to Wix](../media/upload-media-to-wix.md) → Generate Upload URL, then `PUT` the bytes) and send the returned `file.id` to `POST /stores/v3/products-with-inventory`:
|
|
133
157
|
|
|
134
158
|
```json
|
|
135
159
|
{
|
|
@@ -138,11 +162,15 @@ A digital product uses the smaller shape below. Add the supplied variant-level d
|
|
|
138
162
|
"variantsInfo": {"variants": [{
|
|
139
163
|
"sku": "PDF-FOCUS-01",
|
|
140
164
|
"price": {"actualPrice": {"amount": "9.99"}},
|
|
141
|
-
"visible": true
|
|
165
|
+
"visible": true,
|
|
166
|
+
"inventoryItem": {"inStock": true},
|
|
167
|
+
"digitalProperties": {"digitalFile": {"id": "<FILE_ID>"}}
|
|
142
168
|
}]}
|
|
143
169
|
}
|
|
144
170
|
```
|
|
145
171
|
|
|
172
|
+
With no file supplied, create the product and report it as not sellable until one is attached — [Update Product with Options](update-product-with-options.md) → Attach a digital file.
|
|
173
|
+
|
|
146
174
|
### Generated descriptions and SEO
|
|
147
175
|
|
|
148
176
|
- When copy is generated from an image, every factual claim must be user-supplied or directly visible. Preserve user-supplied facts such as a stated material; do not reject them merely because the image alone cannot prove them. Color, shape, and visible decoration may come from the image. Dimensions, capacity, care instructions, durability, compatibility, performance, and any material the user did not identify must be omitted. For example, never write “dishwasher safe” or “microwave safe” unless the user supplied that fact. Omit uncertain claims instead of turning them into marketing language.
|
|
@@ -165,7 +193,9 @@ A digital product uses the smaller shape below. Add the supplied variant-level d
|
|
|
165
193
|
|
|
166
194
|
## Add images
|
|
167
195
|
|
|
168
|
-
Skip this step when no image was supplied
|
|
196
|
+
Skip this step when no image was supplied — unless the user asked for one to be generated, in which case create it first with [Generate an Image with AI](../media/generate-image-with-ai.md) and continue below with the Media Manager file it returns. Do not offer generation unprompted, and never generate a substitute for a supplied image that failed to upload.
|
|
197
|
+
|
|
198
|
+
Prefer the available dedicated Wix image-upload capability and upload all attachments and public image URLs together. Do not reconstruct that capability inside a general API-execution call. When no dedicated uploader is available, use `POST /site-media/v1/files/import` with the external URL in the body field named exactly `url`—not `importUrl`:
|
|
169
199
|
|
|
170
200
|
```json
|
|
171
201
|
{"url":"https://example.com/product.jpg","mimeType":"image/jpeg","displayName":"Product.jpg","mediaType":"IMAGE"}
|
|
@@ -270,4 +300,4 @@ Retry only failed transient items, not successful products. If a requested field
|
|
|
270
300
|
- `variantsInfo must not be empty`: include at least one priced variant per product.
|
|
271
301
|
- Option/variant mismatch: create every requested combination and reference every option once per variant.
|
|
272
302
|
- Media not visible: use the uploaded `wixstatic.com` URL in `media.itemsInfo.items`; do not set `media.main`.
|
|
273
|
-
- Digital product rejected:
|
|
303
|
+
- Digital product rejected at add-to-cart: `ITEM_NOT_FOUND_IN_CATALOG` means the variant has no `digitalProperties.digitalFile`; `exceeds available inventory` means it has no `inventoryItem.inStock`. Both read back as a healthy product.
|
|
@@ -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 |
|
|
@@ -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.
|
|
@@ -87,7 +87,9 @@ urls are ready by the time you seed.
|
|
|
87
87
|
|
|
88
88
|
## STEP 4 — Wrap up
|
|
89
89
|
|
|
90
|
-
**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.
|
|
91
93
|
|
|
92
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.
|
|
93
95
|
|
|
@@ -56,7 +56,9 @@ rejects the write. Wire routes/imports in with `find_replace`, leave the rest as
|
|
|
56
56
|
|
|
57
57
|
**No seeding in this flow** — the client is the only deliverable. Do not seed, populate, or write data to Wix.
|
|
58
58
|
|
|
59
|
-
**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.
|
|
60
62
|
|
|
61
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.
|
|
62
64
|
|