@wix/agent-skills 1.7.0 → 1.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -7
- package/package.json +1 -1
- package/skills/wix-app/SKILL.md +2 -0
- package/skills/wix-app/references/EDITOR_REACT_COMPONENT.md +2 -1
- package/skills/wix-app/references/STORES_VERSIONING.md +1 -0
- package/skills/wix-app/references/editor-react-component/ACCESSIBILITY.md +14 -0
- package/skills/wix-app/references/editor-react-component/REACT-GUIDELINES.md +11 -6
- package/skills/wix-app/references/editor-react-component/REACT-PATTERNS.md +3 -17
- package/skills/wix-app/references/editor-react-component/SSR.md +119 -0
- package/skills/wix-design-system/SKILL.md +5 -1
- package/skills/wix-headless/SKILL.md +55 -32
- package/skills/wix-headless/references/BUILD-astro.md +244 -0
- package/skills/wix-headless/references/BUILD-own-build.md +167 -0
- package/skills/wix-headless/references/BUILD.md +50 -252
- package/skills/wix-headless/references/DESIGN_SYSTEM.md +94 -34
- package/skills/wix-headless/references/DISCOVERY-connect.md +55 -0
- package/skills/wix-headless/references/DISCOVERY-create.md +238 -0
- package/skills/wix-headless/references/DISCOVERY.md +41 -422
- package/skills/wix-headless/references/PLAN-connect.md +19 -0
- package/skills/wix-headless/references/PLAN-create.md +17 -0
- package/skills/wix-headless/references/PLAN.md +37 -27
- package/skills/wix-headless/references/SEED.md +27 -18
- package/skills/wix-headless/references/SETUP.md +32 -213
- package/skills/wix-headless/references/astro/blog/BLOG_PAGES.md +5 -4
- package/skills/wix-headless/references/astro/bookings/COMPONENTS.md +45 -0
- package/skills/wix-headless/references/astro/bookings/SERVICES_PAGES.md +58 -0
- package/skills/wix-headless/references/astro/cms/CMS_FOUNDATIONS.md +5 -5
- package/skills/wix-headless/references/astro/cms/FAQ_KNOWLEDGE_BASE.md +10 -10
- package/skills/wix-headless/references/astro/cms/PORTFOLIO.md +12 -13
- package/skills/wix-headless/references/astro/cms/RESOURCE_LIBRARY.md +10 -12
- package/skills/wix-headless/references/astro/cms/TEAM_DIRECTORY.md +8 -8
- package/skills/wix-headless/references/astro/designer/INSTRUCTIONS.md +47 -27
- package/skills/wix-headless/references/astro/ecom/CART_PAGES.md +7 -8
- package/skills/wix-headless/references/astro/ecom/CART_WIRING.md +5 -5
- package/skills/wix-headless/references/astro/ecom/COMPONENTS_CSS.md +3 -3
- package/skills/wix-headless/references/astro/forms/CONTACT_FORM.md +5 -19
- package/skills/wix-headless/references/astro/gift-cards/COMPONENTS.md +2 -2
- package/skills/wix-headless/references/astro/gift-cards/PAGES.md +1 -1
- package/skills/wix-headless/references/astro/stores/BACK_IN_STOCK.md +6 -6
- package/skills/wix-headless/references/astro/stores/CATEGORY_PAGES.md +4 -4
- package/skills/wix-headless/references/astro/stores/COMPONENTS_CSS.md +3 -3
- package/skills/wix-headless/references/astro/stores/HOME_AND_NAV.md +3 -3
- package/skills/wix-headless/references/astro/stores/PRODUCT_PAGES.md +9 -9
- package/skills/wix-headless/references/astro/stores/SHARED_WIRING.md +5 -4
- package/skills/wix-headless/references/astro/templates/Footer.astro +1 -1
- package/skills/wix-headless/references/astro/templates/Layout.astro +1 -1
- package/skills/wix-headless/references/astro/templates/Navigation.astro +1 -1
- package/skills/wix-headless/references/astro/templates/astro.config.mjs +1 -1
- package/skills/wix-headless/references/astro/templates/bookings/AvailabilityCalendar.tsx +233 -0
- package/skills/wix-headless/references/astro/templates/bookings/BookingForm.tsx +136 -0
- package/skills/wix-headless/references/astro/templates/bookings/SeoTags.astro +25 -0
- package/skills/wix-headless/references/astro/templates/bookings/ServiceBookingFlow.tsx +54 -0
- package/skills/wix-headless/references/astro/templates/bookings/ServiceCard.astro +45 -0
- package/skills/wix-headless/references/astro/templates/bookings/booking-confirmation.astro +49 -0
- package/skills/wix-headless/references/astro/templates/bookings/bookingDriver.ts +245 -0
- package/skills/wix-headless/references/astro/templates/bookings/components-bookings.css +356 -0
- package/skills/wix-headless/references/astro/templates/bookings/services/[slug].astro +133 -0
- package/skills/wix-headless/references/astro/templates/bookings/services/index.astro +73 -0
- package/skills/wix-headless/references/astro/templates/global.css +2 -2
- package/skills/wix-headless/references/astro/templates/index.astro +1 -1
- package/skills/wix-headless/references/blog/BLOG_CONTENT.md +19 -9
- package/skills/wix-headless/references/blog/INSTRUCTIONS.md +3 -3
- package/skills/wix-headless/references/bookings/FLOW.md +185 -0
- package/skills/wix-headless/references/bookings/INSTRUCTIONS.md +90 -0
- package/skills/wix-headless/references/bookings/SERVICES_DATA.md +295 -0
- package/skills/wix-headless/references/cms/CMS_FOUNDATIONS.md +4 -2
- package/skills/wix-headless/references/cms/INSTRUCTIONS.md +27 -1
- package/skills/wix-headless/references/commands/known-apps.json +2 -1
- package/skills/wix-headless/references/custom/CONNECTION_PLAN.md +142 -0
- package/skills/wix-headless/references/custom/INSTRUCTIONS.md +71 -21
- package/skills/wix-headless/references/custom/blog/WIRING.md +52 -0
- package/skills/wix-headless/references/custom/bookings/WIRING.md +146 -0
- package/skills/wix-headless/references/custom/cms/WIRING.md +97 -0
- package/skills/wix-headless/references/custom/ecom/WIRING.md +67 -0
- package/skills/wix-headless/references/custom/forms/WIRING.md +101 -0
- package/skills/wix-headless/references/custom/stores/WIRING.md +80 -0
- package/skills/wix-headless/references/ecom/INSTRUCTIONS.md +5 -5
- package/skills/wix-headless/references/forms/INSTRUCTIONS.md +2 -2
- package/skills/wix-headless/references/gift-cards/INSTRUCTIONS.md +3 -3
- package/skills/wix-headless/references/images/INSTRUCTIONS.md +16 -15
- package/skills/wix-headless/references/seed-recipes.md +2 -2
- package/skills/wix-headless/references/shared/AGENTS_MD.md +47 -0
- package/skills/wix-headless/references/shared/AUTHENTICATION.md +3 -5
- package/skills/wix-headless/references/shared/DESIGN_MD.md +85 -0
- package/skills/wix-headless/references/shared/IMAGE_GENERATION.md +29 -28
- package/skills/wix-headless/references/shared/IMPLEMENTER.md +87 -27
- package/skills/wix-headless/references/shared/PRODUCTION_SHARP_EDGES.md +2 -2
- package/skills/wix-headless/references/shared/RETURN_CONTRACT.md +24 -313
- package/skills/wix-headless/references/shared/STYLING.md +8 -18
- package/skills/wix-headless/references/stores/INSTRUCTIONS.md +39 -9
- package/skills/wix-headless/references/stores/PRODUCT_CATALOG_DATA.md +17 -14
- package/skills/wix-headless/references/verticals/_schema.json +1 -1
- package/skills/wix-headless/references/verticals/_schema.md +3 -3
- package/skills/wix-headless/references/verticals/blog.md +1 -1
- package/skills/wix-headless/references/verticals/bookings.md +39 -0
- package/skills/wix-headless/references/verticals/cms.md +1 -1
- package/skills/wix-headless/references/verticals/ecom.md +2 -2
- package/skills/wix-headless/references/verticals/gift-cards.md +1 -1
- package/skills/wix-headless/references/verticals/stores.md +1 -1
- package/skills/wix-headless/scripts/check-manifest.mjs +143 -6
- package/skills/wix-headless/scripts/compose.mjs +540 -0
- package/skills/wix-headless/scripts/emit-design-tokens.mjs +128 -51
- package/skills/wix-headless/scripts/flatten.sh +61 -0
- package/skills/wix-headless/scripts/generate-images.mjs +242 -0
- package/skills/wix-headless/scripts/scaffold.sh +47 -16
- package/skills/wix-headless/scripts/write-decorative-json.mjs +62 -0
- package/skills/wix-manage/SKILL.md +13 -1
- package/skills/wix-manage/references/app-installation/install-wix-apps.md +3 -27
- package/skills/wix-manage/references/blog/how-to-create-blog-posts.md +1 -1
- package/skills/wix-manage/references/bookings/create-appointment-service.md +266 -0
- package/skills/wix-manage/references/bookings/create-booking-service-from-prompt.md +37 -0
- package/skills/wix-manage/references/bookings/create-class-service.md +245 -0
- package/skills/wix-manage/references/bookings/create-course-service.md +249 -0
- package/skills/wix-manage/references/cms/cms-data-items-crud.md +3 -2
- package/skills/wix-manage/references/cms/cms-references-and-relationships.md +1 -1
- package/skills/wix-manage/references/cms/cms-schema-management.md +2 -2
- package/skills/wix-manage/references/domains/domain-search-and-purchase.md +10 -7
- package/skills/wix-manage/references/forms/create-form.md +49 -1
- package/skills/wix-manage/references/stores/bulk-create-products-with-options.md +1 -1
- package/skills/wix-manage/references/stores/create-product-from-image.md +154 -2
- package/skills/wix-manage/references/stores/setup-online-store-catalog-v3.md +1 -1
- package/skills/wix-headless/references/astro/COMPOSE.md +0 -142
- package/skills/wix-headless/scripts/finalize-run-json.mjs +0 -141
- package/skills/wix-headless/scripts/init-site-json.mjs +0 -101
- package/skills/wix-headless/scripts/preview.sh +0 -45
- package/skills/wix-headless/scripts/release.sh +0 -73
package/README.md
CHANGED
|
@@ -17,15 +17,11 @@ In [Claude Code](https://docs.anthropic.com/en/docs/claude-code), run:
|
|
|
17
17
|
/plugin install wix@wix
|
|
18
18
|
```
|
|
19
19
|
|
|
20
|
-
### Codex
|
|
20
|
+
### Codex
|
|
21
21
|
|
|
22
|
-
|
|
22
|
+
**Codex App** — [Install the Wix plugin](https://chatgpt.com/plugins/share/b15215ad8e954c96a1108d176d53f572).
|
|
23
23
|
|
|
24
|
-
|
|
25
|
-
codex plugin marketplace add wix/skills
|
|
26
|
-
```
|
|
27
|
-
|
|
28
|
-
Then in Codex CLI, run `/plugins`, select **Wix**, and choose **Install Plugin**.
|
|
24
|
+
**Codex CLI** — run `/plugins`, select **Wix**, and choose **Install Plugin**.
|
|
29
25
|
|
|
30
26
|
### VS Code Plugin
|
|
31
27
|
|
package/package.json
CHANGED
package/skills/wix-app/SKILL.md
CHANGED
|
@@ -25,6 +25,7 @@ Helps build extensions for Wix CLI applications. Covers all extension types: das
|
|
|
25
25
|
- [ ] **Step 4a:** Scaffolded each CLI-supported extension via `wix generate --params`
|
|
26
26
|
- [ ] **Step 4b:** Filled in business logic in the generated files
|
|
27
27
|
- [ ] Invoked `wix-design-system` skill ONLY before editing the first `.tsx`/`.jsx` file that imports `@wix/design-system`. Skip for backend-only or data-only extensions.
|
|
28
|
+
- [ ] WDS: imported `@wix/design-system/styles.global.css` in the main component entry file (`page.tsx`, modal `.tsx`, etc.) — not child/tab/helper files.
|
|
28
29
|
- [ ] **Step 5:** Ran validation (see [Validation](#validation))
|
|
29
30
|
- [ ] Dependencies installed
|
|
30
31
|
- [ ] TypeScript compiled
|
|
@@ -257,6 +258,7 @@ If the command fails because of unknown or invalid params, run `npx wix schema g
|
|
|
257
258
|
Open every path returned in `newFiles` and replace stubbed handler bodies / UI / queries with the user's actual logic, guided by the extension reference file's API and configuration sections.
|
|
258
259
|
|
|
259
260
|
- ⚠️ MANDATORY when using WDS: Invoke the `wix-design-system` skill **before editing your first `.tsx`/`.jsx` file that imports `@wix/design-system`**. Do NOT invoke it preemptively for backend-only or data-only jobs — it adds large content to context that you won't use.
|
|
261
|
+
- ⚠️ MANDATORY when using WDS: Add `import "@wix/design-system/styles.global.css";` in the **main component** entry file (`page.tsx`, modal `.tsx`, etc.) — not in child/tab/helper files.
|
|
260
262
|
- ⚠️ MANDATORY when using Data Collections: Use the EXACT collection ID from `idSuffix` (case-sensitive). If `idSuffix` is `"product-recommendations"`, use `<app-namespace>/product-recommendations` NOT `productRecommendations`.
|
|
261
263
|
|
|
262
264
|
### Step 5: Run Validation
|
|
@@ -72,7 +72,8 @@ Topic-focused references (rules + patterns + common mistakes in one place):
|
|
|
72
72
|
- [`editor-react-component/DIRECTIONALITY.md`](editor-react-component/DIRECTIONALITY.md) — RTL/LTR rules and patterns
|
|
73
73
|
- [`editor-react-component/PROPS-VS-CSS.md`](editor-react-component/PROPS-VS-CSS.md) — What should be a React prop vs CSS
|
|
74
74
|
- [`editor-react-component/COMPONENT-API.md`](editor-react-component/COMPONENT-API.md) — Props structure, elementProps, data types, file splitting, containers, array props
|
|
75
|
-
- [`editor-react-component/
|
|
75
|
+
- [`editor-react-component/SSR.md`](editor-react-component/SSR.md) — Server-side rendering rules (mandatory)
|
|
76
|
+
- [`editor-react-component/REACT-PATTERNS.md`](editor-react-component/REACT-PATTERNS.md) — CSS rules, remaining common mistakes
|
|
76
77
|
|
|
77
78
|
## CSS guidelines
|
|
78
79
|
|
|
@@ -310,6 +310,7 @@ For the full table see the [Catalog V1 to V3 Migration Guide](https://dev.wix.co
|
|
|
310
310
|
| `manageVariants: false` (customizations) | `modifiers[i]` |
|
|
311
311
|
| `collectionIds[i]` | `directCategories[i].id` |
|
|
312
312
|
| `ribbon`, `brand` (string) | `ribbon.name`, `brand.name` (managed via `ribbonsV3` / `brandsV3`) |
|
|
313
|
+
| `media.mainMedia.image.url` (main image URL) | `media.main.image ?? media.main.url` — in V3, `ProductMedia.image` is a `string` (Wix-hosted URL), `url` is a `string` (external URL); check both |
|
|
313
314
|
|
|
314
315
|
**Pricing model** — V1 had a `discount` object; V3 removed it. Discounts are now expressed by the relationship between two fields on the variant: `actualPrice` (required, what the customer pays) vs `compareAtPrice` (optional, original price shown struck through). With discount: V1 `price`/`discountedPrice` → V3 `compareAtPrice`/`actualPrice`. Without discount: V1 `price` → V3 `actualPrice`, leave `compareAtPrice` empty.
|
|
315
316
|
|
|
@@ -13,6 +13,20 @@ Rules and patterns for ARIA accessibility support in Editor React components.
|
|
|
13
13
|
- The `A11y` type includes: `ariaLabel`, `ariaDescribedBy`, `ariaLabelledBy`, `role`, `ariaHidden`, `ariaLive`, and all other ARIA attributes.
|
|
14
14
|
- Users provide ARIA values through the `a11y` prop: `<Component a11y={{ ariaLabel: "..." }} />`
|
|
15
15
|
|
|
16
|
+
### Stable IDs for Element Relationships
|
|
17
|
+
|
|
18
|
+
ARIA relationships (`aria-controls`, `aria-labelledby`, `aria-describedby`) and `htmlFor` need element ids. Generate them with `useStableId` from `@wix/react-component-utils` — passing the `id` prop as the override — never `Math.random()`, a manual counter, or a bare `React.useId()` (those break SSR/hydration). See [`SSR.md`](SSR.md) for the full rule.
|
|
19
|
+
|
|
20
|
+
```tsx
|
|
21
|
+
import { useStableId } from '@wix/react-component-utils';
|
|
22
|
+
|
|
23
|
+
const rootId = useStableId(id);
|
|
24
|
+
const panelId = `${rootId}-panel`;
|
|
25
|
+
|
|
26
|
+
<button aria-controls={panelId}>{label}</button>
|
|
27
|
+
<div id={panelId} role="tabpanel">{content}</div>
|
|
28
|
+
```
|
|
29
|
+
|
|
16
30
|
### ARIA Label Rules
|
|
17
31
|
|
|
18
32
|
ARIA labels are user-facing content and must NEVER be hardcoded as string literals in JSX.
|
|
@@ -8,7 +8,8 @@ This guide defines rules and guidance on **how to implement** production-quality
|
|
|
8
8
|
- [`DIRECTIONALITY.md`](DIRECTIONALITY.md) — RTL/LTR rules and patterns
|
|
9
9
|
- [`PROPS-VS-CSS.md`](PROPS-VS-CSS.md) — What should be a React prop vs CSS
|
|
10
10
|
- [`COMPONENT-API.md`](COMPONENT-API.md) — Props structure, elementProps, data types, file splitting, containers, array props
|
|
11
|
-
- [`
|
|
11
|
+
- [`SSR.md`](SSR.md) — Server-side rendering rules (mandatory)
|
|
12
|
+
- [`REACT-PATTERNS.md`](REACT-PATTERNS.md) — CSS rules, common mistakes
|
|
12
13
|
|
|
13
14
|
## React 18 features are not supported
|
|
14
15
|
|
|
@@ -42,6 +43,10 @@ Direction support is mandatory — see [`DIRECTIONALITY.md`](DIRECTIONALITY.md).
|
|
|
42
43
|
|
|
43
44
|
See [`ACCESSIBILITY.md`](ACCESSIBILITY.md) for full rules and patterns.
|
|
44
45
|
|
|
46
|
+
### SSR Safety
|
|
47
|
+
|
|
48
|
+
Components are server-rendered, then hydrated — they MUST render correctly, completely, and identically on the server. See [`SSR.md`](SSR.md) for full rules and patterns.
|
|
49
|
+
|
|
45
50
|
### TypeScript
|
|
46
51
|
|
|
47
52
|
- All components must be fully typed
|
|
@@ -67,11 +72,11 @@ All components MUST follow these patterns:
|
|
|
67
72
|
|
|
68
73
|
**1. SSR-Safe Implementation**
|
|
69
74
|
|
|
70
|
-
- NO browser APIs at module scope (window, document, navigator, etc.)
|
|
71
|
-
-
|
|
72
|
-
-
|
|
75
|
+
- NO browser APIs at module scope or during render (window, document, navigator, etc.) — guard inside `useEffect`
|
|
76
|
+
- First render must be complete and deterministic; effects are client-only enhancement
|
|
77
|
+
- Internal ids via `useStableId`; NO `useLayoutEffect`
|
|
73
78
|
|
|
74
|
-
See [`
|
|
79
|
+
See [`SSR.md`](SSR.md) for full rules and code examples.
|
|
75
80
|
|
|
76
81
|
**2. Clean Code**
|
|
77
82
|
|
|
@@ -162,6 +167,6 @@ See [`PROPS-VS-CSS.md`](PROPS-VS-CSS.md) and [`COMPONENT-API.md`](COMPONENT-API.
|
|
|
162
167
|
|
|
163
168
|
**Phase 1: Analysis** — Parse information, map component structure (see Part 0)
|
|
164
169
|
|
|
165
|
-
**Phase 2: Component File** — Apply all §1.1 mandatory features and §1.2 implementation standards
|
|
170
|
+
**Phase 2: Component File** — Apply all §1.1 mandatory features and §1.2 implementation standards; verify SSR safety against [`SSR.md`](SSR.md)
|
|
166
171
|
|
|
167
172
|
**Phase 3: Styles** — Apply Part 2 SCSS rules
|
|
@@ -6,23 +6,7 @@ Code patterns and common mistakes for Editor React components.
|
|
|
6
6
|
|
|
7
7
|
## 1.1 SSR-Safe Implementation
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
**❌ Wrong:**
|
|
12
|
-
|
|
13
|
-
```typescript
|
|
14
|
-
const userAgent = window.navigator.userAgent;
|
|
15
|
-
```
|
|
16
|
-
|
|
17
|
-
**✅ Correct:**
|
|
18
|
-
|
|
19
|
-
```typescript
|
|
20
|
-
useEffect(() => {
|
|
21
|
-
if (typeof window !== "undefined") {
|
|
22
|
-
const userAgent = window.navigator.userAgent;
|
|
23
|
-
}
|
|
24
|
-
}, []);
|
|
25
|
-
```
|
|
9
|
+
Components are server-rendered then hydrated. See [`SSR.md`](SSR.md) for the full rules and code examples (browser globals, complete first render, deterministic output, `useStableId`, no `useLayoutEffect`).
|
|
26
10
|
|
|
27
11
|
## 1.2 Element Visibility (Platform-Managed)
|
|
28
12
|
|
|
@@ -102,6 +86,8 @@ different — they go through a JS-toggled modifier class; see
|
|
|
102
86
|
|
|
103
87
|
## 3.2 Browser APIs at module scope
|
|
104
88
|
|
|
89
|
+
See [`SSR.md`](SSR.md) for the full SSR rules.
|
|
90
|
+
|
|
105
91
|
**❌ Wrong:**
|
|
106
92
|
|
|
107
93
|
```typescript
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
# Server-Side Rendering (SSR)
|
|
2
|
+
|
|
3
|
+
Rules and patterns for SSR-safe Editor React components.
|
|
4
|
+
|
|
5
|
+
Editor React components are server-rendered and then hydrated on the client — every component MUST render correctly, completely, and identically on the server. SSR safety is mandatory for every component.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Rules
|
|
10
|
+
|
|
11
|
+
### No browser globals at module scope or during render
|
|
12
|
+
|
|
13
|
+
`window`, `document`, `navigator`, `localStorage`, `sessionStorage`, `matchMedia`, `IntersectionObserver`, `ResizeObserver`, and other DOM/BOM APIs do not exist on the server. Never touch them at module scope or in the render body. Access them only inside `useEffect`, optionally guarded with `typeof window !== 'undefined'`.
|
|
14
|
+
|
|
15
|
+
**❌ Wrong:**
|
|
16
|
+
|
|
17
|
+
```typescript
|
|
18
|
+
const userAgent = window.navigator.userAgent;
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
**✅ Correct:**
|
|
22
|
+
|
|
23
|
+
```typescript
|
|
24
|
+
useEffect(() => {
|
|
25
|
+
if (typeof window !== "undefined") {
|
|
26
|
+
const userAgent = window.navigator.userAgent;
|
|
27
|
+
}
|
|
28
|
+
}, []);
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
### First render must be complete
|
|
32
|
+
|
|
33
|
+
Render all parts unconditionally — never gate structural elements behind effect-set state. Initialize `useState` to a valid, server-renderable default so the first (server) render already shows the final structure. Element visibility is platform-managed; see [`PROPS-VS-CSS.md`](PROPS-VS-CSS.md) and [`REACT-PATTERNS.md`](REACT-PATTERNS.md) §1.2.
|
|
34
|
+
|
|
35
|
+
**❌ Wrong — content only appears after an effect runs (missing on the server):**
|
|
36
|
+
|
|
37
|
+
```tsx
|
|
38
|
+
const [items, setItems] = useState<Array<Item>>([]);
|
|
39
|
+
useEffect(() => {
|
|
40
|
+
setItems(buildItems(props));
|
|
41
|
+
}, [props]);
|
|
42
|
+
return <ul>{items.map(/* ... */)}</ul>; // empty on the server
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
**✅ Correct — derive during render so it exists on the first pass:**
|
|
46
|
+
|
|
47
|
+
```tsx
|
|
48
|
+
const items = buildItems(props);
|
|
49
|
+
return <ul>{items.map(/* ... */)}</ul>;
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
### Deterministic render
|
|
53
|
+
|
|
54
|
+
The same props MUST produce the same markup on the server and the client. No `Math.random()`, `Date.now()`, `new Date()`, or locale/timezone-dependent output during render — these differ across environments and break hydration.
|
|
55
|
+
|
|
56
|
+
**❌ Wrong:**
|
|
57
|
+
|
|
58
|
+
```tsx
|
|
59
|
+
<span>{new Date().toLocaleString()}</span>
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
**✅ Correct — derive from props, or compute in an effect:**
|
|
63
|
+
|
|
64
|
+
```tsx
|
|
65
|
+
<span>{formatDate(props.timestamp)}</span>
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
### Stable IDs via `useStableId`
|
|
69
|
+
|
|
70
|
+
When a component needs an internal id (ARIA wiring such as `aria-controls` / `aria-labelledby`, or `htmlFor`), generate it with `useStableId` from `@wix/react-component-utils`. Never use `Math.random()`, a manual counter, or a bare `React.useId()` — those break hydration or are not available across runtimes. Pass the component's `id` prop as the override so a caller-supplied id wins, then derive child ids from the result.
|
|
71
|
+
|
|
72
|
+
**✅ Correct:**
|
|
73
|
+
|
|
74
|
+
```tsx
|
|
75
|
+
import { useStableId } from '@wix/react-component-utils';
|
|
76
|
+
|
|
77
|
+
const rootId = useStableId(id);
|
|
78
|
+
const panelId = `${rootId}-panel`;
|
|
79
|
+
|
|
80
|
+
<button aria-controls={panelId}>{label}</button>
|
|
81
|
+
<div id={panelId} role="tabpanel">{content}</div>
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
**❌ Wrong:**
|
|
85
|
+
|
|
86
|
+
```tsx
|
|
87
|
+
const panelId = `tab-${Math.random()}`; // ❌ differs every render
|
|
88
|
+
const panelId = React.useId(); // ❌ use the useStableId util instead
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
### No `useLayoutEffect`
|
|
92
|
+
|
|
93
|
+
`useLayoutEffect` does nothing on the server and triggers a React warning. Use `useEffect` for client-only work.
|
|
94
|
+
|
|
95
|
+
**❌ Wrong:**
|
|
96
|
+
|
|
97
|
+
```tsx
|
|
98
|
+
useLayoutEffect(() => { measure(); }, []);
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
**✅ Correct:**
|
|
102
|
+
|
|
103
|
+
```tsx
|
|
104
|
+
useEffect(() => { measure(); }, []);
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
### Effects are client-only enhancement
|
|
108
|
+
|
|
109
|
+
`useEffect` runs only after hydration, never on the server. Use effects to enhance — not to produce the initial UI. The server-rendered default state must already look correct before any effect runs.
|
|
110
|
+
|
|
111
|
+
---
|
|
112
|
+
|
|
113
|
+
## SSR Checklist
|
|
114
|
+
|
|
115
|
+
- [ ] No browser globals at module scope or in the render body — guarded inside `useEffect` only
|
|
116
|
+
- [ ] All parts render unconditionally on the first pass; state initialized to a server-safe default
|
|
117
|
+
- [ ] Render output is deterministic — no `Math.random()` / `Date.now()` / `new Date()` / locale-dependent output during render
|
|
118
|
+
- [ ] Internal ids come from `useStableId(id)`, never random values, counters, or bare `React.useId()`
|
|
119
|
+
- [ ] No `useLayoutEffect`
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: wix-design-system
|
|
3
|
-
description: Wix Design System component reference. Use when building UI with @wix/design-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,
|
|
3
|
+
description: Wix Design System component reference. Use when building UI with @wix/design-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, Box, Text.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# WDS Documentation Navigator
|
|
@@ -127,3 +127,7 @@ Only use SP tokens for `gap`, `padding`, `margin` — not for width/height.
|
|
|
127
127
|
import { Button, Card, Image } from "@wix/design-system";
|
|
128
128
|
import { Add, Edit, Delete } from "@wix/wix-ui-icons-common";
|
|
129
129
|
```
|
|
130
|
+
|
|
131
|
+
### Troubleshooting
|
|
132
|
+
|
|
133
|
+
- **Components render unstyled** (plain HTML look, missing WDS spacing/typography): add `import "@wix/design-system/styles.global.css";` once to the root/main component (e.g. `page.tsx`, modal entry) — not child/tab/helper files.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: wix-headless
|
|
3
|
-
description: "Build a complete Wix Managed Headless site from a single prompt, OR connect an existing project (HTML/JSX/Vite app, Claude Design output, etc.) to Wix Headless for hosting + Business Solutions. Entry point for both: (1) new-site requests — runs discovery, design, feature wiring, and preview; and (2) existing-project requests — runs `npm create @wix/new@latest init`, analyzes the project for needed Business Solutions, installs apps, **wires the Wix SDK into the existing source files so each installed app actually powers its corresponding feature**, and releases. Triggers: build me a site, create a website, make me a website, new website, online store, I want to sell X, start a business online, launch a site, ecommerce, portfolio, business website, sell online, online shop, connect this to Wix Headless, add Wix Headless to this project, host this on Wix, deploy this to Wix, implement the features of this project using Wix Headless. Use this skill instead of the WixSiteBuilder MCP tool for new-site requests."
|
|
3
|
+
description: "Build a complete Wix Managed Headless site from a single prompt, OR connect an existing project (HTML/JSX/Vite app, Claude Design output, etc.) to Wix Headless for hosting + Business Solutions. Entry point for both: (1) new-site requests — runs discovery, design, feature wiring, and preview; and (2) existing-project requests — runs `npm create @wix/new@latest init`, analyzes the project for needed Business Solutions, installs apps, **wires the Wix SDK into the existing source files so each installed app actually powers its corresponding feature**, and releases. Triggers: build me a site, create a website, make me a website, new website, online store, I want to sell X, start a business online, launch a site, ecommerce, portfolio, business website, sell online, online shop, take bookings, book appointments, appointment scheduling, let clients book online, site for my salon/spa/clinic/studio, sign up for classes or sessions, connect this to Wix Headless, add Wix Headless to this project, host this on Wix, deploy this to Wix, implement the features of this project using Wix Headless. Use this skill instead of the WixSiteBuilder MCP tool for new-site requests."
|
|
4
4
|
allowed-tools:
|
|
5
5
|
- Bash(cd *)
|
|
6
6
|
- Bash(npx @wix/cli@latest *)
|
|
@@ -28,41 +28,53 @@ allowed-tools:
|
|
|
28
28
|
|
|
29
29
|
# Wix Headless
|
|
30
30
|
|
|
31
|
-
**Run flow is owned by the conductor, split at the approval gate: `references/PLAN.md`** (pre-approval —
|
|
31
|
+
**Run flow is owned by the conductor, split at the approval gate: `references/PLAN.md`** (pre-approval — routes on **operation** (create/connect), the Discovery questions, the plan + approval gate, the latency-hiding background dispatches) **then `references/BUILD.md`** (post-approval — routes on **framework** (`frontendBuild`); Setup → Seed → the build wave (merged Components + Pages per vertical) → Build → Release). The domain/step files (`DISCOVERY.md`, `SETUP.md`, `SEED.md`, `DESIGN_SYSTEM.md`, the per-vertical references) describe only *what* each step does; they do not name the sequence. **Start a run by opening `PLAN.md`**; open `BUILD.md` when the user approves the plan. All site operations use `npx @wix/cli@latest token` + `curl` — no MCP.
|
|
32
32
|
|
|
33
33
|
> **Explicit invocation only.** Do not auto-route on generic "build me a site" prompts; production `wix-headless` should win those unless the user names this skill.
|
|
34
34
|
|
|
35
35
|
## Path resolution — read this first
|
|
36
36
|
|
|
37
|
-
Your CWD at runtime is the **project directory**
|
|
37
|
+
Your CWD at runtime is the **project directory, which is also the site-root** — `scaffold.sh` flattens the scaffolded project into the current directory, so the run is a **single folder with a single `.wix/`** (no nested project, no parent/child split). `<site-root>` and `<project-dir>` are the **same path**: the run's CWD. The end-of-run `AGENTS.md` (project root) and the project's own files (`package.json`, `src/`, `wix.config.json`, `.wix/design-tokens.css`, …) all live there — **never `cd` into a subdir, never look in a parent for `.wix`**. Compute `<SKILL_ROOT>` from this file: `<SKILL_ROOT>/SKILL.md` — strip `/SKILL.md`; hold the absolute path in session scratch. (Hold `<site-root>` from `SETUP.md` Step 1; the connect/`init` path is likewise single-folder in CWD.)
|
|
38
38
|
|
|
39
39
|
| What | Absolute path |
|
|
40
40
|
|---|---|
|
|
41
|
-
| Discovery flow | `<SKILL_ROOT>/references/DISCOVERY.md` |
|
|
41
|
+
| Discovery flow (router on OPERATION → operation files) | `<SKILL_ROOT>/references/DISCOVERY.md` → `DISCOVERY-create.md` (create) / `DISCOVERY-connect.md` (connect) |
|
|
42
42
|
| Setup flow | `<SKILL_ROOT>/references/SETUP.md` |
|
|
43
43
|
| Seed flow | `<SKILL_ROOT>/references/SEED.md` |
|
|
44
|
-
| Pre-approval funnel (plan) | `<SKILL_ROOT>/references/PLAN.md` |
|
|
45
|
-
| Post-approval build | `<SKILL_ROOT>/references/BUILD.md` |
|
|
44
|
+
| Pre-approval funnel (plan; router on OPERATION → operation files) | `<SKILL_ROOT>/references/PLAN.md` → `PLAN-create.md` (create) / `PLAN-connect.md` (connect) |
|
|
45
|
+
| Post-approval build (router on FRAMEWORK → framework files) | `<SKILL_ROOT>/references/BUILD.md` → `BUILD-astro.md` (`frontendBuild: wix`) / `BUILD-own-build.md` (`frontendBuild: none`/`own`) |
|
|
46
46
|
| Seed recipe map (human ref) | `<SKILL_ROOT>/references/seed-recipes.md` |
|
|
47
47
|
| Auth + REST headers | `<SKILL_ROOT>/references/shared/AUTHENTICATION.md` |
|
|
48
48
|
| Public doc endpoints | `<SKILL_ROOT>/references/shared/DOCS_SEARCH.md` |
|
|
49
49
|
| Return contract | `<SKILL_ROOT>/references/shared/RETURN_CONTRACT.md` |
|
|
50
50
|
| Implementer shared behavior | `<SKILL_ROOT>/references/shared/IMPLEMENTER.md` |
|
|
51
51
|
| Image generation | `<SKILL_ROOT>/references/shared/IMAGE_GENERATION.md` |
|
|
52
|
-
| Design-system Designer (
|
|
53
|
-
|
|
|
52
|
+
| Design-system Designer (authors the DESIGN.md) | `<SKILL_ROOT>/references/DESIGN_SYSTEM.md` |
|
|
53
|
+
| DESIGN.md format spec (vendored; Designer self-loads) | `<SKILL_ROOT>/references/shared/DESIGN_MD.md` |
|
|
54
|
+
| Design-system Composer — deterministic script (writes the 6 files) | `<SKILL_ROOT>/scripts/compose.mjs` (self-documenting — its header is the spec) |
|
|
54
55
|
| Composer astro skeletons | `<SKILL_ROOT>/references/astro/templates/` |
|
|
55
56
|
| Vertical packs (discovery) | `<SKILL_ROOT>/references/verticals/` |
|
|
56
|
-
| Per-vertical instructions | `<SKILL_ROOT>/references/{stores,ecom,cms,blog,forms,gift-cards,images}/INSTRUCTIONS.md` |
|
|
57
|
+
| Per-vertical instructions | `<SKILL_ROOT>/references/{stores,ecom,cms,blog,forms,gift-cards,bookings,images}/INSTRUCTIONS.md` |
|
|
57
58
|
| Phase 4 page-designer scopes | `<SKILL_ROOT>/references/astro/designer/INSTRUCTIONS.md` |
|
|
58
59
|
| Templates | `<SKILL_ROOT>/references/astro/templates/` |
|
|
59
60
|
| Shared utilities (copied by seed-utilities) | `<SKILL_ROOT>/shared-utilities/` |
|
|
60
61
|
| Known app IDs | `<SKILL_ROOT>/references/commands/known-apps.json` |
|
|
61
62
|
| Scripts | `<SKILL_ROOT>/scripts/` |
|
|
62
63
|
|
|
63
|
-
**Do NOT Read subagent role/instruction docs in the orchestrator** — pass the absolute path; the subagent opens it.
|
|
64
|
+
**Do NOT Read subagent role/instruction docs in the orchestrator** — pass the absolute path; the subagent opens it. Reading a role doc to "prepare a dispatch" pulls 5–14 KB of subagent-only how-to into the orchestrator's context, which it then has to reason over on the dispatch turn — measurably inflating bridge turns; the orchestrator only needs to know **which inputs to inline** for each dispatch, and that list lives in `BUILD.md`'s dispatch steps, not in the role doc.
|
|
64
65
|
|
|
65
|
-
|
|
66
|
+
This covers **every** doc whose body is written *for a subagent to follow*, not just files literally named `INSTRUCTIONS.md`: `DESIGN_SYSTEM.md` (Designer), `astro/designer/INSTRUCTIONS.md` (page designers), the per-vertical `INSTRUCTIONS.md` routers, and the per-vertical guides under `references/astro/`. (There is no Composer doc — the Composer is the deterministic script `scripts/compose.mjs`, self-documenting in its header; the orchestrator never reads compose internals.)
|
|
67
|
+
|
|
68
|
+
The orchestrator's own reading set is the conductor/domain docs only:
|
|
69
|
+
|
|
70
|
+
- `PLAN.md` (+ the one operation funnel it routes to — `PLAN-create.md` *or* `PLAN-connect.md`)
|
|
71
|
+
- `BUILD.md` (+ the one framework build file — `BUILD-astro.md` *or* `BUILD-own-build.md`)
|
|
72
|
+
- `DISCOVERY.md` (+ the one operation discovery file — `DISCOVERY-create.md` *or* `DISCOVERY-connect.md`)
|
|
73
|
+
- `SETUP.md`
|
|
74
|
+
- `SEED.md`
|
|
75
|
+
- `references/verticals/*.md`
|
|
76
|
+
|
|
77
|
+
When and how each subagent is dispatched (Designer, seeders, image phases, vertical Components/Pages) — and the deterministic scripts in between (`emit-design-tokens.mjs`, `compose.mjs`) — is owned by the conductor (`references/PLAN.md` pre-approval, `references/BUILD.md` post-approval), not listed here.
|
|
66
78
|
|
|
67
79
|
## Authentication
|
|
68
80
|
|
|
@@ -102,35 +114,46 @@ the run.
|
|
|
102
114
|
|
|
103
115
|
Explicit invocation only. **Two entry paths — decide before doing anything else.**
|
|
104
116
|
|
|
117
|
+
**Decide by intent first, directory second.** An empty directory does **not** by itself mean Path A — read what the prompt is asking for. (See `DISCOVERY.md` § "Wave 0" for the authoritative rule.)
|
|
118
|
+
|
|
105
119
|
### Path A — New site from a prompt (default)
|
|
106
120
|
|
|
107
|
-
Infer vertical(s) from the opening message and load the **full resolved pack set** (top-level + `requires:` transitives + always-on `cms`) in one read batch — routing examples: stores → stores+cms+ecom+gift-cards; blog → blog+cms; etc. If the prompt is too vague, ask one conversational clarifier (NOT `AskUserQuestion`): *"What do you want your site to do — sell things, publish content, take bookings?"*
|
|
121
|
+
The user asks to **create a new site from scratch** ("build me a store", "I want to sell tables online", "make a blog") with **no design to connect**, in an empty directory. Infer vertical(s) from the opening message and load the **full resolved pack set** (top-level + `requires:` transitives + always-on `cms`) in one read batch — routing examples: stores → stores+cms+ecom+gift-cards; blog → blog+cms; bookings → bookings+cms; etc. If the prompt is too vague, ask one conversational clarifier (NOT `AskUserQuestion`): *"What do you want your site to do — sell things, publish content, take bookings?"*
|
|
122
|
+
|
|
123
|
+
> **Framework keyword → scaffold that framework, not astro.** A create prompt that **explicitly names a client-build framework** (*"create a bakery site using vite and wix"*, react/vue/svelte/SPA) stays Path A (`operation: create`) but resolves `frontendBuild: own` — the skill scaffolds *that* framework and connects it via the SPA spine (companion case). A **bare** "create a bakery site" with no framework named stays **astro** (the default). Only an explicit keyword flips it — never infer a framework the user didn't ask for. (`DISCOVERY.md` § "Wave 0".)
|
|
108
124
|
|
|
109
125
|
> **Do NOT call `WixSiteBuilder` MCP** for new-site requests — same intent, different flow; calling both produces a duplicated, conflicting build. This skill is the sole entry point.
|
|
110
126
|
|
|
111
|
-
### Path B —
|
|
127
|
+
### Path B — Connect an existing/brought design to Wix (`operation: connect`)
|
|
112
128
|
|
|
113
|
-
Triggers: *"connect this to Wix Headless"*, *"add Wix Headless to this project"*, *"host this on Wix"*, *"deploy this to Wix"*, *"implement the features … using Wix Headless"*, or any
|
|
129
|
+
Triggers: *"connect this to Wix Headless"*, *"implement this design … connecting to wix"*, *"add Wix Headless to this project"*, *"host this on Wix"*, *"deploy this to Wix"*, *"implement the features … using Wix Headless"*, or a **design-file URL to fetch + implement** (Claude Design / v0 / Lovable / any tool). **These route to B even when the working directory is empty** — the design arrives by fetch, so emptiness at trigger time does not make it Path A.
|
|
114
130
|
|
|
115
|
-
|
|
|
131
|
+
| Signal | Path |
|
|
116
132
|
|---|---|
|
|
117
|
-
|
|
|
118
|
-
|
|
|
119
|
-
|
|
|
120
|
-
| `wix.config.json`
|
|
133
|
+
| Prompt asks to **connect / implement / host an existing or fetched design** (incl. a design-file URL), **even if the CWD is empty** | **B (`operation: connect`)** |
|
|
134
|
+
| A working frontend already on disk (`index.html`, `*.html`/`*.jsx`/`*.tsx`/`*.vue`, a design bundle) | **B (`operation: connect`)** |
|
|
135
|
+
| Empty CWD **and** a create-a-new-site prompt, nothing to connect | A (`operation: create`) |
|
|
136
|
+
| `wix.config.json` present (an existing wix-headless project) | resume/extend |
|
|
121
137
|
|
|
122
|
-
**
|
|
138
|
+
**The connect operation wires a brought-in design to Wix.** When the working directory holds a brought-in site, the run **connects it to a live Wix backend** — parse the site (`DISCOVERY-connect.md`), init + shared Setup/Seed, wire existing dynamic regions to `@wix/sdk` and augment static designs with the connected feature their purpose implies, then no-build release. The frontend-track playbook is `<SKILL_ROOT>/references/custom/INSTRUCTIONS.md`; routing is owned by `PLAN-connect.md`.
|
|
123
139
|
|
|
124
|
-
###
|
|
140
|
+
### Two routing axes: operation (Discovery/Plan) + framework (Build)
|
|
125
141
|
|
|
126
|
-
|
|
142
|
+
The skill routes each phase on its own axis — they only *happen* to coincide while there are exactly two modes:
|
|
127
143
|
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
144
|
+
- **Operation** (Discovery + Plan route on this) — *create* (scaffold a new site from a prompt) vs *connect* (integrate a brought-in design).
|
|
145
|
+
- **Framework-build-class** (Build routes on this) — `frontendBuild`: `wix` (astro-native, `wix build`) vs `none` (static HTML, no build) vs `own` (own-build SPA, the project's own `npm run build`).
|
|
146
|
+
|
|
147
|
+
These plus `frontend`, `verticals[]`, `designSource`, and `brand` form the **Plan→Build contract** (`PLAN.md` § "The Plan→Build contract"), held in orchestrator scratch and threaded into dispatch prompts. The axes are **orthogonal** — `frontendBuild` is derived inside the operation, not implied by it:
|
|
148
|
+
|
|
149
|
+
| `operation` | `frontend` | `frontendBuild` | What runs |
|
|
150
|
+
|---|---|---|---|
|
|
151
|
+
| `create` (default) | `astro` | `wix` | the skill writes the site, then `wix build` + release (`references/astro/`) |
|
|
152
|
+
| `create` + explicit framework keyword (*"…using vite"*) | `custom` | `own` | scaffold the named framework (vite/vue/svelte) → minimal app → connect via the SPA spine → the project's own `npm run build` + release (companion case) |
|
|
153
|
+
| `connect` (brought static HTML) | `custom` | `none` | connect a brought-in HTML+CSS/JS site; init + Setup/Seed + connect/augment + **no-build** release (`references/custom/`) |
|
|
154
|
+
| `connect` (brought framework SPA) | `custom` | `own` | connect a brought-in Vite/React/Vue/Svelte SPA; bundled `@wix/sdk` + source-edit wiring (persistence swap) + the project's own build + release |
|
|
132
155
|
|
|
133
|
-
`DISCOVERY.md` § "Wave 0
|
|
156
|
+
`DISCOVERY.md` § "Wave 0" resolves `operation` first, then derives `frontend`/`frontendBuild` (connect's build-class from disk — `DISCOVERY-connect.md` § 1.5; create's from an explicit framework keyword). `frontend`/`operation`/`frontendBuild` all live in **orchestrator scratch** and are **not** written to disk (on scratch loss, recover them from `package.json`: `@wix/astro` present ⇒ `frontend: astro`/`frontendBuild: wix`, else `frontend: custom` with `frontendBuild` re-derived from `scripts.build` + a bundler dep). **Operation routing is owned by `PLAN.md` § "Operation routing"; framework routing by `BUILD.md`.** Framework SPAs carry **no per-framework instruction files** — one agnostic playbook; only SSR frameworks (Next.js/Nuxt) are deferred.
|
|
134
157
|
|
|
135
158
|
### Two tracks (business vs frontend)
|
|
136
159
|
|
|
@@ -140,16 +163,16 @@ The skill runs two semi-independent tracks (business = frontend-blind site/app/s
|
|
|
140
163
|
|
|
141
164
|
| Scenario | Use instead |
|
|
142
165
|
|---|---|
|
|
143
|
-
| Scaffold-only with no further design/wiring | `bash <SKILL_ROOT>/scripts/scaffold.sh <
|
|
144
|
-
| Release an existing wix-headless project | `
|
|
145
|
-
| Install a Wix app onto an existing site | Follow
|
|
166
|
+
| Scaffold-only with no further design/wiring | `bash <SKILL_ROOT>/scripts/scaffold.sh <folder-name> "<Brand>"` |
|
|
167
|
+
| Release an existing wix-headless project | from the project dir: `npx @wix/cli@latest build` then `release` (astro); `release` only (custom — no build) |
|
|
168
|
+
| Install a Wix app onto an existing site | Follow `SETUP.md` Step 3 (delegates to the `wix-manage` skill) |
|
|
146
169
|
| Add a feature / restyle a prior wix-headless run | Resume on disk; ask whether to start fresh |
|
|
147
170
|
|
|
148
171
|
> Read individual `.md` files under `references/verticals/`; `Read` on the directory returns `EISDIR`.
|
|
149
172
|
|
|
150
173
|
## The run
|
|
151
174
|
|
|
152
|
-
The whole run — Discovery → Setup → design-system bridge → Seed → Components
|
|
175
|
+
The whole run — Discovery → Setup → design-system bridge → Seed → the build wave (merged Components + Pages per vertical) → Build → Release, with every dispatch, handle, wait, and transition — is owned by the conductor: **`references/PLAN.md`** (pre-approval) then **`references/BUILD.md`** (post-approval). Open `PLAN.md` to start a run. This file does not duplicate the sequence.
|
|
153
176
|
|
|
154
177
|
Wall-time targets: discovery ≤ 80 s (excl. user think-time); setup foreground ≤ 25 s; seed longest pole ≤ 120 s. Full-build target: ≤ 600 s prompt-to-live-URL when all phases run.
|
|
155
178
|
|
|
@@ -159,4 +182,4 @@ Pack frontmatter in `references/verticals/` is **discovery-only**. Post-seed wor
|
|
|
159
182
|
|
|
160
183
|
Upstream: `@skills/wix-manage` (seed + app install recipes).
|
|
161
184
|
|
|
162
|
-
Current packs: `stores`, `ecom`, `gift-cards`, `cms`, `blog`, `forms`. Schema: `references/verticals/_schema.md` + `_schema.json`.
|
|
185
|
+
Current packs: `stores`, `ecom`, `gift-cards`, `cms`, `blog`, `forms`, `bookings`. Schema: `references/verticals/_schema.md` + `_schema.json`.
|