@wix/agent-skills 1.14.0 → 1.15.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/README.md +12 -1
- package/package.json +1 -1
- package/skills/README.md +23 -0
- package/skills/wix-app/SKILL.md +10 -2
- package/skills/wix-app/references/AUTO_PATTERNS_DASHBOARD.md +326 -0
- package/skills/wix-app/references/CODE_QUALITY.md +1 -0
- package/skills/wix-app/references/CUSTOM_ELEMENT_WIDGET.md +124 -115
- package/skills/wix-app/references/DASHBOARD_PAGE.md +3 -0
- package/skills/wix-app/references/DATA_COLLECTION.md +5 -3
- package/skills/wix-app/references/EDITOR_REACT_COMPONENT.md +25 -9
- package/skills/wix-app/references/SITE_PLUGIN.md +1 -1
- package/skills/wix-app/references/STORES_VERSIONING.md +9 -211
- package/skills/wix-app/references/auto-patterns-dashboard/action-cell.md +115 -0
- package/skills/wix-app/references/auto-patterns-dashboard/app-config-structure.md +264 -0
- package/skills/wix-app/references/auto-patterns-dashboard/app-context.md +37 -0
- package/skills/wix-app/references/auto-patterns-dashboard/bulk-actions.md +86 -0
- package/skills/wix-app/references/auto-patterns-dashboard/collection-page-actions.md +119 -0
- package/skills/wix-app/references/auto-patterns-dashboard/collection-page.md +103 -0
- package/skills/wix-app/references/auto-patterns-dashboard/custom-actions-override.md +76 -0
- package/skills/wix-app/references/auto-patterns-dashboard/custom-columns-override.md +82 -0
- package/skills/wix-app/references/auto-patterns-dashboard/custom-components-override.md +89 -0
- package/skills/wix-app/references/auto-patterns-dashboard/custom-header-override.md +124 -0
- package/skills/wix-app/references/auto-patterns-dashboard/custom-sections-override.md +91 -0
- package/skills/wix-app/references/auto-patterns-dashboard/custom-slots-override.md +71 -0
- package/skills/wix-app/references/auto-patterns-dashboard/entity-page-actions.md +70 -0
- package/skills/wix-app/references/auto-patterns-dashboard/entity-page-view-actions.md +73 -0
- package/skills/wix-app/references/auto-patterns-dashboard/entity-page.md +98 -0
- package/skills/wix-app/references/auto-patterns-dashboard/example-patterns.json +278 -0
- package/skills/wix-app/references/auto-patterns-dashboard/pages-configuration.md +94 -0
- package/skills/wix-app/references/auto-patterns-dashboard/resolved-action.md +43 -0
- package/skills/wix-app/references/auto-patterns-dashboard/sdk-utilities.md +66 -0
- package/skills/wix-app/references/auto-patterns-dashboard/views.md +76 -0
- package/skills/wix-app/references/backend-event/COMMON-EVENTS.md +5 -0
- package/skills/wix-app/references/editor-react-component/ACCESSIBILITY.md +1 -14
- package/skills/wix-app/references/editor-react-component/ANIMATED-COMPONENTS.md +151 -0
- package/skills/wix-app/references/editor-react-component/COMPONENT-API.md +54 -29
- package/skills/wix-app/references/editor-react-component/COMPONENT-CONFIGURATION.md +2 -2
- package/skills/wix-app/references/editor-react-component/COMPONENT-PREVIEW.md +57 -0
- package/skills/wix-app/references/editor-react-component/CSS-GUIDELINES.md +23 -105
- package/skills/wix-app/references/editor-react-component/DESIGN-STATES.md +127 -0
- package/skills/wix-app/references/editor-react-component/PARTS.md +2 -1
- package/skills/wix-app/references/editor-react-component/REACT-GUIDELINES.md +18 -16
- package/skills/wix-app/references/editor-react-component/REACT-PATTERNS.md +25 -53
- package/skills/wix-app/references/stores/CATEGORIES.md +22 -0
- package/skills/wix-app/references/stores/GET_PRODUCT.md +99 -0
- package/skills/wix-app/references/stores/INVENTORY.md +37 -0
- package/skills/wix-app/references/stores/QUERY.md +87 -0
- package/skills/wix-app/references/stores/WRITE.md +55 -0
- package/skills/wix-app/scripts/generate-auto-patterns.js +510 -0
- package/skills/wix-auth/SKILL.md +12 -0
- package/skills/wix-auth/references/device-flow.md +140 -0
- package/skills/wix-docs/SKILL.md +188 -0
- package/skills/wix-docs/references/API_SPEC_SEARCH.md +213 -0
- package/skills/wix-docs/references/EXTRACTING.md +120 -0
- package/skills/wix-headless/SKILL.md +89 -130
- package/skills/wix-headless/entry/bootstrap.mjs +93 -0
- package/skills/wix-headless/entry/skill.md +76 -0
- package/skills/wix-headless/references/AI_FEATURES.md +178 -0
- package/skills/wix-headless/references/CAPABILITIES.md +86 -0
- package/skills/wix-headless/references/DISCOVERY.md +34 -56
- package/skills/wix-headless/references/DOC_DISCOVERY.md +37 -0
- package/skills/wix-headless/references/FEEDBACK.md +129 -0
- package/skills/wix-headless/references/IMAGE_GENERATION.md +69 -0
- package/skills/wix-headless/references/SDK_HANDOFF.md +99 -0
- package/skills/wix-headless/references/SEED.md +45 -187
- package/skills/wix-headless/references/SETUP.md +32 -103
- package/skills/wix-headless/references/astro.md +98 -0
- package/skills/wix-headless/references/inline-recipes/how-to-code-a-blog.md +196 -0
- package/skills/wix-headless/references/inline-recipes/how-to-code-a-store.md +236 -0
- package/skills/wix-headless/references/inline-recipes/how-to-code-bookings.md +279 -0
- package/skills/wix-headless/references/inline-recipes/how-to-code-cms.md +163 -0
- package/skills/wix-headless/references/inline-recipes/how-to-code-events.md +203 -0
- package/skills/wix-headless/references/inline-recipes/how-to-code-forms.md +222 -0
- package/skills/wix-headless/references/inline-recipes/how-to-code-members-astro.md +124 -0
- package/skills/wix-headless/references/inline-recipes/how-to-code-members-custom-login.md +160 -0
- package/skills/wix-headless/references/inline-recipes/how-to-code-members-non-astro.md +118 -0
- package/skills/wix-headless/references/inline-recipes/how-to-code-portfolio.md +132 -0
- package/skills/wix-headless/references/inline-recipes/how-to-code-pricing-plans.md +124 -0
- package/skills/wix-headless/references/inline-recipes/how-to-code-restaurant-orders.md +188 -0
- package/skills/wix-headless/references/inline-recipes/how-to-code-restaurant-reservations.md +213 -0
- package/skills/wix-headless/references/inline-recipes/how-to-code-restaurants.md +161 -0
- package/skills/wix-headless/references/inline-recipes/setup-blog.md +175 -0
- package/skills/wix-headless/references/inline-recipes/setup-bookings.md +232 -0
- package/skills/wix-headless/references/inline-recipes/setup-cms.md +200 -0
- package/skills/wix-headless/references/inline-recipes/setup-events.md +196 -0
- package/skills/wix-headless/references/inline-recipes/setup-forms.md +174 -0
- package/skills/wix-headless/references/inline-recipes/setup-online-store.md +192 -0
- package/skills/wix-headless/references/inline-recipes/setup-portfolio.md +155 -0
- package/skills/wix-headless/references/inline-recipes/setup-pricing-plans.md +229 -0
- package/skills/wix-headless/references/inline-recipes/setup-restaurant-experiences.md +73 -0
- package/skills/wix-headless/references/inline-recipes/setup-restaurant-orders.md +197 -0
- package/skills/wix-headless/references/inline-recipes/setup-restaurant-reservations.md +136 -0
- package/skills/wix-headless/references/inline-recipes/setup-restaurants.md +152 -0
- package/skills/wix-headless/references/managed/AUTHENTICATION.md +57 -0
- package/skills/wix-headless/references/managed/CONNECT.md +74 -0
- package/skills/wix-headless/references/managed/CREATE.md +130 -0
- package/skills/wix-headless/references/managed/DEPLOYMENT.md +79 -0
- package/skills/wix-headless/references/non-astro.md +59 -0
- package/skills/wix-headless/references/self-managed/AUTHENTICATION.md +22 -0
- package/skills/wix-headless/references/self-managed/DEPLOYMENT.md +15 -0
- package/skills/wix-headless/references/stripe/AUTHENTICATION.md +55 -0
- package/skills/wix-headless/references/stripe/DEPLOYMENT.md +71 -0
- package/skills/wix-manage/SKILL.md +29 -3
- package/skills/wix-manage/references/analytics/query-site-analytics.md +298 -0
- package/skills/wix-manage/references/app-installation/install-wix-apps.md +3 -0
- package/skills/wix-manage/references/bookings/create-and-update-booking-services.md +1 -1
- package/skills/wix-manage/references/bookings/create-booking-service-from-prompt.md +6 -5
- package/skills/wix-manage/references/bookings/create-course-service.md +30 -5
- package/skills/wix-manage/references/bookings/diagnose-availability-issues.md +299 -0
- package/skills/wix-manage/references/cms/cms-schema-management.md +6 -0
- package/skills/wix-manage/references/get-paid/how-to-setup-wix-payments.md +30 -7
- package/skills/wix-manage/references/marketing/create-and-publish-social-post.md +517 -0
- package/skills/wix-manage/references/marketing/generate-and-publish-marketing-plan.md +218 -0
- package/skills/wix-manage/references/rich-content/author-ricos-rich-content.md +249 -0
- package/skills/wix-manage/references/sites/site-import.md +270 -0
- package/skills/wix-manage/references/stores/create-product-from-image.md +8 -6
- package/skills/wix-manage/references/stores/create-product-with-options-catalog-v3.md +57 -0
- package/skills/wix-vibe-headless/SKILL.md +142 -0
- package/skills/wix-vibe-headless/platforms/README.md +22 -0
- package/skills/wix-vibe-headless/platforms/base44.md +142 -0
- package/skills/wix-vibe-headless/platforms/generic.md +87 -0
- package/skills/wix-vibe-headless/references/blog/INSTRUCTIONS.md +128 -0
- package/skills/wix-vibe-headless/references/blog/wix-blog.js +217 -0
- package/skills/wix-vibe-headless/references/bookings/INSTRUCTIONS.md +157 -0
- package/skills/wix-vibe-headless/references/bookings/wix-bookings-checkout.js +147 -0
- package/skills/wix-vibe-headless/references/bookings/wix-bookings-services.js +217 -0
- package/skills/wix-vibe-headless/references/cms/INSTRUCTIONS.md +154 -0
- package/skills/wix-vibe-headless/references/cms/wix-cms.js +186 -0
- package/skills/wix-vibe-headless/references/events/INSTRUCTIONS.md +142 -0
- package/skills/wix-vibe-headless/references/events/wix-events-browse.js +136 -0
- package/skills/wix-vibe-headless/references/events/wix-events-registration.js +187 -0
- package/skills/wix-vibe-headless/references/members/INSTRUCTIONS.md +211 -0
- package/skills/wix-vibe-headless/references/members/wix-members-auth.js +387 -0
- package/skills/wix-vibe-headless/references/portfolio/INSTRUCTIONS.md +111 -0
- package/skills/wix-vibe-headless/references/portfolio/wix-portfolio.js +223 -0
- package/skills/wix-vibe-headless/references/pricing-plans/INSTRUCTIONS.md +127 -0
- package/skills/wix-vibe-headless/references/pricing-plans/wix-pricing-plans.js +157 -0
- package/skills/wix-vibe-headless/references/restaurants/INSTRUCTIONS.md +138 -0
- package/skills/wix-vibe-headless/references/restaurants/wix-restaurants-menu.js +224 -0
- package/skills/wix-vibe-headless/references/restaurants/wix-restaurants-ordering.js +156 -0
- package/skills/wix-vibe-headless/references/restaurants/wix-restaurants-reservations.js +107 -0
- package/skills/wix-vibe-headless/references/shared/wix-client.js +186 -0
- package/skills/wix-vibe-headless/references/storefront/INSTRUCTIONS.md +164 -0
- package/skills/wix-vibe-headless/references/storefront/wix-store-cart.js +147 -0
- package/skills/wix-vibe-headless/references/storefront/wix-store-catalog.js +146 -0
- package/skills/wix-headless/references/BUILD-astro.md +0 -253
- package/skills/wix-headless/references/BUILD-own-build.md +0 -167
- package/skills/wix-headless/references/BUILD.md +0 -105
- package/skills/wix-headless/references/DESIGN_SYSTEM.md +0 -165
- package/skills/wix-headless/references/DISCOVERY-connect.md +0 -55
- package/skills/wix-headless/references/DISCOVERY-create.md +0 -238
- package/skills/wix-headless/references/PLAN-connect.md +0 -19
- package/skills/wix-headless/references/PLAN-create.md +0 -17
- package/skills/wix-headless/references/PLAN.md +0 -92
- package/skills/wix-headless/references/astro/blog/BLOG_PAGES.md +0 -300
- package/skills/wix-headless/references/astro/blog/BLOG_SETUP.md +0 -218
- package/skills/wix-headless/references/astro/bookings/COMPONENTS.md +0 -45
- package/skills/wix-headless/references/astro/bookings/SERVICES_PAGES.md +0 -77
- package/skills/wix-headless/references/astro/cms/CMS_FOUNDATIONS.md +0 -214
- package/skills/wix-headless/references/astro/cms/FAQ_KNOWLEDGE_BASE.md +0 -231
- package/skills/wix-headless/references/astro/cms/PORTFOLIO.md +0 -453
- package/skills/wix-headless/references/astro/cms/RESOURCE_LIBRARY.md +0 -354
- package/skills/wix-headless/references/astro/cms/TEAM_DIRECTORY.md +0 -299
- package/skills/wix-headless/references/astro/designer/INSTRUCTIONS.md +0 -351
- package/skills/wix-headless/references/astro/ecom/CART_PAGES.md +0 -119
- package/skills/wix-headless/references/astro/ecom/CART_WIRING.md +0 -103
- package/skills/wix-headless/references/astro/ecom/COMPONENTS_CSS.md +0 -132
- package/skills/wix-headless/references/astro/forms/CONTACT_FORM.md +0 -463
- package/skills/wix-headless/references/astro/gift-cards/COMPONENTS.md +0 -119
- package/skills/wix-headless/references/astro/gift-cards/PAGES.md +0 -129
- package/skills/wix-headless/references/astro/stores/BACK_IN_STOCK.md +0 -178
- package/skills/wix-headless/references/astro/stores/CATEGORY_PAGES.md +0 -85
- package/skills/wix-headless/references/astro/stores/COMPONENTS_CSS.md +0 -129
- package/skills/wix-headless/references/astro/stores/HOME_AND_NAV.md +0 -229
- package/skills/wix-headless/references/astro/stores/PRODUCT_PAGES.md +0 -215
- package/skills/wix-headless/references/astro/stores/SHARED_WIRING.md +0 -165
- package/skills/wix-headless/references/astro/templates/Layout.astro +0 -132
- package/skills/wix-headless/references/astro/templates/astro.config.mjs +0 -41
- package/skills/wix-headless/references/astro/templates/bookings/AvailabilityCalendar.tsx +0 -374
- package/skills/wix-headless/references/astro/templates/bookings/BookingForm.tsx +0 -136
- package/skills/wix-headless/references/astro/templates/bookings/SeoTags.astro +0 -25
- package/skills/wix-headless/references/astro/templates/bookings/ServiceBookingFlow.tsx +0 -71
- package/skills/wix-headless/references/astro/templates/bookings/ServiceCard.astro +0 -54
- package/skills/wix-headless/references/astro/templates/bookings/booking-confirmation.astro +0 -49
- package/skills/wix-headless/references/astro/templates/bookings/bookingDriver.ts +0 -245
- package/skills/wix-headless/references/astro/templates/bookings/components-bookings.css +0 -424
- package/skills/wix-headless/references/astro/templates/bookings/services/[slug].astro +0 -176
- package/skills/wix-headless/references/astro/templates/bookings/services/index.astro +0 -181
- package/skills/wix-headless/references/astro/templates/ecom/CartBadge.tsx +0 -84
- package/skills/wix-headless/references/astro/templates/ecom/CartView.tsx +0 -543
- package/skills/wix-headless/references/astro/templates/ecom/cart.astro +0 -13
- package/skills/wix-headless/references/astro/templates/ecom/components-ecom.css +0 -302
- package/skills/wix-headless/references/astro/templates/ecom/discounts.ts +0 -71
- package/skills/wix-headless/references/astro/templates/ecom/thank-you.astro +0 -24
- package/skills/wix-headless/references/astro/templates/gift-cards/GiftCardPurchase.tsx +0 -172
- package/skills/wix-headless/references/astro/templates/gift-cards/_home-teaser-snippet.astro +0 -42
- package/skills/wix-headless/references/astro/templates/gift-cards/_nav-snippet.astro +0 -11
- package/skills/wix-headless/references/astro/templates/gift-cards/components-gift-cards.css +0 -220
- package/skills/wix-headless/references/astro/templates/gift-cards/gift-cards.astro +0 -51
- package/skills/wix-headless/references/astro/templates/gift-cards/gift-cards.ts +0 -75
- package/skills/wix-headless/references/astro/templates/global.css +0 -288
- package/skills/wix-headless/references/astro/templates/stores/AddToCartButton.tsx +0 -77
- package/skills/wix-headless/references/astro/templates/stores/BackInStockForm.tsx +0 -176
- package/skills/wix-headless/references/astro/templates/stores/CategoryRail.astro +0 -69
- package/skills/wix-headless/references/astro/templates/stores/ProductCard.astro +0 -79
- package/skills/wix-headless/references/astro/templates/stores/ProductPurchase.tsx +0 -397
- package/skills/wix-headless/references/astro/templates/stores/SeoTags.astro +0 -21
- package/skills/wix-headless/references/astro/templates/stores/back-in-stock.ts +0 -67
- package/skills/wix-headless/references/astro/templates/stores/categories.ts +0 -155
- package/skills/wix-headless/references/astro/templates/stores/category/[slug].astro +0 -130
- package/skills/wix-headless/references/astro/templates/stores/components-stores.css +0 -400
- package/skills/wix-headless/references/astro/templates/stores/products/[slug].astro +0 -128
- package/skills/wix-headless/references/astro/templates/stores/products/index.astro +0 -101
- package/skills/wix-headless/references/blog/BLOG_CONTENT.md +0 -161
- package/skills/wix-headless/references/blog/INSTRUCTIONS.md +0 -32
- package/skills/wix-headless/references/bookings/FLOW.md +0 -246
- package/skills/wix-headless/references/bookings/INSTRUCTIONS.md +0 -95
- package/skills/wix-headless/references/bookings/SERVICES_DATA.md +0 -355
- package/skills/wix-headless/references/cms/CMS_FOUNDATIONS.md +0 -176
- package/skills/wix-headless/references/cms/INSTRUCTIONS.md +0 -71
- package/skills/wix-headless/references/commands/known-apps.json +0 -6
- package/skills/wix-headless/references/custom/CONNECTION_PLAN.md +0 -142
- package/skills/wix-headless/references/custom/INSTRUCTIONS.md +0 -88
- package/skills/wix-headless/references/custom/blog/WIRING.md +0 -52
- package/skills/wix-headless/references/custom/bookings/WIRING.md +0 -197
- package/skills/wix-headless/references/custom/cms/WIRING.md +0 -97
- package/skills/wix-headless/references/custom/ecom/WIRING.md +0 -67
- package/skills/wix-headless/references/custom/forms/WIRING.md +0 -101
- package/skills/wix-headless/references/custom/stores/WIRING.md +0 -80
- package/skills/wix-headless/references/ecom/INSTRUCTIONS.md +0 -59
- package/skills/wix-headless/references/forms/INSTRUCTIONS.md +0 -43
- package/skills/wix-headless/references/gift-cards/INSTRUCTIONS.md +0 -51
- package/skills/wix-headless/references/images/INSTRUCTIONS.md +0 -357
- package/skills/wix-headless/references/seed-recipes.md +0 -49
- package/skills/wix-headless/references/shared/AGENTS_MD.md +0 -47
- package/skills/wix-headless/references/shared/AUTHENTICATION.md +0 -108
- package/skills/wix-headless/references/shared/BUILD_NOISE.md +0 -8
- package/skills/wix-headless/references/shared/DESIGN_MD.md +0 -84
- package/skills/wix-headless/references/shared/DOCS_SEARCH.md +0 -41
- package/skills/wix-headless/references/shared/IMAGE_GENERATION.md +0 -186
- package/skills/wix-headless/references/shared/IMPLEMENTER.md +0 -206
- package/skills/wix-headless/references/shared/PRODUCTION_SHARP_EDGES.md +0 -97
- package/skills/wix-headless/references/shared/RETURN_CONTRACT.md +0 -143
- package/skills/wix-headless/references/shared/STYLING.md +0 -140
- package/skills/wix-headless/references/stores/INSTRUCTIONS.md +0 -126
- package/skills/wix-headless/references/stores/PRODUCT_CATALOG_DATA.md +0 -252
- package/skills/wix-headless/references/verticals/_schema.json +0 -74
- package/skills/wix-headless/references/verticals/_schema.md +0 -95
- package/skills/wix-headless/references/verticals/blog.md +0 -31
- package/skills/wix-headless/references/verticals/bookings.md +0 -41
- package/skills/wix-headless/references/verticals/cms.md +0 -30
- package/skills/wix-headless/references/verticals/ecom.md +0 -25
- package/skills/wix-headless/references/verticals/forms.md +0 -26
- package/skills/wix-headless/references/verticals/gift-cards.md +0 -24
- package/skills/wix-headless/references/verticals/stores.md +0 -33
- package/skills/wix-headless/scripts/check-manifest.mjs +0 -335
- package/skills/wix-headless/scripts/compose.mjs +0 -520
- package/skills/wix-headless/scripts/emit-design-tokens.mjs +0 -157
- package/skills/wix-headless/scripts/flatten.sh +0 -61
- package/skills/wix-headless/scripts/generate-images.mjs +0 -242
- package/skills/wix-headless/scripts/patch-decorative-slots.mjs +0 -154
- package/skills/wix-headless/scripts/plan-entity-image-waves.mjs +0 -190
- package/skills/wix-headless/scripts/scaffold.sh +0 -139
- package/skills/wix-headless/scripts/seed-utilities.sh +0 -93
- package/skills/wix-headless/scripts/write-decorative-json.mjs +0 -62
- package/skills/wix-headless/shared-utilities/analytics.ts +0 -40
- package/skills/wix-headless/shared-utilities/ricos.ts +0 -179
- package/skills/wix-headless/shared-utilities/wix-image.ts +0 -72
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
# Connect — wire an existing project to a managed Wix backend
|
|
2
|
+
|
|
3
|
+
**Managed only.** This flow runs when the project type is `managed` and the operation is
|
|
4
|
+
`connect` **or** `iterate` — a frontend project is already on disk (or a design URL was fetched into
|
|
5
|
+
CWD) and the user wants it hosted on Wix and powered by Wix Business Solutions. It attaches Wix to the
|
|
6
|
+
project (or reuses the existing connection when iterating), runs the shared backend flow, wires the UI
|
|
7
|
+
to that backend, builds, and releases. **The only difference for `iterate`** — the project is already
|
|
8
|
+
connected, so §1 skips `init` and reuses the existing `wix.config.json`.
|
|
9
|
+
**No Designer, no templates, no binding-map machinery** — `SDK_HANDOFF.md` is the wiring reference.
|
|
10
|
+
|
|
11
|
+
Run these in order:
|
|
12
|
+
|
|
13
|
+
## 1 · Attach Wix to the project — skip if already connected
|
|
14
|
+
|
|
15
|
+
**If a `wix.config.json` (or `.wix/`) is already present, the project is already connected to Wix — this is the *iterate* case.** Do **not** run `init` again (it's for attaching a *new* Wix project). Read `./wix.config.json` → hold `SITE_ID` in scratch, and skip to §2.
|
|
16
|
+
|
|
17
|
+
> **Iterate is incremental.** An already-connected project may already be set up and/or seeded from a prior run. In §3–§4, **check current state before acting** — query installed apps before installing, check for already-seeded content before seeding (re-seeding duplicates it), and inspect existing wiring before adding. Do only the delta the new intent requires; leave the rest untouched.
|
|
18
|
+
|
|
19
|
+
Otherwise, attach Wix in place:
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
CI=1 npm create @wix/new@latest init
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
Run from the project directory. It creates `wix.config.json` (with the `siteId` and the headless
|
|
26
|
+
OAuth app) and registers the project's origin on that app. Read `./wix.config.json` → hold `SITE_ID`
|
|
27
|
+
in scratch.
|
|
28
|
+
|
|
29
|
+
**If the design was brought in from elsewhere** (a `.zip`/folder/file, or a fetched design-file URL),
|
|
30
|
+
place it into CWD **first** — unzip/copy/fetch the design's files into the working directory so it's the
|
|
31
|
+
project on disk — **then** `init`. An empty CWD plus a brought-in design is still `connect`, not create:
|
|
32
|
+
land the design, then attach Wix to it.
|
|
33
|
+
|
|
34
|
+
## 2 · Authenticate
|
|
35
|
+
|
|
36
|
+
Per `references/managed/AUTHENTICATION.md` — `whoami`/login if needed, then mint the site token
|
|
37
|
+
(`$TOKEN`) for `$SITE_ID`.
|
|
38
|
+
|
|
39
|
+
## 3 · Backend flow (shared)
|
|
40
|
+
|
|
41
|
+
- **`references/SETUP.md`** — install the apps the resolved `verticals[]` need.
|
|
42
|
+
- **`references/SEED.md`** — create the backend content (and, if `imagery` is on, attach entity images).
|
|
43
|
+
|
|
44
|
+
## 4 · Wire the existing UI
|
|
45
|
+
|
|
46
|
+
**Read the frontend reference for *how to connect* first**, keyed on the brought project's framework:
|
|
47
|
+
an **Astro** project → **`references/astro.md`** (auto-auth, no client); **any other framework or a
|
|
48
|
+
static design** → **`references/non-astro.md`** (manual `OAuthStrategy` client). The chosen file carries
|
|
49
|
+
the connect mechanics and the framework caveats; **`references/SDK_HANDOFF.md`** carries the
|
|
50
|
+
per-capability packages, the SDK docs, and the seeded schema (all other content is queried live).
|
|
51
|
+
|
|
52
|
+
Connect the existing project to the live backend. Install the SDK packages the loaded verticals need;
|
|
53
|
+
then, with **additive** edits:
|
|
54
|
+
- bind seeded content into the regions that already exist (product grids, post lists, item pages…);
|
|
55
|
+
- add the connected feature the intent implies where it's missing (e.g. a contact/RSVP form, a cart);
|
|
56
|
+
- always guard SDK calls (try/catch + fallback) so a failed call never blanks the page.
|
|
57
|
+
|
|
58
|
+
A run must end with the site actually reading from / writing to Wix — `init` + `release` with nothing
|
|
59
|
+
wired is not an acceptable outcome. If `imagery` is on and a surface needs an image, generate it per
|
|
60
|
+
**`references/IMAGE_GENERATION.md`** (up to the per-run `imageCap`, Discovery §4); for any slot not
|
|
61
|
+
generated — off, over the cap, or a failure — render the **themed-block fallback** (a styled `div` on
|
|
62
|
+
the design tokens), never an empty or broken slot.
|
|
63
|
+
|
|
64
|
+
## 5 · Build & release
|
|
65
|
+
|
|
66
|
+
**Release once, at the very end** — only after Setup (§3), Seed **including the entity-image attach** (`SEED.md` § "Entity images"), the UI wiring (§4), and any imagery are all complete. Don't `build && release` mid-flow to preview. **A re-release does not refresh backend content:** a headless frontend fetches seeded content and entity images at **runtime**, so they're not in the build output — changing a seeded entity or attaching an image after release is live on the next request with **no** re-publish. Re-release only when the **frontend build output** changed. A backend image that isn't showing is an attach-shape bug (`SEED.md` § "Entity images"), not a stale cache — don't re-release to clear one.
|
|
67
|
+
|
|
68
|
+
If the project has its own build (`package.json` with a `build` script), run `npm run build` and point
|
|
69
|
+
`wix.config.json`'s `site.outputDirectory` at the build output. A **static** site (no build) needs the
|
|
70
|
+
static-hosting fixes in **`references/managed/DEPLOYMENT.md`** — the entry file must be named
|
|
71
|
+
`index.html`, and `outputDirectory` must point at the directory holding it (init's `./dist` default is
|
|
72
|
+
wrong for static). Then finalize per **`references/managed/DEPLOYMENT.md`** (`npx @wix/cli@latest release` — Wix
|
|
73
|
+
publishes + registers the origin OOTB). Close with a short summary (apps installed, content seeded, what
|
|
74
|
+
was wired) and **both links — the live site URL and the site dashboard `https://manage.wix.com/dashboard/<SITE_ID>`** (see `managed/DEPLOYMENT.md` § "Give the user both links"; `<SITE_ID>` is the `siteId` in scratch), then run the feedback checkpoint (`managed/DEPLOYMENT.md` § "Before you sign off").
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
# Create — scaffold a new managed Wix Headless project
|
|
2
|
+
|
|
3
|
+
**Managed only.** This flow runs when the project type is `managed` and the operation is
|
|
4
|
+
`create` (an empty directory + a "build me a site" intent). It scaffolds a fresh Wix Headless
|
|
5
|
+
project, runs the shared backend flow against it, builds the frontend wired to that backend, and
|
|
6
|
+
releases. There is **no Designer and no template library** — the frontend is built ad-hoc to the
|
|
7
|
+
user's intent, using `SDK_HANDOFF.md` as the integration reference.
|
|
8
|
+
|
|
9
|
+
Run these in order:
|
|
10
|
+
|
|
11
|
+
## 0 · Resolve the frontend framework
|
|
12
|
+
|
|
13
|
+
Default is **Astro** — the documented managed default. Set `frontendFramework` to a non-Astro
|
|
14
|
+
framework **only if the user names one**: "Vite", "React", "Vue", "Svelte", "Next", "plain HTML/static",
|
|
15
|
+
or any "not Astro / don't use Astro" phrasing. Never infer a framework the user didn't name
|
|
16
|
+
(`references/non-astro.md` Caveat N1). Hold `frontendFramework` in scratch — it selects the **scaffold
|
|
17
|
+
command (§1)**, the **wiring reference (§4)**, and the **build command (§5)**. Derive `<folder-name>` as
|
|
18
|
+
a lowercase, npm-safe name from the brand (lowercase letters, numbers, hyphens; starts with a letter or
|
|
19
|
+
number).
|
|
20
|
+
|
|
21
|
+
## 1 · Scaffold the project
|
|
22
|
+
|
|
23
|
+
Branch on `frontendFramework` from §0. **Both** branches end with a `wix.config.json` (the Wix link:
|
|
24
|
+
`siteId` + private-app `appId`) in the project root — read it → hold `SITE_ID` (the `siteId`) in scratch.
|
|
25
|
+
|
|
26
|
+
### Astro (default)
|
|
27
|
+
|
|
28
|
+
Run the **documented** create command (flags and rationale: `references/astro.md` §1):
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
CI=1 npm create @wix/new@latest -- headless \
|
|
32
|
+
--folder-name <folder-name> \
|
|
33
|
+
--business-name "<Brand Name>" \
|
|
34
|
+
--site-template \
|
|
35
|
+
--skip-install \
|
|
36
|
+
--no-publish
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
- The `--` separator is required. Bare `--site-template` (no value) keeps it on the **blank** starter —
|
|
40
|
+
the model owns design, so don't adopt a business template; a value, or omitting the flag, would
|
|
41
|
+
prompt and abort in a non-interactive shell.
|
|
42
|
+
- The command provisions the Wix site + private app and writes `wix.config.json`. It requires a
|
|
43
|
+
logged-in CLI session (step 2 handles login if needed).
|
|
44
|
+
- It creates the project in a **subdirectory named `<folder-name>`** — there is no in-place option, so
|
|
45
|
+
**`cd <folder-name>`** and run the rest of the flow from inside it (it's the project root, with the
|
|
46
|
+
single `.wix/`).
|
|
47
|
+
- `--skip-install` defers dependency install to step 4 (which adds the SDK package set); run
|
|
48
|
+
`npm install` there before building.
|
|
49
|
+
|
|
50
|
+
### Non-Astro (a framework was named)
|
|
51
|
+
|
|
52
|
+
There is **no Wix scaffolder for a non-Astro site** (`non-astro.md` N1) — so scaffold the framework's
|
|
53
|
+
**own** project first, then `init` it onto Wix (two steps, in this order):
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
# 1. the framework's OWN documented scaffolder — e.g. Vite + React:
|
|
57
|
+
npm create vite@latest <folder-name> -- --template react
|
|
58
|
+
cd <folder-name>
|
|
59
|
+
# 2. connect this folder to a fresh Wix headless project, IN PLACE:
|
|
60
|
+
CI=1 npm create @wix/new@latest init
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
- Use the framework's documented create command (read its docs if unsure of the template flag) — Vite,
|
|
64
|
+
Next, SvelteKit, Vue, etc. For **plain static HTML** there's no scaffolder: create the folder and an
|
|
65
|
+
`index.html` yourself, then run `init`.
|
|
66
|
+
- `npm create @wix/new@latest init` runs **in place** (no new subdirectory, no Astro files added): it
|
|
67
|
+
signs you in, provisions the Wix site + private app, and writes `wix.config.json`
|
|
68
|
+
(`siteId`, `appId`, `site.outputDirectory: "./dist"`). It takes no flags. Run it **from inside**
|
|
69
|
+
`<folder-name>` *after* the framework scaffold exists.
|
|
70
|
+
- A static (no-build) frontend builds to no `dist` — fix `site.outputDirectory` per
|
|
71
|
+
`managed/DEPLOYMENT.md` ("Static frontends") before release.
|
|
72
|
+
|
|
73
|
+
## 2 · Authenticate
|
|
74
|
+
|
|
75
|
+
Per `references/managed/AUTHENTICATION.md` — `whoami`/login if needed, then mint the site token
|
|
76
|
+
(`$TOKEN`) for `$SITE_ID`. (Scaffold already required a logged-in CLI session.)
|
|
77
|
+
|
|
78
|
+
## 3 · Backend flow (shared)
|
|
79
|
+
|
|
80
|
+
Run the agnostic flow against the scaffolded site:
|
|
81
|
+
- **`references/SETUP.md`** — install the apps the resolved `verticals[]` need.
|
|
82
|
+
- **`references/SEED.md`** — create the backend content (and, if `imagery` is on, attach entity images).
|
|
83
|
+
|
|
84
|
+
## 4 · Build the frontend (wired to the backend)
|
|
85
|
+
|
|
86
|
+
**Read the frontend reference for *how to connect* first — pick it by `frontendFramework` (§0):**
|
|
87
|
+
|
|
88
|
+
- **Astro** (default) → **`references/astro.md`**: managed-Astro auto-authenticates, so the frontend
|
|
89
|
+
creates **no client** (no `OAuthStrategy`, no `clientId`) — you `import { x } from "@wix/<pkg>"` and
|
|
90
|
+
call methods. astro.md also carries the load-bearing caveats (the always-on `astro.config.mjs`
|
|
91
|
+
integrations, SSR error guards, island hydration).
|
|
92
|
+
- **Non-Astro** → **`references/non-astro.md`**: the manual `OAuthStrategy` visitor-client path
|
|
93
|
+
(`createClient({ modules, auth: OAuthStrategy({ clientId }) })`), where `clientId` is the public
|
|
94
|
+
`appId` from the `wix.config.json` written by `init` (§1).
|
|
95
|
+
|
|
96
|
+
Then build the pages the user's intent calls for, **wired to the live backend**, using
|
|
97
|
+
**`references/SDK_HANDOFF.md`** for the per-capability packages, the SDK docs, and the seeded schema to
|
|
98
|
+
bind (collection/form names + field keys; all other content is queried live). Install the SDK packages the loaded verticals need, author the pages/components directly in the
|
|
99
|
+
project, and bind them to the live backend content. Keep it scoped to what was asked — no speculative pages.
|
|
100
|
+
|
|
101
|
+
> **`npm install` note (Astro):** always run **`npm install --ignore-scripts`**. Astro pulls `sharp`
|
|
102
|
+
> as an *optional* transitive dep for **local, build-time**
|
|
103
|
+
> image optimization this headless flow never uses (all imagery is remote Wix Media URLs served through
|
|
104
|
+
> plain `<img>`), and its from-source native build can fail and abort the whole install; `--ignore-scripts`
|
|
105
|
+
> skips that failing build up front. **Do not** use the deprecated `--no-optional` (silent no-op in modern
|
|
106
|
+
> npm — sharp still builds) or `--omit=optional` (sharp still resolves). A failed/absent `sharp` is
|
|
107
|
+
> **expected and harmless — never build, retry, or repair it, and never spend time diagnosing it**
|
|
108
|
+
> (`astro.md` Caveat A9).
|
|
109
|
+
|
|
110
|
+
If `imagery` is on and a surface needs an image (e.g. a homepage hero, an about-section visual),
|
|
111
|
+
generate it per **`references/IMAGE_GENERATION.md`** and use its `file.url` — up to the per-run
|
|
112
|
+
`imageCap` (Discovery §4). Generate only what the pages actually use. For any slot **not** generated
|
|
113
|
+
(imagery off, over the cap, or a generation failure), render the **themed-block fallback** — a styled
|
|
114
|
+
`div` on the site's design tokens — never an empty slot or a broken `<img>` (`IMAGE_GENERATION.md`).
|
|
115
|
+
|
|
116
|
+
## 5 · Build & release
|
|
117
|
+
|
|
118
|
+
**Release once, at the very end.** Do **not** `build && release` mid-flow to "preview" progress. Reach this step only after **all** of the earlier work is done: Setup (§3), Seed **including the entity-image attach** (`SEED.md` § "Entity images" — pass-2 patches), the frontend wiring (§4), and any page imagery. A single release at the end is the target; each extra build+release cycle is wasted wall time.
|
|
119
|
+
|
|
120
|
+
**A re-release does not refresh backend content — don't reach for one to "fix" seeded data or images.** A headless frontend fetches seeded backend content **and entity images at runtime** (via the SDK / REST), so that content is *not* baked into the build output. If you change a seeded entity or attach an image **after** releasing, the live site already reflects it on the next request — there is nothing to re-publish. Re-release **only** when the **frontend build output itself** changed. In particular, a backend image that isn't showing is an **attach-shape bug** (wrong write shape → the entity has no image — see `SEED.md` § "Entity images" / the capability recipe's **Attach images** step), **not** a stale CDN cache; don't re-release to "clear a cache" for it.
|
|
121
|
+
|
|
122
|
+
Produce the build output, then finalize per **`references/managed/DEPLOYMENT.md`**
|
|
123
|
+
(`npx @wix/cli@latest release` — Wix publishes the site and registers the origin OOTB). The build step
|
|
124
|
+
depends on `frontendFramework` (§0):
|
|
125
|
+
|
|
126
|
+
- **Astro** → `npx @wix/cli@latest build`.
|
|
127
|
+
- **Non-Astro** → the framework's own build (e.g. `npm run build`); a static (no-build) site skips this.
|
|
128
|
+
`release` publishes whatever `site.outputDirectory` points at (default `./dist`).
|
|
129
|
+
|
|
130
|
+
Close with a short summary (apps installed, content seeded, pages built) and **both links — the live site URL and the site dashboard `https://manage.wix.com/dashboard/<SITE_ID>`** (see `managed/DEPLOYMENT.md` § "Give the user both links"; `<SITE_ID>` is the `siteId` in scratch), then run the feedback checkpoint (`managed/DEPLOYMENT.md` § "Before you sign off").
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
# Deployment — managed (Wix CLI release)
|
|
2
|
+
|
|
3
|
+
For a **managed** project, Wix owns the hosting, so finalizing the live site is a single command — Wix handles publishing the site **and** registering the deployed origin on the OAuth app **out of the box**. There are no manual publish or origin-registration calls (unlike the self-hosted types).
|
|
4
|
+
|
|
5
|
+
## Release
|
|
6
|
+
|
|
7
|
+
From the project directory:
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
CI=1 npx @wix/cli@latest release
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
- Publishes whatever the managed project is configured to deploy to Wix's hosting/CDN, and brings the live site up.
|
|
14
|
+
- The deployed origin is registered on the OAuth app automatically — the frontend's visitor SDK calls are accepted from the live URL with no extra step.
|
|
15
|
+
- The published URL is printed on stdout (`Site published on <url>`).
|
|
16
|
+
|
|
17
|
+
## Give the user both links — the live site **and** the dashboard
|
|
18
|
+
|
|
19
|
+
When you close the run, surface **two** links, not one:
|
|
20
|
+
|
|
21
|
+
1. **The live site URL** — the `Site published on <url>` value from release above.
|
|
22
|
+
2. **The site dashboard (Business Manager)** — `https://manage.wix.com/dashboard/<SITE_ID>`, where `<SITE_ID>` is the `siteId` held in scratch (read from `wix.config.json`). This is where the owner manages the site behind the headless frontend — view store orders, edit content, manage members, etc. **Always include it**: a headless site has no editor button, so without this link the owner has no obvious way back into their own backend, and the seeded content/apps look unreachable.
|
|
23
|
+
|
|
24
|
+
Present them plainly, e.g.:
|
|
25
|
+
|
|
26
|
+
```
|
|
27
|
+
Live site: <published-url>
|
|
28
|
+
Dashboard: https://manage.wix.com/dashboard/<SITE_ID>
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
## Before you sign off — feedback checkpoint
|
|
32
|
+
|
|
33
|
+
This is the last step of the run — the natural point to check `../FEEDBACK.md`. Don't wait for the
|
|
34
|
+
user to complain: run a quick self-check over the whole session (not just this final step) — a
|
|
35
|
+
confusing API response, a doc that was wrong/missing, an extra retry, a workaround you had to invent,
|
|
36
|
+
anything that cost more turns than it should have. If anything qualifies, **offer** to relay it to Wix
|
|
37
|
+
as you deliver the links above; send only after an explicit yes.
|
|
38
|
+
|
|
39
|
+
## Member login on a **non-Astro** frontend — register the callback URI (post-release)
|
|
40
|
+
|
|
41
|
+
**Only when the run has member login on a non-Astro SPA/static frontend using the Wix login page** (`inline-recipes/how-to-code-members-non-astro.md` — the `getAuthUrl` → `/callback` handshake). Astro's built-in `/api/auth/*` callback shapes are auto-registered; a **non-Astro SPA's own callback path is not** — and **login stays dead (4xx on the login redirect) until you register it**. This is a genuine gap `wix release` does *not* close for you.
|
|
42
|
+
|
|
43
|
+
- `release` auto-registers the deployed **origin** (`allowedRedirectDomains`) — that's the visitor-SDK/CORS surface (above). It does **not** register the member-login **callback URL** (`allowedRedirectUris`). These are two different fields; members needs **both**, and only the first is automatic.
|
|
44
|
+
- **This is a post-release step** — the callback URL embeds the deployed origin, which is unknown until `release` prints it. Do it right after release, once the URL is known.
|
|
45
|
+
- **⚠️ `allowedRedirectUris` IS writable via the API — do not conclude it's read-only/dashboard-only.** The `UpdateOAuthApp` reference may not list it among the obvious updatable fields, but a masked `PATCH` sets it. The trap is a **required field mask**: without `mask.paths` the `PATCH` returns `200` and **silently no-ops**.
|
|
46
|
+
|
|
47
|
+
```bash
|
|
48
|
+
ID="<clientId>" # the OAuth app id == the public clientId
|
|
49
|
+
# 1) GET first and append — the PATCH REPLACES the array, so include what's already there:
|
|
50
|
+
curl -sS -w "\nHTTP_STATUS:%{http_code}" https://www.wixapis.com/oauth-app/v1/oauth-apps/$ID \
|
|
51
|
+
-H "Authorization: Bearer $TOKEN"
|
|
52
|
+
# 2) PATCH with the field mask (register BOTH the exact callback and the versioned-preview wildcard):
|
|
53
|
+
curl -sS -X PATCH https://www.wixapis.com/oauth-app/v1/oauth-apps/$ID \
|
|
54
|
+
-H "Authorization: Bearer $TOKEN" -H 'content-type: application/json' \
|
|
55
|
+
-w "\nHTTP_STATUS:%{http_code}" -d '{
|
|
56
|
+
"oAuthApp": { "id": "'"$ID"'",
|
|
57
|
+
"allowedRedirectUris": [ <existing…>, "https://<host>/callback", "https://*-<host>/callback" ] },
|
|
58
|
+
"mask": { "paths": ["allowedRedirectUris"] }
|
|
59
|
+
}'
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
- Include **both** the exact URL **and** the `https://*-<host>/…` wildcard — Wix serves versioned preview subdomains. The callback path must match the recipe's `redirectUri` **exactly** (e.g. `window.location.origin + '/callback'`).
|
|
63
|
+
- `allowedRedirectDomains` and `allowedRedirectUris` can go in **one** `PATCH` (list both under `mask.paths`) if you ever need to set the origin by hand too.
|
|
64
|
+
- **If you're not the one deploying**, you can't know the domain — flag the member-login callback URI to the user to register, and note **login is dead until they do** (higher-stakes than the origin flag).
|
|
65
|
+
|
|
66
|
+
> **Custom-login** (`how-to-code-members-custom-login.md`) does **not** need this — `register`/`login` are direct API calls with no login-page redirect. Only `sendPasswordResetEmail`'s `redirectUri` and logout's return URL need allow-listing there.
|
|
67
|
+
|
|
68
|
+
## Static frontends (no build step)
|
|
69
|
+
|
|
70
|
+
These two fixes are **Wix-hosting facts** — they apply to a connected **static** site (plain HTML, no bundler) on the managed path, and the docs are silent on both. A bundler SPA that builds to its own output directory doesn't need them.
|
|
71
|
+
|
|
72
|
+
- **The entry file must be named `index.html`.** Wix serves `index.html` at the site root. A brought-in design named anything else (e.g. `"My Design.html"`) **publishes "successfully" but 500s/404s at runtime**. Rename the entry to `index.html` **before** release and fix internal references to it.
|
|
73
|
+
- **`site.outputDirectory` must point at the directory holding `index.html`.** `init` writes `site.outputDirectory: "./dist"`, which assumes an SPA that *builds* to `dist`. A static site has no build, so `./dist` is wrong — set `outputDirectory` in `wix.config.json` to the directory that actually contains `index.html`, or `release` publishes but the live site 404s at root.
|
|
74
|
+
|
|
75
|
+
## Transient errors
|
|
76
|
+
|
|
77
|
+
A release can hit transient infrastructure errors (`ECONNRESET`, `ETIMEDOUT`, `STATE_MISMATCH`, "try again shortly"). Retry the release serially up to **3×** with a short backoff. **Build failures are not retryable** — they're code bugs; fix the code, not the retry.
|
|
78
|
+
|
|
79
|
+
That's the whole of finalize for `managed` — no `site-publisher` call, and no `oauth-app` **origin** PATCH (the origin is auto-registered). The **one** exception is the member-login callback on a non-Astro frontend above — that `allowedRedirectUris` PATCH is manual and required.
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
# Non-Astro — the pinned docs to read *before* wiring a non-Astro frontend to Wix
|
|
2
|
+
|
|
3
|
+
This is the framework reference for any **non-Astro** frontend — React/Vue/Svelte/Vite SPA or plain static HTML. Astro stays the default (`astro.md`); read this when the user **names a framework** or **brings a non-Astro design**. Like `astro.md`, it's an **index of doc pages** with one-line "what it settles" notes, **then a Caveats section**. It carries **no design, templates, payloads, or per-framework code** — the model designs and writes the whole frontend; this file says only *how it connects*.
|
|
4
|
+
|
|
5
|
+
**This file is framework-axis only — it is mode-agnostic.** It is read in **both** the managed and self-managed flows, so it contains **no managed-vs-self-managed branching**: no `init` vs OAuth-app, no `wix release` vs external host, no `outputDirectory`, no `wix.config.json`. Anything that differs by *who hosts* lives in the project-type files (`managed/`, `self-managed/`) — you're already reading those in a known mode. Here is only what's **identical across both flows**: a non-Astro frontend talks to Wix through a manual `OAuthStrategy` visitor client + the SDK, the same way no matter who hosts it.
|
|
6
|
+
|
|
7
|
+
**The auth rule (the cross-skill boundary).** **Astro = auto-auth, no client. Non-Astro = manual client.** Unlike Astro, you create a client — `createClient({ modules, auth: OAuthStrategy({ clientId }) })`. For non-Astro this is the **documented, correct** model (the "Create a Client with OAuth" doc scopes itself to "frameworks other than Astro"). The `clientId` is the project's **public** OAuth client id — **not** a secret. **Where that id comes from is your flow's `AUTHENTICATION.md`** (managed: the `appId` in `wix.config.json`; self-managed: the OAuth app you created) — this file just *uses* it.
|
|
8
|
+
|
|
9
|
+
**Two sub-shapes, split on build — a framework fact, not a hosting fact:** **bundler SPA** (has a build step → `npm install` + `import`) vs **static HTML** (no build → load the SDK from a CDN). The caveats below split on that.
|
|
10
|
+
|
|
11
|
+
**How to use it.** Before authenticating or wiring data, read the pinned pages top-to-bottom — read-then-act, never invent a URL or a body from memory.
|
|
12
|
+
|
|
13
|
+
**URL form & how to read it.** Each link is the **`.md` twin** of a docs article. A page pinned here is **already curated — read it directly; don't re-discover it with search.** The two read paths take **different URL forms** — don't mix them:
|
|
14
|
+
|
|
15
|
+
- **`curl` the link — first priority. Fetch it as-is (keep the `.md`)** for raw markdown.
|
|
16
|
+
- **MCP doc tools — second priority** (discovery of a page this file doesn't pin, or a fallback if a fetch fails). Pass the URL *without* the `.md` suffix — `ReadFullDocsArticle` for the article pages here, `SearchWixSDKDocumentation` to reach SDK methods this file doesn't pin.
|
|
17
|
+
- **No MCP, or a shape not pinned anywhere → doc discovery** (`DOC_DISCOVERY.md`): a `curl` semantic search (`document_type: SDK`/`WIX_HEADLESS`) plus structured schema lookup, then read the hit's `.md?apiView=SDK`.
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## 1 — Authenticate (the heart — manual client, identical in both flows)
|
|
22
|
+
|
|
23
|
+
| Page | What it settles |
|
|
24
|
+
|---|---|
|
|
25
|
+
| <https://dev.wix.com/docs/go-headless/self-managed-headless/authentication/oauth/create-a-client-for-authentication-with-oauth.md> | **The model.** Install `@wix/sdk` + the domain packages, then `createClient({ modules, auth: OAuthStrategy({ clientId }) })`. clientId only, **no secret in the frontend**. Explicitly scoped to "frameworks other than Astro." Create the client **once** and reuse it. |
|
|
26
|
+
| <https://dev.wix.com/docs/sdk/core-modules/sdk/oauth-strategy.md> | **`OAuthStrategy` reference** — visitor sessions (automatic) vs member flows (managed/custom/external); token + session methods; confirms `clientId` only. |
|
|
27
|
+
| <https://dev.wix.com/docs/go-headless/self-managed-headless/authentication/visitors/handle-visitors-using-the-js-sdk.md> | **Visitors & members via the JS SDK** — visitor token sessions out of the box, and member login when the site needs it. Members are **first-class** on the non-Astro path (not deferred). |
|
|
28
|
+
| <https://dev.wix.com/docs/go-headless/self-managed-headless/authentication/members/wix-login-page/wix-managed-login-using-the-js-sdk.md> | **Member login (Wix login page)** — the manual `OAuthStrategy` handshake: `generateOAuthData → getAuthUrl → parseFromUrl → getMemberTokens → setTokens`, `logout`, `loggedIn()`. Login *is* sign-up (the Wix page logs in or registers); member tokens are the **same shape** as visitor tokens (`role: member`), so they reuse the visitor session machinery — login just swaps the token set. **`clientId` only (no secret); the connected site must be PUBLISHED and the `redirectUri` must be an exact-match allow-listed URI, or `getAuthUrl` fails; default to the Wix login page** over custom/external. **Full frontend contract → Read `inline-recipes/how-to-code-members-non-astro.md`** (local — Read it, don't curl). **Only if the brief explicitly asks for a custom/branded login form or custom sign-up fields → Read `inline-recipes/how-to-code-members-custom-login.md`** instead (`client.auth.register`/`login`; works on any project type — pick by intent, not project type). |
|
|
29
|
+
| <https://dev.wix.com/docs/sdk/articles/set-up-a-client/about-the-wix-client.md> | **Confirms non-Astro *does* need a client** — the "when you need a client vs not" list; non-Astro (managed or self-managed) is on the "needs a client" side, the mirror of Astro. |
|
|
30
|
+
|
|
31
|
+
> **clientId source is deferred.** This file uses the `clientId`; it does **not** say where it comes from. That's `{managed,self-managed}/AUTHENTICATION.md` — managed reads `appId` from `wix.config.json`; self-managed uses the OAuth app you created. Don't re-mint or re-fetch it if the flow already provides it.
|
|
32
|
+
|
|
33
|
+
## 2 — Frontend data access (identical in both flows)
|
|
34
|
+
|
|
35
|
+
All reads and writes go through the client from §1 — the SDK call shapes are framework-identical (the model adapts the idiom: React effect / Vue `onMounted` / Svelte store). For **which packages** a capability needs and the **SDK module docs** for each call shape, use `SDK_HANDOFF.md` §3 (the package map) — don't restate it here. For **what was seeded** and the IDs to bind, cross-link `SEED.md`; the frontend reads it with the visitor client.
|
|
36
|
+
|
|
37
|
+
| Page | What it settles |
|
|
38
|
+
|---|---|
|
|
39
|
+
| <https://dev.wix.com/docs/sdk/articles/work-with-the-sdk/install-sdk-packages.md> | Installing `@wix/sdk` + domain packages and their current versions (bundler path). |
|
|
40
|
+
|
|
41
|
+
## 3 — Build the frontend (framework fact, not hosting)
|
|
42
|
+
|
|
43
|
+
- **Bundler SPA** — produce the build output with the project's own `npm run build`.
|
|
44
|
+
- **Static HTML** — there is **no build**; the HTML *is* the deployable artifact.
|
|
45
|
+
|
|
46
|
+
This file **stops at "produce the build output."** *Where that output is deployed and how* — `outputDirectory`, publish, origin registration, the `index.html`-at-root rule — is host-specific and lives in `{managed,self-managed}/DEPLOYMENT.md`, not here.
|
|
47
|
+
|
|
48
|
+
## 4 — Caveats (framework-invariant only)
|
|
49
|
+
|
|
50
|
+
These hold regardless of who hosts. Host-specific gotchas (static `outputDirectory`, the `index.html` rename) are filed in `managed/DEPLOYMENT.md`, where you're in a known mode. (Numbering: N2/N3 were retired; the gap is intentional and the remaining IDs are kept stable so inbound references don't shift.)
|
|
51
|
+
|
|
52
|
+
| Caveat | What it says |
|
|
53
|
+
|---|---|
|
|
54
|
+
| **N1 — No Wix scaffolder for a new non-Astro site** | There is **no** Wix command to scaffold a fresh React/Vue/static site — the non-Astro flow is connect-only. To *create* from scratch, the model runs the framework's **own** `npm create …` (e.g. `npm create vite@latest`), then the flow connects it. **Never infer a framework the user didn't name.** |
|
|
55
|
+
| **N4 — No-bundler sites load the SDK from a CDN** | With **no bundler** (static HTML), import the SDK in a `<script type="module">` from `https://esm.sh/@wix/sdk@1` (plus the domain packages the same way) — there's no `npm install` step to bundle it. With a bundler, use normal `npm install` + `import`. |
|
|
56
|
+
| **N5 — Client-only ⇒ no elevation ⇒ public-read** | A pure SPA/static frontend runs with a **visitor** token and **no server**, so there is no `auth.elevate`. CMS collections it reads must be **public-read**; anything member-scoped needs member auth. True regardless of who hosts. (Contrast Astro, which can elevate in a backend `/api` endpoint.) |
|
|
57
|
+
| **N6 — `clientId` is public; inline it** | The OAuth `clientId` is public, not a secret — it's fine to inline it directly in client code/bundle; there's no runtime secret to protect and no env-var indirection required. (Where the value comes from is still the flow's `AUTHENTICATION.md`.) |
|
|
58
|
+
| **N7 — Resolve `wix:image://` URIs with the SDK, never by hand** | SDK media fields (product/blog/CMS images) come back as internal identifiers like `wix:image://v1/<hash>/<file>#originWidth=…`, **not** ready URLs. Convert them with the SDK media module — `import { media } from '@wix/sdk'`, then `media.getScaledToFillImageUrl(uri, w, h, {})` (**returns the URL string directly — do NOT append `.url`; the 4th `options` arg is required, pass `{}`**), or `media.getImageUrl(uri).url` for the original (**that** one returns a `{ url }` object). The two shapes differ — mixing them (`getScaledToFillImageUrl(...).url`) resolves every image to `undefined`. Hand-building a `static.wixstatic.com/.../v1/fit/...` URL gets the format wrong and the image **403s** (or silently fails to load). Only `wix:image://` values need this — an already-absolute `https://` URL (e.g. an Unsplash placeholder) passes straight through. Docs: <https://dev.wix.com/docs/sdk/core-modules/sdk/media>. |
|
|
59
|
+
| **N8 — Member login is a manual `OAuthStrategy` round-trip on the same client** | Login (which *is* sign-up), logout and "am I a member?" run on the visitor client from §1 — don't build a second client. Drive the handshake yourself: `generateOAuthData → getAuthUrl → parseFromUrl → getMemberTokens → setTokens`, `logout`, `loggedIn()`; **persist and renew** member tokens exactly like visitor tokens (`renewToken`, re-hydrate with `setTokens` on boot). Preconditions that bite: **`clientId` only**, **site PUBLISHED**, **`redirectUri` allow-listed exact-match**, **default to the Wix login page**. Read the current member with **`@wix/members` `getCurrentMember`** (not the dev-preview `@wix/site-members`). **No `auth.elevate`** — a member reads their own data under the member token, and a serverless SPA has no elevation anyway (N5). Full contract: `inline-recipes/how-to-code-members-non-astro.md`. |
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# Authentication — self-managed (TBD)
|
|
2
|
+
|
|
3
|
+
For a **self-managed** project (self-hosted, where the user manages their own hosting and credential supply), the authentication method is **not yet decided — TBD**.
|
|
4
|
+
|
|
5
|
+
When defined, this file must specify how `self-managed` obtains, for the rest of the (project-type-agnostic) flow:
|
|
6
|
+
|
|
7
|
+
- **`$TOKEN`** — a bearer token authorized for the metasite (used as `Authorization: Bearer $TOKEN`).
|
|
8
|
+
- **`$SITE_ID`** — the metasite id (used as the `wix-site-id` header on every site-scoped call).
|
|
9
|
+
- **`clientId`** — the OAuth app's public client id for the frontend's `OAuthStrategy` (the OAuth **app id and client id are the same value** — app-id === client-id).
|
|
10
|
+
|
|
11
|
+
It then ends at the same universal REST call shape every type uses:
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
curl -sS -w "\nHTTP_STATUS:%{http_code}" \
|
|
15
|
+
-X POST "https://www.wixapis.com/<endpoint>" \
|
|
16
|
+
-H "Authorization: Bearer $TOKEN" \
|
|
17
|
+
-H "wix-site-id: $SITE_ID" \
|
|
18
|
+
-H "Content-Type: application/json" \
|
|
19
|
+
-d '<body>'
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
> **TBD.** Until the self-managed auth method is defined, a `self-managed` run can't obtain a token — **stop with a clear error** and tell the user this project type isn't wired yet.
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# Deployment — self-managed (TBD)
|
|
2
|
+
|
|
3
|
+
For a **self-managed** project, the deploy/finalize steps are **not yet decided — TBD**.
|
|
4
|
+
|
|
5
|
+
Because hosting is the user's (not Wix's), this will likely mirror the self-hosted finalize pattern — **publish the metasite** and **register the deployed origin** on the OAuth app once the live URL is known (see `../stripe/DEPLOYMENT.md` for that shape) — but the exact mechanism, and how credentials/URL are supplied, are TBD.
|
|
6
|
+
|
|
7
|
+
> **TBD.** Until this is defined, tell the user that `self-managed` deployment isn't wired yet, and that the frontend's visitor calls will be rejected until its origin is registered on the OAuth app.
|
|
8
|
+
|
|
9
|
+
## Before you sign off — feedback checkpoint
|
|
10
|
+
|
|
11
|
+
This is the last step of the run — the natural point to check `../FEEDBACK.md`. Don't wait for the
|
|
12
|
+
user to complain: run a quick self-check over the whole session — a confusing API response, a doc
|
|
13
|
+
that was wrong/missing, an extra retry, a workaround you had to invent, anything that cost more turns
|
|
14
|
+
than it should have. If anything qualifies, **offer** to relay it to Wix before you close out; send
|
|
15
|
+
only after an explicit yes.
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# Authentication — stripe (Stripe Projects → Wix)
|
|
2
|
+
|
|
3
|
+
For a **stripe** project (self-hosted, provisioned via Stripe Projects), every Wix call is a plain `curl` against `wixapis.com` with a bearer token. The credentials come from the project's `.env` (synced by Stripe Projects when Wix was connected), and the token is minted directly from the OAuth client-credentials grant. This file is the authority for how `stripe` obtains `$TOKEN`, `$SITE_ID`, and the public `clientId`; the flow files defer here.
|
|
4
|
+
|
|
5
|
+
## Inputs from `.env`
|
|
6
|
+
|
|
7
|
+
Stripe Projects namespaces each provider's vars, and Wix's own names already begin with `WIX_`, so a real provision yields a **doubled prefix**:
|
|
8
|
+
|
|
9
|
+
| Var | Role |
|
|
10
|
+
| ----------------------- | ------------------------------------------------------------------------------------------------- |
|
|
11
|
+
| `WIX_WIX_CLIENT_ID` | the OAuth app `client_id` — also the frontend `OAuthStrategy({ clientId })` |
|
|
12
|
+
| `WIX_WIX_CLIENT_SECRET` | the OAuth app `client_secret` — **server-side only**; mints the token, never goes to the frontend |
|
|
13
|
+
| `WIX_WIX_METASITE_ID` | the metasite id → the `wix-site-id` header on every site-scoped call |
|
|
14
|
+
|
|
15
|
+
The plain `WIX_*` names are accepted as a fallback (in case the provider definition changes). Read them at runtime. If `client_id`/`client_secret` are absent, Wix isn't connected in this project — **stop with a clear error**.
|
|
16
|
+
|
|
17
|
+
The public `clientId` for the frontend's `OAuthStrategy` is `WIX_WIX_CLIENT_ID` (not secret).
|
|
18
|
+
|
|
19
|
+
## Minting the token — inline, secret stays out of context
|
|
20
|
+
|
|
21
|
+
Run this as a **single Bash call**. It sources `.env` *inside the shell*, so the command text references `$WIX_WIX_CLIENT_SECRET` but the secret value is never typed, printed, or returned. The minted token is written to a tmp file so later calls reuse it **without re-minting and without the token entering the model context**:
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
set -a; . ./.env; set +a
|
|
25
|
+
curl -sS -X POST "https://www.wixapis.com/oauth2/token" \
|
|
26
|
+
-H "Content-Type: application/json" \
|
|
27
|
+
-d "{\"grant_type\":\"client_credentials\",\"client_id\":\"${WIX_WIX_CLIENT_ID:-$WIX_CLIENT_ID}\",\"client_secret\":\"${WIX_WIX_CLIENT_SECRET:-$WIX_CLIENT_SECRET}\"}" \
|
|
28
|
+
| python3 -c "import sys,json;print(json.load(sys.stdin)['access_token'])" > /tmp/wix_token \
|
|
29
|
+
&& test -s /tmp/wix_token && echo "token minted" || echo "MINT FAILED — Wix not connected, or app/creds invalid"
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
That endpoint returns `{ "access_token": "<…>", "token_type": "Bearer", "expires_in": 14400 }`. `instance_id` is **optional and omitted**. The token is a real OAuth token with a **4-hour expiry**.
|
|
33
|
+
|
|
34
|
+
> **Shell state does not persist between Bash calls** — that is *why* the token goes to `/tmp/wix_token`. Mint once at the start of the run; every later call reads it back. Each mint here returns a *different, equally valid* token; "mint once" is for simplicity, not because re-minting is pointless.
|
|
35
|
+
|
|
36
|
+
## REST call shape
|
|
37
|
+
|
|
38
|
+
Every later call re-sources `.env` (for the non-secret metasite id) and reads the token from the tmp file — both cheap, both keep secrets out of context:
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
set -a; . ./.env; set +a
|
|
42
|
+
TOKEN=$(cat /tmp/wix_token)
|
|
43
|
+
SITE_ID="${WIX_WIX_METASITE_ID:-$WIX_METASITE_ID}"
|
|
44
|
+
curl -sS -w "\nHTTP_STATUS:%{http_code}" \
|
|
45
|
+
-X POST "https://www.wixapis.com/<endpoint>" \
|
|
46
|
+
-H "Authorization: Bearer $TOKEN" \
|
|
47
|
+
-H "wix-site-id: $SITE_ID" \
|
|
48
|
+
-H "Content-Type: application/json" \
|
|
49
|
+
-d '<body>'
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
- **`Authorization: Bearer $TOKEN`** — the `Bearer` prefix is required.
|
|
53
|
+
- **`wix-site-id: $SITE_ID`** — required by every site-scoped family (Stores v3, CMS v2, Blog v3, Forms v4, Apps-Installer v1, …). Harmless where unread; include it always.
|
|
54
|
+
- **`Content-Type: application/json`** — on every POST/PATCH body.
|
|
55
|
+
- **Parsing the response:** `-w` appends a `HTTP_STATUS:<code>` line *after* the JSON body. `grep` that line for the status, but parse the **body separately** — piping the combined output to a JSON parser (`python3 -m json.tool`, `json.load`, `jq`) chokes on the trailing status line (`Extra data: line 2 …`). Capture the body to a file with `-o body.json` (status still comes from `-w`), or drop the last line, before parsing.
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
# Deployment — stripe (self-hosted; publish + register origin)
|
|
2
|
+
|
|
3
|
+
For a **stripe** project, hosting is the user's, so two one-time backend actions finalize the live site. Both use the token from this folder's `AUTHENTICATION.md`; run them once the deployed site is up.
|
|
4
|
+
|
|
5
|
+
## 1 · Publish the Wix site
|
|
6
|
+
|
|
7
|
+
**Always publish the metasite after deploying.** Some Wix-served flows the frontend relies on (redirects to Wix-hosted pages and other features served from the published site) only work once the site has been published. Just publish every time, so a flow that needs it never silently fails. The call is idempotent and takes **no body**:
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
set -a; . ./.env; set +a
|
|
11
|
+
TOKEN=$(cat /tmp/wix_token); SITE_ID="${WIX_WIX_METASITE_ID:-$WIX_METASITE_ID}"
|
|
12
|
+
curl -sS -w "\nHTTP_STATUS:%{http_code}" \
|
|
13
|
+
-X POST "https://www.wixapis.com/site-publisher/v1/site/publish" \
|
|
14
|
+
-H "Authorization: Bearer $TOKEN" -H "wix-site-id: $SITE_ID" \
|
|
15
|
+
-H "Content-Type: application/json" -d '{}'
|
|
16
|
+
# 200 with an empty body `{}` means published — that 200 is the only success signal (no URL is returned).
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## 2 · Register the deployed origin on the OAuth app
|
|
20
|
+
|
|
21
|
+
For the frontend's visitor calls (`OAuthStrategy` with the public `clientId`) to be **accepted from the deployed site**, the site's origin must be on the OAuth app's allowed domains. Otherwise every browser SDK call from the live URL is rejected.
|
|
22
|
+
|
|
23
|
+
We don't own the hosting, so the deployed URL is unknown until the site is deployed — this is a **post-deploy step performed once the URL is known** (it can't be done during Setup/Seed). The OAuth app's id **is the `clientId`** — `WIX_WIX_CLIENT_ID`.
|
|
24
|
+
|
|
25
|
+
### Idempotent — register a given URL only once
|
|
26
|
+
|
|
27
|
+
First **read** the app's current allowed domains; if the deployed origin is already present, the registration is already done — **skip it**. Only ever add a URL that isn't there yet.
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
set -a; . ./.env; set +a
|
|
31
|
+
TOKEN=$(cat /tmp/wix_token); ID="${WIX_WIX_CLIENT_ID:-$WIX_CLIENT_ID}"
|
|
32
|
+
curl -sS -w "\nHTTP_STATUS:%{http_code}" \
|
|
33
|
+
"https://www.wixapis.com/oauth-app/v1/oauth-apps/$ID" \
|
|
34
|
+
-H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json"
|
|
35
|
+
# → read oAuthApp.allowedRedirectDomains; if the deployed origin is already in it, you're done.
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
### Add the deployed origin
|
|
39
|
+
|
|
40
|
+
`PATCH` the app, sending the **existing** `allowedRedirectDomains` **plus** the new origin (the API replaces the field, so include what's already there), with a field mask:
|
|
41
|
+
|
|
42
|
+
```bash
|
|
43
|
+
set -a; . ./.env; set +a
|
|
44
|
+
TOKEN=$(cat /tmp/wix_token); ID="${WIX_WIX_CLIENT_ID:-$WIX_CLIENT_ID}"
|
|
45
|
+
curl -sS -w "\nHTTP_STATUS:%{http_code}" -X PATCH \
|
|
46
|
+
"https://www.wixapis.com/oauth-app/v1/oauth-apps/$ID" \
|
|
47
|
+
-H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
|
|
48
|
+
-d '{
|
|
49
|
+
"oAuthApp": { "id": "'"$ID"'", "allowedRedirectDomains": [ <existing…>, "<deployed-origin>" ] },
|
|
50
|
+
"mask": { "paths": ["allowedRedirectDomains"] }
|
|
51
|
+
}'
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
- `<deployed-origin>` is the live site's domain/URL (what the browser SDK runs on).
|
|
55
|
+
- For the **exact field semantics and format** (domain vs. full URL, member-login redirect URIs vs. allowed domains), read the doc — don't guess: <https://dev.wix.com/docs/api-reference/business-management/headless/oauth-apps/update-oauth-app.md>. Member-login redirect URIs are a **separate field** (`allowedRedirectUris`) from the origin (`allowedRedirectDomains`): the visitor SDK only needs the origin allowed, but **if this deploy has member login via the Wix login page, the member-login callback must also be registered** in `allowedRedirectUris` — same masked-`PATCH` shape as the origin (add both under one `mask.paths`), and required or login 4xxs. Mechanics + the "not read-only" gotcha: `../managed/DEPLOYMENT.md` → "Member login on a non-Astro frontend". (Custom login — `../inline-recipes/how-to-code-members-custom-login.md` — needs neither, as it has no login-page redirect.)
|
|
56
|
+
|
|
57
|
+
> **If the live site's visitor token call still 400s after the origin is registered, suspect the bundle — not CORS.** An unregistered origin and an `undefined` `clientId` in the build produce the same browser-side 400. Before chasing CORS/propagation, confirm the real `clientId` value is actually inlined in the deployed bundle (see `../SDK_HANDOFF.md` §2).
|
|
58
|
+
|
|
59
|
+
## If deployment is NOT part of this agent flow
|
|
60
|
+
|
|
61
|
+
If the agent isn't the one deploying — the user will deploy the site themselves — the skill **cannot know the deployed URL**, so it cannot register the origin. (It can still publish the site — step 1 doesn't need the URL.) **Flag the origin step to the user clearly**, e.g.:
|
|
62
|
+
|
|
63
|
+
> *"One required step remains before the frontend can talk to Wix: once your site is live, its URL must be registered on the Wix OAuth app (allowed domains). Give me the deployed URL — or re-run this skill with it — and I'll register it. Until then, Wix SDK calls from the live site will be rejected."*
|
|
64
|
+
|
|
65
|
+
## Before you sign off — feedback checkpoint
|
|
66
|
+
|
|
67
|
+
This is the last step of the run — the natural point to check `../FEEDBACK.md`. Don't wait for the
|
|
68
|
+
user to complain: run a quick self-check over the whole session (not just this final step) — a
|
|
69
|
+
confusing API response, a doc that was wrong/missing, an extra retry, a workaround you had to invent,
|
|
70
|
+
anything that cost more turns than it should have. If anything qualifies, **offer** to relay it to Wix
|
|
71
|
+
before you close out; send only after an explicit yes.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: wix-manage
|
|
3
|
-
description: "Wix business solution management recipes — REST API operations for configuring and managing Wix business solutions. Routes to: stores, bookings, get-paid, CMS, contacts, forms, media, app-installation, pricing-plans, restaurants, rich-content, sites, blog, calendar, domains, site-properties, ecommerce."
|
|
3
|
+
description: "Wix business solution management recipes — REST API operations for configuring and managing Wix business solutions. Routes to: stores, bookings, get-paid, CMS, contacts, forms, media, app-installation, pricing-plans, restaurants, rich-content, sites, blog, calendar, domains, site-properties, ecommerce, marketing, analytics."
|
|
4
4
|
compatibility: Requires Wix REST API access (API key or OAuth).
|
|
5
5
|
---
|
|
6
6
|
|
|
@@ -31,6 +31,13 @@ These recipes do NOT cover frontend development or SDK usage for displaying data
|
|
|
31
31
|
|
|
32
32
|
---
|
|
33
33
|
|
|
34
|
+
## Analytics
|
|
35
|
+
|
|
36
|
+
### [Query Site Analytics](references/analytics/query-site-analytics.md)
|
|
37
|
+
**Technical:** Reads a site's analytics through the Semantic Model API. Covers listing semantic models, inspecting a model's schema (measures, dimensions, parameters), and querying data with a required time interval, filters, sorting, paging, and human-readable formatting. Key endpoints: /analytics/semantic-model/v3/semantic-models, /semantic-models/{id}, /semantic-models/query-data.
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
|
|
34
41
|
## Blog
|
|
35
42
|
|
|
36
43
|
### [How to Create Blog Posts](references/blog/how-to-create-blog-posts.md)
|
|
@@ -53,7 +60,7 @@ These recipes do NOT cover frontend development or SDK usage for displaying data
|
|
|
53
60
|
**Technical:** Full CRUD operations for Wix Bookings services using Services API. Covers service types (APPOINTMENT, CLASS, COURSE), pricing configuration, location setup, and schedule management.
|
|
54
61
|
|
|
55
62
|
### [Create Booking Service from Prompt](references/bookings/create-booking-service-from-prompt.md)
|
|
56
|
-
**Technical:** Use when the user wants to create a booking service — e.g. "create a yoga class for $50", "set up consultations", "add a personal training appointment". Routes to the correct type-specific recipe (APPOINTMENT, CLASS, or COURSE), gathers business context, applies defaults, and creates the service.
|
|
63
|
+
**Technical:** Use when the user wants to create a booking service — e.g. "create a yoga class for $50", "set up consultations", "add a personal training appointment", "create a hidden free test course with 8 sessions". Routes to the correct type-specific recipe (APPOINTMENT, CLASS, or COURSE), gathers business context, applies defaults, and creates the service. For COURSE services with session dates/counts, the course is not bookable until separate Calendar Events are created on the returned service schedule.
|
|
57
64
|
|
|
58
65
|
### [Create Appointment Service](references/bookings/create-appointment-service.md)
|
|
59
66
|
**Technical:** Use when the user wants to create an appointment/consultation/1-on-1 service — e.g. "set up consultations for $75", "create a meeting service". Handles staff assignment, session duration, and pricing via bulkCreateServices API.
|
|
@@ -62,7 +69,10 @@ These recipes do NOT cover frontend development or SDK usage for displaying data
|
|
|
62
69
|
**Technical:** Use when the user wants to create a group class — e.g. "create a yoga class for $50", "set up a pilates class". Handles group capacity, recurring sessions, and pricing via bulkCreateServices API.
|
|
63
70
|
|
|
64
71
|
### [Create Course Service](references/bookings/create-course-service.md)
|
|
65
|
-
**Technical:** Use when the user wants to create a multi-session
|
|
72
|
+
**Technical:** Use when the user wants to create a multi-session COURSE — e.g. "create a 6-week workshop", "set up a training program for $300", "create a hidden free test course with 8 online sessions". Handles group capacity, full-course pricing, `bulkCreateServices`, then creates bookable course session events with Calendar `bulkCreateEvents` using the returned `service.schedule.id`. Never put session dates under `course.sessions` in the Services V2 payload.
|
|
73
|
+
|
|
74
|
+
### [Check Bookings Availability (and Diagnose Issues)](references/bookings/diagnose-availability-issues.md)
|
|
75
|
+
**Technical:** Use when someone asks whether an appointment-based service has bookable availability, or why it shows no times / "customers can't book". Reports the current availability status first (via ListAvailabilityTimeSlots); diagnoses the cause only when there's no availability or the owner asks why — ruling out service-level blockers (hidden / online booking off), then running DiagnoseAvailability (`POST /v2/time-slots/diagnose`) for ordered reason codes, with a policy/capacity fallback.
|
|
66
76
|
|
|
67
77
|
### [End-to-End Booking Flow](references/bookings/end-to-end-booking-flow.md)
|
|
68
78
|
**Technical:** Complete booking flow from service discovery to payment. Query services, check availability with Time Slots V2, create bookings, and process payment via eCommerce checkout.
|
|
@@ -184,6 +194,16 @@ These recipes do NOT cover frontend development or SDK usage for displaying data
|
|
|
184
194
|
|
|
185
195
|
---
|
|
186
196
|
|
|
197
|
+
## Marketing
|
|
198
|
+
|
|
199
|
+
### [Create and Publish a Social Media Post (with AI generation)](references/marketing/create-and-publish-social-post.md)
|
|
200
|
+
**Technical:** Creates and publishes (or schedules) a social media post to a connected channel (Instagram, Facebook, LinkedIn, TikTok, Pinterest, YouTube, Google Business Profile) via the Publisher API. Optionally generates the whole post from a free-text idea or the site's own assets (products, blog posts, events, bookings, coupons, categories), generates caption/title suggestions, and edits an existing image with AI. Verifies the channel is connected (and runs the OAuth connect flow if not), checks premium publishing quota, creates a draft item, then publishes it immediately or schedules it for a future date. Use when the user wants to create, generate, write, post, or schedule a social post, wants caption ideas or suggestions, or wants to connect a social channel (e.g. "post this to Instagram", "make a post from my product", "write a caption", "give me caption ideas", "connect my Pinterest", "schedule a post").
|
|
201
|
+
|
|
202
|
+
### [Generate a Marketing Plan and Schedule Its Posts](references/marketing/generate-and-publish-marketing-plan.md)
|
|
203
|
+
**Technical:** Generates a site's AI social media marketing plan (a calendar of marketing activities, each with per-channel post drafts) via the Marketing Plan API, then schedules the drafts for publishing. Covers optional marketing settings (goal, channels, tone, frequency, content pillars), asynchronous generation with polling, and generating posts for additional activities. Use for "generate a marketing plan", "create a social media plan/calendar", or "schedule my plan's posts".
|
|
204
|
+
|
|
205
|
+
---
|
|
206
|
+
|
|
187
207
|
## Media
|
|
188
208
|
|
|
189
209
|
### [Upload Media to Wix](references/media/upload-media-to-wix.md)
|
|
@@ -213,6 +233,9 @@ These recipes do NOT cover frontend development or SDK usage for displaying data
|
|
|
213
233
|
### [Ricos Converter Service](references/rich-content/ricos-converter-service.md)
|
|
214
234
|
**Technical:** Validates and converts content between Ricos documents and HTML/Markdown/plain text using the Ricos Documents API. Covers plugin configuration, format conversion in both directions, and document validation.
|
|
215
235
|
|
|
236
|
+
### [Author Ricos Rich Content](references/rich-content/author-ricos-rich-content.md)
|
|
237
|
+
**Technical:** Hand-authoring valid Ricos rich-content JSON (the richContent/nodes tree) reused across Blog, Stores, Events, and CMS. Covers every common node shape — paragraphs, headings, lists, blockquotes, dividers, tables with cell fills, code blocks, images — plus inline text decorations and the nesting rules the format enforces.
|
|
238
|
+
|
|
216
239
|
---
|
|
217
240
|
|
|
218
241
|
## Site Properties
|
|
@@ -230,6 +253,9 @@ These recipes do NOT cover frontend development or SDK usage for displaying data
|
|
|
230
253
|
### [Query Sites](references/sites/query-sites.md)
|
|
231
254
|
**Technical:** Lists and queries all sites associated with a Wix account using Sites API. Covers pagination with cursor-based navigation.
|
|
232
255
|
|
|
256
|
+
### [Site Import](references/sites/site-import.md)
|
|
257
|
+
**Technical:** Drives the autonomous Wix Site Import agent over REST (`/site-import/v1/imports`) to migrate a store/site from another platform (Shopify, WooCommerce, Magento, or any URL) into Wix. Covers Start/Poll/Reply/Cancel, relaying agent questions and progress in plain language, handling `DEPLOYED`/`FAILED`/`AUTH_EXPIRED`/`SESSION_EXPIRED` states, and post-deploy follow-up changes. Use when the user wants to import, migrate, or clone an existing store/site into Wix.
|
|
258
|
+
|
|
233
259
|
---
|
|
234
260
|
|
|
235
261
|
## Stores
|