[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-wix-wix-app":3,"mdc-q4tyy0-key":34,"related-org-wix-wix-app":3470,"related-repo-wix-wix-app":3626},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":11,"stars":23,"repoUrl":24,"updatedAt":25,"license":26,"forks":27,"topics":28,"repo":29,"sourceUrl":32,"mdContent":33},"wix-app","build Wix CLI app extensions","Build and review Wix CLI app extensions — dashboard pages, modals, plugins, menu plugins, custom element widgets, Editor React components, site plugins, embedded scripts, backend APIs, backend events, service plugins, data collections, and App Market readiness. Use when building ANY feature or extension for a Wix CLI app or preparing a Wix app for App Market review. Triggers on: add, build, create, implement, help me, dashboard, widget, plugin, backend, API, event, collection, embedded script, service plugin, Editor React component, checkout, shipping, tax, discount, SPI, CMS, schema, tracking, popup, admin panel, menu item, modal, validate, test, verify, register extension, App Market, app review, submission readiness.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},"wix","Wix","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fwix.jpg",[12,14,17,20],{"name":9,"slug":8,"type":13},"tag",{"name":15,"slug":16,"type":13},"Backend","backend",{"name":18,"slug":19,"type":13},"CLI","cli",{"name":21,"slug":22,"type":13},"Frontend","frontend",23,"https:\u002F\u002Fgithub.com\u002Fwix\u002Fskills","2026-04-16T04:58:00.157961",null,28,[],{"repoUrl":24,"stars":23,"forks":27,"topics":30,"description":31},[],"Wix Skills","https:\u002F\u002Fgithub.com\u002Fwix\u002Fskills\u002Ftree\u002FHEAD\u002Fskills\u002Fwix-app","---\nname: wix-app\ndescription: \"Build and review Wix CLI app extensions — dashboard pages, modals, plugins, menu plugins, custom element widgets, Editor React components, site plugins, embedded scripts, backend APIs, backend events, service plugins, data collections, and App Market readiness. Use when building ANY feature or extension for a Wix CLI app or preparing a Wix app for App Market review. Triggers on: add, build, create, implement, help me, dashboard, widget, plugin, backend, API, event, collection, embedded script, service plugin, Editor React component, checkout, shipping, tax, discount, SPI, CMS, schema, tracking, popup, admin panel, menu item, modal, validate, test, verify, register extension, App Market, app review, submission readiness.\"\ncompatibility: requires `@wix\u002Fcli` >= 1.1.192.\n---\n\n# Wix App Builder\n\nHelps build extensions for Wix CLI applications. Covers all extension types: dashboard pages, modals, plugins, menu plugins, custom element widgets, Editor React components, site plugins, embedded scripts, backend APIs, events, service plugins, and data collections.\n\n**Scaffolding is owned by the Wix CLI.** For every extension type except Backend API, files, folders, builder boilerplate, UUIDs, and `src\u002Fextensions.ts` registration are generated by `wix generate --params`. This skill provides the decision logic, API guidance, configuration semantics, and business-logic patterns that fill in the generated stubs.\n\n## ⚠️ MANDATORY WORKFLOW CHECKLIST ⚠️\n\n**Before reporting completion to the user, ALL boxes MUST be checked:**\n\n- [ ] **Step 1:** Determined extension type(s) needed\n  - [ ] Asked clarifying questions if requirements were unclear\n  - [ ] **🛑 Auto-Patterns Gate (MANDATORY):** If the use case is a single-collection CRUD admin page (table\u002Fgrid + entity form), you MUST use [AUTO_PATTERNS_DASHBOARD.md](references\u002FAUTO_PATTERNS_DASHBOARD.md). Auto-patterns is the DEFAULT; custom Dashboard Pages are the opt-out. Only fall back to Dashboard Page if a disqualifier applies: multi-collection joins, custom business logic, embedded script configuration, external API integrations, or the user explicitly requested a custom React page.\n  - [ ] **🛑 Iteration Gate (MANDATORY):** Before editing ANY file under `src\u002Fextensions\u002Fdashboard\u002Fpages\u002F\u003Cpage>\u002F`, check for a sibling `patterns.json`. If it exists, this is an auto-patterns page — you MUST follow [AUTO_PATTERNS_DASHBOARD.md](references\u002FAUTO_PATTERNS_DASHBOARD.md) Part B and use the override topic-index (banners → `custom-slots-override.md`, header → `custom-header-override.md`, actions → `custom-actions-override.md`, columns → `custom-columns-override.md`, sections → `custom-sections-override.md`). Do NOT edit the page component (`\u003Cpage-name>.tsx`) to add UI elements directly.\n  - [ ] Checked for implicit Data Collection need — unless user provided a collection ID directly (see [Data Collection Inference](#data-collection-inference))\n  - [ ] Obtained app namespace if Data Collection extension is being created\n  - [ ] Determined full scoped collection IDs if Data Collection extension is being created (see [Collection ID Coordination](#collection-id-coordination))\n  - [ ] Explained recommendation with reasoning\n- [ ] **Step 2:** Read extension reference file(s) for the chosen type(s) and the project-wide [CODE_QUALITY.md](references\u002FCODE_QUALITY.md)\n- [ ] **Step 3:** Checked API references; used MCP discovery only for gaps\n- [ ] **Step 4a:** Scaffolded each CLI-supported extension via `wix generate --params`\n- [ ] **Step 4b:** Filled in business logic in the generated files\n  - [ ] Invoked `wix-design-system` skill ONLY before editing the first `.tsx`\u002F`.jsx` file that imports `@wix\u002Fdesign-system`. Skip for backend-only or data-only extensions.\n  - [ ] WDS: imported `@wix\u002Fdesign-system\u002Fstyles.global.css` in the main component entry file (`page.tsx`, modal `.tsx`, etc.) — not child\u002Ftab\u002Fhelper files.\n- [ ] **Step 5:** Ran validation (see [Validation](#validation))\n  - [ ] Dependencies installed\n  - [ ] TypeScript compiled\n  - [ ] Build succeeded\n  - [ ] Preview deployed\n- [ ] **Step 6:** Collected and presented ALL manual action items to user\n\n**🛑 STOP:** If any box is unchecked, do NOT proceed to the next step.\n\n---\n\n## ❌ ANTI-PATTERNS (DO NOT DO)\n\n| ❌ WRONG                                    | ✅ CORRECT                                     |\n| ------------------------------------------- | ---------------------------------------------- |\n| Hand-writing builder files, folders, UUIDs, or extension registration | Run `wix generate --params` — it owns scaffolding |\n| Implementing without reading the extension reference | Always read the relevant reference file first |\n| Using MCP discovery without checking refs   | Check reference files first                    |\n| Reporting done without validation           | Always run validation at the end               |\n| Letting manual action items get buried      | Aggregate all manual steps at the very end     |\n| Writing custom React for single-collection CRUD when auto-patterns applies | Default to [AUTO_PATTERNS_DASHBOARD.md](references\u002FAUTO_PATTERNS_DASHBOARD.md) for CRUD admin pages |\n| Editing the page component (`\u003Cpage-name>.tsx`) to add UI (banners, headers, custom actions, slots, sections) when `patterns.json` exists | Use the matching `custom-*-override.md` from [AUTO_PATTERNS_DASHBOARD.md](references\u002FAUTO_PATTERNS_DASHBOARD.md) Part B |\n\n---\n\n## Quick Decision Helper\n\n1. **What are you trying to build?**\n   - Admin interface → Dashboard Extensions\n   - Backend logic → Backend Extensions\n   - Data storage \u002F CMS collections → Data Collection\n   - Editor React component → Site Extensions (app projects only)\n\n2. **Who will see it?**\n   - Admin users only → Dashboard Extensions\n   - Site visitors → Site Extensions\n   - Server-side only → Backend Extensions\n\n3. **Where will it appear?**\n   - Dashboard sidebar\u002Fpage →\n     - **Single-collection CRUD admin (default, MANDATORY):** [Auto Patterns Dashboard](references\u002FAUTO_PATTERNS_DASHBOARD.md) — declarative `patterns.json`, faster to author, iterate by editing JSON, no React rewrite.\n     - Custom logic \u002F multi-collection \u002F embedded scripts \u002F external APIs: Dashboard Page\n     - Popup\u002Fform: Dashboard Modal\n   - Existing Wix app dashboard (widget) → Dashboard Plugin\n   - Existing Wix app dashboard (menu item) → Dashboard Menu Plugin\n   - Anywhere on site → custom element widget\n   - Anywhere on site (with editor manifest) → Editor React component\n   - Wix business solution page → Site Plugin\n   - During business flow → Service Plugin\n   - After event occurs → Backend Event Extension\n\n## Decision Flow (Not sure?)\n\n- **Admin:** Single-collection CRUD admin page? → **Auto Patterns Dashboard (DEFAULT)**. Custom React page (multi-collection \u002F custom logic \u002F embedded scripts \u002F external APIs \u002F explicit user request)? → Dashboard Page. Need popup\u002Fform? → Dashboard Modal. Extending Wix app dashboard with a visual widget? → Dashboard Plugin. Adding a menu item to a Wix app dashboard's more-actions or bulk-actions menu? → Dashboard Menu Plugin. **Modal constraint:** Dashboard Pages cannot use `\u003CModal \u002F>`; use a separate Dashboard Modal extension and `dashboard.openModal()`.\n- **Backend:** During business flow (checkout\u002Fshipping\u002Ftax)? → Service Plugin. After event (webhooks\u002Fsync)? → Backend Event Extension. Custom HTTP endpoints? → Backend API. Need CMS collections for app data? → Data Collection.\n- **Site:** User places anywhere (standalone)? → custom element widget. Editor React component with editor manifest (styling, content, elements)? → Editor React component. Fixed slot on Wix app page? → Site Plugin. Scripts\u002Fanalytics only? → Embedded Script.\n\n---\n\n## Extension Types Reference Table\n\n| Extension Type | Category | `extensionType` (for `wix generate --params`) | Reference File |\n| --- | --- | --- | --- |\n| Dashboard Page | Dashboard | `DASHBOARD_PAGE` | [DASHBOARD_PAGE.md](references\u002FDASHBOARD_PAGE.md) |\n| Dashboard Modal | Dashboard | `DASHBOARD_MODAL` | [DASHBOARD_MODAL.md](references\u002FDASHBOARD_MODAL.md) |\n| Dashboard Plugin | Dashboard | `DASHBOARD_PLUGIN` | [DASHBOARD_PLUGIN.md](references\u002FDASHBOARD_PLUGIN.md) |\n| Dashboard Menu Plugin | Dashboard | `DASHBOARD_MENU_PLUGIN` | [DASHBOARD_MENU_PLUGIN.md](references\u002FDASHBOARD_MENU_PLUGIN.md) |\n| Service Plugin | Backend | `SERVICE_PLUGIN` | [SERVICE_PLUGIN.md](references\u002FSERVICE_PLUGIN.md) |\n| Backend Event Extension | Backend | `EVENT` | [BACKEND_EVENT.md](references\u002FBACKEND_EVENT.md) |\n| Backend API | Backend | — (manual, see banner below) | [BACKEND_API.md](references\u002FBACKEND_API.md) |\n| Data Collection | Backend | `DATA_COLLECTION` | [DATA_COLLECTION.md](references\u002FDATA_COLLECTION.md) |\n| Editor React component | Site | `EDITOR_REACT_COMPONENT` | [EDITOR_REACT_COMPONENT.md](references\u002FEDITOR_REACT_COMPONENT.md) |\n| Custom element widget | Site | `CUSTOM_ELEMENT` | [CUSTOM_ELEMENT_WIDGET.md](references\u002FCUSTOM_ELEMENT_WIDGET.md) |\n| Site Plugin | Site | `SITE_PLUGIN` | [SITE_PLUGIN.md](references\u002FSITE_PLUGIN.md) |\n| Embedded Script | Site | `EMBEDDED_SCRIPT` | [EMBEDDED_SCRIPT.md](references\u002FEMBEDDED_SCRIPT.md) |\n\n**Key constraints:**\n- Dashboard Page cannot use `\u003CModal \u002F>`; use a separate Dashboard Modal and `dashboard.openModal()`.\n\n> **⚠️ Backend API is the only extension type the CLI does NOT scaffold.** `wix generate` has no `BACKEND_API` handler. Create files directly per [BACKEND_API.md](references\u002FBACKEND_API.md).\n\n## Extension Comparison\n\n| Custom element widget vs Editor React component vs Site Plugin | Dashboard Page vs Modal | Service Plugin vs Event |\n| -------------------------------------------------------------- | ----------------------- | ----------------------- |\n| Custom element widget: standalone interactive component. Editor React component: React with editor manifest (CSS\u002Fdata\u002Felements). Plugin: fixed slot in Wix app page. | Page: full page. Modal: overlay; use for popups. | Service: during flow. Event: after event. |\n\n---\n\n## Cross-Cutting References\n\n| Topic | Reference |\n| --- | --- |\n| Code Quality Requirements (applies to all generated code) | [CODE_QUALITY.md](references\u002FCODE_QUALITY.md) |\n| Extension Registration | [EXTENSION_REGISTRATION.md](references\u002FEXTENSION_REGISTRATION.md) |\n| App Validation | [APP_VALIDATION.md](references\u002FAPP_VALIDATION.md) |\n| App Market Review | [APP_MARKET_REVIEW.md](references\u002FAPP_MARKET_REVIEW.md) |\n| App Identifiers (Namespace, Code ID) | [APP_IDENTIFIERS.md](references\u002FAPP_IDENTIFIERS.md) |\n| Wix Stores Versioning (V1\u002FV3) | [STORES_VERSIONING.md](references\u002FSTORES_VERSIONING.md) |\n| Official Documentation Links | [DOCUMENTATION.md](references\u002FDOCUMENTATION.md) |\n| Auto-patterns Dashboard Pages | [AUTO_PATTERNS_DASHBOARD.md](references\u002FAUTO_PATTERNS_DASHBOARD.md) |\n\n---\n\n## Data Collection Inference\n\n**CRITICAL:** Data collections are often needed implicitly — don't wait for the user to explicitly say \"create a CMS collection.\" Infer the need automatically.\n\n**Skip this section if the user provides a collection ID directly** (e.g., an existing site-level collection). In that case, use the provided ID as-is — no Data Collection extension or namespace scoping needed.\n\n**Always include a Data Collection extension when ANY of these are true:**\n\n| Indicator | Example |\n| --- | --- |\n| User mentions saving\u002Fstoring\u002Fpersisting app-specific data | \"save the fee amount\", \"store product recommendations\" |\n| A dashboard page will **manage** (CRUD) domain entities | \"dashboard to manage fees\", \"admin page to edit rules\" |\n| A service plugin reads app-configured data at runtime | \"fetch fee rules at checkout\", \"look up shipping rates\" |\n| User mentions \"dedicated database\u002Fcollection\" | \"save in a dedicated database collection\" |\n| Multiple extensions reference the same custom data | Dashboard manages fees + service plugin reads fees |\n\n**Why this matters:** Without the Data Collection extension, the collection won't be created when the app is installed, the Wix Data APIs may not work (code editor not enabled), and collection IDs won't be properly scoped to the app namespace.\n\n**If data collection is inferred, follow the [App Namespace Requirement](#app-namespace-requirement) to obtain the namespace before proceeding.**\n\n### App Namespace Requirement\n\nWhen creating a Data Collection, you MUST ask the user for their app namespace from Wix Dev Center. This is a required parameter that must be obtained from the user's Dev Center dashboard and cannot be recommended or guessed.\n\nIf the user hasn't provided their app namespace, read [APP_IDENTIFIERS.md](references\u002FAPP_IDENTIFIERS.md) and give the user the instructions to obtain it.\n\n### Collection ID Coordination\n\n**Applies ONLY when a Data Collection extension is being created.** If the user provides a collection ID directly, use it as-is — no namespace scoping, no Data Collection extension needed.\n\nWhen a Data Collection is created alongside other extensions that reference the same collections:\n\n1. **Get the app namespace** (see App Namespace Requirement above)\n2. **Determine the `idSuffix`** for each collection (the Data Collection reference documents the full ID format)\n3. **Use the full scoped collection ID** (`\u003Capp-namespace>\u002F\u003CidSuffix>`) in all extensions that reference the collection via Wix Data API calls\n\n---\n\n## Wix Stores Versioning Requirement\n\n**Applies when ANY Wix Stores API is used** (products, inventory, orders, etc.):\n\n1. **Read the Stores Versioning reference** — see [STORES_VERSIONING.md](references\u002FSTORES_VERSIONING.md). It contains the module map, permissions cheatsheet, copy-paste dual-catalog recipes (list\u002Fget\u002Fcreate\u002Fupdate\u002Fdelete products, inventory, categories), the V1→V3 field map, webhook mapping, and the major V3 gotchas. **Use it before searching SDK docs** — it covers the common 80%.\n2. **All Stores operations must check catalog version first** using `getCatalogVersion()`\n3. **Use the correct module** based on version: `productsV3` (V3) vs `products` (V1)\n4. **Apps MUST support both V1 and V3** — single-version apps cannot list in the App Market and break on new sites\n5. **Request both V1 and V3 permission scopes** for every Stores operation\n\nThis is non-negotiable — V1 and V3 are NOT backwards compatible.\n\n---\n\n## App Market Review\n\n**Applies when a user wants to submit their app to the Wix App Market, list it publicly, prepare for App Market review, audit decline risk, or fix App Market review feedback.** Not needed for private apps or routine version releases.\n\nRead [APP_MARKET_REVIEW.md](references\u002FAPP_MARKET_REVIEW.md) — it contains the full technical checklist, implementation notes with Wix doc links, and the review taxonomy IDs for traceability.\n\n---\n\n## Implementation Workflow\n\n### Step 1: Ask Clarifying Questions (if needed)\n\nOnly ask for configuration values when **absolutely necessary** for the implementation to proceed. If a value can be configured later or added as a manual step, don't block on it.\n\nIf unclear on approach (placement, visibility, configuration, integration), ask clarifying questions. If the answer could change the extension type, wait for the response before proceeding. Otherwise, proceed with the best-fit extension type.\n\n### Step 2: Make Your Recommendation\n\nUse the Extension Types Reference Table and decision content above. State extension type and brief reasoning (placement, functionality, integration).\n\n### Step 3: Read Extension Reference, Check API References, Then Discover (if needed)\n\n**Workflow: Read extension reference → Check API references → Use MCP only for gaps.**\n\n1. **Read the extension reference file** for the chosen extension type from the table above\n2. **Identify required APIs** from user requirements\n3. **Check relevant API reference files:**\n   - Backend events → `references\u002Fbackend-event\u002FCOMMON-EVENTS.md`\n   - Wix Data → `references\u002Fdata-collection\u002FWIX_DATA.md`\n   - Dashboard SDK → `references\u002Fdashboard-page\u002FDASHBOARD_API.md`\n   - Service Plugin SPIs → read `references\u002FSERVICE_PLUGIN.md` together with the matching `references\u002Fservice-plugin\u002F\u003CNAME>.md` leaf\n4. **Verify the specific method\u002Fevent exists** in references\n5. **ONLY use MCP discovery if NOT found** in reference files\n\n**Platform APIs (never discover - in references):**\n- Wix Data, Dashboard SDK, Event SDK (common events), Service Plugin SPIs\n\n**Vertical APIs (discover if needed):**\n- Wix Stores (**⚠️ MUST use Stores Versioning reference** — V1\u002FV3 catalog check required), Wix Bookings, Wix Members, Wix Pricing Plans, third-party integrations\n\n**Decision table:**\n\n| User Requirement                     | Check References \u002F Discovery Needed? | Reason \u002F Reference File                             |\n| ------------------------------------ | ------------------------------------ | --------------------------------------------------- |\n| \"Display store products\"             | ✅ YES (MCP discovery)               | Wix Stores API — **include Stores Versioning reference** |\n| \"Show booking calendar\"              | ✅ YES (MCP discovery)               | Wix Bookings API not in reference files             |\n| \"Send emails to users\"               | ✅ YES (MCP discovery)               | Wix Triggered Emails not in reference files         |\n| \"Get member info\"                    | ✅ YES (MCP discovery)               | Wix Members API not in reference files              |\n| \"Listen for cart events\"             | Check `COMMON-EVENTS.md`             | MCP discovery only if event missing in reference    |\n| \"Store data in collection\"           | WIX_DATA.md ✅ Found                 | ❌ Skip discovery (covered by reference)             |\n| \"Create CMS collections for my app\"  | Data Collection reference            | ❌ Skip discovery (covered by dedicated reference)   |\n| \"Show dashboard toast\"               | DASHBOARD_API.md ✅ Found            | ❌ Skip discovery                                   |\n| \"Show toast \u002F navigate\"              | DASHBOARD_API.md ✅ Found            | ❌ Skip discovery                                   |\n| \"UI only (forms, inputs)\"            | N\u002FA (no external API)                | ❌ Skip discovery                                   |\n| \"Settings page with form inputs\"     | N\u002FA (UI only, no external API)       | ❌ Skip discovery                                   |\n| \"Dashboard page with local state\"    | N\u002FA (no external API)                | ❌ Skip discovery                                   |\n\n**MCP Tools for discovery (when needed):**\n\n- `SearchWixSDKDocumentation` - SDK methods and APIs (**Always use maxResults: 5**)\n- `ReadFullDocsMethodSchema` - Full type schema for a specific SDK method (parameters, return type, permissions)\n- `ReadFullDocsArticle` - Prose guides and conceptual articles only (not for SDK method signatures)\n\n### Step 4a: Scaffold via the CLI\n\nFor each extension **except Backend API**, run `npx wix generate --params '\u003Cjson>'`. The command returns `{\"success\":true,\"extensionType\":\"...\",\"newFiles\":[...]}` on success.\n\nIf the command fails because of unknown or invalid params, run `npx wix schema generate --type \u003CextensionType>` to print the JSON Schema for that extension type, fix the `--params` payload, and retry. Do not fall back to manual scaffolding.\n\n**What the CLI does automatically:**\n- Creates folders and stub files\n- Generates a fresh UUID for the extension `id`\n- Updates `src\u002Fextensions.ts` with the import and `.use()` call\n- Enforces naming rules (kebab-case, hyphen-required custom elements, etc.)\n\n**Backend API exception:** Create `src\u002Fpages\u002Fapi\u002F*.ts` files manually per [BACKEND_API.md](references\u002FBACKEND_API.md).\n\n### Step 4b: Fill in business logic\n\nOpen every path returned in `newFiles` and replace stubbed handler bodies \u002F UI \u002F queries with the user's actual logic, guided by the extension reference file's API and configuration sections.\n\n- ⚠️ MANDATORY when using WDS: Invoke the `wix-design-system` skill **before editing your first `.tsx`\u002F`.jsx` file that imports `@wix\u002Fdesign-system`**. Do NOT invoke it preemptively for backend-only or data-only jobs — it adds large content to context that you won't use.\n- ⚠️ MANDATORY when using WDS: Add `import \"@wix\u002Fdesign-system\u002Fstyles.global.css\";` in the **main component** entry file (`page.tsx`, modal `.tsx`, etc.) — not in child\u002Ftab\u002Fhelper files.\n- ⚠️ MANDATORY when using Data Collections: Use the EXACT collection ID from `idSuffix` (case-sensitive). If `idSuffix` is `\"product-recommendations\"`, use `\u003Capp-namespace>\u002Fproduct-recommendations` NOT `productRecommendations`.\n\n### Step 5: Run Validation\n\nAfter all implementation is complete, you MUST run validation. See [APP_VALIDATION.md](references\u002FAPP_VALIDATION.md) for the complete validation workflow:\n\n1. Package installation (detect package manager, run install)\n2. TypeScript compilation check (`npx tsc --noEmit`)\n3. Build validation (`npx wix build`)\n4. Preview deployment (`npx wix preview`)\n\n**Do NOT report completion to the user until validation passes.**\n\nIf validation fails, fix the errors and re-validate until it passes.\n\n### Step 6: Report Completion\n\nOnly after validation passes, provide a **concise summary section** at the top of your response:\n\n```markdown\n## ✅ Implementation Complete\n\n[1-2 sentence description of what was built]\n\n**Extensions Created:**\n- [Extension 1 Name] - [Brief purpose]\n- [Extension 2 Name] - [Brief purpose]\n\n**Build Status:**\n- ✅ Dependencies: [Installed \u002F status message]\n- ✅ TypeScript: [No compilation errors \u002F status]\n- ✅ Build: [Completed successfully \u002F status]\n- ✅\u002F⚠️ Preview: [Running at URL \u002F Failed - reason]\n\n**⚠️ IMPORTANT: [X] manual step(s) required to complete setup** (see \"Manual Steps Required\" section below)\n```\n\n- If there are NO manual steps, state: \"✅ No manual steps required — you're ready to go!\"\n\n### Step 7: Surface Manual Action Items\n\nPresent any manual steps the user must perform (e.g., configuring settings in the Wix dashboard, enabling permissions, setting up external services).\n\n**Format:**\n\n```markdown\n## 🔧 Manual Steps Required\n\nThe following actions need to be done manually by you:\n\n### 1. [Action Category\u002FTitle]\n[Detailed description with specific instructions]\n\n### 2. [Action Category\u002FTitle]\n[Detailed description]\n```\n\n---\n\n## Extension Registration\n\n`wix generate --params` updates `src\u002Fextensions.ts` automatically for every CLI-supported extension type. The only case that still requires manual editing is Backend API. For background, troubleshooting, and the manual recovery pattern when `src\u002Fextensions.ts` drifts, see [EXTENSION_REGISTRATION.md](references\u002FEXTENSION_REGISTRATION.md).\n\n---\n\n## Validation\n\nExecute these steps sequentially after all implementation is complete. See [APP_VALIDATION.md](references\u002FAPP_VALIDATION.md) for the complete guide.\n\n1. **Package Installation** — Detect package manager, run install\n2. **TypeScript Compilation** — `npx tsc --noEmit`\n3. **Build** — `npx wix build`\n4. **Preview** — `npx wix preview`\n\nStop and report errors if any step fails. Check `.wix\u002Fdebug.log` on failures.\n\n---\n\n## Cost Optimization\n\n- **Let the CLI scaffold** — don't burn tokens describing folder layouts or builder boilerplate\n- **Only run `wix schema generate --type \u003CextensionType>`** when `wix generate --params` fails — don't pre-fetch it\n- **Read extension reference first** — always read the relevant extension reference file before implementing\n- **Check API references first** — read relevant API reference files before using MCP discovery\n- **Skip discovery** when all required APIs are in reference files\n- **maxResults: 5** for all MCP SDK searches\n- **ReadFullDocsMethodSchema** for SDK method schemas; **ReadFullDocsArticle** for prose guides only\n- **Invoke wix-design-system** first when using WDS (prevents import errors)\n\n## Documentation\n\nFor links to official Wix CLI documentation for all extension types, see [DOCUMENTATION.md](references\u002FDOCUMENTATION.md).\n",{"data":35,"body":37},{"name":4,"description":6,"compatibility":36},"requires `@wix\u002Fcli` >= 1.1.192.",{"type":38,"children":39},"root",[40,49,55,83,90,98,524,534,538,544,704,707,713,861,867,930,933,939,1341,1349,1370,1404,1410,1455,1458,1464,1618,1621,1626,1636,1646,1654,1748,1758,1774,1780,1785,1796,1801,1811,1816,1863,1866,1872,1882,1970,1975,1978,1983,1993,2004,2007,2013,2019,2031,2036,2042,2047,2053,2061,2168,2176,2184,2192,2207,2215,2460,2468,2510,2516,2544,2565,2573,2617,2640,2646,2659,2773,2779,2790,2834,2842,2847,2853,2865,3097,3105,3111,3116,3124,3213,3216,3221,3250,3253,3258,3269,3325,3338,3341,3347,3448,3454,3464],{"type":41,"tag":42,"props":43,"children":45},"element","h1",{"id":44},"wix-app-builder",[46],{"type":47,"value":48},"text","Wix App Builder",{"type":41,"tag":50,"props":51,"children":52},"p",{},[53],{"type":47,"value":54},"Helps build extensions for Wix CLI applications. Covers all extension types: dashboard pages, modals, plugins, menu plugins, custom element widgets, Editor React components, site plugins, embedded scripts, backend APIs, events, service plugins, and data collections.",{"type":41,"tag":50,"props":56,"children":57},{},[58,64,66,73,75,81],{"type":41,"tag":59,"props":60,"children":61},"strong",{},[62],{"type":47,"value":63},"Scaffolding is owned by the Wix CLI.",{"type":47,"value":65}," For every extension type except Backend API, files, folders, builder boilerplate, UUIDs, and ",{"type":41,"tag":67,"props":68,"children":70},"code",{"className":69},[],[71],{"type":47,"value":72},"src\u002Fextensions.ts",{"type":47,"value":74}," registration are generated by ",{"type":41,"tag":67,"props":76,"children":78},{"className":77},[],[79],{"type":47,"value":80},"wix generate --params",{"type":47,"value":82},". This skill provides the decision logic, API guidance, configuration semantics, and business-logic patterns that fill in the generated stubs.",{"type":41,"tag":84,"props":85,"children":87},"h2",{"id":86},"️-mandatory-workflow-checklist-️",[88],{"type":47,"value":89},"⚠️ MANDATORY WORKFLOW CHECKLIST ⚠️",{"type":41,"tag":50,"props":91,"children":92},{},[93],{"type":41,"tag":59,"props":94,"children":95},{},[96],{"type":47,"value":97},"Before reporting completion to the user, ALL boxes MUST be checked:",{"type":41,"tag":99,"props":100,"children":103},"ul",{"className":101},[102],"contains-task-list",[104,298,319,334,354,446,509],{"type":41,"tag":105,"props":106,"children":109},"li",{"className":107},[108],"task-list-item",[110,116,118,123,125],{"type":41,"tag":111,"props":112,"children":115},"input",{"disabled":113,"type":114},true,"checkbox",[],{"type":47,"value":117}," ",{"type":41,"tag":59,"props":119,"children":120},{},[121],{"type":47,"value":122},"Step 1:",{"type":47,"value":124}," Determined extension type(s) needed\n",{"type":41,"tag":99,"props":126,"children":128},{"className":127},[102],[129,138,162,247,264,273,289],{"type":41,"tag":105,"props":130,"children":132},{"className":131},[108],[133,136],{"type":41,"tag":111,"props":134,"children":135},{"disabled":113,"type":114},[],{"type":47,"value":137}," Asked clarifying questions if requirements were unclear",{"type":41,"tag":105,"props":139,"children":141},{"className":140},[108],[142,145,146,151,153,160],{"type":41,"tag":111,"props":143,"children":144},{"disabled":113,"type":114},[],{"type":47,"value":117},{"type":41,"tag":59,"props":147,"children":148},{},[149],{"type":47,"value":150},"🛑 Auto-Patterns Gate (MANDATORY):",{"type":47,"value":152}," If the use case is a single-collection CRUD admin page (table\u002Fgrid + entity form), you MUST use ",{"type":41,"tag":154,"props":155,"children":157},"a",{"href":156},"references\u002FAUTO_PATTERNS_DASHBOARD.md",[158],{"type":47,"value":159},"AUTO_PATTERNS_DASHBOARD.md",{"type":47,"value":161},". Auto-patterns is the DEFAULT; custom Dashboard Pages are the opt-out. Only fall back to Dashboard Page if a disqualifier applies: multi-collection joins, custom business logic, embedded script configuration, external API integrations, or the user explicitly requested a custom React page.",{"type":41,"tag":105,"props":163,"children":165},{"className":164},[108],[166,169,170,175,177,183,185,191,193,197,199,205,207,213,215,221,223,229,231,237,239,245],{"type":41,"tag":111,"props":167,"children":168},{"disabled":113,"type":114},[],{"type":47,"value":117},{"type":41,"tag":59,"props":171,"children":172},{},[173],{"type":47,"value":174},"🛑 Iteration Gate (MANDATORY):",{"type":47,"value":176}," Before editing ANY file under ",{"type":41,"tag":67,"props":178,"children":180},{"className":179},[],[181],{"type":47,"value":182},"src\u002Fextensions\u002Fdashboard\u002Fpages\u002F\u003Cpage>\u002F",{"type":47,"value":184},", check for a sibling ",{"type":41,"tag":67,"props":186,"children":188},{"className":187},[],[189],{"type":47,"value":190},"patterns.json",{"type":47,"value":192},". If it exists, this is an auto-patterns page — you MUST follow ",{"type":41,"tag":154,"props":194,"children":195},{"href":156},[196],{"type":47,"value":159},{"type":47,"value":198}," Part B and use the override topic-index (banners → ",{"type":41,"tag":67,"props":200,"children":202},{"className":201},[],[203],{"type":47,"value":204},"custom-slots-override.md",{"type":47,"value":206},", header → ",{"type":41,"tag":67,"props":208,"children":210},{"className":209},[],[211],{"type":47,"value":212},"custom-header-override.md",{"type":47,"value":214},", actions → ",{"type":41,"tag":67,"props":216,"children":218},{"className":217},[],[219],{"type":47,"value":220},"custom-actions-override.md",{"type":47,"value":222},", columns → ",{"type":41,"tag":67,"props":224,"children":226},{"className":225},[],[227],{"type":47,"value":228},"custom-columns-override.md",{"type":47,"value":230},", sections → ",{"type":41,"tag":67,"props":232,"children":234},{"className":233},[],[235],{"type":47,"value":236},"custom-sections-override.md",{"type":47,"value":238},"). Do NOT edit the page component (",{"type":41,"tag":67,"props":240,"children":242},{"className":241},[],[243],{"type":47,"value":244},"\u003Cpage-name>.tsx",{"type":47,"value":246},") to add UI elements directly.",{"type":41,"tag":105,"props":248,"children":250},{"className":249},[108],[251,254,256,262],{"type":41,"tag":111,"props":252,"children":253},{"disabled":113,"type":114},[],{"type":47,"value":255}," Checked for implicit Data Collection need — unless user provided a collection ID directly (see ",{"type":41,"tag":154,"props":257,"children":259},{"href":258},"#data-collection-inference",[260],{"type":47,"value":261},"Data Collection Inference",{"type":47,"value":263},")",{"type":41,"tag":105,"props":265,"children":267},{"className":266},[108],[268,271],{"type":41,"tag":111,"props":269,"children":270},{"disabled":113,"type":114},[],{"type":47,"value":272}," Obtained app namespace if Data Collection extension is being created",{"type":41,"tag":105,"props":274,"children":276},{"className":275},[108],[277,280,282,288],{"type":41,"tag":111,"props":278,"children":279},{"disabled":113,"type":114},[],{"type":47,"value":281}," Determined full scoped collection IDs if Data Collection extension is being created (see ",{"type":41,"tag":154,"props":283,"children":285},{"href":284},"#collection-id-coordination",[286],{"type":47,"value":287},"Collection ID Coordination",{"type":47,"value":263},{"type":41,"tag":105,"props":290,"children":292},{"className":291},[108],[293,296],{"type":41,"tag":111,"props":294,"children":295},{"disabled":113,"type":114},[],{"type":47,"value":297}," Explained recommendation with reasoning",{"type":41,"tag":105,"props":299,"children":301},{"className":300},[108],[302,305,306,311,313],{"type":41,"tag":111,"props":303,"children":304},{"disabled":113,"type":114},[],{"type":47,"value":117},{"type":41,"tag":59,"props":307,"children":308},{},[309],{"type":47,"value":310},"Step 2:",{"type":47,"value":312}," Read extension reference file(s) for the chosen type(s) and the project-wide ",{"type":41,"tag":154,"props":314,"children":316},{"href":315},"references\u002FCODE_QUALITY.md",[317],{"type":47,"value":318},"CODE_QUALITY.md",{"type":41,"tag":105,"props":320,"children":322},{"className":321},[108],[323,326,327,332],{"type":41,"tag":111,"props":324,"children":325},{"disabled":113,"type":114},[],{"type":47,"value":117},{"type":41,"tag":59,"props":328,"children":329},{},[330],{"type":47,"value":331},"Step 3:",{"type":47,"value":333}," Checked API references; used MCP discovery only for gaps",{"type":41,"tag":105,"props":335,"children":337},{"className":336},[108],[338,341,342,347,349],{"type":41,"tag":111,"props":339,"children":340},{"disabled":113,"type":114},[],{"type":47,"value":117},{"type":41,"tag":59,"props":343,"children":344},{},[345],{"type":47,"value":346},"Step 4a:",{"type":47,"value":348}," Scaffolded each CLI-supported extension via ",{"type":41,"tag":67,"props":350,"children":352},{"className":351},[],[353],{"type":47,"value":80},{"type":41,"tag":105,"props":355,"children":357},{"className":356},[108],[358,361,362,367,369],{"type":41,"tag":111,"props":359,"children":360},{"disabled":113,"type":114},[],{"type":47,"value":117},{"type":41,"tag":59,"props":363,"children":364},{},[365],{"type":47,"value":366},"Step 4b:",{"type":47,"value":368}," Filled in business logic in the generated files\n",{"type":41,"tag":99,"props":370,"children":372},{"className":371},[102],[373,414],{"type":41,"tag":105,"props":374,"children":376},{"className":375},[108],[377,380,382,388,390,396,398,404,406,412],{"type":41,"tag":111,"props":378,"children":379},{"disabled":113,"type":114},[],{"type":47,"value":381}," Invoked ",{"type":41,"tag":67,"props":383,"children":385},{"className":384},[],[386],{"type":47,"value":387},"wix-design-system",{"type":47,"value":389}," skill ONLY before editing the first ",{"type":41,"tag":67,"props":391,"children":393},{"className":392},[],[394],{"type":47,"value":395},".tsx",{"type":47,"value":397},"\u002F",{"type":41,"tag":67,"props":399,"children":401},{"className":400},[],[402],{"type":47,"value":403},".jsx",{"type":47,"value":405}," file that imports ",{"type":41,"tag":67,"props":407,"children":409},{"className":408},[],[410],{"type":47,"value":411},"@wix\u002Fdesign-system",{"type":47,"value":413},". Skip for backend-only or data-only extensions.",{"type":41,"tag":105,"props":415,"children":417},{"className":416},[108],[418,421,423,429,431,437,439,444],{"type":41,"tag":111,"props":419,"children":420},{"disabled":113,"type":114},[],{"type":47,"value":422}," WDS: imported ",{"type":41,"tag":67,"props":424,"children":426},{"className":425},[],[427],{"type":47,"value":428},"@wix\u002Fdesign-system\u002Fstyles.global.css",{"type":47,"value":430}," in the main component entry file (",{"type":41,"tag":67,"props":432,"children":434},{"className":433},[],[435],{"type":47,"value":436},"page.tsx",{"type":47,"value":438},", modal ",{"type":41,"tag":67,"props":440,"children":442},{"className":441},[],[443],{"type":47,"value":395},{"type":47,"value":445},", etc.) — not child\u002Ftab\u002Fhelper files.",{"type":41,"tag":105,"props":447,"children":449},{"className":448},[108],[450,453,454,459,461,467,469],{"type":41,"tag":111,"props":451,"children":452},{"disabled":113,"type":114},[],{"type":47,"value":117},{"type":41,"tag":59,"props":455,"children":456},{},[457],{"type":47,"value":458},"Step 5:",{"type":47,"value":460}," Ran validation (see ",{"type":41,"tag":154,"props":462,"children":464},{"href":463},"#validation",[465],{"type":47,"value":466},"Validation",{"type":47,"value":468},")\n",{"type":41,"tag":99,"props":470,"children":472},{"className":471},[102],[473,482,491,500],{"type":41,"tag":105,"props":474,"children":476},{"className":475},[108],[477,480],{"type":41,"tag":111,"props":478,"children":479},{"disabled":113,"type":114},[],{"type":47,"value":481}," Dependencies installed",{"type":41,"tag":105,"props":483,"children":485},{"className":484},[108],[486,489],{"type":41,"tag":111,"props":487,"children":488},{"disabled":113,"type":114},[],{"type":47,"value":490}," TypeScript compiled",{"type":41,"tag":105,"props":492,"children":494},{"className":493},[108],[495,498],{"type":41,"tag":111,"props":496,"children":497},{"disabled":113,"type":114},[],{"type":47,"value":499}," Build succeeded",{"type":41,"tag":105,"props":501,"children":503},{"className":502},[108],[504,507],{"type":41,"tag":111,"props":505,"children":506},{"disabled":113,"type":114},[],{"type":47,"value":508}," Preview deployed",{"type":41,"tag":105,"props":510,"children":512},{"className":511},[108],[513,516,517,522],{"type":41,"tag":111,"props":514,"children":515},{"disabled":113,"type":114},[],{"type":47,"value":117},{"type":41,"tag":59,"props":518,"children":519},{},[520],{"type":47,"value":521},"Step 6:",{"type":47,"value":523}," Collected and presented ALL manual action items to user",{"type":41,"tag":50,"props":525,"children":526},{},[527,532],{"type":41,"tag":59,"props":528,"children":529},{},[530],{"type":47,"value":531},"🛑 STOP:",{"type":47,"value":533}," If any box is unchecked, do NOT proceed to the next step.",{"type":41,"tag":535,"props":536,"children":537},"hr",{},[],{"type":41,"tag":84,"props":539,"children":541},{"id":540},"anti-patterns-do-not-do",[542],{"type":47,"value":543},"❌ ANTI-PATTERNS (DO NOT DO)",{"type":41,"tag":545,"props":546,"children":547},"table",{},[548,567],{"type":41,"tag":549,"props":550,"children":551},"thead",{},[552],{"type":41,"tag":553,"props":554,"children":555},"tr",{},[556,562],{"type":41,"tag":557,"props":558,"children":559},"th",{},[560],{"type":47,"value":561},"❌ WRONG",{"type":41,"tag":557,"props":563,"children":564},{},[565],{"type":47,"value":566},"✅ CORRECT",{"type":41,"tag":568,"props":569,"children":570},"tbody",{},[571,592,605,618,631,644,663],{"type":41,"tag":553,"props":572,"children":573},{},[574,580],{"type":41,"tag":575,"props":576,"children":577},"td",{},[578],{"type":47,"value":579},"Hand-writing builder files, folders, UUIDs, or extension registration",{"type":41,"tag":575,"props":581,"children":582},{},[583,585,590],{"type":47,"value":584},"Run ",{"type":41,"tag":67,"props":586,"children":588},{"className":587},[],[589],{"type":47,"value":80},{"type":47,"value":591}," — it owns scaffolding",{"type":41,"tag":553,"props":593,"children":594},{},[595,600],{"type":41,"tag":575,"props":596,"children":597},{},[598],{"type":47,"value":599},"Implementing without reading the extension reference",{"type":41,"tag":575,"props":601,"children":602},{},[603],{"type":47,"value":604},"Always read the relevant reference file first",{"type":41,"tag":553,"props":606,"children":607},{},[608,613],{"type":41,"tag":575,"props":609,"children":610},{},[611],{"type":47,"value":612},"Using MCP discovery without checking refs",{"type":41,"tag":575,"props":614,"children":615},{},[616],{"type":47,"value":617},"Check reference files first",{"type":41,"tag":553,"props":619,"children":620},{},[621,626],{"type":41,"tag":575,"props":622,"children":623},{},[624],{"type":47,"value":625},"Reporting done without validation",{"type":41,"tag":575,"props":627,"children":628},{},[629],{"type":47,"value":630},"Always run validation at the end",{"type":41,"tag":553,"props":632,"children":633},{},[634,639],{"type":41,"tag":575,"props":635,"children":636},{},[637],{"type":47,"value":638},"Letting manual action items get buried",{"type":41,"tag":575,"props":640,"children":641},{},[642],{"type":47,"value":643},"Aggregate all manual steps at the very end",{"type":41,"tag":553,"props":645,"children":646},{},[647,652],{"type":41,"tag":575,"props":648,"children":649},{},[650],{"type":47,"value":651},"Writing custom React for single-collection CRUD when auto-patterns applies",{"type":41,"tag":575,"props":653,"children":654},{},[655,657,661],{"type":47,"value":656},"Default to ",{"type":41,"tag":154,"props":658,"children":659},{"href":156},[660],{"type":47,"value":159},{"type":47,"value":662}," for CRUD admin pages",{"type":41,"tag":553,"props":664,"children":665},{},[666,685],{"type":41,"tag":575,"props":667,"children":668},{},[669,671,676,678,683],{"type":47,"value":670},"Editing the page component (",{"type":41,"tag":67,"props":672,"children":674},{"className":673},[],[675],{"type":47,"value":244},{"type":47,"value":677},") to add UI (banners, headers, custom actions, slots, sections) when ",{"type":41,"tag":67,"props":679,"children":681},{"className":680},[],[682],{"type":47,"value":190},{"type":47,"value":684}," exists",{"type":41,"tag":575,"props":686,"children":687},{},[688,690,696,698,702],{"type":47,"value":689},"Use the matching ",{"type":41,"tag":67,"props":691,"children":693},{"className":692},[],[694],{"type":47,"value":695},"custom-*-override.md",{"type":47,"value":697}," from ",{"type":41,"tag":154,"props":699,"children":700},{"href":156},[701],{"type":47,"value":159},{"type":47,"value":703}," Part B",{"type":41,"tag":535,"props":705,"children":706},{},[],{"type":41,"tag":84,"props":708,"children":710},{"id":709},"quick-decision-helper",[711],{"type":47,"value":712},"Quick Decision Helper",{"type":41,"tag":714,"props":715,"children":716},"ol",{},[717,748,774],{"type":41,"tag":105,"props":718,"children":719},{},[720,725],{"type":41,"tag":59,"props":721,"children":722},{},[723],{"type":47,"value":724},"What are you trying to build?",{"type":41,"tag":99,"props":726,"children":727},{},[728,733,738,743],{"type":41,"tag":105,"props":729,"children":730},{},[731],{"type":47,"value":732},"Admin interface → Dashboard Extensions",{"type":41,"tag":105,"props":734,"children":735},{},[736],{"type":47,"value":737},"Backend logic → Backend Extensions",{"type":41,"tag":105,"props":739,"children":740},{},[741],{"type":47,"value":742},"Data storage \u002F CMS collections → Data Collection",{"type":41,"tag":105,"props":744,"children":745},{},[746],{"type":47,"value":747},"Editor React component → Site Extensions (app projects only)",{"type":41,"tag":105,"props":749,"children":750},{},[751,756],{"type":41,"tag":59,"props":752,"children":753},{},[754],{"type":47,"value":755},"Who will see it?",{"type":41,"tag":99,"props":757,"children":758},{},[759,764,769],{"type":41,"tag":105,"props":760,"children":761},{},[762],{"type":47,"value":763},"Admin users only → Dashboard Extensions",{"type":41,"tag":105,"props":765,"children":766},{},[767],{"type":47,"value":768},"Site visitors → Site Extensions",{"type":41,"tag":105,"props":770,"children":771},{},[772],{"type":47,"value":773},"Server-side only → Backend Extensions",{"type":41,"tag":105,"props":775,"children":776},{},[777,782],{"type":41,"tag":59,"props":778,"children":779},{},[780],{"type":47,"value":781},"Where will it appear?",{"type":41,"tag":99,"props":783,"children":784},{},[785,826,831,836,841,846,851,856],{"type":41,"tag":105,"props":786,"children":787},{},[788,790],{"type":47,"value":789},"Dashboard sidebar\u002Fpage →\n",{"type":41,"tag":99,"props":791,"children":792},{},[793,816,821],{"type":41,"tag":105,"props":794,"children":795},{},[796,801,802,807,809,814],{"type":41,"tag":59,"props":797,"children":798},{},[799],{"type":47,"value":800},"Single-collection CRUD admin (default, MANDATORY):",{"type":47,"value":117},{"type":41,"tag":154,"props":803,"children":804},{"href":156},[805],{"type":47,"value":806},"Auto Patterns Dashboard",{"type":47,"value":808}," — declarative ",{"type":41,"tag":67,"props":810,"children":812},{"className":811},[],[813],{"type":47,"value":190},{"type":47,"value":815},", faster to author, iterate by editing JSON, no React rewrite.",{"type":41,"tag":105,"props":817,"children":818},{},[819],{"type":47,"value":820},"Custom logic \u002F multi-collection \u002F embedded scripts \u002F external APIs: Dashboard Page",{"type":41,"tag":105,"props":822,"children":823},{},[824],{"type":47,"value":825},"Popup\u002Fform: Dashboard Modal",{"type":41,"tag":105,"props":827,"children":828},{},[829],{"type":47,"value":830},"Existing Wix app dashboard (widget) → Dashboard Plugin",{"type":41,"tag":105,"props":832,"children":833},{},[834],{"type":47,"value":835},"Existing Wix app dashboard (menu item) → Dashboard Menu Plugin",{"type":41,"tag":105,"props":837,"children":838},{},[839],{"type":47,"value":840},"Anywhere on site → custom element widget",{"type":41,"tag":105,"props":842,"children":843},{},[844],{"type":47,"value":845},"Anywhere on site (with editor manifest) → Editor React component",{"type":41,"tag":105,"props":847,"children":848},{},[849],{"type":47,"value":850},"Wix business solution page → Site Plugin",{"type":41,"tag":105,"props":852,"children":853},{},[854],{"type":47,"value":855},"During business flow → Service Plugin",{"type":41,"tag":105,"props":857,"children":858},{},[859],{"type":47,"value":860},"After event occurs → Backend Event Extension",{"type":41,"tag":84,"props":862,"children":864},{"id":863},"decision-flow-not-sure",[865],{"type":47,"value":866},"Decision Flow (Not sure?)",{"type":41,"tag":99,"props":868,"children":869},{},[870,910,920],{"type":41,"tag":105,"props":871,"children":872},{},[873,878,880,885,887,892,894,900,902,908],{"type":41,"tag":59,"props":874,"children":875},{},[876],{"type":47,"value":877},"Admin:",{"type":47,"value":879}," Single-collection CRUD admin page? → ",{"type":41,"tag":59,"props":881,"children":882},{},[883],{"type":47,"value":884},"Auto Patterns Dashboard (DEFAULT)",{"type":47,"value":886},". Custom React page (multi-collection \u002F custom logic \u002F embedded scripts \u002F external APIs \u002F explicit user request)? → Dashboard Page. Need popup\u002Fform? → Dashboard Modal. Extending Wix app dashboard with a visual widget? → Dashboard Plugin. Adding a menu item to a Wix app dashboard's more-actions or bulk-actions menu? → Dashboard Menu Plugin. ",{"type":41,"tag":59,"props":888,"children":889},{},[890],{"type":47,"value":891},"Modal constraint:",{"type":47,"value":893}," Dashboard Pages cannot use ",{"type":41,"tag":67,"props":895,"children":897},{"className":896},[],[898],{"type":47,"value":899},"\u003CModal \u002F>",{"type":47,"value":901},"; use a separate Dashboard Modal extension and ",{"type":41,"tag":67,"props":903,"children":905},{"className":904},[],[906],{"type":47,"value":907},"dashboard.openModal()",{"type":47,"value":909},".",{"type":41,"tag":105,"props":911,"children":912},{},[913,918],{"type":41,"tag":59,"props":914,"children":915},{},[916],{"type":47,"value":917},"Backend:",{"type":47,"value":919}," During business flow (checkout\u002Fshipping\u002Ftax)? → Service Plugin. After event (webhooks\u002Fsync)? → Backend Event Extension. Custom HTTP endpoints? → Backend API. Need CMS collections for app data? → Data Collection.",{"type":41,"tag":105,"props":921,"children":922},{},[923,928],{"type":41,"tag":59,"props":924,"children":925},{},[926],{"type":47,"value":927},"Site:",{"type":47,"value":929}," User places anywhere (standalone)? → custom element widget. Editor React component with editor manifest (styling, content, elements)? → Editor React component. Fixed slot on Wix app page? → Site Plugin. Scripts\u002Fanalytics only? → Embedded Script.",{"type":41,"tag":535,"props":931,"children":932},{},[],{"type":41,"tag":84,"props":934,"children":936},{"id":935},"extension-types-reference-table",[937],{"type":47,"value":938},"Extension Types Reference Table",{"type":41,"tag":545,"props":940,"children":941},{},[942,980],{"type":41,"tag":549,"props":943,"children":944},{},[945],{"type":41,"tag":553,"props":946,"children":947},{},[948,953,958,975],{"type":41,"tag":557,"props":949,"children":950},{},[951],{"type":47,"value":952},"Extension Type",{"type":41,"tag":557,"props":954,"children":955},{},[956],{"type":47,"value":957},"Category",{"type":41,"tag":557,"props":959,"children":960},{},[961,967,969,974],{"type":41,"tag":67,"props":962,"children":964},{"className":963},[],[965],{"type":47,"value":966},"extensionType",{"type":47,"value":968}," (for ",{"type":41,"tag":67,"props":970,"children":972},{"className":971},[],[973],{"type":47,"value":80},{"type":47,"value":263},{"type":41,"tag":557,"props":976,"children":977},{},[978],{"type":47,"value":979},"Reference File",{"type":41,"tag":568,"props":981,"children":982},{},[983,1014,1044,1074,1104,1134,1164,1190,1220,1251,1281,1311],{"type":41,"tag":553,"props":984,"children":985},{},[986,991,996,1005],{"type":41,"tag":575,"props":987,"children":988},{},[989],{"type":47,"value":990},"Dashboard Page",{"type":41,"tag":575,"props":992,"children":993},{},[994],{"type":47,"value":995},"Dashboard",{"type":41,"tag":575,"props":997,"children":998},{},[999],{"type":41,"tag":67,"props":1000,"children":1002},{"className":1001},[],[1003],{"type":47,"value":1004},"DASHBOARD_PAGE",{"type":41,"tag":575,"props":1006,"children":1007},{},[1008],{"type":41,"tag":154,"props":1009,"children":1011},{"href":1010},"references\u002FDASHBOARD_PAGE.md",[1012],{"type":47,"value":1013},"DASHBOARD_PAGE.md",{"type":41,"tag":553,"props":1015,"children":1016},{},[1017,1022,1026,1035],{"type":41,"tag":575,"props":1018,"children":1019},{},[1020],{"type":47,"value":1021},"Dashboard Modal",{"type":41,"tag":575,"props":1023,"children":1024},{},[1025],{"type":47,"value":995},{"type":41,"tag":575,"props":1027,"children":1028},{},[1029],{"type":41,"tag":67,"props":1030,"children":1032},{"className":1031},[],[1033],{"type":47,"value":1034},"DASHBOARD_MODAL",{"type":41,"tag":575,"props":1036,"children":1037},{},[1038],{"type":41,"tag":154,"props":1039,"children":1041},{"href":1040},"references\u002FDASHBOARD_MODAL.md",[1042],{"type":47,"value":1043},"DASHBOARD_MODAL.md",{"type":41,"tag":553,"props":1045,"children":1046},{},[1047,1052,1056,1065],{"type":41,"tag":575,"props":1048,"children":1049},{},[1050],{"type":47,"value":1051},"Dashboard Plugin",{"type":41,"tag":575,"props":1053,"children":1054},{},[1055],{"type":47,"value":995},{"type":41,"tag":575,"props":1057,"children":1058},{},[1059],{"type":41,"tag":67,"props":1060,"children":1062},{"className":1061},[],[1063],{"type":47,"value":1064},"DASHBOARD_PLUGIN",{"type":41,"tag":575,"props":1066,"children":1067},{},[1068],{"type":41,"tag":154,"props":1069,"children":1071},{"href":1070},"references\u002FDASHBOARD_PLUGIN.md",[1072],{"type":47,"value":1073},"DASHBOARD_PLUGIN.md",{"type":41,"tag":553,"props":1075,"children":1076},{},[1077,1082,1086,1095],{"type":41,"tag":575,"props":1078,"children":1079},{},[1080],{"type":47,"value":1081},"Dashboard Menu Plugin",{"type":41,"tag":575,"props":1083,"children":1084},{},[1085],{"type":47,"value":995},{"type":41,"tag":575,"props":1087,"children":1088},{},[1089],{"type":41,"tag":67,"props":1090,"children":1092},{"className":1091},[],[1093],{"type":47,"value":1094},"DASHBOARD_MENU_PLUGIN",{"type":41,"tag":575,"props":1096,"children":1097},{},[1098],{"type":41,"tag":154,"props":1099,"children":1101},{"href":1100},"references\u002FDASHBOARD_MENU_PLUGIN.md",[1102],{"type":47,"value":1103},"DASHBOARD_MENU_PLUGIN.md",{"type":41,"tag":553,"props":1105,"children":1106},{},[1107,1112,1116,1125],{"type":41,"tag":575,"props":1108,"children":1109},{},[1110],{"type":47,"value":1111},"Service Plugin",{"type":41,"tag":575,"props":1113,"children":1114},{},[1115],{"type":47,"value":15},{"type":41,"tag":575,"props":1117,"children":1118},{},[1119],{"type":41,"tag":67,"props":1120,"children":1122},{"className":1121},[],[1123],{"type":47,"value":1124},"SERVICE_PLUGIN",{"type":41,"tag":575,"props":1126,"children":1127},{},[1128],{"type":41,"tag":154,"props":1129,"children":1131},{"href":1130},"references\u002FSERVICE_PLUGIN.md",[1132],{"type":47,"value":1133},"SERVICE_PLUGIN.md",{"type":41,"tag":553,"props":1135,"children":1136},{},[1137,1142,1146,1155],{"type":41,"tag":575,"props":1138,"children":1139},{},[1140],{"type":47,"value":1141},"Backend Event Extension",{"type":41,"tag":575,"props":1143,"children":1144},{},[1145],{"type":47,"value":15},{"type":41,"tag":575,"props":1147,"children":1148},{},[1149],{"type":41,"tag":67,"props":1150,"children":1152},{"className":1151},[],[1153],{"type":47,"value":1154},"EVENT",{"type":41,"tag":575,"props":1156,"children":1157},{},[1158],{"type":41,"tag":154,"props":1159,"children":1161},{"href":1160},"references\u002FBACKEND_EVENT.md",[1162],{"type":47,"value":1163},"BACKEND_EVENT.md",{"type":41,"tag":553,"props":1165,"children":1166},{},[1167,1172,1176,1181],{"type":41,"tag":575,"props":1168,"children":1169},{},[1170],{"type":47,"value":1171},"Backend API",{"type":41,"tag":575,"props":1173,"children":1174},{},[1175],{"type":47,"value":15},{"type":41,"tag":575,"props":1177,"children":1178},{},[1179],{"type":47,"value":1180},"— (manual, see banner below)",{"type":41,"tag":575,"props":1182,"children":1183},{},[1184],{"type":41,"tag":154,"props":1185,"children":1187},{"href":1186},"references\u002FBACKEND_API.md",[1188],{"type":47,"value":1189},"BACKEND_API.md",{"type":41,"tag":553,"props":1191,"children":1192},{},[1193,1198,1202,1211],{"type":41,"tag":575,"props":1194,"children":1195},{},[1196],{"type":47,"value":1197},"Data Collection",{"type":41,"tag":575,"props":1199,"children":1200},{},[1201],{"type":47,"value":15},{"type":41,"tag":575,"props":1203,"children":1204},{},[1205],{"type":41,"tag":67,"props":1206,"children":1208},{"className":1207},[],[1209],{"type":47,"value":1210},"DATA_COLLECTION",{"type":41,"tag":575,"props":1212,"children":1213},{},[1214],{"type":41,"tag":154,"props":1215,"children":1217},{"href":1216},"references\u002FDATA_COLLECTION.md",[1218],{"type":47,"value":1219},"DATA_COLLECTION.md",{"type":41,"tag":553,"props":1221,"children":1222},{},[1223,1228,1233,1242],{"type":41,"tag":575,"props":1224,"children":1225},{},[1226],{"type":47,"value":1227},"Editor React component",{"type":41,"tag":575,"props":1229,"children":1230},{},[1231],{"type":47,"value":1232},"Site",{"type":41,"tag":575,"props":1234,"children":1235},{},[1236],{"type":41,"tag":67,"props":1237,"children":1239},{"className":1238},[],[1240],{"type":47,"value":1241},"EDITOR_REACT_COMPONENT",{"type":41,"tag":575,"props":1243,"children":1244},{},[1245],{"type":41,"tag":154,"props":1246,"children":1248},{"href":1247},"references\u002FEDITOR_REACT_COMPONENT.md",[1249],{"type":47,"value":1250},"EDITOR_REACT_COMPONENT.md",{"type":41,"tag":553,"props":1252,"children":1253},{},[1254,1259,1263,1272],{"type":41,"tag":575,"props":1255,"children":1256},{},[1257],{"type":47,"value":1258},"Custom element widget",{"type":41,"tag":575,"props":1260,"children":1261},{},[1262],{"type":47,"value":1232},{"type":41,"tag":575,"props":1264,"children":1265},{},[1266],{"type":41,"tag":67,"props":1267,"children":1269},{"className":1268},[],[1270],{"type":47,"value":1271},"CUSTOM_ELEMENT",{"type":41,"tag":575,"props":1273,"children":1274},{},[1275],{"type":41,"tag":154,"props":1276,"children":1278},{"href":1277},"references\u002FCUSTOM_ELEMENT_WIDGET.md",[1279],{"type":47,"value":1280},"CUSTOM_ELEMENT_WIDGET.md",{"type":41,"tag":553,"props":1282,"children":1283},{},[1284,1289,1293,1302],{"type":41,"tag":575,"props":1285,"children":1286},{},[1287],{"type":47,"value":1288},"Site Plugin",{"type":41,"tag":575,"props":1290,"children":1291},{},[1292],{"type":47,"value":1232},{"type":41,"tag":575,"props":1294,"children":1295},{},[1296],{"type":41,"tag":67,"props":1297,"children":1299},{"className":1298},[],[1300],{"type":47,"value":1301},"SITE_PLUGIN",{"type":41,"tag":575,"props":1303,"children":1304},{},[1305],{"type":41,"tag":154,"props":1306,"children":1308},{"href":1307},"references\u002FSITE_PLUGIN.md",[1309],{"type":47,"value":1310},"SITE_PLUGIN.md",{"type":41,"tag":553,"props":1312,"children":1313},{},[1314,1319,1323,1332],{"type":41,"tag":575,"props":1315,"children":1316},{},[1317],{"type":47,"value":1318},"Embedded Script",{"type":41,"tag":575,"props":1320,"children":1321},{},[1322],{"type":47,"value":1232},{"type":41,"tag":575,"props":1324,"children":1325},{},[1326],{"type":41,"tag":67,"props":1327,"children":1329},{"className":1328},[],[1330],{"type":47,"value":1331},"EMBEDDED_SCRIPT",{"type":41,"tag":575,"props":1333,"children":1334},{},[1335],{"type":41,"tag":154,"props":1336,"children":1338},{"href":1337},"references\u002FEMBEDDED_SCRIPT.md",[1339],{"type":47,"value":1340},"EMBEDDED_SCRIPT.md",{"type":41,"tag":50,"props":1342,"children":1343},{},[1344],{"type":41,"tag":59,"props":1345,"children":1346},{},[1347],{"type":47,"value":1348},"Key constraints:",{"type":41,"tag":99,"props":1350,"children":1351},{},[1352],{"type":41,"tag":105,"props":1353,"children":1354},{},[1355,1357,1362,1364,1369],{"type":47,"value":1356},"Dashboard Page cannot use ",{"type":41,"tag":67,"props":1358,"children":1360},{"className":1359},[],[1361],{"type":47,"value":899},{"type":47,"value":1363},"; use a separate Dashboard Modal and ",{"type":41,"tag":67,"props":1365,"children":1367},{"className":1366},[],[1368],{"type":47,"value":907},{"type":47,"value":909},{"type":41,"tag":1371,"props":1372,"children":1373},"blockquote",{},[1374],{"type":41,"tag":50,"props":1375,"children":1376},{},[1377,1382,1383,1389,1391,1397,1399,1403],{"type":41,"tag":59,"props":1378,"children":1379},{},[1380],{"type":47,"value":1381},"⚠️ Backend API is the only extension type the CLI does NOT scaffold.",{"type":47,"value":117},{"type":41,"tag":67,"props":1384,"children":1386},{"className":1385},[],[1387],{"type":47,"value":1388},"wix generate",{"type":47,"value":1390}," has no ",{"type":41,"tag":67,"props":1392,"children":1394},{"className":1393},[],[1395],{"type":47,"value":1396},"BACKEND_API",{"type":47,"value":1398}," handler. Create files directly per ",{"type":41,"tag":154,"props":1400,"children":1401},{"href":1186},[1402],{"type":47,"value":1189},{"type":47,"value":909},{"type":41,"tag":84,"props":1405,"children":1407},{"id":1406},"extension-comparison",[1408],{"type":47,"value":1409},"Extension Comparison",{"type":41,"tag":545,"props":1411,"children":1412},{},[1413,1434],{"type":41,"tag":549,"props":1414,"children":1415},{},[1416],{"type":41,"tag":553,"props":1417,"children":1418},{},[1419,1424,1429],{"type":41,"tag":557,"props":1420,"children":1421},{},[1422],{"type":47,"value":1423},"Custom element widget vs Editor React component vs Site Plugin",{"type":41,"tag":557,"props":1425,"children":1426},{},[1427],{"type":47,"value":1428},"Dashboard Page vs Modal",{"type":41,"tag":557,"props":1430,"children":1431},{},[1432],{"type":47,"value":1433},"Service Plugin vs Event",{"type":41,"tag":568,"props":1435,"children":1436},{},[1437],{"type":41,"tag":553,"props":1438,"children":1439},{},[1440,1445,1450],{"type":41,"tag":575,"props":1441,"children":1442},{},[1443],{"type":47,"value":1444},"Custom element widget: standalone interactive component. Editor React component: React with editor manifest (CSS\u002Fdata\u002Felements). Plugin: fixed slot in Wix app page.",{"type":41,"tag":575,"props":1446,"children":1447},{},[1448],{"type":47,"value":1449},"Page: full page. Modal: overlay; use for popups.",{"type":41,"tag":575,"props":1451,"children":1452},{},[1453],{"type":47,"value":1454},"Service: during flow. Event: after event.",{"type":41,"tag":535,"props":1456,"children":1457},{},[],{"type":41,"tag":84,"props":1459,"children":1461},{"id":1460},"cross-cutting-references",[1462],{"type":47,"value":1463},"Cross-Cutting References",{"type":41,"tag":545,"props":1465,"children":1466},{},[1467,1483],{"type":41,"tag":549,"props":1468,"children":1469},{},[1470],{"type":41,"tag":553,"props":1471,"children":1472},{},[1473,1478],{"type":41,"tag":557,"props":1474,"children":1475},{},[1476],{"type":47,"value":1477},"Topic",{"type":41,"tag":557,"props":1479,"children":1480},{},[1481],{"type":47,"value":1482},"Reference",{"type":41,"tag":568,"props":1484,"children":1485},{},[1486,1501,1518,1535,1552,1569,1586,1603],{"type":41,"tag":553,"props":1487,"children":1488},{},[1489,1494],{"type":41,"tag":575,"props":1490,"children":1491},{},[1492],{"type":47,"value":1493},"Code Quality Requirements (applies to all generated code)",{"type":41,"tag":575,"props":1495,"children":1496},{},[1497],{"type":41,"tag":154,"props":1498,"children":1499},{"href":315},[1500],{"type":47,"value":318},{"type":41,"tag":553,"props":1502,"children":1503},{},[1504,1509],{"type":41,"tag":575,"props":1505,"children":1506},{},[1507],{"type":47,"value":1508},"Extension Registration",{"type":41,"tag":575,"props":1510,"children":1511},{},[1512],{"type":41,"tag":154,"props":1513,"children":1515},{"href":1514},"references\u002FEXTENSION_REGISTRATION.md",[1516],{"type":47,"value":1517},"EXTENSION_REGISTRATION.md",{"type":41,"tag":553,"props":1519,"children":1520},{},[1521,1526],{"type":41,"tag":575,"props":1522,"children":1523},{},[1524],{"type":47,"value":1525},"App Validation",{"type":41,"tag":575,"props":1527,"children":1528},{},[1529],{"type":41,"tag":154,"props":1530,"children":1532},{"href":1531},"references\u002FAPP_VALIDATION.md",[1533],{"type":47,"value":1534},"APP_VALIDATION.md",{"type":41,"tag":553,"props":1536,"children":1537},{},[1538,1543],{"type":41,"tag":575,"props":1539,"children":1540},{},[1541],{"type":47,"value":1542},"App Market Review",{"type":41,"tag":575,"props":1544,"children":1545},{},[1546],{"type":41,"tag":154,"props":1547,"children":1549},{"href":1548},"references\u002FAPP_MARKET_REVIEW.md",[1550],{"type":47,"value":1551},"APP_MARKET_REVIEW.md",{"type":41,"tag":553,"props":1553,"children":1554},{},[1555,1560],{"type":41,"tag":575,"props":1556,"children":1557},{},[1558],{"type":47,"value":1559},"App Identifiers (Namespace, Code ID)",{"type":41,"tag":575,"props":1561,"children":1562},{},[1563],{"type":41,"tag":154,"props":1564,"children":1566},{"href":1565},"references\u002FAPP_IDENTIFIERS.md",[1567],{"type":47,"value":1568},"APP_IDENTIFIERS.md",{"type":41,"tag":553,"props":1570,"children":1571},{},[1572,1577],{"type":41,"tag":575,"props":1573,"children":1574},{},[1575],{"type":47,"value":1576},"Wix Stores Versioning (V1\u002FV3)",{"type":41,"tag":575,"props":1578,"children":1579},{},[1580],{"type":41,"tag":154,"props":1581,"children":1583},{"href":1582},"references\u002FSTORES_VERSIONING.md",[1584],{"type":47,"value":1585},"STORES_VERSIONING.md",{"type":41,"tag":553,"props":1587,"children":1588},{},[1589,1594],{"type":41,"tag":575,"props":1590,"children":1591},{},[1592],{"type":47,"value":1593},"Official Documentation Links",{"type":41,"tag":575,"props":1595,"children":1596},{},[1597],{"type":41,"tag":154,"props":1598,"children":1600},{"href":1599},"references\u002FDOCUMENTATION.md",[1601],{"type":47,"value":1602},"DOCUMENTATION.md",{"type":41,"tag":553,"props":1604,"children":1605},{},[1606,1611],{"type":41,"tag":575,"props":1607,"children":1608},{},[1609],{"type":47,"value":1610},"Auto-patterns Dashboard Pages",{"type":41,"tag":575,"props":1612,"children":1613},{},[1614],{"type":41,"tag":154,"props":1615,"children":1616},{"href":156},[1617],{"type":47,"value":159},{"type":41,"tag":535,"props":1619,"children":1620},{},[],{"type":41,"tag":84,"props":1622,"children":1624},{"id":1623},"data-collection-inference",[1625],{"type":47,"value":261},{"type":41,"tag":50,"props":1627,"children":1628},{},[1629,1634],{"type":41,"tag":59,"props":1630,"children":1631},{},[1632],{"type":47,"value":1633},"CRITICAL:",{"type":47,"value":1635}," Data collections are often needed implicitly — don't wait for the user to explicitly say \"create a CMS collection.\" Infer the need automatically.",{"type":41,"tag":50,"props":1637,"children":1638},{},[1639,1644],{"type":41,"tag":59,"props":1640,"children":1641},{},[1642],{"type":47,"value":1643},"Skip this section if the user provides a collection ID directly",{"type":47,"value":1645}," (e.g., an existing site-level collection). In that case, use the provided ID as-is — no Data Collection extension or namespace scoping needed.",{"type":41,"tag":50,"props":1647,"children":1648},{},[1649],{"type":41,"tag":59,"props":1650,"children":1651},{},[1652],{"type":47,"value":1653},"Always include a Data Collection extension when ANY of these are true:",{"type":41,"tag":545,"props":1655,"children":1656},{},[1657,1673],{"type":41,"tag":549,"props":1658,"children":1659},{},[1660],{"type":41,"tag":553,"props":1661,"children":1662},{},[1663,1668],{"type":41,"tag":557,"props":1664,"children":1665},{},[1666],{"type":47,"value":1667},"Indicator",{"type":41,"tag":557,"props":1669,"children":1670},{},[1671],{"type":47,"value":1672},"Example",{"type":41,"tag":568,"props":1674,"children":1675},{},[1676,1689,1709,1722,1735],{"type":41,"tag":553,"props":1677,"children":1678},{},[1679,1684],{"type":41,"tag":575,"props":1680,"children":1681},{},[1682],{"type":47,"value":1683},"User mentions saving\u002Fstoring\u002Fpersisting app-specific data",{"type":41,"tag":575,"props":1685,"children":1686},{},[1687],{"type":47,"value":1688},"\"save the fee amount\", \"store product recommendations\"",{"type":41,"tag":553,"props":1690,"children":1691},{},[1692,1704],{"type":41,"tag":575,"props":1693,"children":1694},{},[1695,1697,1702],{"type":47,"value":1696},"A dashboard page will ",{"type":41,"tag":59,"props":1698,"children":1699},{},[1700],{"type":47,"value":1701},"manage",{"type":47,"value":1703}," (CRUD) domain entities",{"type":41,"tag":575,"props":1705,"children":1706},{},[1707],{"type":47,"value":1708},"\"dashboard to manage fees\", \"admin page to edit rules\"",{"type":41,"tag":553,"props":1710,"children":1711},{},[1712,1717],{"type":41,"tag":575,"props":1713,"children":1714},{},[1715],{"type":47,"value":1716},"A service plugin reads app-configured data at runtime",{"type":41,"tag":575,"props":1718,"children":1719},{},[1720],{"type":47,"value":1721},"\"fetch fee rules at checkout\", \"look up shipping rates\"",{"type":41,"tag":553,"props":1723,"children":1724},{},[1725,1730],{"type":41,"tag":575,"props":1726,"children":1727},{},[1728],{"type":47,"value":1729},"User mentions \"dedicated database\u002Fcollection\"",{"type":41,"tag":575,"props":1731,"children":1732},{},[1733],{"type":47,"value":1734},"\"save in a dedicated database collection\"",{"type":41,"tag":553,"props":1736,"children":1737},{},[1738,1743],{"type":41,"tag":575,"props":1739,"children":1740},{},[1741],{"type":47,"value":1742},"Multiple extensions reference the same custom data",{"type":41,"tag":575,"props":1744,"children":1745},{},[1746],{"type":47,"value":1747},"Dashboard manages fees + service plugin reads fees",{"type":41,"tag":50,"props":1749,"children":1750},{},[1751,1756],{"type":41,"tag":59,"props":1752,"children":1753},{},[1754],{"type":47,"value":1755},"Why this matters:",{"type":47,"value":1757}," Without the Data Collection extension, the collection won't be created when the app is installed, the Wix Data APIs may not work (code editor not enabled), and collection IDs won't be properly scoped to the app namespace.",{"type":41,"tag":50,"props":1759,"children":1760},{},[1761],{"type":41,"tag":59,"props":1762,"children":1763},{},[1764,1766,1772],{"type":47,"value":1765},"If data collection is inferred, follow the ",{"type":41,"tag":154,"props":1767,"children":1769},{"href":1768},"#app-namespace-requirement",[1770],{"type":47,"value":1771},"App Namespace Requirement",{"type":47,"value":1773}," to obtain the namespace before proceeding.",{"type":41,"tag":1775,"props":1776,"children":1778},"h3",{"id":1777},"app-namespace-requirement",[1779],{"type":47,"value":1771},{"type":41,"tag":50,"props":1781,"children":1782},{},[1783],{"type":47,"value":1784},"When creating a Data Collection, you MUST ask the user for their app namespace from Wix Dev Center. This is a required parameter that must be obtained from the user's Dev Center dashboard and cannot be recommended or guessed.",{"type":41,"tag":50,"props":1786,"children":1787},{},[1788,1790,1794],{"type":47,"value":1789},"If the user hasn't provided their app namespace, read ",{"type":41,"tag":154,"props":1791,"children":1792},{"href":1565},[1793],{"type":47,"value":1568},{"type":47,"value":1795}," and give the user the instructions to obtain it.",{"type":41,"tag":1775,"props":1797,"children":1799},{"id":1798},"collection-id-coordination",[1800],{"type":47,"value":287},{"type":41,"tag":50,"props":1802,"children":1803},{},[1804,1809],{"type":41,"tag":59,"props":1805,"children":1806},{},[1807],{"type":47,"value":1808},"Applies ONLY when a Data Collection extension is being created.",{"type":47,"value":1810}," If the user provides a collection ID directly, use it as-is — no namespace scoping, no Data Collection extension needed.",{"type":41,"tag":50,"props":1812,"children":1813},{},[1814],{"type":47,"value":1815},"When a Data Collection is created alongside other extensions that reference the same collections:",{"type":41,"tag":714,"props":1817,"children":1818},{},[1819,1829,1845],{"type":41,"tag":105,"props":1820,"children":1821},{},[1822,1827],{"type":41,"tag":59,"props":1823,"children":1824},{},[1825],{"type":47,"value":1826},"Get the app namespace",{"type":47,"value":1828}," (see App Namespace Requirement above)",{"type":41,"tag":105,"props":1830,"children":1831},{},[1832,1843],{"type":41,"tag":59,"props":1833,"children":1834},{},[1835,1837],{"type":47,"value":1836},"Determine the ",{"type":41,"tag":67,"props":1838,"children":1840},{"className":1839},[],[1841],{"type":47,"value":1842},"idSuffix",{"type":47,"value":1844}," for each collection (the Data Collection reference documents the full ID format)",{"type":41,"tag":105,"props":1846,"children":1847},{},[1848,1853,1855,1861],{"type":41,"tag":59,"props":1849,"children":1850},{},[1851],{"type":47,"value":1852},"Use the full scoped collection ID",{"type":47,"value":1854}," (",{"type":41,"tag":67,"props":1856,"children":1858},{"className":1857},[],[1859],{"type":47,"value":1860},"\u003Capp-namespace>\u002F\u003CidSuffix>",{"type":47,"value":1862},") in all extensions that reference the collection via Wix Data API calls",{"type":41,"tag":535,"props":1864,"children":1865},{},[],{"type":41,"tag":84,"props":1867,"children":1869},{"id":1868},"wix-stores-versioning-requirement",[1870],{"type":47,"value":1871},"Wix Stores Versioning Requirement",{"type":41,"tag":50,"props":1873,"children":1874},{},[1875,1880],{"type":41,"tag":59,"props":1876,"children":1877},{},[1878],{"type":47,"value":1879},"Applies when ANY Wix Stores API is used",{"type":47,"value":1881}," (products, inventory, orders, etc.):",{"type":41,"tag":714,"props":1883,"children":1884},{},[1885,1908,1924,1950,1960],{"type":41,"tag":105,"props":1886,"children":1887},{},[1888,1893,1895,1899,1901,1906],{"type":41,"tag":59,"props":1889,"children":1890},{},[1891],{"type":47,"value":1892},"Read the Stores Versioning reference",{"type":47,"value":1894}," — see ",{"type":41,"tag":154,"props":1896,"children":1897},{"href":1582},[1898],{"type":47,"value":1585},{"type":47,"value":1900},". It contains the module map, permissions cheatsheet, copy-paste dual-catalog recipes (list\u002Fget\u002Fcreate\u002Fupdate\u002Fdelete products, inventory, categories), the V1→V3 field map, webhook mapping, and the major V3 gotchas. ",{"type":41,"tag":59,"props":1902,"children":1903},{},[1904],{"type":47,"value":1905},"Use it before searching SDK docs",{"type":47,"value":1907}," — it covers the common 80%.",{"type":41,"tag":105,"props":1909,"children":1910},{},[1911,1916,1918],{"type":41,"tag":59,"props":1912,"children":1913},{},[1914],{"type":47,"value":1915},"All Stores operations must check catalog version first",{"type":47,"value":1917}," using ",{"type":41,"tag":67,"props":1919,"children":1921},{"className":1920},[],[1922],{"type":47,"value":1923},"getCatalogVersion()",{"type":41,"tag":105,"props":1925,"children":1926},{},[1927,1932,1934,1940,1942,1948],{"type":41,"tag":59,"props":1928,"children":1929},{},[1930],{"type":47,"value":1931},"Use the correct module",{"type":47,"value":1933}," based on version: ",{"type":41,"tag":67,"props":1935,"children":1937},{"className":1936},[],[1938],{"type":47,"value":1939},"productsV3",{"type":47,"value":1941}," (V3) vs ",{"type":41,"tag":67,"props":1943,"children":1945},{"className":1944},[],[1946],{"type":47,"value":1947},"products",{"type":47,"value":1949}," (V1)",{"type":41,"tag":105,"props":1951,"children":1952},{},[1953,1958],{"type":41,"tag":59,"props":1954,"children":1955},{},[1956],{"type":47,"value":1957},"Apps MUST support both V1 and V3",{"type":47,"value":1959}," — single-version apps cannot list in the App Market and break on new sites",{"type":41,"tag":105,"props":1961,"children":1962},{},[1963,1968],{"type":41,"tag":59,"props":1964,"children":1965},{},[1966],{"type":47,"value":1967},"Request both V1 and V3 permission scopes",{"type":47,"value":1969}," for every Stores operation",{"type":41,"tag":50,"props":1971,"children":1972},{},[1973],{"type":47,"value":1974},"This is non-negotiable — V1 and V3 are NOT backwards compatible.",{"type":41,"tag":535,"props":1976,"children":1977},{},[],{"type":41,"tag":84,"props":1979,"children":1981},{"id":1980},"app-market-review",[1982],{"type":47,"value":1542},{"type":41,"tag":50,"props":1984,"children":1985},{},[1986,1991],{"type":41,"tag":59,"props":1987,"children":1988},{},[1989],{"type":47,"value":1990},"Applies when a user wants to submit their app to the Wix App Market, list it publicly, prepare for App Market review, audit decline risk, or fix App Market review feedback.",{"type":47,"value":1992}," Not needed for private apps or routine version releases.",{"type":41,"tag":50,"props":1994,"children":1995},{},[1996,1998,2002],{"type":47,"value":1997},"Read ",{"type":41,"tag":154,"props":1999,"children":2000},{"href":1548},[2001],{"type":47,"value":1551},{"type":47,"value":2003}," — it contains the full technical checklist, implementation notes with Wix doc links, and the review taxonomy IDs for traceability.",{"type":41,"tag":535,"props":2005,"children":2006},{},[],{"type":41,"tag":84,"props":2008,"children":2010},{"id":2009},"implementation-workflow",[2011],{"type":47,"value":2012},"Implementation Workflow",{"type":41,"tag":1775,"props":2014,"children":2016},{"id":2015},"step-1-ask-clarifying-questions-if-needed",[2017],{"type":47,"value":2018},"Step 1: Ask Clarifying Questions (if needed)",{"type":41,"tag":50,"props":2020,"children":2021},{},[2022,2024,2029],{"type":47,"value":2023},"Only ask for configuration values when ",{"type":41,"tag":59,"props":2025,"children":2026},{},[2027],{"type":47,"value":2028},"absolutely necessary",{"type":47,"value":2030}," for the implementation to proceed. If a value can be configured later or added as a manual step, don't block on it.",{"type":41,"tag":50,"props":2032,"children":2033},{},[2034],{"type":47,"value":2035},"If unclear on approach (placement, visibility, configuration, integration), ask clarifying questions. If the answer could change the extension type, wait for the response before proceeding. Otherwise, proceed with the best-fit extension type.",{"type":41,"tag":1775,"props":2037,"children":2039},{"id":2038},"step-2-make-your-recommendation",[2040],{"type":47,"value":2041},"Step 2: Make Your Recommendation",{"type":41,"tag":50,"props":2043,"children":2044},{},[2045],{"type":47,"value":2046},"Use the Extension Types Reference Table and decision content above. State extension type and brief reasoning (placement, functionality, integration).",{"type":41,"tag":1775,"props":2048,"children":2050},{"id":2049},"step-3-read-extension-reference-check-api-references-then-discover-if-needed",[2051],{"type":47,"value":2052},"Step 3: Read Extension Reference, Check API References, Then Discover (if needed)",{"type":41,"tag":50,"props":2054,"children":2055},{},[2056],{"type":41,"tag":59,"props":2057,"children":2058},{},[2059],{"type":47,"value":2060},"Workflow: Read extension reference → Check API references → Use MCP only for gaps.",{"type":41,"tag":714,"props":2062,"children":2063},{},[2064,2074,2084,2148,2158],{"type":41,"tag":105,"props":2065,"children":2066},{},[2067,2072],{"type":41,"tag":59,"props":2068,"children":2069},{},[2070],{"type":47,"value":2071},"Read the extension reference file",{"type":47,"value":2073}," for the chosen extension type from the table above",{"type":41,"tag":105,"props":2075,"children":2076},{},[2077,2082],{"type":41,"tag":59,"props":2078,"children":2079},{},[2080],{"type":47,"value":2081},"Identify required APIs",{"type":47,"value":2083}," from user requirements",{"type":41,"tag":105,"props":2085,"children":2086},{},[2087,2092],{"type":41,"tag":59,"props":2088,"children":2089},{},[2090],{"type":47,"value":2091},"Check relevant API reference files:",{"type":41,"tag":99,"props":2093,"children":2094},{},[2095,2106,2117,2128],{"type":41,"tag":105,"props":2096,"children":2097},{},[2098,2100],{"type":47,"value":2099},"Backend events → ",{"type":41,"tag":67,"props":2101,"children":2103},{"className":2102},[],[2104],{"type":47,"value":2105},"references\u002Fbackend-event\u002FCOMMON-EVENTS.md",{"type":41,"tag":105,"props":2107,"children":2108},{},[2109,2111],{"type":47,"value":2110},"Wix Data → ",{"type":41,"tag":67,"props":2112,"children":2114},{"className":2113},[],[2115],{"type":47,"value":2116},"references\u002Fdata-collection\u002FWIX_DATA.md",{"type":41,"tag":105,"props":2118,"children":2119},{},[2120,2122],{"type":47,"value":2121},"Dashboard SDK → ",{"type":41,"tag":67,"props":2123,"children":2125},{"className":2124},[],[2126],{"type":47,"value":2127},"references\u002Fdashboard-page\u002FDASHBOARD_API.md",{"type":41,"tag":105,"props":2129,"children":2130},{},[2131,2133,2138,2140,2146],{"type":47,"value":2132},"Service Plugin SPIs → read ",{"type":41,"tag":67,"props":2134,"children":2136},{"className":2135},[],[2137],{"type":47,"value":1130},{"type":47,"value":2139}," together with the matching ",{"type":41,"tag":67,"props":2141,"children":2143},{"className":2142},[],[2144],{"type":47,"value":2145},"references\u002Fservice-plugin\u002F\u003CNAME>.md",{"type":47,"value":2147}," leaf",{"type":41,"tag":105,"props":2149,"children":2150},{},[2151,2156],{"type":41,"tag":59,"props":2152,"children":2153},{},[2154],{"type":47,"value":2155},"Verify the specific method\u002Fevent exists",{"type":47,"value":2157}," in references",{"type":41,"tag":105,"props":2159,"children":2160},{},[2161,2166],{"type":41,"tag":59,"props":2162,"children":2163},{},[2164],{"type":47,"value":2165},"ONLY use MCP discovery if NOT found",{"type":47,"value":2167}," in reference files",{"type":41,"tag":50,"props":2169,"children":2170},{},[2171],{"type":41,"tag":59,"props":2172,"children":2173},{},[2174],{"type":47,"value":2175},"Platform APIs (never discover - in references):",{"type":41,"tag":99,"props":2177,"children":2178},{},[2179],{"type":41,"tag":105,"props":2180,"children":2181},{},[2182],{"type":47,"value":2183},"Wix Data, Dashboard SDK, Event SDK (common events), Service Plugin SPIs",{"type":41,"tag":50,"props":2185,"children":2186},{},[2187],{"type":41,"tag":59,"props":2188,"children":2189},{},[2190],{"type":47,"value":2191},"Vertical APIs (discover if needed):",{"type":41,"tag":99,"props":2193,"children":2194},{},[2195],{"type":41,"tag":105,"props":2196,"children":2197},{},[2198,2200,2205],{"type":47,"value":2199},"Wix Stores (",{"type":41,"tag":59,"props":2201,"children":2202},{},[2203],{"type":47,"value":2204},"⚠️ MUST use Stores Versioning reference",{"type":47,"value":2206}," — V1\u002FV3 catalog check required), Wix Bookings, Wix Members, Wix Pricing Plans, third-party integrations",{"type":41,"tag":50,"props":2208,"children":2209},{},[2210],{"type":41,"tag":59,"props":2211,"children":2212},{},[2213],{"type":47,"value":2214},"Decision table:",{"type":41,"tag":545,"props":2216,"children":2217},{},[2218,2239],{"type":41,"tag":549,"props":2219,"children":2220},{},[2221],{"type":41,"tag":553,"props":2222,"children":2223},{},[2224,2229,2234],{"type":41,"tag":557,"props":2225,"children":2226},{},[2227],{"type":47,"value":2228},"User Requirement",{"type":41,"tag":557,"props":2230,"children":2231},{},[2232],{"type":47,"value":2233},"Check References \u002F Discovery Needed?",{"type":41,"tag":557,"props":2235,"children":2236},{},[2237],{"type":47,"value":2238},"Reason \u002F Reference File",{"type":41,"tag":568,"props":2240,"children":2241},{},[2242,2265,2282,2299,2316,2340,2358,2376,2394,2410,2427,2444],{"type":41,"tag":553,"props":2243,"children":2244},{},[2245,2250,2255],{"type":41,"tag":575,"props":2246,"children":2247},{},[2248],{"type":47,"value":2249},"\"Display store products\"",{"type":41,"tag":575,"props":2251,"children":2252},{},[2253],{"type":47,"value":2254},"✅ YES (MCP discovery)",{"type":41,"tag":575,"props":2256,"children":2257},{},[2258,2260],{"type":47,"value":2259},"Wix Stores API — ",{"type":41,"tag":59,"props":2261,"children":2262},{},[2263],{"type":47,"value":2264},"include Stores Versioning reference",{"type":41,"tag":553,"props":2266,"children":2267},{},[2268,2273,2277],{"type":41,"tag":575,"props":2269,"children":2270},{},[2271],{"type":47,"value":2272},"\"Show booking calendar\"",{"type":41,"tag":575,"props":2274,"children":2275},{},[2276],{"type":47,"value":2254},{"type":41,"tag":575,"props":2278,"children":2279},{},[2280],{"type":47,"value":2281},"Wix Bookings API not in reference files",{"type":41,"tag":553,"props":2283,"children":2284},{},[2285,2290,2294],{"type":41,"tag":575,"props":2286,"children":2287},{},[2288],{"type":47,"value":2289},"\"Send emails to users\"",{"type":41,"tag":575,"props":2291,"children":2292},{},[2293],{"type":47,"value":2254},{"type":41,"tag":575,"props":2295,"children":2296},{},[2297],{"type":47,"value":2298},"Wix Triggered Emails not in reference files",{"type":41,"tag":553,"props":2300,"children":2301},{},[2302,2307,2311],{"type":41,"tag":575,"props":2303,"children":2304},{},[2305],{"type":47,"value":2306},"\"Get member info\"",{"type":41,"tag":575,"props":2308,"children":2309},{},[2310],{"type":47,"value":2254},{"type":41,"tag":575,"props":2312,"children":2313},{},[2314],{"type":47,"value":2315},"Wix Members API not in reference files",{"type":41,"tag":553,"props":2317,"children":2318},{},[2319,2324,2335],{"type":41,"tag":575,"props":2320,"children":2321},{},[2322],{"type":47,"value":2323},"\"Listen for cart events\"",{"type":41,"tag":575,"props":2325,"children":2326},{},[2327,2329],{"type":47,"value":2328},"Check ",{"type":41,"tag":67,"props":2330,"children":2332},{"className":2331},[],[2333],{"type":47,"value":2334},"COMMON-EVENTS.md",{"type":41,"tag":575,"props":2336,"children":2337},{},[2338],{"type":47,"value":2339},"MCP discovery only if event missing in reference",{"type":41,"tag":553,"props":2341,"children":2342},{},[2343,2348,2353],{"type":41,"tag":575,"props":2344,"children":2345},{},[2346],{"type":47,"value":2347},"\"Store data in collection\"",{"type":41,"tag":575,"props":2349,"children":2350},{},[2351],{"type":47,"value":2352},"WIX_DATA.md ✅ Found",{"type":41,"tag":575,"props":2354,"children":2355},{},[2356],{"type":47,"value":2357},"❌ Skip discovery (covered by reference)",{"type":41,"tag":553,"props":2359,"children":2360},{},[2361,2366,2371],{"type":41,"tag":575,"props":2362,"children":2363},{},[2364],{"type":47,"value":2365},"\"Create CMS collections for my app\"",{"type":41,"tag":575,"props":2367,"children":2368},{},[2369],{"type":47,"value":2370},"Data Collection reference",{"type":41,"tag":575,"props":2372,"children":2373},{},[2374],{"type":47,"value":2375},"❌ Skip discovery (covered by dedicated reference)",{"type":41,"tag":553,"props":2377,"children":2378},{},[2379,2384,2389],{"type":41,"tag":575,"props":2380,"children":2381},{},[2382],{"type":47,"value":2383},"\"Show dashboard toast\"",{"type":41,"tag":575,"props":2385,"children":2386},{},[2387],{"type":47,"value":2388},"DASHBOARD_API.md ✅ Found",{"type":41,"tag":575,"props":2390,"children":2391},{},[2392],{"type":47,"value":2393},"❌ Skip discovery",{"type":41,"tag":553,"props":2395,"children":2396},{},[2397,2402,2406],{"type":41,"tag":575,"props":2398,"children":2399},{},[2400],{"type":47,"value":2401},"\"Show toast \u002F navigate\"",{"type":41,"tag":575,"props":2403,"children":2404},{},[2405],{"type":47,"value":2388},{"type":41,"tag":575,"props":2407,"children":2408},{},[2409],{"type":47,"value":2393},{"type":41,"tag":553,"props":2411,"children":2412},{},[2413,2418,2423],{"type":41,"tag":575,"props":2414,"children":2415},{},[2416],{"type":47,"value":2417},"\"UI only (forms, inputs)\"",{"type":41,"tag":575,"props":2419,"children":2420},{},[2421],{"type":47,"value":2422},"N\u002FA (no external API)",{"type":41,"tag":575,"props":2424,"children":2425},{},[2426],{"type":47,"value":2393},{"type":41,"tag":553,"props":2428,"children":2429},{},[2430,2435,2440],{"type":41,"tag":575,"props":2431,"children":2432},{},[2433],{"type":47,"value":2434},"\"Settings page with form inputs\"",{"type":41,"tag":575,"props":2436,"children":2437},{},[2438],{"type":47,"value":2439},"N\u002FA (UI only, no external API)",{"type":41,"tag":575,"props":2441,"children":2442},{},[2443],{"type":47,"value":2393},{"type":41,"tag":553,"props":2445,"children":2446},{},[2447,2452,2456],{"type":41,"tag":575,"props":2448,"children":2449},{},[2450],{"type":47,"value":2451},"\"Dashboard page with local state\"",{"type":41,"tag":575,"props":2453,"children":2454},{},[2455],{"type":47,"value":2422},{"type":41,"tag":575,"props":2457,"children":2458},{},[2459],{"type":47,"value":2393},{"type":41,"tag":50,"props":2461,"children":2462},{},[2463],{"type":41,"tag":59,"props":2464,"children":2465},{},[2466],{"type":47,"value":2467},"MCP Tools for discovery (when needed):",{"type":41,"tag":99,"props":2469,"children":2470},{},[2471,2488,2499],{"type":41,"tag":105,"props":2472,"children":2473},{},[2474,2480,2482,2487],{"type":41,"tag":67,"props":2475,"children":2477},{"className":2476},[],[2478],{"type":47,"value":2479},"SearchWixSDKDocumentation",{"type":47,"value":2481}," - SDK methods and APIs (",{"type":41,"tag":59,"props":2483,"children":2484},{},[2485],{"type":47,"value":2486},"Always use maxResults: 5",{"type":47,"value":263},{"type":41,"tag":105,"props":2489,"children":2490},{},[2491,2497],{"type":41,"tag":67,"props":2492,"children":2494},{"className":2493},[],[2495],{"type":47,"value":2496},"ReadFullDocsMethodSchema",{"type":47,"value":2498}," - Full type schema for a specific SDK method (parameters, return type, permissions)",{"type":41,"tag":105,"props":2500,"children":2501},{},[2502,2508],{"type":41,"tag":67,"props":2503,"children":2505},{"className":2504},[],[2506],{"type":47,"value":2507},"ReadFullDocsArticle",{"type":47,"value":2509}," - Prose guides and conceptual articles only (not for SDK method signatures)",{"type":41,"tag":1775,"props":2511,"children":2513},{"id":2512},"step-4a-scaffold-via-the-cli",[2514],{"type":47,"value":2515},"Step 4a: Scaffold via the CLI",{"type":41,"tag":50,"props":2517,"children":2518},{},[2519,2521,2526,2528,2534,2536,2542],{"type":47,"value":2520},"For each extension ",{"type":41,"tag":59,"props":2522,"children":2523},{},[2524],{"type":47,"value":2525},"except Backend API",{"type":47,"value":2527},", run ",{"type":41,"tag":67,"props":2529,"children":2531},{"className":2530},[],[2532],{"type":47,"value":2533},"npx wix generate --params '\u003Cjson>'",{"type":47,"value":2535},". The command returns ",{"type":41,"tag":67,"props":2537,"children":2539},{"className":2538},[],[2540],{"type":47,"value":2541},"{\"success\":true,\"extensionType\":\"...\",\"newFiles\":[...]}",{"type":47,"value":2543}," on success.",{"type":41,"tag":50,"props":2545,"children":2546},{},[2547,2549,2555,2557,2563],{"type":47,"value":2548},"If the command fails because of unknown or invalid params, run ",{"type":41,"tag":67,"props":2550,"children":2552},{"className":2551},[],[2553],{"type":47,"value":2554},"npx wix schema generate --type \u003CextensionType>",{"type":47,"value":2556}," to print the JSON Schema for that extension type, fix the ",{"type":41,"tag":67,"props":2558,"children":2560},{"className":2559},[],[2561],{"type":47,"value":2562},"--params",{"type":47,"value":2564}," payload, and retry. Do not fall back to manual scaffolding.",{"type":41,"tag":50,"props":2566,"children":2567},{},[2568],{"type":41,"tag":59,"props":2569,"children":2570},{},[2571],{"type":47,"value":2572},"What the CLI does automatically:",{"type":41,"tag":99,"props":2574,"children":2575},{},[2576,2581,2592,2612],{"type":41,"tag":105,"props":2577,"children":2578},{},[2579],{"type":47,"value":2580},"Creates folders and stub files",{"type":41,"tag":105,"props":2582,"children":2583},{},[2584,2586],{"type":47,"value":2585},"Generates a fresh UUID for the extension ",{"type":41,"tag":67,"props":2587,"children":2589},{"className":2588},[],[2590],{"type":47,"value":2591},"id",{"type":41,"tag":105,"props":2593,"children":2594},{},[2595,2597,2602,2604,2610],{"type":47,"value":2596},"Updates ",{"type":41,"tag":67,"props":2598,"children":2600},{"className":2599},[],[2601],{"type":47,"value":72},{"type":47,"value":2603}," with the import and ",{"type":41,"tag":67,"props":2605,"children":2607},{"className":2606},[],[2608],{"type":47,"value":2609},".use()",{"type":47,"value":2611}," call",{"type":41,"tag":105,"props":2613,"children":2614},{},[2615],{"type":47,"value":2616},"Enforces naming rules (kebab-case, hyphen-required custom elements, etc.)",{"type":41,"tag":50,"props":2618,"children":2619},{},[2620,2625,2627,2633,2635,2639],{"type":41,"tag":59,"props":2621,"children":2622},{},[2623],{"type":47,"value":2624},"Backend API exception:",{"type":47,"value":2626}," Create ",{"type":41,"tag":67,"props":2628,"children":2630},{"className":2629},[],[2631],{"type":47,"value":2632},"src\u002Fpages\u002Fapi\u002F*.ts",{"type":47,"value":2634}," files manually per ",{"type":41,"tag":154,"props":2636,"children":2637},{"href":1186},[2638],{"type":47,"value":1189},{"type":47,"value":909},{"type":41,"tag":1775,"props":2641,"children":2643},{"id":2642},"step-4b-fill-in-business-logic",[2644],{"type":47,"value":2645},"Step 4b: Fill in business logic",{"type":41,"tag":50,"props":2647,"children":2648},{},[2649,2651,2657],{"type":47,"value":2650},"Open every path returned in ",{"type":41,"tag":67,"props":2652,"children":2654},{"className":2653},[],[2655],{"type":47,"value":2656},"newFiles",{"type":47,"value":2658}," and replace stubbed handler bodies \u002F UI \u002F queries with the user's actual logic, guided by the extension reference file's API and configuration sections.",{"type":41,"tag":99,"props":2660,"children":2661},{},[2662,2698,2731],{"type":41,"tag":105,"props":2663,"children":2664},{},[2665,2667,2672,2674,2696],{"type":47,"value":2666},"⚠️ MANDATORY when using WDS: Invoke the ",{"type":41,"tag":67,"props":2668,"children":2670},{"className":2669},[],[2671],{"type":47,"value":387},{"type":47,"value":2673}," skill ",{"type":41,"tag":59,"props":2675,"children":2676},{},[2677,2679,2684,2685,2690,2691],{"type":47,"value":2678},"before editing your first ",{"type":41,"tag":67,"props":2680,"children":2682},{"className":2681},[],[2683],{"type":47,"value":395},{"type":47,"value":397},{"type":41,"tag":67,"props":2686,"children":2688},{"className":2687},[],[2689],{"type":47,"value":403},{"type":47,"value":405},{"type":41,"tag":67,"props":2692,"children":2694},{"className":2693},[],[2695],{"type":47,"value":411},{"type":47,"value":2697},". Do NOT invoke it preemptively for backend-only or data-only jobs — it adds large content to context that you won't use.",{"type":41,"tag":105,"props":2699,"children":2700},{},[2701,2703,2709,2711,2716,2718,2723,2724,2729],{"type":47,"value":2702},"⚠️ MANDATORY when using WDS: Add ",{"type":41,"tag":67,"props":2704,"children":2706},{"className":2705},[],[2707],{"type":47,"value":2708},"import \"@wix\u002Fdesign-system\u002Fstyles.global.css\";",{"type":47,"value":2710}," in the ",{"type":41,"tag":59,"props":2712,"children":2713},{},[2714],{"type":47,"value":2715},"main component",{"type":47,"value":2717}," entry file (",{"type":41,"tag":67,"props":2719,"children":2721},{"className":2720},[],[2722],{"type":47,"value":436},{"type":47,"value":438},{"type":41,"tag":67,"props":2725,"children":2727},{"className":2726},[],[2728],{"type":47,"value":395},{"type":47,"value":2730},", etc.) — not in child\u002Ftab\u002Fhelper files.",{"type":41,"tag":105,"props":2732,"children":2733},{},[2734,2736,2741,2743,2748,2750,2756,2758,2764,2766,2772],{"type":47,"value":2735},"⚠️ MANDATORY when using Data Collections: Use the EXACT collection ID from ",{"type":41,"tag":67,"props":2737,"children":2739},{"className":2738},[],[2740],{"type":47,"value":1842},{"type":47,"value":2742}," (case-sensitive). If ",{"type":41,"tag":67,"props":2744,"children":2746},{"className":2745},[],[2747],{"type":47,"value":1842},{"type":47,"value":2749}," is ",{"type":41,"tag":67,"props":2751,"children":2753},{"className":2752},[],[2754],{"type":47,"value":2755},"\"product-recommendations\"",{"type":47,"value":2757},", use ",{"type":41,"tag":67,"props":2759,"children":2761},{"className":2760},[],[2762],{"type":47,"value":2763},"\u003Capp-namespace>\u002Fproduct-recommendations",{"type":47,"value":2765}," NOT ",{"type":41,"tag":67,"props":2767,"children":2769},{"className":2768},[],[2770],{"type":47,"value":2771},"productRecommendations",{"type":47,"value":909},{"type":41,"tag":1775,"props":2774,"children":2776},{"id":2775},"step-5-run-validation",[2777],{"type":47,"value":2778},"Step 5: Run Validation",{"type":41,"tag":50,"props":2780,"children":2781},{},[2782,2784,2788],{"type":47,"value":2783},"After all implementation is complete, you MUST run validation. See ",{"type":41,"tag":154,"props":2785,"children":2786},{"href":1531},[2787],{"type":47,"value":1534},{"type":47,"value":2789}," for the complete validation workflow:",{"type":41,"tag":714,"props":2791,"children":2792},{},[2793,2798,2810,2822],{"type":41,"tag":105,"props":2794,"children":2795},{},[2796],{"type":47,"value":2797},"Package installation (detect package manager, run install)",{"type":41,"tag":105,"props":2799,"children":2800},{},[2801,2803,2809],{"type":47,"value":2802},"TypeScript compilation check (",{"type":41,"tag":67,"props":2804,"children":2806},{"className":2805},[],[2807],{"type":47,"value":2808},"npx tsc --noEmit",{"type":47,"value":263},{"type":41,"tag":105,"props":2811,"children":2812},{},[2813,2815,2821],{"type":47,"value":2814},"Build validation (",{"type":41,"tag":67,"props":2816,"children":2818},{"className":2817},[],[2819],{"type":47,"value":2820},"npx wix build",{"type":47,"value":263},{"type":41,"tag":105,"props":2823,"children":2824},{},[2825,2827,2833],{"type":47,"value":2826},"Preview deployment (",{"type":41,"tag":67,"props":2828,"children":2830},{"className":2829},[],[2831],{"type":47,"value":2832},"npx wix preview",{"type":47,"value":263},{"type":41,"tag":50,"props":2835,"children":2836},{},[2837],{"type":41,"tag":59,"props":2838,"children":2839},{},[2840],{"type":47,"value":2841},"Do NOT report completion to the user until validation passes.",{"type":41,"tag":50,"props":2843,"children":2844},{},[2845],{"type":47,"value":2846},"If validation fails, fix the errors and re-validate until it passes.",{"type":41,"tag":1775,"props":2848,"children":2850},{"id":2849},"step-6-report-completion",[2851],{"type":47,"value":2852},"Step 6: Report Completion",{"type":41,"tag":50,"props":2854,"children":2855},{},[2856,2858,2863],{"type":47,"value":2857},"Only after validation passes, provide a ",{"type":41,"tag":59,"props":2859,"children":2860},{},[2861],{"type":47,"value":2862},"concise summary section",{"type":47,"value":2864}," at the top of your response:",{"type":41,"tag":2866,"props":2867,"children":2872},"pre",{"className":2868,"code":2869,"language":2870,"meta":2871,"style":2871},"language-markdown shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","## ✅ Implementation Complete\n\n[1-2 sentence description of what was built]\n\n**Extensions Created:**\n- [Extension 1 Name] - [Brief purpose]\n- [Extension 2 Name] - [Brief purpose]\n\n**Build Status:**\n- ✅ Dependencies: [Installed \u002F status message]\n- ✅ TypeScript: [No compilation errors \u002F status]\n- ✅ Build: [Completed successfully \u002F status]\n- ✅\u002F⚠️ Preview: [Running at URL \u002F Failed - reason]\n\n**⚠️ IMPORTANT: [X] manual step(s) required to complete setup** (see \"Manual Steps Required\" section below)\n","markdown","",[2873],{"type":41,"tag":67,"props":2874,"children":2875},{"__ignoreMap":2871},[2876,2894,2903,2913,2921,2942,2956,2969,2977,2994,3007,3020,3033,3046,3054],{"type":41,"tag":2877,"props":2878,"children":2881},"span",{"class":2879,"line":2880},"line",1,[2882,2888],{"type":41,"tag":2877,"props":2883,"children":2885},{"style":2884},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[2886],{"type":47,"value":2887},"## ",{"type":41,"tag":2877,"props":2889,"children":2891},{"style":2890},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[2892],{"type":47,"value":2893},"✅ Implementation Complete\n",{"type":41,"tag":2877,"props":2895,"children":2897},{"class":2879,"line":2896},2,[2898],{"type":41,"tag":2877,"props":2899,"children":2900},{"emptyLinePlaceholder":113},[2901],{"type":47,"value":2902},"\n",{"type":41,"tag":2877,"props":2904,"children":2906},{"class":2879,"line":2905},3,[2907],{"type":41,"tag":2877,"props":2908,"children":2910},{"style":2909},"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8",[2911],{"type":47,"value":2912},"[1-2 sentence description of what was built]\n",{"type":41,"tag":2877,"props":2914,"children":2916},{"class":2879,"line":2915},4,[2917],{"type":41,"tag":2877,"props":2918,"children":2919},{"emptyLinePlaceholder":113},[2920],{"type":47,"value":2902},{"type":41,"tag":2877,"props":2922,"children":2924},{"class":2879,"line":2923},5,[2925,2931,2937],{"type":41,"tag":2877,"props":2926,"children":2928},{"style":2927},"--shiki-light:#39ADB5;--shiki-light-font-weight:bold;--shiki-default:#89DDFF;--shiki-default-font-weight:bold;--shiki-dark:#89DDFF;--shiki-dark-font-weight:bold",[2929],{"type":47,"value":2930},"**",{"type":41,"tag":2877,"props":2932,"children":2934},{"style":2933},"--shiki-light:#E53935;--shiki-light-font-weight:bold;--shiki-default:#F07178;--shiki-default-font-weight:bold;--shiki-dark:#F07178;--shiki-dark-font-weight:bold",[2935],{"type":47,"value":2936},"Extensions Created:",{"type":41,"tag":2877,"props":2938,"children":2939},{"style":2927},[2940],{"type":47,"value":2941},"**\n",{"type":41,"tag":2877,"props":2943,"children":2945},{"class":2879,"line":2944},6,[2946,2951],{"type":41,"tag":2877,"props":2947,"children":2948},{"style":2884},[2949],{"type":47,"value":2950},"-",{"type":41,"tag":2877,"props":2952,"children":2953},{"style":2909},[2954],{"type":47,"value":2955}," [Extension 1 Name] - [Brief purpose]\n",{"type":41,"tag":2877,"props":2957,"children":2959},{"class":2879,"line":2958},7,[2960,2964],{"type":41,"tag":2877,"props":2961,"children":2962},{"style":2884},[2963],{"type":47,"value":2950},{"type":41,"tag":2877,"props":2965,"children":2966},{"style":2909},[2967],{"type":47,"value":2968}," [Extension 2 Name] - [Brief purpose]\n",{"type":41,"tag":2877,"props":2970,"children":2972},{"class":2879,"line":2971},8,[2973],{"type":41,"tag":2877,"props":2974,"children":2975},{"emptyLinePlaceholder":113},[2976],{"type":47,"value":2902},{"type":41,"tag":2877,"props":2978,"children":2980},{"class":2879,"line":2979},9,[2981,2985,2990],{"type":41,"tag":2877,"props":2982,"children":2983},{"style":2927},[2984],{"type":47,"value":2930},{"type":41,"tag":2877,"props":2986,"children":2987},{"style":2933},[2988],{"type":47,"value":2989},"Build Status:",{"type":41,"tag":2877,"props":2991,"children":2992},{"style":2927},[2993],{"type":47,"value":2941},{"type":41,"tag":2877,"props":2995,"children":2997},{"class":2879,"line":2996},10,[2998,3002],{"type":41,"tag":2877,"props":2999,"children":3000},{"style":2884},[3001],{"type":47,"value":2950},{"type":41,"tag":2877,"props":3003,"children":3004},{"style":2909},[3005],{"type":47,"value":3006}," ✅ Dependencies: [Installed \u002F status message]\n",{"type":41,"tag":2877,"props":3008,"children":3010},{"class":2879,"line":3009},11,[3011,3015],{"type":41,"tag":2877,"props":3012,"children":3013},{"style":2884},[3014],{"type":47,"value":2950},{"type":41,"tag":2877,"props":3016,"children":3017},{"style":2909},[3018],{"type":47,"value":3019}," ✅ TypeScript: [No compilation errors \u002F status]\n",{"type":41,"tag":2877,"props":3021,"children":3023},{"class":2879,"line":3022},12,[3024,3028],{"type":41,"tag":2877,"props":3025,"children":3026},{"style":2884},[3027],{"type":47,"value":2950},{"type":41,"tag":2877,"props":3029,"children":3030},{"style":2909},[3031],{"type":47,"value":3032}," ✅ Build: [Completed successfully \u002F status]\n",{"type":41,"tag":2877,"props":3034,"children":3036},{"class":2879,"line":3035},13,[3037,3041],{"type":41,"tag":2877,"props":3038,"children":3039},{"style":2884},[3040],{"type":47,"value":2950},{"type":41,"tag":2877,"props":3042,"children":3043},{"style":2909},[3044],{"type":47,"value":3045}," ✅\u002F⚠️ Preview: [Running at URL \u002F Failed - reason]\n",{"type":41,"tag":2877,"props":3047,"children":3049},{"class":2879,"line":3048},14,[3050],{"type":41,"tag":2877,"props":3051,"children":3052},{"emptyLinePlaceholder":113},[3053],{"type":47,"value":2902},{"type":41,"tag":2877,"props":3055,"children":3057},{"class":2879,"line":3056},15,[3058,3062,3067,3072,3078,3083,3088,3092],{"type":41,"tag":2877,"props":3059,"children":3060},{"style":2927},[3061],{"type":47,"value":2930},{"type":41,"tag":2877,"props":3063,"children":3064},{"style":2933},[3065],{"type":47,"value":3066},"⚠️ IMPORTANT: ",{"type":41,"tag":2877,"props":3068,"children":3069},{"style":2927},[3070],{"type":47,"value":3071},"[",{"type":41,"tag":2877,"props":3073,"children":3075},{"style":3074},"--shiki-light:#91B859;--shiki-light-font-weight:bold;--shiki-default:#C3E88D;--shiki-default-font-weight:bold;--shiki-dark:#C3E88D;--shiki-dark-font-weight:bold",[3076],{"type":47,"value":3077},"X",{"type":41,"tag":2877,"props":3079,"children":3080},{"style":2927},[3081],{"type":47,"value":3082},"]",{"type":41,"tag":2877,"props":3084,"children":3085},{"style":2933},[3086],{"type":47,"value":3087}," manual step(s) required to complete setup",{"type":41,"tag":2877,"props":3089,"children":3090},{"style":2927},[3091],{"type":47,"value":2930},{"type":41,"tag":2877,"props":3093,"children":3094},{"style":2909},[3095],{"type":47,"value":3096}," (see \"Manual Steps Required\" section below)\n",{"type":41,"tag":99,"props":3098,"children":3099},{},[3100],{"type":41,"tag":105,"props":3101,"children":3102},{},[3103],{"type":47,"value":3104},"If there are NO manual steps, state: \"✅ No manual steps required — you're ready to go!\"",{"type":41,"tag":1775,"props":3106,"children":3108},{"id":3107},"step-7-surface-manual-action-items",[3109],{"type":47,"value":3110},"Step 7: Surface Manual Action Items",{"type":41,"tag":50,"props":3112,"children":3113},{},[3114],{"type":47,"value":3115},"Present any manual steps the user must perform (e.g., configuring settings in the Wix dashboard, enabling permissions, setting up external services).",{"type":41,"tag":50,"props":3117,"children":3118},{},[3119],{"type":41,"tag":59,"props":3120,"children":3121},{},[3122],{"type":47,"value":3123},"Format:",{"type":41,"tag":2866,"props":3125,"children":3127},{"className":2868,"code":3126,"language":2870,"meta":2871,"style":2871},"## 🔧 Manual Steps Required\n\nThe following actions need to be done manually by you:\n\n### 1. [Action Category\u002FTitle]\n[Detailed description with specific instructions]\n\n### 2. [Action Category\u002FTitle]\n[Detailed description]\n",[3128],{"type":41,"tag":67,"props":3129,"children":3130},{"__ignoreMap":2871},[3131,3143,3150,3158,3165,3178,3186,3193,3205],{"type":41,"tag":2877,"props":3132,"children":3133},{"class":2879,"line":2880},[3134,3138],{"type":41,"tag":2877,"props":3135,"children":3136},{"style":2884},[3137],{"type":47,"value":2887},{"type":41,"tag":2877,"props":3139,"children":3140},{"style":2890},[3141],{"type":47,"value":3142},"🔧 Manual Steps Required\n",{"type":41,"tag":2877,"props":3144,"children":3145},{"class":2879,"line":2896},[3146],{"type":41,"tag":2877,"props":3147,"children":3148},{"emptyLinePlaceholder":113},[3149],{"type":47,"value":2902},{"type":41,"tag":2877,"props":3151,"children":3152},{"class":2879,"line":2905},[3153],{"type":41,"tag":2877,"props":3154,"children":3155},{"style":2909},[3156],{"type":47,"value":3157},"The following actions need to be done manually by you:\n",{"type":41,"tag":2877,"props":3159,"children":3160},{"class":2879,"line":2915},[3161],{"type":41,"tag":2877,"props":3162,"children":3163},{"emptyLinePlaceholder":113},[3164],{"type":47,"value":2902},{"type":41,"tag":2877,"props":3166,"children":3167},{"class":2879,"line":2923},[3168,3173],{"type":41,"tag":2877,"props":3169,"children":3170},{"style":2884},[3171],{"type":47,"value":3172},"### ",{"type":41,"tag":2877,"props":3174,"children":3175},{"style":2890},[3176],{"type":47,"value":3177},"1. [Action Category\u002FTitle]\n",{"type":41,"tag":2877,"props":3179,"children":3180},{"class":2879,"line":2944},[3181],{"type":41,"tag":2877,"props":3182,"children":3183},{"style":2909},[3184],{"type":47,"value":3185},"[Detailed description with specific instructions]\n",{"type":41,"tag":2877,"props":3187,"children":3188},{"class":2879,"line":2958},[3189],{"type":41,"tag":2877,"props":3190,"children":3191},{"emptyLinePlaceholder":113},[3192],{"type":47,"value":2902},{"type":41,"tag":2877,"props":3194,"children":3195},{"class":2879,"line":2971},[3196,3200],{"type":41,"tag":2877,"props":3197,"children":3198},{"style":2884},[3199],{"type":47,"value":3172},{"type":41,"tag":2877,"props":3201,"children":3202},{"style":2890},[3203],{"type":47,"value":3204},"2. [Action Category\u002FTitle]\n",{"type":41,"tag":2877,"props":3206,"children":3207},{"class":2879,"line":2979},[3208],{"type":41,"tag":2877,"props":3209,"children":3210},{"style":2909},[3211],{"type":47,"value":3212},"[Detailed description]\n",{"type":41,"tag":535,"props":3214,"children":3215},{},[],{"type":41,"tag":84,"props":3217,"children":3219},{"id":3218},"extension-registration",[3220],{"type":47,"value":1508},{"type":41,"tag":50,"props":3222,"children":3223},{},[3224,3229,3231,3236,3238,3243,3245,3249],{"type":41,"tag":67,"props":3225,"children":3227},{"className":3226},[],[3228],{"type":47,"value":80},{"type":47,"value":3230}," updates ",{"type":41,"tag":67,"props":3232,"children":3234},{"className":3233},[],[3235],{"type":47,"value":72},{"type":47,"value":3237}," automatically for every CLI-supported extension type. The only case that still requires manual editing is Backend API. For background, troubleshooting, and the manual recovery pattern when ",{"type":41,"tag":67,"props":3239,"children":3241},{"className":3240},[],[3242],{"type":47,"value":72},{"type":47,"value":3244}," drifts, see ",{"type":41,"tag":154,"props":3246,"children":3247},{"href":1514},[3248],{"type":47,"value":1517},{"type":47,"value":909},{"type":41,"tag":535,"props":3251,"children":3252},{},[],{"type":41,"tag":84,"props":3254,"children":3256},{"id":3255},"validation",[3257],{"type":47,"value":466},{"type":41,"tag":50,"props":3259,"children":3260},{},[3261,3263,3267],{"type":47,"value":3262},"Execute these steps sequentially after all implementation is complete. See ",{"type":41,"tag":154,"props":3264,"children":3265},{"href":1531},[3266],{"type":47,"value":1534},{"type":47,"value":3268}," for the complete guide.",{"type":41,"tag":714,"props":3270,"children":3271},{},[3272,3282,3297,3311],{"type":41,"tag":105,"props":3273,"children":3274},{},[3275,3280],{"type":41,"tag":59,"props":3276,"children":3277},{},[3278],{"type":47,"value":3279},"Package Installation",{"type":47,"value":3281}," — Detect package manager, run install",{"type":41,"tag":105,"props":3283,"children":3284},{},[3285,3290,3292],{"type":41,"tag":59,"props":3286,"children":3287},{},[3288],{"type":47,"value":3289},"TypeScript Compilation",{"type":47,"value":3291}," — ",{"type":41,"tag":67,"props":3293,"children":3295},{"className":3294},[],[3296],{"type":47,"value":2808},{"type":41,"tag":105,"props":3298,"children":3299},{},[3300,3305,3306],{"type":41,"tag":59,"props":3301,"children":3302},{},[3303],{"type":47,"value":3304},"Build",{"type":47,"value":3291},{"type":41,"tag":67,"props":3307,"children":3309},{"className":3308},[],[3310],{"type":47,"value":2820},{"type":41,"tag":105,"props":3312,"children":3313},{},[3314,3319,3320],{"type":41,"tag":59,"props":3315,"children":3316},{},[3317],{"type":47,"value":3318},"Preview",{"type":47,"value":3291},{"type":41,"tag":67,"props":3321,"children":3323},{"className":3322},[],[3324],{"type":47,"value":2832},{"type":41,"tag":50,"props":3326,"children":3327},{},[3328,3330,3336],{"type":47,"value":3329},"Stop and report errors if any step fails. Check ",{"type":41,"tag":67,"props":3331,"children":3333},{"className":3332},[],[3334],{"type":47,"value":3335},".wix\u002Fdebug.log",{"type":47,"value":3337}," on failures.",{"type":41,"tag":535,"props":3339,"children":3340},{},[],{"type":41,"tag":84,"props":3342,"children":3344},{"id":3343},"cost-optimization",[3345],{"type":47,"value":3346},"Cost Optimization",{"type":41,"tag":99,"props":3348,"children":3349},{},[3350,3360,3383,3393,3403,3413,3423,3438],{"type":41,"tag":105,"props":3351,"children":3352},{},[3353,3358],{"type":41,"tag":59,"props":3354,"children":3355},{},[3356],{"type":47,"value":3357},"Let the CLI scaffold",{"type":47,"value":3359}," — don't burn tokens describing folder layouts or builder boilerplate",{"type":41,"tag":105,"props":3361,"children":3362},{},[3363,3374,3376,3381],{"type":41,"tag":59,"props":3364,"children":3365},{},[3366,3368],{"type":47,"value":3367},"Only run ",{"type":41,"tag":67,"props":3369,"children":3371},{"className":3370},[],[3372],{"type":47,"value":3373},"wix schema generate --type \u003CextensionType>",{"type":47,"value":3375}," when ",{"type":41,"tag":67,"props":3377,"children":3379},{"className":3378},[],[3380],{"type":47,"value":80},{"type":47,"value":3382}," fails — don't pre-fetch it",{"type":41,"tag":105,"props":3384,"children":3385},{},[3386,3391],{"type":41,"tag":59,"props":3387,"children":3388},{},[3389],{"type":47,"value":3390},"Read extension reference first",{"type":47,"value":3392}," — always read the relevant extension reference file before implementing",{"type":41,"tag":105,"props":3394,"children":3395},{},[3396,3401],{"type":41,"tag":59,"props":3397,"children":3398},{},[3399],{"type":47,"value":3400},"Check API references first",{"type":47,"value":3402}," — read relevant API reference files before using MCP discovery",{"type":41,"tag":105,"props":3404,"children":3405},{},[3406,3411],{"type":41,"tag":59,"props":3407,"children":3408},{},[3409],{"type":47,"value":3410},"Skip discovery",{"type":47,"value":3412}," when all required APIs are in reference files",{"type":41,"tag":105,"props":3414,"children":3415},{},[3416,3421],{"type":41,"tag":59,"props":3417,"children":3418},{},[3419],{"type":47,"value":3420},"maxResults: 5",{"type":47,"value":3422}," for all MCP SDK searches",{"type":41,"tag":105,"props":3424,"children":3425},{},[3426,3430,3432,3436],{"type":41,"tag":59,"props":3427,"children":3428},{},[3429],{"type":47,"value":2496},{"type":47,"value":3431}," for SDK method schemas; ",{"type":41,"tag":59,"props":3433,"children":3434},{},[3435],{"type":47,"value":2507},{"type":47,"value":3437}," for prose guides only",{"type":41,"tag":105,"props":3439,"children":3440},{},[3441,3446],{"type":41,"tag":59,"props":3442,"children":3443},{},[3444],{"type":47,"value":3445},"Invoke wix-design-system",{"type":47,"value":3447}," first when using WDS (prevents import errors)",{"type":41,"tag":84,"props":3449,"children":3451},{"id":3450},"documentation",[3452],{"type":47,"value":3453},"Documentation",{"type":41,"tag":50,"props":3455,"children":3456},{},[3457,3459,3463],{"type":47,"value":3458},"For links to official Wix CLI documentation for all extension types, see ",{"type":41,"tag":154,"props":3460,"children":3461},{"href":1599},[3462],{"type":47,"value":1602},{"type":47,"value":909},{"type":41,"tag":3465,"props":3466,"children":3467},"style",{},[3468],{"type":47,"value":3469},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"items":3471,"total":3625},[3472,3486,3498,3510,3525,3535,3546,3558,3575,3589,3596,3608],{"slug":3473,"name":3473,"fn":3474,"description":3475,"org":3476,"tags":3477,"stars":23,"repoUrl":24,"updatedAt":3485},"rp-discovery","discover source platform schema for migration","Discovers and documents the source platform schema (entities, fields, relationships) for a migration project. Use when capturing source structure before mapping to Wix.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3478,3481,3482],{"name":3479,"slug":3480,"type":13},"Data Modeling","data-modeling",{"name":3453,"slug":3450,"type":13},{"name":3483,"slug":3484,"type":13},"Migration","migration","2026-07-01T08:08:08.302261",{"slug":3487,"name":3487,"fn":3488,"description":3489,"org":3490,"tags":3491,"stars":23,"repoUrl":24,"updatedAt":3497},"rp-execute-import","execute migration pipelines to Wix","Runs the generated extract\u002Fimport pipeline and records execution results. Use when setup and codegen are complete and the user has approved the execution plan.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3492,3495,3496],{"name":3493,"slug":3494,"type":13},"Data Pipeline","data-pipeline",{"name":3483,"slug":3484,"type":13},{"name":9,"slug":8,"type":13},"2026-07-01T08:08:07.038962",{"slug":3499,"name":3499,"fn":3500,"description":3501,"org":3502,"tags":3503,"stars":23,"repoUrl":24,"updatedAt":3509},"rp-execute-setup","provision Wix site setup for migration","Verifies and provisions Wix-side setup required before import. Use after codegen when setup-requirements.md must be validated or executed against the target site.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3504,3507,3508],{"name":3505,"slug":3506,"type":13},"Deployment","deployment",{"name":3483,"slug":3484,"type":13},{"name":9,"slug":8,"type":13},"2026-07-01T08:08:04.475894",{"slug":3511,"name":3511,"fn":3512,"description":3513,"org":3514,"tags":3515,"stars":23,"repoUrl":24,"updatedAt":3524},"rp-import-codegen","generate migration code for Wix","Generates migration readers, transforms, and Wix writers from schema and mapping artifacts. Use when producing runnable extract\u002Fimport code under the migration project.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3516,3519,3522,3523],{"name":3517,"slug":3518,"type":13},"Automation","automation",{"name":3520,"slug":3521,"type":13},"Data Engineering","data-engineering",{"name":3483,"slug":3484,"type":13},{"name":9,"slug":8,"type":13},"2026-07-01T08:08:05.755188",{"slug":3526,"name":3526,"fn":3527,"description":3528,"org":3529,"tags":3530,"stars":23,"repoUrl":24,"updatedAt":3534},"rp-mapper","map source entities to Wix targets","Maps discovered source entities and fields to Wix targets and documents lossiness. Use when creating mapping-plan.md and mapping-summary.md after discovery.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3531,3532,3533],{"name":3479,"slug":3480,"type":13},{"name":3483,"slug":3484,"type":13},{"name":9,"slug":8,"type":13},"2026-07-01T08:08:01.958081",{"slug":3536,"name":3536,"fn":3537,"description":3538,"org":3539,"tags":3540,"stars":23,"repoUrl":24,"updatedAt":3545},"rp-orchestration","orchestrate Wix site migrations","Routes RePlatform source-to-Wix migrations to the next workflow step by inspecting migration project artifacts. Use when starting, continuing, or recovering a migration run.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3541,3542,3543,3544],{"name":3517,"slug":3518,"type":13},{"name":3505,"slug":3506,"type":13},{"name":3483,"slug":3484,"type":13},{"name":9,"slug":8,"type":13},"2026-07-01T08:08:09.570887",{"slug":3547,"name":3547,"fn":3548,"description":3549,"org":3550,"tags":3551,"stars":23,"repoUrl":24,"updatedAt":3557},"rp-setup-discovery","set up Wix environment prerequisites","Derives Wix environment prerequisites (apps, collections, schemas) from an approved mapping plan. Use after mapping review and before import code generation.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3552,3555,3556],{"name":3553,"slug":3554,"type":13},"Configuration","configuration",{"name":3479,"slug":3480,"type":13},{"name":9,"slug":8,"type":13},"2026-07-01T08:07:59.413698",{"slug":3559,"name":3559,"fn":3560,"description":3561,"org":3562,"tags":3563,"stars":23,"repoUrl":24,"updatedAt":3574},"rp-source-wordpress","capture data from WordPress and WooCommerce","WordPress and WooCommerce source adapter: REST capture, auth, pagination, and read contract for codegen. Use when the source platform is WordPress or WooCommerce.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3564,3565,3568,3571],{"name":3520,"slug":3521,"type":13},{"name":3566,"slug":3567,"type":13},"REST API","rest-api",{"name":3569,"slug":3570,"type":13},"WooCommerce","woocommerce",{"name":3572,"slug":3573,"type":13},"WordPress","wordpress","2026-07-01T08:08:00.69949",{"slug":3576,"name":3576,"fn":3577,"description":3578,"org":3579,"tags":3580,"stars":23,"repoUrl":24,"updatedAt":3588},"rp-target-wix","validate Wix API write operations","Wix target adapter with verified write primitives (wix-writers.js) and contract tests. Use when vendoring Wix writers, validating API shapes, or Wix provisioning mechanics.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3581,3584,3587],{"name":3582,"slug":3583,"type":13},"API Development","api-development",{"name":3585,"slug":3586,"type":13},"Testing","testing",{"name":9,"slug":8,"type":13},"2026-07-01T08:08:03.226054",{"slug":4,"name":4,"fn":5,"description":6,"org":3590,"tags":3591,"stars":23,"repoUrl":24,"updatedAt":25},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3592,3593,3594,3595],{"name":15,"slug":16,"type":13},{"name":18,"slug":19,"type":13},{"name":21,"slug":22,"type":13},{"name":9,"slug":8,"type":13},{"slug":3597,"name":3597,"fn":3598,"description":3599,"org":3600,"tags":3601,"stars":23,"repoUrl":24,"updatedAt":3607},"wix-auth","authenticate with Wix APIs","Authenticate with Wix to obtain an access token for calling Wix APIs. Use when an agent needs a valid Wix access token and has none, or when the stored token is expired.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3602,3603,3606],{"name":3582,"slug":3583,"type":13},{"name":3604,"slug":3605,"type":13},"Auth","auth",{"name":9,"slug":8,"type":13},"2026-07-07T06:47:46.95263",{"slug":387,"name":387,"fn":3609,"description":3610,"org":3611,"tags":3612,"stars":23,"repoUrl":24,"updatedAt":3624},"build UIs with Wix Design System","Wix Design System component reference. Use when building UI with @wix\u002Fdesign-system, choosing components, checking props and examples, or writing tests with component testkits. Triggers on \"what component\", \"how do I make\", \"WDS\", \"show me props\", \"testkit\", \"driver\", or component names like Button, Card, Modal, Box, Text.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3613,3616,3619,3620,3623],{"name":3614,"slug":3615,"type":13},"Design","design",{"name":3617,"slug":3618,"type":13},"Design System","design-system",{"name":21,"slug":22,"type":13},{"name":3621,"slug":3622,"type":13},"UI Components","ui-components",{"name":9,"slug":8,"type":13},"2026-04-29T05:33:44.561687",17,{"items":3627,"total":3672},[3628,3634,3640,3646,3653,3659,3666],{"slug":3473,"name":3473,"fn":3474,"description":3475,"org":3629,"tags":3630,"stars":23,"repoUrl":24,"updatedAt":3485},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3631,3632,3633],{"name":3479,"slug":3480,"type":13},{"name":3453,"slug":3450,"type":13},{"name":3483,"slug":3484,"type":13},{"slug":3487,"name":3487,"fn":3488,"description":3489,"org":3635,"tags":3636,"stars":23,"repoUrl":24,"updatedAt":3497},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3637,3638,3639],{"name":3493,"slug":3494,"type":13},{"name":3483,"slug":3484,"type":13},{"name":9,"slug":8,"type":13},{"slug":3499,"name":3499,"fn":3500,"description":3501,"org":3641,"tags":3642,"stars":23,"repoUrl":24,"updatedAt":3509},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3643,3644,3645],{"name":3505,"slug":3506,"type":13},{"name":3483,"slug":3484,"type":13},{"name":9,"slug":8,"type":13},{"slug":3511,"name":3511,"fn":3512,"description":3513,"org":3647,"tags":3648,"stars":23,"repoUrl":24,"updatedAt":3524},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3649,3650,3651,3652],{"name":3517,"slug":3518,"type":13},{"name":3520,"slug":3521,"type":13},{"name":3483,"slug":3484,"type":13},{"name":9,"slug":8,"type":13},{"slug":3526,"name":3526,"fn":3527,"description":3528,"org":3654,"tags":3655,"stars":23,"repoUrl":24,"updatedAt":3534},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3656,3657,3658],{"name":3479,"slug":3480,"type":13},{"name":3483,"slug":3484,"type":13},{"name":9,"slug":8,"type":13},{"slug":3536,"name":3536,"fn":3537,"description":3538,"org":3660,"tags":3661,"stars":23,"repoUrl":24,"updatedAt":3545},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3662,3663,3664,3665],{"name":3517,"slug":3518,"type":13},{"name":3505,"slug":3506,"type":13},{"name":3483,"slug":3484,"type":13},{"name":9,"slug":8,"type":13},{"slug":3547,"name":3547,"fn":3548,"description":3549,"org":3667,"tags":3668,"stars":23,"repoUrl":24,"updatedAt":3557},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3669,3670,3671],{"name":3553,"slug":3554,"type":13},{"name":3479,"slug":3480,"type":13},{"name":9,"slug":8,"type":13},16]