@wix/agent-skills 1.18.0 → 1.18.2

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.
Files changed (76) hide show
  1. package/package.json +1 -1
  2. package/skills/wix-app/SKILL.md +4 -4
  3. package/skills/wix-app/references/APP_VALIDATION.md +7 -33
  4. package/skills/wix-app/references/DASHBOARD_PAGE.md +18 -14
  5. package/skills/wix-app/references/EDITOR_REACT_COMPONENT.md +75 -92
  6. package/skills/wix-app/references/WIX_PATTERNS_DOCS.md +23 -26
  7. package/skills/wix-app/references/dashboard-page/COLLECTION_TOOLKIT.md +7 -6
  8. package/skills/wix-app/references/dashboard-page/ENTITY_PAGE_TOOLKIT.md +71 -4
  9. package/skills/wix-app/references/dashboard-page/PATTERNS_BUNDLE_READING.md +67 -7
  10. package/skills/wix-app/references/editor-react-component/ACCESSIBILITY.md +1 -1
  11. package/skills/wix-app/references/editor-react-component/ANIMATED-COMPONENTS.md +9 -6
  12. package/skills/wix-app/references/editor-react-component/COMPONENT-CONTRACT.md +59 -89
  13. package/skills/wix-app/references/editor-react-component/COMPONENT-PREVIEW.md +23 -4
  14. package/skills/wix-app/references/editor-react-component/CSS-GUIDELINES.md +29 -14
  15. package/skills/wix-base44-connector/SKILL.md +168 -48
  16. package/skills/wix-base44-connector/scripts/{utils.js → utils.cjs} +69 -48
  17. package/skills/wix-docs/SKILL.md +109 -111
  18. package/skills/wix-docs/references/API_SPEC_SEARCH.md +35 -23
  19. package/skills/wix-docs/references/CALLING.md +91 -0
  20. package/skills/wix-docs/references/EXTRACTING.md +5 -3
  21. package/skills/wix-headless/references/DOC_DISCOVERY.md +9 -3
  22. package/skills/wix-headless/references/inline-recipes/setup-forms.md +57 -10
  23. package/skills/wix-manage/SKILL.md +106 -92
  24. package/skills/wix-manage/references/dashboard-navigation/routes.json +12 -52
  25. package/skills/wix-manage/references/ecommerce/shipping/ecom-shipping-api.md +0 -2
  26. package/skills/wix-manage/references/forms/create-form.md +272 -184
  27. package/skills/wix-manage/references/forms/forms-dashboard-navigation.md +13 -10
  28. package/skills/wix-manage/references/forms/update-form.md +122 -0
  29. package/skills/wix-manage/references/media/generate-image-with-ai.md +86 -0
  30. package/skills/wix-manage/references/seo/manage-content-plan.md +247 -0
  31. package/skills/wix-manage/references/seo/manage-seo-tags.md +59 -6
  32. package/skills/wix-manage/references/stores/change-store-currency.md +10 -0
  33. package/skills/wix-manage/references/stores/create-product-catalog-v3.md +16 -1
  34. package/skills/wix-manage/references/stores/update-product-with-options.md +9 -0
  35. package/skills/wix-vibe-headless/SKILL.md +17 -18
  36. package/skills/wix-vibe-headless/install/pin-agents-md.cjs +1 -1
  37. package/skills/wix-vibe-headless/platforms/base44-ecom-light-seed-with-install.md +118 -0
  38. package/skills/wix-vibe-headless/platforms/base44-ecom-light-seed.md +55 -62
  39. package/skills/wix-vibe-headless/platforms/base44-ecom-light.md +31 -29
  40. package/skills/wix-vibe-headless/platforms/base44.md +12 -5
  41. package/skills/wix-vibe-headless/platforms/generic.md +13 -12
  42. package/skills/wix-vibe-headless/references/blog/INSTRUCTIONS.md +4 -13
  43. package/skills/wix-vibe-headless/references/blog/seed/SEED.md +4 -8
  44. package/skills/wix-vibe-headless/references/blog/seed/{seed-blog.js → seed-blog.cjs} +2 -3
  45. package/skills/wix-vibe-headless/references/bookings/INSTRUCTIONS.md +5 -14
  46. package/skills/wix-vibe-headless/references/bookings/seed/SEED.md +5 -9
  47. package/skills/wix-vibe-headless/references/bookings/seed/{seed-bookings.js → seed-bookings.cjs} +2 -2
  48. package/skills/wix-vibe-headless/references/bookings/seed/{seed-rentals.js → seed-rentals.cjs} +3 -3
  49. package/skills/wix-vibe-headless/references/cms/INSTRUCTIONS.md +1 -1
  50. package/skills/wix-vibe-headless/references/cms/seed/SEED.md +2 -2
  51. package/skills/wix-vibe-headless/references/events/INSTRUCTIONS.md +4 -13
  52. package/skills/wix-vibe-headless/references/events/seed/SEED.md +3 -7
  53. package/skills/wix-vibe-headless/references/events/seed/{seed-events.js → seed-events.cjs} +2 -2
  54. package/skills/wix-vibe-headless/references/forms/INSTRUCTIONS.md +24 -7
  55. package/skills/wix-vibe-headless/references/forms/seed/SEED.md +91 -17
  56. package/skills/wix-vibe-headless/references/members/INSTRUCTIONS.md +4 -13
  57. package/skills/wix-vibe-headless/references/members/seed/SEED.md +2 -3
  58. package/skills/wix-vibe-headless/references/portfolio/INSTRUCTIONS.md +4 -13
  59. package/skills/wix-vibe-headless/references/portfolio/app/components/ProjectMedia.jsx +1 -1
  60. package/skills/wix-vibe-headless/references/portfolio/seed/SEED.md +3 -7
  61. package/skills/wix-vibe-headless/references/portfolio/seed/{seed-portfolio.js → seed-portfolio.cjs} +2 -2
  62. package/skills/wix-vibe-headless/references/pricing-plans/INSTRUCTIONS.md +5 -14
  63. package/skills/wix-vibe-headless/references/pricing-plans/app/components/OrderCard.jsx +1 -1
  64. package/skills/wix-vibe-headless/references/pricing-plans/seed/SEED.md +3 -7
  65. package/skills/wix-vibe-headless/references/pricing-plans/seed/{seed-pricing-plans.js → seed-pricing-plans.cjs} +2 -2
  66. package/skills/wix-vibe-headless/references/restaurants/INSTRUCTIONS.md +5 -15
  67. package/skills/wix-vibe-headless/references/restaurants/seed/SEED.md +3 -7
  68. package/skills/wix-vibe-headless/references/restaurants/seed/{seed-restaurants.js → seed-restaurants.cjs} +2 -2
  69. package/skills/wix-vibe-headless/references/storefront/INSTRUCTIONS.md +359 -327
  70. package/skills/wix-vibe-headless/references/storefront/app/context/CartContext.jsx +1 -0
  71. package/skills/wix-vibe-headless/references/storefront/app/hooks/useProductDetail.js +2 -2
  72. package/skills/wix-vibe-headless/references/storefront/app/hooks/useShop.js +63 -78
  73. package/skills/wix-vibe-headless/references/storefront/app/rest/wix-store-catalog.js +59 -43
  74. package/skills/wix-vibe-headless/references/storefront/seed/SEED.md +46 -10
  75. package/skills/wix-vibe-headless/references/storefront/seed/{seed-store.js → seed-store.cjs} +163 -25
  76. package/skills/wix-vibe-headless/references/storefront/app/pages/Shop.jsx +0 -75
@@ -23,7 +23,7 @@ Everything is under `.agents/skills/wix-vibe-headless/references/`.
23
23
  **shapes**, fieldsets, and paging.
24
24
  - `app/{components,pages,hooks,context}/…` — a **reference UI** (+ hooks/providers) built on that data
25
25
  layer; the field shapes and route patterns it uses (e.g. `/product/:slug`) are the data contract.
26
- - `seed/seed-*.js` — build-time **seeding functions** that create content.
26
+ - `seed/seed-*.cjs` — build-time **seeding functions** that create content.
27
27
  - `INSTRUCTIONS.md` — the vertical's build guide + field-shape snippets; `seed/SEED.md` — how the seed
28
28
  module is run.
29
29
 
@@ -31,15 +31,15 @@ Everything is under `.agents/skills/wix-vibe-headless/references/`.
31
31
 
32
32
  | vertical | `app/rest/` data layer | seed module |
33
33
  |---|---|---|
34
- | storefront | `wix-store-catalog.js`, `wix-store-cart.js` — products & variants; server cart + checkout redirect | `seed-store.js` |
35
- | bookings | `wix-bookings-services.js`, `wix-bookings-checkout.js` — services/categories/slots; booking + checkout | `seed-bookings.js` |
36
- | blog | `wix-blog.js` — posts (list + by-slug), categories, tags | `seed-blog.js` |
37
- | events | `wix-events-browse.js`, `wix-events-registration.js` — events & categories; RSVP / ticketing + checkout | `seed-events.js` |
38
- | portfolio | `wix-portfolio.js` — collections, projects, galleries | `seed-portfolio.js` |
39
- | restaurants | `wix-restaurants-menu.js`, `-ordering.js`, `-reservations.js` — menu; online ordering; table reservations | `seed-restaurants.js` |
34
+ | storefront | `wix-store-catalog.js`, `wix-store-cart.js` — products & variants; server cart + checkout redirect | `seed-store.cjs` |
35
+ | bookings | `wix-bookings-services.js`, `wix-bookings-checkout.js` — services/categories/slots; booking + checkout | `seed-bookings.cjs` |
36
+ | blog | `wix-blog.js` — posts (list + by-slug), categories, tags | `seed-blog.cjs` |
37
+ | events | `wix-events-browse.js`, `wix-events-registration.js` — events & categories; RSVP / ticketing + checkout | `seed-events.cjs` |
38
+ | portfolio | `wix-portfolio.js` — collections, projects, galleries | `seed-portfolio.cjs` |
39
+ | restaurants | `wix-restaurants-menu.js`, `-ordering.js`, `-reservations.js` — menu; online ordering; table reservations | `seed-restaurants.cjs` |
40
40
  | forms | `wix-forms.js`, `wix-forms-submissions.js` — any visitor-fillable form: read the schema; upload attachments, create a submission (schema accessors ship alongside in `lib/wix-form-schema-utils.js`) | *(none — REST shapes in `seed/SEED.md`)* |
41
- | cms | `wix-cms.js` — Wix Data collections: list / detail / filter | `seed-cms.js` |
42
- | pricing-plans | `wix-pricing-plans.js` — plans list + subscribe/checkout | `seed-pricing-plans.js` |
41
+ | cms | `wix-cms.js` — Wix Data collections: list / detail / filter | *(none — see `seed/SEED.md`)* |
42
+ | pricing-plans | `wix-pricing-plans.js` — plans list + subscribe/checkout | `seed-pricing-plans.cjs` |
43
43
  | members | `wix-members-auth.js` — custom login/signup (email+password, social, SSO), session, account | *(none — members sign up at runtime; nothing to seed)* |
44
44
 
45
45
  Anything in the docs about the **host's own setup** — copying files into `src/`, its `@/` alias, its
@@ -57,7 +57,7 @@ within each. **One exception — `forms` must be seeded before its UI is built;
57
57
  ### 1 · Install the skills
58
58
 
59
59
  Two skills, into `.agents/skills/`: **`wix-vibe-headless`** (this build guide + the seed modules —
60
- self-contained) and **`wix-docs`** (fallback to search/read the Wix API reference).
60
+ self-contained) and **`wix-docs`** (search/read the Wix API reference).
61
61
 
62
62
  ```bash
63
63
  CI=1 npx skills@latest add wix/skills/skills/wix-vibe-headless --yes
@@ -110,8 +110,9 @@ V=<vertical>
110
110
  find .agents/skills/wix-vibe-headless/references/$V/seed -name '*.js' -exec tail -n +1 {} +
111
111
  ```
112
112
 
113
- They encode the Wix API sequences (incl. app-install + provisioning-race handling); use `wix-docs`
114
- for anything they don't cover. Content queries return `REQUIRED_APP_NOT_INSTALLED` until the app is
113
+ They encode the Wix API sequences (incl. app-install + provisioning-race handling). For anything
114
+ they don't cover, consult the official Wix API documentation using the documentation skill available
115
+ in your environment. Content queries return `REQUIRED_APP_NOT_INSTALLED` until the app is
115
116
  installed + seeded (expected; the seed modules install it first). Image seeding = two Wix Media calls
116
117
  (`generate-upload-url` → `PUT` the bytes) before attaching.
117
118
 
@@ -40,16 +40,9 @@ end). (Files missing? the install's `deploy` result lists what it wrote; re-run
40
40
  `references/blog/app/` → `src/`.)
41
41
 
42
42
 
43
- ## STEP 2 — Theme (nothing to style on the shipped components)
44
- The shipped components carry **no palette of their own** — they render from base44's design tokens in
45
- `src/index.css` (`:root`/`.dark`: `--background`, `--foreground`, `--card`, `--primary`, `--muted`,
46
- `--border`, `--radius`, `--font-*`) via shadcn Tailwind classes (`bg-card`, `text-foreground`,
47
- `bg-primary`, `text-muted-foreground`, `border-border`, `rounded-lg`, `font-display`). Those tokens
48
- are **already set to the brand by the design phase**, so the shipped pages are themed with zero work
49
- here. To adjust the palette, edit `index.css` (`:root` **and** `.dark`) — the base44 way; **never add
50
- a parallel theme file (e.g. a `theme.css`) or restyle the shipped JSX.** Build the Home/Header you add
51
- (STEP 3) from the **same** base44 tokens/classes so it matches automatically. A dark brand is just
52
- base44's dark palette in `index.css` — no per-component work.
43
+ ## STEP 2 — Theme
44
+ Use the existing Base44 theme in `src/index.css` so your pages and the shipped components
45
+ share the same colors and typography.
53
46
 
54
47
  ## STEP 3 — Wire routes + provider (surgical `find_replace` on `src/App.jsx`, never a rewrite)
55
48
  **No file reads needed to wire this.** Every shipped page and `WixManageBanner` is a default export that takes **no props** — wire them exactly as the snippet shows; nothing in those files needs looking up.
@@ -206,10 +199,9 @@ reference page inline.
206
199
  included; add them as an authenticated `wixApiRequest` call).
207
200
 
208
201
  Fallback only — when you hit an error or need something not shown here: read the relevant shipped file
209
- under `src/`, or look it up via the **`wix-docs`** skill.
202
+ under `src/`, or look it up via the documentation skill available in your environment.
210
203
 
211
204
  ## Hard rules
212
- - Style via base44 design tokens (`index.css` / shadcn Tailwind classes), never by rewriting the shipped components or adding a parallel theme file.
213
205
  - Header/footer live in a `Layout` around `<Outlet/>` (STEP 3) — never edit the shipped `Blog`/`PostDetail`/category/tag pages to add chrome.
214
206
  - The Layout's fixed top region owns positioning: `<WixManageBanner/>` above `<Header/>`; your `Header` is plain in-flow markup (not `position:fixed`).
215
207
  - Route by `slug` through the shipped helpers — never hand-build a post/category/tag URL. Display categories/tags by `.label` (not `.name`).
@@ -226,7 +218,6 @@ connector) — separate from this client build; run in parallel.
226
218
 
227
219
  ## Verify (before declaring done)
228
220
  - [ ] Client files copied into `src/`; `WIX_CLIENT_ID` set (not the placeholder).
229
- - [ ] Brand palette lives in `index.css` (`:root`/`.dark`); no parallel theme file; shipped components/pages not restyled or rewritten.
230
221
  - [ ] **Opened the vertical's data route(s)** (not just the home page) — `/blog` and a post detail page (plus a category/tag page) — and confirmed the shipped components render themed (surface, text, brand) with images.
231
222
  - [ ] `Layout` (fixed `<WixManageBanner/>` + `<Header/>` region, then `<Outlet/>` + Footer) wraps all routes; shipped `Blog`/`PostDetail`/`CategoryPage`/`TagPage` untouched; content clears the fixed chrome; `<TaxonomyProvider>` wraps the tree.
232
223
  - [ ] Feed lists live published posts (newest first) and paginates via `nextCursor`; post detail loads by `slug`; a bad slug shows the not-found state (no invented post).
@@ -1,11 +1,11 @@
1
1
  # Blog — seeding
2
2
 
3
- Seed a Wix Blog (Blog V3) by **calling `seed-blog.js`** — don't hand-write the REST calls. It's
3
+ Seed a Wix Blog (Blog V3) by **calling `seed-blog.cjs`** — don't hand-write the REST calls. It's
4
4
  a build-time module (run via `exec_tool`, not shipped in the app) that abstracts every Wix Blog
5
5
  seed operation. `require` it and call the functions with plain data.
6
6
 
7
7
  > **NOT yet live-verified — transcribed from `setup-blog.md`.** Endpoints/fields mirror the recipe
8
- > exactly; if a call returns an unexpected shape, use the **`wix-docs`** skill (never guess).
8
+ > exactly; if a call returns an unexpected shape, use the documentation skill available in your environment (never guess).
9
9
 
10
10
  **DEFAULT — one call.** `setupBlog(ctx, plan)` runs the whole flow (memberId → categories/tags →
11
11
  posts → covers), keeping every id in memory. Pass category/tag **names** and it resolves them to
@@ -15,11 +15,7 @@ for you (Blog binds the cover by the Wix Media file id, not a url).
15
15
  ```js
16
16
  // build-time exec_tool
17
17
  const { accessToken } = await base44.asServiceRole.connectors.getConnection("wix");
18
- const fs = require("fs");
19
- // exec_tool's require can return EMPTY exports for these build-time modules — load the file itself:
20
- const seed = (() => { const m = { exports: {} };
21
- new Function("module", "exports", "require", fs.readFileSync("/app/.agents/skills/wix-vibe-headless/references/blog/seed/seed-blog.js", "utf8"))(m, m.exports, require);
22
- return m.exports; })();
18
+ const seed = require(require("path").resolve(".agents/skills/wix-vibe-headless/references/blog/seed/seed-blog.cjs"));
23
19
  const ctx = { token: accessToken, siteId: WIX_METASITE_ID };
24
20
 
25
21
  const result = await seed.setupBlog(ctx, {
@@ -88,7 +84,7 @@ first** (`installBlogApp`, idempotent), so seeding works even if the site doesn'
88
84
 
89
85
  ## Reference
90
86
  If a call returns a shape you didn't expect, or you need an operation this module doesn't cover,
91
- use the **`wix-docs`** skill to search + read the live Wix Blog API reference — never guess. The
87
+ use the documentation skill available in your environment to search + read the live Wix Blog API reference — never guess. The
92
88
  authoritative source recipe is `wix-headless/references/inline-recipes/setup-blog.md`.
93
89
 
94
90
  Read a method's page before writing its call: it carries the exact body shape, the required
@@ -6,7 +6,7 @@
6
6
  //
7
7
  // Usage (build-time exec_tool):
8
8
  // const { accessToken } = await base44.asServiceRole.connectors.getConnection("wix"); // Base44
9
- // const seed = require("/app/.agents/skills/wix-vibe-headless/references/blog/seed/seed-blog.js");
9
+ // const seed = require("/app/.agents/skills/wix-vibe-headless/references/blog/seed/seed-blog.cjs");
10
10
  // const ctx = { token: accessToken, siteId: WIX_METASITE_ID };
11
11
  // const memberId = await seed.getAuthorMemberId(ctx); // STEP 1 — required for every post
12
12
  // const cats = await seed.createCategories(ctx, ["Recipes", "Brewing"]); // STEP 3 — only if the brief groups posts
@@ -22,8 +22,7 @@
22
22
  // await seed.attachPostCovers(ctx, posts.map((p, i) => ({ postId: p.id, fileId: files[i].id })));
23
23
  //
24
24
  // Live-verified end-to-end (members author, categories, posts single+bulk, tags, covers, idempotent
25
- // re-runs). If any call ever fails with a shape the caller didn't expect, fall back to the wix-docs
26
- // skill (search + read the live Wix Blog API reference) — never guess. Source recipe:
25
+ // re-runs). If any call ever fails with a shape the caller didn't expect, fall back to the documentation skill available in your environment (search + read the live Wix Blog API reference) — never guess. Source recipe:
27
26
  // wix-headless/references/inline-recipes/setup-blog.md.
28
27
 
29
28
  const API = "https://www.wixapis.com";
@@ -51,16 +51,9 @@ the end). (Files missing? the install's `deploy` result lists what it wrote; re-
51
51
  `references/bookings/app/` → `src/`.)
52
52
 
53
53
 
54
- ## STEP 2 — Theme (nothing to style on the shipped components)
55
- The shipped components carry **no palette of their own** — they render from base44's design tokens
56
- in `src/index.css` (`:root`/`.dark`: `--background`, `--foreground`, `--card`, `--primary`,
57
- `--muted`, `--border`, `--radius`, `--font-*`) via shadcn Tailwind classes (`bg-card`,
58
- `text-foreground`, `bg-primary`, `text-muted-foreground`, `border-border`, `rounded-lg`,
59
- `font-display`). Those tokens are **already set to the brand by the design phase**, so the shipped
60
- pages are themed with zero work here. To adjust the palette, edit `index.css` (`:root` **and**
61
- `.dark`) — the base44 way; **never add a parallel theme file (e.g. a `theme.css`) or restyle the
62
- shipped JSX.** Build the Home/Header you add (STEP 3) from the **same** base44 tokens/classes so it
63
- matches automatically. A dark brand is just base44's dark palette in `index.css` — no per-component work.
54
+ ## STEP 2 — Theme
55
+ Use the existing Base44 theme in `src/index.css` so your pages and the shipped components
56
+ share the same colors and typography.
64
57
 
65
58
  ## STEP 3 — Wire routes (surgical `find_replace` on `src/App.jsx`, never a rewrite)
66
59
  **No file reads needed to wire this.** Every shipped page and `WixManageBanner` is a default export that takes **no props** — wire them exactly as the snippet shows; nothing in those files needs looking up.
@@ -207,7 +200,7 @@ window.location.href = checkoutUrl; // hosted checkout; on return the booking
207
200
  ## Extending the client
208
201
  The shipped flow covers **APPOINTMENT and CLASS** services (`listSlotsForService` routes by
209
202
  `service.type`). For anything beyond that, add a helper on `wixApiRequest`, looking the endpoint up
210
- in the **`wix-docs`** skill first (never guess):
203
+ using the documentation skill available in your environment first (never guess):
211
204
  - **COURSE** enrollment — a course is enrolled as a *whole*, not per session; `listEventTimeSlots`
212
205
  returns no slots for it, so the slot-picker flow doesn't apply (course-specific flow).
213
206
  - **Service variants / participants** (duration- or person-based pricing), **add-ons**, and
@@ -217,7 +210,7 @@ in the **`wix-docs`** skill first (never guess):
217
210
  them see their own appointments.
218
211
 
219
212
  Fallback only — when you hit an error or need something not shown here: read the relevant shipped
220
- file under `src/`, or look it up via the **`wix-docs`** skill. Each helper in
213
+ file under `src/`, or look it up via the documentation skill available in your environment. Each helper in
221
214
  `wix-bookings-services.js` / `wix-bookings-checkout.js` links its own reference page inline; these are
222
215
  the areas they sit in:
223
216
  - Bookings (services, categories, bookings): https://dev.wix.com/docs/api-reference/business-solutions/bookings.md
@@ -269,7 +262,6 @@ identical.
269
262
  - **One unit type per service.** A room rented by the hour *and* by the day is two services.
270
263
 
271
264
  ## Hard rules
272
- - Style via base44 design tokens (`index.css` / shadcn Tailwind classes), never by rewriting the shipped components or adding a parallel theme file.
273
265
  - Header/footer live in a `Layout` around `<Outlet/>` (STEP 3) — never edit the shipped
274
266
  `Services`/`ServiceDetail` to add chrome.
275
267
  - The Layout's fixed top region owns positioning: `<WixManageBanner/>` above `<Header/>`; your
@@ -297,7 +289,6 @@ build; run in parallel.
297
289
 
298
290
  ## Verify (before declaring done)
299
291
  - [ ] Client files copied into `src/`; `WIX_CLIENT_ID` set (not the placeholder).
300
- - [ ] Brand palette lives in `index.css` (`:root`/`.dark`); no parallel theme file; shipped components/pages not restyled or rewritten.
301
292
  - [ ] **Opened `/services` and a service detail page** (not just the home page) and confirmed the shipped cards render themed (surface, text, brand color) with images.
302
293
  - [ ] `Layout` (fixed `<WixManageBanner/>` + `<Header/>` region, then `<Outlet/>` + Footer) wraps all
303
294
  routes; shipped `Services`/`ServiceDetail` untouched; content clears the fixed chrome.
@@ -1,6 +1,6 @@
1
1
  # Bookings — seeding
2
2
 
3
- Seed a Wix Bookings catalog by **calling `seed-bookings.js`** — don't hand-write the REST calls.
3
+ Seed a Wix Bookings catalog by **calling `seed-bookings.cjs`** — don't hand-write the REST calls.
4
4
  It's a build-time module (run via `exec_tool`, not shipped in the app) that abstracts every Wix
5
5
  Bookings seed operation. Load it and call **`setupBookings` — the one-call path** — with plain data.
6
6
 
@@ -9,11 +9,7 @@ Bookings seed operation. Load it and call **`setupBookings` — the one-call pat
9
9
  ```js
10
10
  // build-time exec_tool
11
11
  const { accessToken } = await base44.asServiceRole.connectors.getConnection("wix");
12
- const fs = require("fs");
13
- // exec_tool's require can return EMPTY exports for these build-time modules — load the file itself:
14
- const seed = (() => { const m = { exports: {} };
15
- new Function("module", "exports", "require", fs.readFileSync("/app/.agents/skills/wix-vibe-headless/references/bookings/seed/seed-bookings.js", "utf8"))(m, m.exports, require);
16
- return m.exports; })();
12
+ const seed = require(require("path").resolve(".agents/skills/wix-vibe-headless/references/bookings/seed/seed-bookings.cjs"));
17
13
  const ctx = { token: accessToken, siteId: WIX_METASITE_ID };
18
14
 
19
15
  // ONE call: install → resolve staff → categories → services → CLASS sessions → images, all in the
@@ -103,12 +99,12 @@ same body; don't loop and don't re-create the ones that already succeeded.
103
99
 
104
100
  ## Rentals
105
101
 
106
- `seed-rentals.js` is the rentals half — the same transport, a different create order and payload.
102
+ `seed-rentals.cjs` is the rentals half — the same transport, a different create order and payload.
107
103
  Wix Rentals has no APIs of its own, so a rental is a Bookings service with rentals-specific
108
104
  field values.
109
105
 
110
106
  ```js
111
- const seed = require("…/references/bookings/seed/seed-rentals.js");
107
+ const seed = require(require("path").resolve(".agents/skills/wix-vibe-headless/references/bookings/seed/seed-rentals.cjs"));
112
108
  await seed.setupRentals(ctx, {
113
109
  resourceTypeName: "Meeting rooms",
114
110
  resources: ["Room A", "Room B"], // parallel capacity = MORE RESOURCES
@@ -144,7 +140,7 @@ than a multi-service group. Pass `workingHours` only when the brief names openin
144
140
 
145
141
  ## Reference
146
142
  If a call returns a shape you didn't expect, or you need an operation this module doesn't cover,
147
- use the **`wix-docs`** skill to search + read the live Wix API reference — never guess. The
143
+ use the documentation skill available in your environment to search + read the live Wix API reference — never guess. The
148
144
  authoritative source recipe is `wix-headless/references/inline-recipes/setup-bookings.md`.
149
145
 
150
146
  Read a method's page before writing its call: it carries the exact body shape, the required
@@ -8,7 +8,7 @@
8
8
  //
9
9
  // Usage (build-time exec_tool):
10
10
  // const { accessToken } = await base44.asServiceRole.connectors.getConnection("wix"); // Base44 (generic: use $TOKEN)
11
- // const seed = require("/app/.agents/skills/wix-vibe-headless/references/bookings/seed/seed-bookings.js");
11
+ // const seed = require("/app/.agents/skills/wix-vibe-headless/references/bookings/seed/seed-bookings.cjs");
12
12
  // const ctx = { token: accessToken, siteId: WIX_METASITE_ID };
13
13
  //
14
14
  // await seed.installBookingsApp(ctx); // if the site doesn't have Wix Bookings yet
@@ -32,7 +32,7 @@
32
32
  // // await seed.attachServiceImage(ctx, { serviceId: s.id, revision: s.revision, image: { id: file.id, url: file.url, width: 1024, height: 1024 } });
33
33
  //
34
34
  // If any call fails with a shape the caller didn't expect, or you need an operation this module
35
- // doesn't cover, fall back to the wix-docs skill (search + read the live Wix API reference) —
35
+ // doesn't cover, fall back to the documentation skill available in your environment (search + read the live Wix API reference) —
36
36
  // never guess. Source recipe (authoritative): wix-headless/references/inline-recipes/setup-bookings.md.
37
37
 
38
38
  const API = "https://www.wixapis.com";
@@ -1,5 +1,5 @@
1
1
  // Rentals seed helpers — run at BUILD TIME via exec_tool (NOT shipped in the app).
2
- // A DELTA on seed-bookings.js: Wix Rentals has no APIs of its own, so a rental is a Bookings
2
+ // A DELTA on seed-bookings.cjs: Wix Rentals has no APIs of its own, so a rental is a Bookings
3
3
  // service carrying rentals-specific field values. Everything about the transport, images and
4
4
  // error handling is the same; only the create order and the service payload differ.
5
5
  //
@@ -9,7 +9,7 @@
9
9
  // Usage (build-time exec_tool) — prefer `setupRentals`, which runs the whole flow in the one order
10
10
  // that works and threads the resource ids into each service for you:
11
11
  // const { accessToken } = await base44.asServiceRole.connectors.getConnection("wix");
12
- // const seed = require("/app/.agents/skills/wix-vibe-headless/references/bookings/seed/seed-rentals.js");
12
+ // const seed = require("/app/.agents/skills/wix-vibe-headless/references/bookings/seed/seed-rentals.cjs");
13
13
  // const ctx = { token: accessToken, siteId: WIX_METASITE_ID };
14
14
  // await seed.setupRentals(ctx, {
15
15
  // resourceTypeName: "Meeting rooms",
@@ -27,7 +27,7 @@
27
27
  // 2. Resources created before the service, and their ids listed in `serviceResources[].resourceIds`.
28
28
  // 3. No category — a rental is surfaced by its `appId`, not by a Bookings category.
29
29
  //
30
- // Images are reused from seed-bookings.js — require both.
30
+ // Images are reused from seed-bookings.cjs — require both.
31
31
  // Source recipe: wix-headless/references/inline-recipes/setup-rentals.md.
32
32
 
33
33
  const API = "https://www.wixapis.com";
@@ -148,7 +148,7 @@ Validate the mime type and the size there as well.
148
148
 
149
149
  ## Fallback — beyond the helpers
150
150
  Need something the helpers don't cover? Call it yourself with `wixApiRequest`, but look up the exact
151
- endpoint/method/body in the official Wix reference first (or use the `wix-docs` skill) — never guess.
151
+ endpoint/method/body in the official Wix reference first (or use the documentation skill available in your environment) — never guess.
152
152
  - Data Items API: https://dev.wix.com/docs/api-reference/business-solutions/cms/data-items.md
153
153
  - Partial update (Patch): https://dev.wix.com/docs/api-reference/business-solutions/cms/data-items/patch-data-item.md
154
154
  - Upsert by id (Save): https://dev.wix.com/docs/api-reference/business-solutions/cms/data-items/save-data-item.md
@@ -141,5 +141,5 @@ permission scope, and the response envelope.
141
141
  - Bulk Insert Data Item References: https://dev.wix.com/docs/api-reference/business-solutions/cms/data-items/bulk-insert-data-item-references.md
142
142
  - Data Items API: https://dev.wix.com/docs/api-reference/business-solutions/cms/data-items.md
143
143
  - Collections: https://dev.wix.com/docs/api-reference/business-solutions/cms/collection-management/data-collections.md
144
- - Anything not covered → use the `wix-docs` skill (search + read the live reference); never guess.
145
- - Anything not covered → use the `wix-docs` skill (search + read the live reference); never guess.
144
+ - Anything not covered → use the documentation skill available in your environment (search + read the live reference); never guess.
145
+ - Anything not covered → use the documentation skill available in your environment (search + read the live reference); never guess.
@@ -47,16 +47,9 @@ end). (Files missing? the install's `deploy` result lists what it wrote; re-run
47
47
  `references/events/app/` → `src/`.)
48
48
 
49
49
 
50
- ## STEP 2 — Theme (nothing to style on the shipped components)
51
- The shipped components carry **no palette of their own** — they render from base44's design tokens in
52
- `src/index.css` (`:root`/`.dark`: `--background`, `--foreground`, `--card`, `--primary`, `--muted`,
53
- `--border`, `--radius`, `--font-*`) via shadcn Tailwind classes (`bg-card`, `text-foreground`,
54
- `bg-primary`, `text-muted-foreground`, `border-border`, `rounded-lg`, `font-display`). Those tokens
55
- are **already set to the brand by the design phase**, so the shipped pages are themed with zero work
56
- here. To adjust the palette, edit `index.css` (`:root` **and** `.dark`) — the base44 way; **never add
57
- a parallel theme file (e.g. a `theme.css`) or restyle the shipped JSX.** Build the Home/Header you add
58
- (STEP 3) from the **same** base44 tokens/classes so it matches automatically. A dark brand is just
59
- base44's dark palette in `index.css` — no per-component work.
50
+ ## STEP 2 — Theme
51
+ Use the existing Base44 theme in `src/index.css` so your pages and the shipped components
52
+ share the same colors and typography.
60
53
 
61
54
  ## STEP 3 — Wire routes + provider (surgical `find_replace` on `src/App.jsx`, never a rewrite)
62
55
  **No file reads needed to wire this.** Every shipped page and `WixManageBanner` is a default export that takes **no props** — wire them exactly as the snippet shows; nothing in those files needs looking up.
@@ -206,10 +199,9 @@ official Wix Events API reference first, never guess:
206
199
  - Member login + "my registrations" → the **members** vertical (`references/members/INSTRUCTIONS.md`).
207
200
 
208
201
  Fallback only — when you hit an error or need something not shown here: read the relevant shipped file
209
- under `src/`, or look it up via the **`wix-docs`** skill.
202
+ under `src/`, or look it up via the documentation skill available in your environment.
210
203
 
211
204
  ## Hard rules
212
- - Style via base44 design tokens (`index.css` / shadcn Tailwind classes), never by rewriting the shipped components or adding a parallel theme file.
213
205
  - Header/footer live in a `Layout` around `<Outlet/>` (STEP 3) — never edit the shipped `Events`/`EventDetail` to add chrome.
214
206
  - The Layout's fixed top region owns positioning: `<WixManageBanner/>` above `<Header/>`; your `Header` is plain in-flow markup (not `position:fixed`).
215
207
  - Paid ticket checkout goes through the shipped reserve → `getTicketCheckoutUrl` redirect (the Wix-hosted ticket form) — never a hand-built registration/ticket/payment URL.
@@ -225,7 +217,6 @@ parallel.
225
217
 
226
218
  ## Verify (before declaring done)
227
219
  - [ ] Client files copied into `src/`; `WIX_CLIENT_ID` set (not the placeholder).
228
- - [ ] Brand palette lives in `index.css` (`:root`/`.dark`); no parallel theme file; shipped components/pages not restyled or rewritten.
229
220
  - [ ] Opened the vertical's data route(s) (not just the home page) and confirmed the shipped components render themed (surface, text, brand) with images.
230
221
  - [ ] `Layout` (fixed `<WixManageBanner/>` + `<Header/>` region, then `<Outlet/>` + Footer) wraps all routes; shipped `Events`/`EventDetail` untouched; content clears the fixed chrome.
231
222
  - [ ] Event grid renders live events; clicking a card opens the detail page by `slug`; visitor token persists across reload.
@@ -1,6 +1,6 @@
1
1
  # Events — seeding
2
2
 
3
- Seed Wix Events (Events V3) by **calling `seed-events.js`** — don't hand-write the REST calls. It's
3
+ Seed Wix Events (Events V3) by **calling `seed-events.cjs`** — don't hand-write the REST calls. It's
4
4
  a build-time module (run via `exec_tool`, not shipped in the app) that abstracts every Wix Events
5
5
  seed operation. `require` it and call the functions with plain data.
6
6
 
@@ -14,11 +14,7 @@ after create, and **publishing is one-way**. So per event: create DRAFT → (tic
14
14
  ```js
15
15
  // build-time exec_tool
16
16
  const { accessToken } = await base44.asServiceRole.connectors.getConnection("wix");
17
- const fs = require("fs");
18
- // exec_tool's require can return EMPTY exports for these build-time modules — load the file itself:
19
- const seed = (() => { const m = { exports: {} };
20
- new Function("module", "exports", "require", fs.readFileSync("/app/.agents/skills/wix-vibe-headless/references/events/seed/seed-events.js", "utf8"))(m, m.exports, require);
21
- return m.exports; })();
17
+ const seed = require(require("path").resolve(".agents/skills/wix-vibe-headless/references/events/seed/seed-events.cjs"));
22
18
  const ctx = { token: accessToken, siteId: WIX_METASITE_ID };
23
19
 
24
20
  // DEFAULT — one call runs the whole flow per event (create DRAFT → tiers → publish), then resolves
@@ -94,7 +90,7 @@ Free/RSVP events need neither.
94
90
 
95
91
  ## Reference
96
92
  If a call returns a shape you didn't expect, or you need an operation this module doesn't cover,
97
- use the **`wix-docs`** skill to search + read the live Wix API reference — never guess. The
93
+ use the documentation skill available in your environment to search + read the live Wix API reference — never guess. The
98
94
  authoritative source recipe is `wix-headless/references/inline-recipes/setup-events.md`.
99
95
 
100
96
  Read a method's page before writing its call: it carries the exact body shape, the required
@@ -8,7 +8,7 @@
8
8
  //
9
9
  // Usage (build-time exec_tool):
10
10
  // const { accessToken } = await base44.asServiceRole.connectors.getConnection("wix"); // Base44 (generic: use $TOKEN)
11
- // const seed = require("/app/.agents/skills/wix-vibe-headless/references/events/seed/seed-events.js");
11
+ // const seed = require("/app/.agents/skills/wix-vibe-headless/references/events/seed/seed-events.cjs");
12
12
  // const ctx = { token: accessToken, siteId: WIX_METASITE_ID };
13
13
  //
14
14
  // // setupEvents installs the Wix Events app first (installEventsApp) — base44 sites may not have it.
@@ -31,7 +31,7 @@
31
31
  // const file = await seed.importImage(ctx, imageUrl); // → { id, url } (Wix Media file id + wixstatic url)
32
32
  // await seed.setEventMainImage(ctx, { eventId: ev.id, id: file.id, url: file.url, height: 1024, width: 1024, altText: ev.slug });
33
33
  //
34
- // If any call fails with a shape the caller didn't expect, fall back to the wix-docs skill
34
+ // If any call fails with a shape the caller didn't expect, fall back to the documentation skill available in your environment
35
35
  // (search + read the live Wix API reference) — never guess. Source recipe (authoritative):
36
36
  // wix-headless/references/inline-recipes/setup-events.md.
37
37
 
@@ -15,6 +15,12 @@ field — the shipped utils supply the schema behind it, the state, the validati
15
15
  > Use **`cms`** only when the app must **read the entries back** (a gallery, a listing, "my
16
16
  > submissions") — a visitor cannot read Forms submissions. Submit-only → forms.
17
17
 
18
+ > **⚠️ "Add a field" is a SCHEMA change.** *"Add a dropdown for job industry"*, *"make the phone
19
+ > optional"*, *"drop the budget question"* — all reads like UI work and all are a `PATCH` to the live
20
+ > schema (`seed/SEED.md`, REVISE): patch it, verify, rewrite `wix-forms.config.js`, **then** wire the
21
+ > control. A field the visitor can fill that isn't in the schema is **silent data loss** — the value
22
+ > reaches no submission, inbox or contact, and the submit still resolves `true`.
23
+
18
24
  ## What ships (utils only)
19
25
 
20
26
  | file | what it is |
@@ -24,7 +30,7 @@ field — the shipped utils supply the schema behind it, the state, the validati
24
30
  | `rest/wix-forms-submissions.js` | Write transport: `toSubmissionValues`, `createSubmission`, `SUBMITTED_OK`, the file flow (`getMediaUploadUrl`, `uploadSubmissionFile`, `uploadFormFiles`), `submissionViolations`. |
25
31
  | `hooks/useWixForm.js` | The form's non-visual half: `useWixForm(formId)` → `{ form, values, setValues, bind, submit, validate, errors, loading, read }`. Also exports `validateField`, `mapSubmissionErrors`, `FORM_ERROR`. Not on React? Those plus `lib/` are the load-bearing part; port the state around them. |
26
32
  | `wix-config.js` *(shared)* | the two ids, written by the install step. |
27
- | `wix-forms.config.js` *(generated)* | **the gate** — `WIX_FORMS`: each form's `formId` + read-back `targets`, written by the seed after verification. |
33
+ | `wix-forms.config.js` *(generated)* | **the gate** — `WIX_FORMS`: each form's `formId` + read-back `targets`, written by the seed after verification. Its one later edit is a verified schema change (REVISE), never a hand-typed field. |
28
34
  | `WixManageBanner` *(shared)* | Dev-only manage banner — mount it in your Layout. |
29
35
 
30
36
  ## Prerequisites — a HARD GATE
@@ -384,6 +390,9 @@ Don't reach for `role="form"`, an `aria-label` on an input that already has a `<
384
390
  ## Hard rules
385
391
 
386
392
  - A visitor-fillable form is this vertical, not `cms`.
393
+ - **Never hold a form field in local component state** — a value outside the hook's `values` submits
394
+ nothing. Adding a field is a schema change: `seed/SEED.md`, REVISE.
395
+ - **Never answer a field request with a dashboard link** — that link is for the owner's own edits.
387
396
  - Read and write only through the shipped helpers — never hand-build a Wix Forms URL.
388
397
  - Never invent a `target`, label, option or constraint — every one comes from the schema (authored
389
398
  markup included). Never detect a control by its `target` name either.
@@ -412,8 +421,9 @@ Don't reach for `role="form"`, an `aria-label` on an input that already has a `<
412
421
 
413
422
  Three sources answer what this file doesn't: the **JSDoc** in `hooks/useWixForm.js` and
414
423
  `lib/wix-form-schema-utils.js`; the **Wix reference** below; and `seed/SEED.md` for how a field was
415
- authored. Calling an endpoint the helpers don't wrap is fine via `wixApiRequest` — look up the exact
416
- method and body first (or use the `wix-docs` skill), never guess.
424
+ authored, and REVISE for changing one. Calling an endpoint the helpers don't wrap is fine via
425
+ `wixApiRequest` — first look up the exact method and body in official Wix API documentation using
426
+ the documentation skill available in your environment; never guess.
417
427
 
418
428
  - Form object (the shape `form` and its fields arrive in): https://dev.wix.com/docs/api-reference/crm/forms/form-schemas/form-object.md
419
429
  - Form Schemas API: https://dev.wix.com/docs/api-reference/crm/forms/form-schemas.md
@@ -438,21 +448,28 @@ checks the dashboard summary, sends and deletes one real submission), then write
438
448
  `src/rest/wix-forms.config.js`. Needs an elevated credential, and **does not run in parallel with the
439
449
  client** — see Prerequisites.
440
450
 
451
+ **Changing a form that already exists** — a new field, a relabel, a tightened rule — is that doc's
452
+ **REVISE** action: `PATCH` on the current `revision`, re-verify, rewrite the config, wire the
453
+ control. Never a second create.
454
+
441
455
  ## Point the user to their dashboard
442
456
 
443
457
  Substitute the site's `metaSiteId`:
444
458
 
445
459
  - **Forms list** — `https://manage.wix.com/dashboard/{metaSiteId}/wix-forms`
446
- - **Form builder** — `https://manage.wix.com/dashboard/{metaSiteId}/wix-forms/form/{formId}` → add,
447
- relabel, reorder or require fields; every change reflects on the site with no code change.
448
- - **Submissions** — `https://manage.wix.com/dashboard/{metaSiteId}/wix-forms-and-payments/submissions`
449
- - **Forms settings** (incl. notifications) — `https://manage.wix.com/dashboard/{metaSiteId}/wix-forms-and-payments/settings`
460
+ - **Form builder** — `https://manage.wix.com/dashboard/{metaSiteId}/wix-forms/form/{formId}` → where
461
+ the **owner** edits fields; a relabel or new option reaches a looped form with no code change, a new
462
+ field still needs a control. **Asked to change the form yourself? REVISE, not this link.**
463
+ - **Submissions** — `https://manage.wix.com/dashboard/{metaSiteId}/wix-forms/form/{formId}/submissions`
464
+ → per form, off its builder path; there's no site-wide submissions page to link
450
465
  - **Contacts** — `https://manage.wix.com/dashboard/{metaSiteId}/contacts` → contact-mapped fields
451
466
  create or update a contact automatically.
452
467
 
453
468
  ## Verify
454
469
 
455
470
  - [ ] `wix-forms.config.js` exists; every `formId` comes from `WIX_FORMS`, none typed by hand.
471
+ - [ ] Every control's `name` inside the `<form>` is a target in `WIX_FORMS.<key>.targets`, and its
472
+ value lives in the hook's `values` — **no field is backed by local state**.
456
473
  - [ ] `WIX_CLIENT_ID` set (not the placeholder).
457
474
  - [ ] Looped form: relabel a field in the dashboard, reload, the new label appears with no code
458
475
  change. Authored form: every `target` in the JSX matches `WIX_FORMS.<key>.targets` exactly.