@wix/agent-skills 1.15.0 → 1.16.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 +5 -1
- package/package.json +1 -1
- package/skills/wix-app/SKILL.md +4 -1
- package/skills/wix-app/references/APP_TOOLS.md +134 -0
- package/skills/wix-app/references/CUSTOM_ELEMENT_WIDGET.md +1 -1
- package/skills/wix-app/references/DASHBOARD_PAGE.md +0 -10
- package/skills/wix-app/references/DATA_COLLECTION.md +6 -4
- package/skills/wix-app/references/EDITOR_REACT_COMPONENT.md +28 -7
- package/skills/wix-app/references/SERVICE_PLUGIN.md +12 -10
- package/skills/wix-app/references/STORES_VERSIONING.md +9 -211
- package/skills/wix-app/references/app-tools/TOOLS.md +75 -0
- package/skills/wix-app/references/backend-event/COMMON-EVENTS.md +5 -0
- package/skills/wix-app/references/dashboard-page/DASHBOARD_API.md +2 -2
- package/skills/wix-app/references/editor-react-component/A11Y-REVIEW-REFERENCE.md +172 -0
- package/skills/wix-app/references/editor-react-component/A11Y-REVIEW.md +138 -0
- package/skills/wix-app/references/editor-react-component/ANIMATED-COMPONENTS.md +172 -0
- package/skills/wix-app/references/editor-react-component/BRANDED-COMPONENTS.md +29 -0
- package/skills/wix-app/references/editor-react-component/COMPONENT-API.md +1 -1
- package/skills/wix-app/references/editor-react-component/COMPONENT-PREVIEW.md +57 -0
- package/skills/wix-app/references/editor-react-component/CSS-GUIDELINES.md +33 -2
- package/skills/wix-app/references/editor-react-component/DESIGN-STATES.md +5 -3
- package/skills/wix-app/references/editor-react-component/DIRECTIONALITY.md +18 -1
- package/skills/wix-app/references/editor-react-component/PARTS.md +15 -2
- package/skills/wix-app/references/editor-react-component/REACT-GUIDELINES.md +4 -3
- package/skills/wix-app/references/service-plugin/BOOKINGS-STAFF-SORTING.md +13 -9
- package/skills/wix-app/references/service-plugin/DISCOUNT-TRIGGERS.md +4 -0
- package/skills/wix-app/references/service-plugin/GIFT-CARDS.md +4 -0
- package/skills/wix-app/references/service-plugin/PAYMENT-SETTINGS.md +3 -1
- package/skills/wix-app/references/service-plugin/SHIPPING-RATES.md +4 -0
- package/skills/wix-app/references/service-plugin/TOOLS_PROVIDER.md +54 -0
- package/skills/wix-app/references/stores/CATEGORIES.md +22 -0
- package/skills/wix-app/references/stores/GET_PRODUCT.md +99 -0
- package/skills/wix-app/references/stores/INVENTORY.md +37 -0
- package/skills/wix-app/references/stores/QUERY.md +119 -0
- package/skills/wix-app/references/stores/WRITE.md +55 -0
- package/skills/wix-docs/SKILL.md +35 -3
- package/skills/wix-headless/SKILL.md +9 -2
- package/skills/wix-headless/entry/bootstrap.mjs +2 -2
- package/skills/wix-headless/entry/skill.md +0 -2
- package/skills/wix-headless/references/CAPABILITIES.md +6 -4
- package/skills/wix-headless/references/CONTENT.md +36 -0
- package/skills/wix-headless/references/DESIGN.md +54 -0
- package/skills/wix-headless/references/DISCOVERY.md +25 -1
- package/skills/wix-headless/references/FEEDBACK.md +16 -5
- package/skills/wix-headless/references/IMAGE_GENERATION.md +10 -0
- package/skills/wix-headless/references/SDK_HANDOFF.md +2 -0
- package/skills/wix-headless/references/SEED.md +3 -1
- package/skills/wix-headless/references/SETUP.md +1 -1
- package/skills/wix-headless/references/inline-recipes/how-to-code-a-store.md +3 -2
- package/skills/wix-headless/references/inline-recipes/how-to-code-restaurant-reservations.md +42 -2
- package/skills/wix-headless/references/inline-recipes/setup-bookings.md +5 -1
- package/skills/wix-headless/references/inline-recipes/setup-forms.md +1 -1
- package/skills/wix-headless/references/inline-recipes/setup-online-store.md +33 -8
- package/skills/wix-headless/references/inline-recipes/setup-portfolio.md +3 -1
- package/skills/wix-headless/references/inline-recipes/setup-restaurant-experiences.md +73 -0
- package/skills/wix-headless/references/inline-recipes/setup-restaurant-orders.md +38 -2
- package/skills/wix-headless/references/inline-recipes/setup-restaurant-reservations.md +20 -1
- package/skills/wix-headless/references/inline-recipes/setup-restaurants.md +1 -1
- package/skills/wix-headless/references/managed/CONNECT.md +2 -2
- package/skills/wix-headless/references/managed/CREATE.md +15 -1
- package/skills/wix-headless/references/managed/DEPLOYMENT.md +47 -0
- package/skills/wix-headless/references/self-managed/DEPLOYMENT.md +8 -0
- package/skills/wix-headless/references/stripe/DEPLOYMENT.md +8 -0
- package/skills/wix-manage/SKILL.md +131 -12
- package/skills/wix-manage/references/analytics/analytics-dashboard-navigation.md +41 -0
- package/skills/wix-manage/references/analytics/query-site-analytics.md +66 -9
- package/skills/wix-manage/references/app-installation/app-installation-dashboard-navigation.md +28 -0
- package/skills/wix-manage/references/app-installation/install-wix-apps.md +3 -0
- package/skills/wix-manage/references/blog/blog-dashboard-navigation.md +56 -0
- package/skills/wix-manage/references/blog/how-to-create-blog-posts.md +31 -6
- package/skills/wix-manage/references/bookings/booking-service-policy-setup.md +3 -1
- package/skills/wix-manage/references/bookings/bookings-dashboard-navigation.md +63 -0
- package/skills/wix-manage/references/bookings/create-booking-service-from-prompt.md +6 -5
- package/skills/wix-manage/references/bookings/create-course-service.md +30 -5
- package/skills/wix-manage/references/bookings/diagnose-availability-issues.md +85 -42
- package/skills/wix-manage/references/cms/cms-dashboard-navigation.md +44 -0
- package/skills/wix-manage/references/cms/cms-data-items-crud.md +31 -3
- package/skills/wix-manage/references/cms/cms-publishing-flow.md +287 -0
- package/skills/wix-manage/references/cms/cms-schema-management.md +33 -1
- package/skills/wix-manage/references/contacts/contacts-dashboard-navigation.md +46 -0
- package/skills/wix-manage/references/contacts/create-a-contact.md +82 -0
- package/skills/wix-manage/references/contacts/update-a-contact.md +119 -0
- package/skills/wix-manage/references/dashboard-navigation/dashboard-navigation.md +82 -0
- package/skills/wix-manage/references/dashboard-navigation/routes.json +1733 -0
- package/skills/wix-manage/references/domains/domains-dashboard-navigation.md +32 -0
- package/skills/wix-manage/references/ecommerce/ecom-pricing.md +4 -4
- package/skills/wix-manage/references/ecommerce/ecom-shipping.md +1 -1
- package/skills/wix-manage/references/ecommerce/gift-cards/ecom-gift-cards-goal-sell-gift-cards.md +338 -0
- package/skills/wix-manage/references/ecommerce/pricing-promotions/ecom-pricing-create-discount-rule.md +42 -78
- package/skills/wix-manage/references/ecommerce/pricing-promotions/ecom-pricing-flow-bundle-and-save.md +1 -1
- package/skills/wix-manage/references/ecommerce/pricing-promotions/ecom-pricing-flow-stock-mover.md +1 -1
- package/skills/wix-manage/references/ecommerce/pricing-promotions/ecom-pricing-flow-upsell-boost.md +1 -1
- package/skills/wix-manage/references/ecommerce/recommend-ecommerce-strategy.md +90 -92
- package/skills/wix-manage/references/events/create-wix-event.md +176 -0
- package/skills/wix-manage/references/events/manage-wix-events.md +174 -0
- package/skills/wix-manage/references/forms/forms-dashboard-navigation.md +44 -0
- package/skills/wix-manage/references/get-paid/get-paid-dashboard-navigation.md +52 -0
- package/skills/wix-manage/references/get-paid/how-to-setup-wix-payments.md +30 -7
- package/skills/wix-manage/references/google-ads/billing-and-payment.md +80 -0
- package/skills/wix-manage/references/google-ads/create-performance-max-campaign.md +212 -0
- package/skills/wix-manage/references/google-ads/get-campaign-suggestions.md +110 -0
- package/skills/wix-manage/references/google-ads/google-ads-dashboard-navigation.md +25 -0
- package/skills/wix-manage/references/google-ads/install-and-create-account.md +155 -0
- package/skills/wix-manage/references/google-ads/manage-campaign-lifecycle.md +63 -0
- package/skills/wix-manage/references/google-ads/query-campaign-analytics.md +155 -0
- package/skills/wix-manage/references/marketing/create-and-publish-social-post.md +225 -144
- package/skills/wix-manage/references/marketing/generate-and-publish-marketing-plan.md +19 -10
- package/skills/wix-manage/references/marketing/marketing-dashboard-navigation.md +52 -0
- package/skills/wix-manage/references/pricing-plans/create-and-update-pricing-plans.md +99 -1
- package/skills/wix-manage/references/pricing-plans/pricing-plans-dashboard-navigation.md +45 -0
- package/skills/wix-manage/references/restaurants/restaurants-dashboard-navigation.md +68 -0
- package/skills/wix-manage/references/restaurants/wix-restaurants-setup.md +94 -125
- package/skills/wix-manage/references/site-properties/change-payment-currency-site-properties.md +48 -9
- package/skills/wix-manage/references/site-properties/site-properties-dashboard-navigation.md +31 -0
- package/skills/wix-manage/references/sites/create-headless-site.md +52 -0
- package/skills/wix-manage/references/sites/create-site-from-template.md +2 -25
- package/skills/wix-manage/references/sites/site-import.md +243 -0
- package/skills/wix-manage/references/sites/sites-dashboard-navigation.md +29 -0
- package/skills/wix-manage/references/stores/add-store-pages-to-site.md +17 -1
- package/skills/wix-manage/references/stores/create-product-from-image.md +8 -6
- package/skills/wix-manage/references/stores/create-product-with-options-catalog-v3.md +16 -10
- package/skills/wix-manage/references/stores/find-products-query-and-search-catalog-v3.md +26 -8
- package/skills/wix-manage/references/stores/stores-dashboard-navigation.md +65 -0
- package/skills/wix-manage/references/stores/update-product-with-options.md +39 -7
- package/skills/wix-replatform/.publish-manifest.json +8 -0
- package/skills/wix-replatform/SKILL.md +693 -0
- package/skills/wix-replatform/lib/artifact-freshness.js +215 -0
- package/skills/wix-replatform/lib/completion-report.js +200 -0
- package/skills/wix-replatform/lib/config-env.js +59 -0
- package/skills/wix-replatform/lib/execution-manifest.js +185 -0
- package/skills/wix-replatform/lib/execution-state.js +173 -0
- package/skills/wix-replatform/lib/import-recovery.js +313 -0
- package/skills/wix-replatform/lib/local-state.js +642 -0
- package/skills/wix-replatform/lib/orchestration-preflight.js +143 -0
- package/skills/wix-replatform/lib/orchestration-router.js +122 -0
- package/skills/wix-replatform/lib/orchestration-state.js +455 -0
- package/skills/wix-replatform/lib/progress-log.js +224 -0
- package/skills/wix-replatform/lib/progress-log.sh +140 -0
- package/skills/wix-replatform/lib/url-preservation-state.js +391 -0
- package/skills/wix-replatform/resources/rp-discovery/SKILL.md +184 -0
- package/skills/wix-replatform/resources/rp-execute-import/SKILL.md +529 -0
- package/skills/wix-replatform/resources/rp-execute-setup/SKILL.md +316 -0
- package/skills/wix-replatform/resources/rp-execute-setup/scripts/mint-token.sh +64 -0
- package/skills/wix-replatform/resources/rp-import-codegen/SKILL.md +1114 -0
- package/skills/wix-replatform/resources/rp-mapper/SKILL.md +430 -0
- package/skills/wix-replatform/resources/rp-mapper/lib/mapping-resolve.js +217 -0
- package/skills/wix-replatform/resources/rp-mapper/scripts/resolve-mapping.js +148 -0
- package/skills/wix-replatform/resources/rp-mapper/wix-business-solutions-taxonomy.md +378 -0
- package/skills/wix-replatform/resources/rp-setup-discovery/SKILL.md +183 -0
- package/skills/wix-replatform/resources/rp-source-csv/SKILL.md +478 -0
- package/skills/wix-replatform/resources/rp-source-csv/lib/canonical-record.js +136 -0
- package/skills/wix-replatform/resources/rp-source-csv/lib/csv-fileset.js +0 -0
- package/skills/wix-replatform/resources/rp-source-csv/lib/csv-fingerprint.js +310 -0
- package/skills/wix-replatform/resources/rp-source-csv/lib/csv-layout.js +1081 -0
- package/skills/wix-replatform/resources/rp-source-csv/lib/csv-parse.js +618 -0
- package/skills/wix-replatform/resources/rp-source-csv/scripts/csv-discovery.js +949 -0
- package/skills/wix-replatform/resources/rp-source-csv/source-schema.example.json +196 -0
- package/skills/wix-replatform/resources/rp-source-csv/vendors/bigcommerce.json +66 -0
- package/skills/wix-replatform/resources/rp-source-csv/vendors/magento.json +60 -0
- package/skills/wix-replatform/resources/rp-source-csv/vendors/shopify.json +95 -0
- package/skills/wix-replatform/resources/rp-source-csv/vendors/woocommerce.json +82 -0
- package/skills/wix-replatform/resources/rp-source-wordpress/SKILL.md +256 -0
- package/skills/wix-replatform/resources/rp-source-wordpress/lib/wp-http.js +249 -0
- package/skills/wix-replatform/resources/rp-source-wordpress/lib/wp-route-classifier.js +444 -0
- package/skills/wix-replatform/resources/rp-source-wordpress/scripts/wp-discovery.js +774 -0
- package/skills/wix-replatform/resources/rp-source-wordpress/source-schema.example.json +71 -0
- package/skills/wix-replatform/resources/rp-target-wix/SKILL.md +632 -0
- package/skills/wix-replatform/resources/rp-target-wix/SPEC-product-reviews-and-blog-authorship.md +330 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/README.md +21 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/blog/domain.json +19 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/blog/entities/category.json +37 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/blog/entities/comment.json +37 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/blog/entities/post.json +39 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/blog/entities/tag.json +35 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/cms/domain.json +14 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/cms/entities/collection.json +35 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/cms/entities/data-item.json +36 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/cms/entities/reference.json +35 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/crm/domain.json +14 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/crm/entities/contact.json +131 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/crm/entities/email-subscription.json +37 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/crm/entities/label.json +37 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/domain.json +21 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/order-line-item.json +37 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/order-refund.json +37 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/order.json +97 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/index.json +528 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/media/domain.json +14 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/media/entities/media-file.json +38 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/media/entities/media-folder.json +37 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/members/domain.json +13 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/members/entities/badge.json +37 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/members/entities/member.json +53 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/schema.json +84 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/stores/domain.json +25 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/category.json +37 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/coupon.json +37 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/inventory-item.json +38 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/product-tag.json +37 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/product.json +90 -0
- package/skills/wix-replatform/resources/rp-target-wix/lib/audit-summary.js +64 -0
- package/skills/wix-replatform/resources/rp-target-wix/lib/contract-ledger.js +141 -0
- package/skills/wix-replatform/resources/rp-target-wix/lib/domain-knowledge.js +384 -0
- package/skills/wix-replatform/resources/rp-target-wix/lib/ndjson.js +260 -0
- package/skills/wix-replatform/resources/rp-target-wix/lib/stores-verification.js +238 -0
- package/skills/wix-replatform/resources/rp-target-wix/lib/wix-build.js +237 -0
- package/skills/wix-replatform/resources/rp-target-wix/lib/wix-target-spec.js +238 -0
- package/skills/wix-replatform/resources/rp-target-wix/lib/wix-writers.js +2219 -0
- package/skills/wix-replatform/resources/rp-target-wix/scripts/domain-knowledge-validate.js +31 -0
- package/skills/wix-replatform/resources/rp-target-wix/scripts/domain-knowledge.js +100 -0
- package/skills/wix-replatform/resources/rp-target-wix/scripts/verify-stores.js +107 -0
- package/skills/wix-replatform/resources/rp-telemetry/SKILL.md +344 -0
- package/skills/wix-replatform/resources/rp-telemetry/lib/bi-sink.js +250 -0
- package/skills/wix-replatform/resources/rp-telemetry/lib/telemetry-recorder.js +1927 -0
- package/skills/wix-replatform/resources/rp-telemetry/scripts/meter-from-audit.js +83 -0
- package/skills/wix-replatform/resources/rp-telemetry/scripts/rp-telemetry.js +141 -0
- package/skills/wix-replatform/scripts/artifact-freshness.js +76 -0
- package/skills/wix-replatform/scripts/execution-manifest-validate.js +43 -0
- package/skills/wix-replatform/scripts/execution-state-prepare.js +128 -0
- package/skills/wix-replatform/scripts/orchestration-preflight.js +48 -0
- package/skills/wix-replatform/scripts/orchestration-route.js +46 -0
- package/skills/wix-replatform/scripts/orchestration-state.js +245 -0
- package/skills/wix-vibe-headless/SKILL.md +54 -25
- package/skills/wix-vibe-headless/install/deploy.cjs +95 -0
- package/skills/wix-vibe-headless/install/pin-agents-md.cjs +34 -0
- package/skills/wix-vibe-headless/platforms/README.md +26 -0
- package/skills/wix-vibe-headless/platforms/base44.md +177 -0
- package/skills/wix-vibe-headless/platforms/generic.md +122 -0
- package/skills/wix-vibe-headless/references/blog/INSTRUCTIONS.md +230 -119
- package/skills/wix-vibe-headless/references/blog/app/components/PostCard.jsx +43 -0
- package/skills/wix-vibe-headless/references/blog/app/components/PostChips.jsx +25 -0
- package/skills/wix-vibe-headless/references/blog/app/components/PostGrid.jsx +15 -0
- package/skills/wix-vibe-headless/references/blog/app/context/TaxonomyContext.jsx +35 -0
- package/skills/wix-vibe-headless/references/blog/app/hooks/usePostDetail.js +38 -0
- package/skills/wix-vibe-headless/references/blog/app/pages/Blog.jsx +40 -0
- package/skills/wix-vibe-headless/references/blog/app/pages/CategoryPage.jsx +54 -0
- package/skills/wix-vibe-headless/references/blog/app/pages/PostDetail.jsx +65 -0
- package/skills/wix-vibe-headless/references/blog/app/pages/TagPage.jsx +50 -0
- package/skills/wix-vibe-headless/references/blog/seed/SEED.md +103 -0
- package/skills/wix-vibe-headless/references/blog/seed/seed-blog.js +270 -0
- package/skills/wix-vibe-headless/references/bookings/INSTRUCTIONS.md +260 -145
- package/skills/wix-vibe-headless/references/bookings/app/components/BookingForm.jsx +65 -0
- package/skills/wix-vibe-headless/references/bookings/app/components/ServiceCard.jsx +47 -0
- package/skills/wix-vibe-headless/references/bookings/app/components/ServiceGrid.jsx +13 -0
- package/skills/wix-vibe-headless/references/bookings/app/components/SlotPicker.jsx +126 -0
- package/skills/wix-vibe-headless/references/bookings/app/hooks/useServiceDetail.js +108 -0
- package/skills/wix-vibe-headless/references/bookings/app/hooks/useServices.js +58 -0
- package/skills/wix-vibe-headless/references/bookings/app/lib/serviceFacts.js +95 -0
- package/skills/wix-vibe-headless/references/bookings/app/pages/ServiceDetail.jsx +94 -0
- package/skills/wix-vibe-headless/references/bookings/app/pages/Services.jsx +89 -0
- package/skills/wix-vibe-headless/references/bookings/{wix-bookings-checkout.js → app/rest/wix-bookings-checkout.js} +1 -1
- package/skills/wix-vibe-headless/references/bookings/{wix-bookings-services.js → app/rest/wix-bookings-services.js} +90 -12
- package/skills/wix-vibe-headless/references/bookings/seed/SEED.md +117 -0
- package/skills/wix-vibe-headless/references/bookings/seed/seed-bookings.js +333 -0
- package/skills/wix-vibe-headless/references/cms/INSTRUCTIONS.md +169 -147
- package/skills/wix-vibe-headless/references/cms/app/collection.config.js +31 -0
- package/skills/wix-vibe-headless/references/cms/app/lib/wixImage.js +18 -0
- package/skills/wix-vibe-headless/references/cms/{wix-cms.js → app/rest/wix-cms.js} +47 -2
- package/skills/wix-vibe-headless/references/cms/seed/SEED.md +145 -0
- package/skills/wix-vibe-headless/references/events/INSTRUCTIONS.md +228 -131
- package/skills/wix-vibe-headless/references/events/app/components/CategoryFilter.jsx +23 -0
- package/skills/wix-vibe-headless/references/events/app/components/EventCard.jsx +43 -0
- package/skills/wix-vibe-headless/references/events/app/components/EventGrid.jsx +13 -0
- package/skills/wix-vibe-headless/references/events/app/components/EventRegistration.jsx +29 -0
- package/skills/wix-vibe-headless/references/events/app/components/RsvpForm.jsx +57 -0
- package/skills/wix-vibe-headless/references/events/app/components/TicketPicker.jsx +78 -0
- package/skills/wix-vibe-headless/references/events/app/hooks/useEventDetail.js +27 -0
- package/skills/wix-vibe-headless/references/events/app/hooks/useEventsList.js +54 -0
- package/skills/wix-vibe-headless/references/events/app/hooks/useRsvpForm.js +40 -0
- package/skills/wix-vibe-headless/references/events/app/hooks/useTicketing.js +81 -0
- package/skills/wix-vibe-headless/references/events/app/pages/EventDetail.jsx +48 -0
- package/skills/wix-vibe-headless/references/events/app/pages/Events.jsx +36 -0
- package/skills/wix-vibe-headless/references/events/{wix-events-browse.js → app/rest/wix-events-browse.js} +3 -2
- package/skills/wix-vibe-headless/references/events/seed/SEED.md +107 -0
- package/skills/wix-vibe-headless/references/events/seed/seed-events.js +251 -0
- package/skills/wix-vibe-headless/references/members/INSTRUCTIONS.md +276 -188
- package/skills/wix-vibe-headless/references/members/app/components/LoginForm.jsx +101 -0
- package/skills/wix-vibe-headless/references/members/app/components/MemberMenu.jsx +33 -0
- package/skills/wix-vibe-headless/references/members/app/components/RequireAuth.jsx +21 -0
- package/skills/wix-vibe-headless/references/members/app/components/SocialButtons.jsx +29 -0
- package/skills/wix-vibe-headless/references/members/app/context/MemberContext.jsx +54 -0
- package/skills/wix-vibe-headless/references/members/app/hooks/useLoginForm.js +77 -0
- package/skills/wix-vibe-headless/references/members/app/pages/Account.jsx +36 -0
- package/skills/wix-vibe-headless/references/members/app/pages/Callback.jsx +32 -0
- package/skills/wix-vibe-headless/references/members/app/pages/Login.jsx +35 -0
- package/skills/wix-vibe-headless/references/members/{wix-members-auth.js → app/rest/wix-members-auth.js} +6 -3
- package/skills/wix-vibe-headless/references/members/install/Register.jsx +22 -0
- package/skills/wix-vibe-headless/references/members/seed/SEED.md +22 -0
- package/skills/wix-vibe-headless/references/portfolio/INSTRUCTIONS.md +233 -104
- package/skills/wix-vibe-headless/references/portfolio/app/components/CollectionCard.jsx +31 -0
- package/skills/wix-vibe-headless/references/portfolio/app/components/CollectionGrid.jsx +15 -0
- package/skills/wix-vibe-headless/references/portfolio/app/components/ProjectCard.jsx +39 -0
- package/skills/wix-vibe-headless/references/portfolio/app/components/ProjectGrid.jsx +15 -0
- package/skills/wix-vibe-headless/references/portfolio/app/components/ProjectMedia.jsx +29 -0
- package/skills/wix-vibe-headless/references/portfolio/app/hooks/useCollectionProjects.js +35 -0
- package/skills/wix-vibe-headless/references/portfolio/app/hooks/usePortfolioGallery.js +27 -0
- package/skills/wix-vibe-headless/references/portfolio/app/hooks/useProjectDetail.js +25 -0
- package/skills/wix-vibe-headless/references/portfolio/app/pages/CollectionPage.jsx +39 -0
- package/skills/wix-vibe-headless/references/portfolio/app/pages/Portfolio.jsx +27 -0
- package/skills/wix-vibe-headless/references/portfolio/app/pages/ProjectDetail.jsx +60 -0
- package/skills/wix-vibe-headless/references/portfolio/{wix-portfolio.js → app/rest/wix-portfolio.js} +84 -55
- package/skills/wix-vibe-headless/references/portfolio/seed/SEED.md +94 -0
- package/skills/wix-vibe-headless/references/portfolio/seed/seed-portfolio.js +236 -0
- package/skills/wix-vibe-headless/references/pricing-plans/INSTRUCTIONS.md +240 -117
- package/skills/wix-vibe-headless/references/pricing-plans/app/components/OrderCard.jsx +35 -0
- package/skills/wix-vibe-headless/references/pricing-plans/app/components/PlanCard.jsx +48 -0
- package/skills/wix-vibe-headless/references/pricing-plans/app/components/PlanGrid.jsx +16 -0
- package/skills/wix-vibe-headless/references/pricing-plans/app/components/PlanPrice.jsx +35 -0
- package/skills/wix-vibe-headless/references/pricing-plans/app/hooks/useMyPlans.js +25 -0
- package/skills/wix-vibe-headless/references/pricing-plans/app/hooks/usePlanDetail.js +28 -0
- package/skills/wix-vibe-headless/references/pricing-plans/app/hooks/usePlans.js +30 -0
- package/skills/wix-vibe-headless/references/pricing-plans/app/pages/MyPlans.jsx +30 -0
- package/skills/wix-vibe-headless/references/pricing-plans/app/pages/PlanDetail.jsx +53 -0
- package/skills/wix-vibe-headless/references/pricing-plans/app/pages/Plans.jsx +28 -0
- package/skills/wix-vibe-headless/references/pricing-plans/seed/SEED.md +86 -0
- package/skills/wix-vibe-headless/references/pricing-plans/seed/seed-pricing-plans.js +251 -0
- package/skills/wix-vibe-headless/references/restaurants/INSTRUCTIONS.md +248 -124
- package/skills/wix-vibe-headless/references/restaurants/app/components/ItemDialog.jsx +81 -0
- package/skills/wix-vibe-headless/references/restaurants/app/components/MenuItemCard.jsx +71 -0
- package/skills/wix-vibe-headless/references/restaurants/app/components/MenuList.jsx +43 -0
- package/skills/wix-vibe-headless/references/restaurants/app/components/OrderCartButton.jsx +21 -0
- package/skills/wix-vibe-headless/references/restaurants/app/components/OrderCartDrawer.jsx +60 -0
- package/skills/wix-vibe-headless/references/restaurants/app/context/OrderCartContext.jsx +63 -0
- package/skills/wix-vibe-headless/references/restaurants/app/hooks/useItemOrder.js +32 -0
- package/skills/wix-vibe-headless/references/restaurants/app/hooks/useReservation.js +73 -0
- package/skills/wix-vibe-headless/references/restaurants/app/pages/Menu.jsx +28 -0
- package/skills/wix-vibe-headless/references/restaurants/app/pages/Reservations.jsx +102 -0
- package/skills/wix-vibe-headless/references/restaurants/seed/SEED.md +180 -0
- package/skills/wix-vibe-headless/references/restaurants/seed/seed-restaurants.js +452 -0
- package/skills/wix-vibe-headless/references/shared/app/components/WixManageBanner.jsx +56 -0
- package/skills/wix-vibe-headless/references/shared/{wix-client.js → app/rest/wix-client.js} +6 -8
- package/skills/wix-vibe-headless/references/shared/app/rest/wix-config.js +6 -0
- package/skills/wix-vibe-headless/references/storefront/INSTRUCTIONS.md +263 -148
- package/skills/wix-vibe-headless/references/storefront/app/components/CartButton.jsx +20 -0
- package/skills/wix-vibe-headless/references/storefront/app/components/CartDrawer.jsx +150 -0
- package/skills/wix-vibe-headless/references/storefront/app/components/ProductCard.jsx +167 -0
- package/skills/wix-vibe-headless/references/storefront/app/components/ProductGallery.jsx +51 -0
- package/skills/wix-vibe-headless/references/storefront/app/components/ProductGrid.jsx +54 -0
- package/skills/wix-vibe-headless/references/storefront/app/components/VariantPicker.jsx +119 -0
- package/skills/wix-vibe-headless/references/storefront/app/context/CartContext.jsx +71 -0
- package/skills/wix-vibe-headless/references/storefront/app/hooks/useProductDetail.js +109 -0
- package/skills/wix-vibe-headless/references/storefront/app/hooks/useShop.js +98 -0
- package/skills/wix-vibe-headless/references/storefront/app/lib/storeImage.js +27 -0
- package/skills/wix-vibe-headless/references/storefront/app/pages/ProductDetail.jsx +139 -0
- package/skills/wix-vibe-headless/references/storefront/app/pages/Shop.jsx +75 -0
- package/skills/wix-vibe-headless/references/storefront/{wix-store-cart.js → app/rest/wix-store-cart.js} +1 -1
- package/skills/wix-vibe-headless/references/storefront/{wix-store-catalog.js → app/rest/wix-store-catalog.js} +25 -2
- package/skills/wix-vibe-headless/references/storefront/seed/SEED.md +111 -0
- package/skills/wix-vibe-headless/references/storefront/seed/seed-store.js +299 -0
- /package/skills/wix-vibe-headless/references/blog/{wix-blog.js → app/rest/wix-blog.js} +0 -0
- /package/skills/wix-vibe-headless/references/events/{wix-events-registration.js → app/rest/wix-events-registration.js} +0 -0
- /package/skills/wix-vibe-headless/references/pricing-plans/{wix-pricing-plans.js → app/rest/wix-pricing-plans.js} +0 -0
- /package/skills/wix-vibe-headless/references/restaurants/{wix-restaurants-menu.js → app/rest/wix-restaurants-menu.js} +0 -0
- /package/skills/wix-vibe-headless/references/restaurants/{wix-restaurants-ordering.js → app/rest/wix-restaurants-ordering.js} +0 -0
- /package/skills/wix-vibe-headless/references/restaurants/{wix-restaurants-reservations.js → app/rest/wix-restaurants-reservations.js} +0 -0
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
# CMS — seeding (Wix Data v2 REST)
|
|
2
|
+
|
|
3
|
+
Seeding a collection is an **admin/build-time** job: create the collection(s), insert items, wire
|
|
4
|
+
references, attach images — all via the **Wix Data v2 REST API**. There is **no helper module** — make
|
|
5
|
+
the calls yourself with the shapes below. Needs an **elevated credential** (a connector token or a Wix
|
|
6
|
+
API key; the public `WIX_CLIENT_ID` cannot write — see the platform doc's seed-auth step).
|
|
7
|
+
|
|
8
|
+
**⛔ Additive only — never delete, reset, or overwrite existing content.**
|
|
9
|
+
|
|
10
|
+
## Auth (on every call)
|
|
11
|
+
The curls below are **request shapes** — endpoint, method, body. **Never inline the raw token/API key**
|
|
12
|
+
into a command: it would end up in the transcript, exec logs, and shell history. Keep the credential in
|
|
13
|
+
a variable and reference it.
|
|
14
|
+
- **On Base44 (and any exec-tool platform): don't shell out to curl — make these calls with `fetch()`**,
|
|
15
|
+
taking the token from the connector so it's never printed:
|
|
16
|
+
```js
|
|
17
|
+
const { accessToken } = await base44.asServiceRole.connectors.getConnection("wix"); // token stays in memory
|
|
18
|
+
await fetch(`https://www.wixapis.com/wix-data/v2/collections`, {
|
|
19
|
+
method: "POST",
|
|
20
|
+
headers: { Authorization: `Bearer ${accessToken}`, "wix-site-id": METASITE_ID, "Content-Type": "application/json" },
|
|
21
|
+
body: JSON.stringify({ collection: { /* … */ } }),
|
|
22
|
+
});
|
|
23
|
+
```
|
|
24
|
+
- **On a shell/curl platform:** load the credential into an env var from your secret manager (don't
|
|
25
|
+
echo it), then reference `$TOKEN` — the literal never appears in the command you write:
|
|
26
|
+
```bash
|
|
27
|
+
API=https://www.wixapis.com
|
|
28
|
+
# TOKEN comes from your connector / secret manager (e.g. TOKEN="$WIX_TOKEN") — do NOT paste it here.
|
|
29
|
+
AUTH=(-H "Authorization: Bearer $TOKEN" -H "wix-site-id: $METASITE_ID" -H "Content-Type: application/json")
|
|
30
|
+
# Wix API key instead of a token → -H "Authorization: $TOKEN" (raw, NO "Bearer")
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## 0 · Install the Wix Data app — only if a data call returns `WDE0110` (app not installed)
|
|
34
|
+
```bash
|
|
35
|
+
curl -sS -X POST "$API/apps-installer-service/v1/app-instance/install" "${AUTH[@]}" \
|
|
36
|
+
-d '{"tenant":{"tenantType":"SITE","id":"<METASITE_ID>"},
|
|
37
|
+
"appInstance":{"appDefId":"e593b0bd-b783-45b8-97c2-873d42aacaf4","enabled":true}}'
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
## 1 · Create a collection — the `permissions` block is MANDATORY
|
|
41
|
+
```bash
|
|
42
|
+
curl -sS -X POST "$API/wix-data/v2/collections" "${AUTH[@]}" -d '{
|
|
43
|
+
"collection": {
|
|
44
|
+
"id": "Recipes", "displayName": "Recipes",
|
|
45
|
+
"fields": [
|
|
46
|
+
{ "key": "title", "displayName": "Title", "type": "TEXT" },
|
|
47
|
+
{ "key": "photo", "displayName": "Photo", "type": "IMAGE" },
|
|
48
|
+
{ "key": "categories", "displayName": "Categories", "type": "MULTI_REFERENCE",
|
|
49
|
+
"typeMetadata": { "multiReference": { "referencedCollectionId": "Categories" } } }
|
|
50
|
+
],
|
|
51
|
+
"permissions": { "insert": "ADMIN", "update": "ADMIN", "remove": "ADMIN", "read": "ANYONE" }
|
|
52
|
+
}
|
|
53
|
+
}'
|
|
54
|
+
```
|
|
55
|
+
- The `id` you send **is** the collection id (Wix doesn't rename it) — keep it + the field keys.
|
|
56
|
+
- **Permissions is required and load-bearing.** A public collection's `read` **must** be `"ANYONE"` or a visitor query silently returns 0 items. Presets:
|
|
57
|
+
|
|
58
|
+
| preset | `read` / `insert` / `update` / `remove` | use |
|
|
59
|
+
|---|---|---|
|
|
60
|
+
| **public-read** (default) | `ANYONE` / `ADMIN` / `ADMIN` / `ADMIN` | admin content, anyone reads |
|
|
61
|
+
| **collaborative** | `ANYONE` / `ANYONE` / `ANYONE` / `ANYONE` | visitor-written shared board (anonymous, unscoped) |
|
|
62
|
+
| **member-private** | `SITE_MEMBER_AUTHOR` / `SITE_MEMBER` / `SITE_MEMBER_AUTHOR` / `SITE_MEMBER_AUTHOR` | per-user "my…" rows (`_owner`-matched); **create it EMPTY** — members populate it from the client with their **member token** so Wix stamps `_owner` |
|
|
63
|
+
| **member-shared-read-only** | `SITE_MEMBER` / `ADMIN` / `ADMIN` / `ADMIN` | gated: any member reads, seed/admin writes |
|
|
64
|
+
| **public-wall** | `ANYONE` / `SITE_MEMBER` / `SITE_MEMBER_AUTHOR` / `SITE_MEMBER_AUTHOR` | members post, **everyone** reads (public gallery/feed); authors edit only their own |
|
|
65
|
+
|
|
66
|
+
- **The values are Wix user *roles*, and they're a hierarchy** — a role can do anything the roles below it can. Pick per action (`read` / `insert` / `update` / `remove`):
|
|
67
|
+
|
|
68
|
+
| role | who, for that action |
|
|
69
|
+
|---|---|
|
|
70
|
+
| `ANYONE` | any visitor, logged in or not |
|
|
71
|
+
| `SITE_MEMBER` | any logged-in member — **all** rows |
|
|
72
|
+
| `SITE_MEMBER_AUTHOR` | logged-in members, but **only rows they created** (Wix matches `_owner`) — this is how "only mine" is enforced, server-side |
|
|
73
|
+
| `CMS_EDITOR` | Wix users holding a CMS role |
|
|
74
|
+
| `PRIVILEGED` / `ADMIN` | site admins + special permissions only |
|
|
75
|
+
|
|
76
|
+
So **`read` is the privacy decision**: `SITE_MEMBER_AUTHOR` scopes each read to its caller on the
|
|
77
|
+
server, so a member receives only their own rows and the client needs no filter; `ANYONE` publishes
|
|
78
|
+
every row, and a `_owner` filter then selects a view of public data. Set it here, at create time —
|
|
79
|
+
the client inherits whichever you choose.
|
|
80
|
+
Reference: [Data Permissions](https://dev.wix.com/docs/api-reference/business-solutions/cms/collection-management/data-permissions/introduction.md)
|
|
81
|
+
|
|
82
|
+
- **MULTI_REFERENCE fields:** `typeMetadata.multiReference.referencedCollectionId` is mandatory (NOT `referencedCollection` — the docs' stale key stores an empty target and every later link is dead), and the **target collection must be created first**.
|
|
83
|
+
- `409 WDE0104` = "collection already exists" — fine (additive); skip and move on.
|
|
84
|
+
|
|
85
|
+
## 2 · Insert items — bulk
|
|
86
|
+
```bash
|
|
87
|
+
curl -sS -X POST "$API/wix-data/v2/bulk/items/insert" "${AUTH[@]}" -d '{
|
|
88
|
+
"dataCollectionId": "Recipes",
|
|
89
|
+
"dataItems": [ { "data": { "title": "Chocolate Cake" } }, { "data": { "title": "Pavlova" } } ],
|
|
90
|
+
"returnEntity": true
|
|
91
|
+
}'
|
|
92
|
+
# ← read each id from results[].dataItem.id (NOT results[].item)
|
|
93
|
+
```
|
|
94
|
+
Single item: `POST $API/wix-data/v2/items` with `{"dataCollectionId":"Recipes","dataItem":{"data":{…}}}`.
|
|
95
|
+
- Set plain fields + single `REFERENCE` (pass the target item's `_id` string) only. A **`MULTI_REFERENCE` value here is silently dropped** (no error) — wire it in step 4.
|
|
96
|
+
|
|
97
|
+
## 3 · Verify — a `200` does NOT prove the rows persisted
|
|
98
|
+
```bash
|
|
99
|
+
curl -sS -X POST "$API/wix-data/v2/items/query" "${AUTH[@]}" -d '{"dataCollectionId":"Recipes"}'
|
|
100
|
+
# ← { "dataItems": [ { "id": "...", "data": { … } }, … ] }
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
## 4 · Wire multi-references — only if collections relate
|
|
104
|
+
```bash
|
|
105
|
+
curl -sS -X POST "$API/wix-data/v2/bulk/items/insert-references" "${AUTH[@]}" -d '{
|
|
106
|
+
"dataCollectionId": "Recipes",
|
|
107
|
+
"dataItemReferences": [
|
|
108
|
+
{ "referringItemFieldName": "categories", "referringItemId": "<recipeId>", "referencedItemId": "<categoryId>" }
|
|
109
|
+
]
|
|
110
|
+
}'
|
|
111
|
+
```
|
|
112
|
+
Resolves only if the field was created with a non-empty `referencedCollectionId` (step 1). Ids come from step 2's `results[].dataItem.id`.
|
|
113
|
+
|
|
114
|
+
## 5 · Images (optional)
|
|
115
|
+
An `IMAGE` field stores a **URL string**. Use a permanent Wix Media URL — if your image is external
|
|
116
|
+
(e.g. a generated one), **upload it to Wix Media first** (`POST /site-media/v1/files/import` with
|
|
117
|
+
`{url, mimeType, displayName}` → use the returned `file.url`; the blog/storefront seeds show this), then
|
|
118
|
+
set it. Attaching is a **read-merge-PUT** — a PUT replaces the whole item, so a partial body wipes the
|
|
119
|
+
other fields:
|
|
120
|
+
```bash
|
|
121
|
+
# query the item (step 3), merge the url into its IMAGE field, then PUT the WHOLE record back:
|
|
122
|
+
curl -sS -X PUT "$API/wix-data/v2/items/<itemId>" "${AUTH[@]}" -d '{
|
|
123
|
+
"dataCollectionId": "Recipes",
|
|
124
|
+
"dataItem": { "data": { <…all existing fields…>, "_id": "<itemId>", "photo": "https://…/file.jpg" } }
|
|
125
|
+
}'
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
## Gotchas
|
|
129
|
+
- Elevated credential required (the public client id can't write).
|
|
130
|
+
- **Provisioning race:** a fresh site's FIRST create/insert can transiently fail — `403`, or `400 WDE0117` ("MetaSite not found"), or `5xx`. Retry the same call **once** after ~3s, then fail loud (don't loop).
|
|
131
|
+
- Any PUT/update **replaces** the whole item — always fetch + merge (or use Patch Data Item).
|
|
132
|
+
- Verify with a query; a non-error POST is not proof of persistence.
|
|
133
|
+
|
|
134
|
+
## Reference
|
|
135
|
+
Read a method's page before writing its call: it carries the exact body shape, the required
|
|
136
|
+
permission scope, and the response envelope.
|
|
137
|
+
- Install a Wix app onto the site: https://dev.wix.com/docs/api-reference/business-management/app-installation/app-installation/install-app.md
|
|
138
|
+
- Import an image into Wix Media: https://dev.wix.com/docs/api-reference/assets/media/media-manager/files/import-file.md
|
|
139
|
+
- Create Data Collection: https://dev.wix.com/docs/api-reference/business-solutions/cms/collection-management/data-collections/create-data-collection.md
|
|
140
|
+
- Bulk Insert Data Items: https://dev.wix.com/docs/api-reference/business-solutions/cms/data-items/bulk-insert-data-items.md
|
|
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
|
+
- Data Items API: https://dev.wix.com/docs/api-reference/business-solutions/cms/data-items.md
|
|
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.
|
|
@@ -1,142 +1,239 @@
|
|
|
1
|
+
# Wix Events — ready-made client
|
|
1
2
|
|
|
2
|
-
|
|
3
|
+
The events client is **shipped as real files**, not snippets to regenerate. It's a complete events
|
|
4
|
+
listing + detail page + RSVP + ticketing (reserve → hosted checkout, plus in-app free-ticket
|
|
5
|
+
checkout), styled with your app's design tokens (base44's `src/index.css` — the shadcn palette the
|
|
6
|
+
design phase already set). Copy it into the app and wire the routes — you generate almost none of the
|
|
7
|
+
events code (offset paging, category filtering, the RSVP `WAITLIST` case, the ticket
|
|
8
|
+
reservation/checkout shapes all ship and are correct).
|
|
3
9
|
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
> |---|---|
|
|
8
|
-
> | Event listing + detail (always) | `wix-events-browse.js` |
|
|
9
|
-
> | RSVP, ticketing, registration | `wix-events-registration.js` |
|
|
10
|
+
Talks to Wix directly over the public `WIX_CLIENT_ID` (anonymous visitor tokens). Never mock events;
|
|
11
|
+
never hand-build a registration/ticket/checkout URL — RSVP completes client-side and paid tickets go
|
|
12
|
+
through the Wix-hosted ticket form via the shipped reserve → redirect path.
|
|
10
13
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
ticket form.
|
|
14
|
+
## Prerequisites
|
|
15
|
+
- The site's **Wix Events & Tickets** app is the read/registration target. It's installed and seeded separately (see **Seeding** below), in parallel with this build — so it may have no events at build time; the client renders the shipped empty state until events are published. This client is read-only over events (it does not create them).
|
|
16
|
+
- The public headless **`WIX_CLIENT_ID`** from your prompt (visitor-facing, safe to hardcode/commit).
|
|
17
|
+
- Selling **paid** tickets also needs a Wix premium plan + a configured payment method on the site; **free** events and RSVP events work without. For paid tickets the buyer completes payment on the Wix-hosted ticket form; the deployed app domain may need to be allow-listed on the OAuth client for the return to land cleanly — a separate Wix setup the user completes later, out of scope here.
|
|
15
18
|
|
|
16
|
-
##
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
published Wix events.
|
|
19
|
+
## STEP 1 — The client is already in `src/`
|
|
20
|
+
The install step (base44.md STEP 1) deployed the whole events UI client + REST scaffolds into `src/`
|
|
21
|
+
(imports use the `@/` alias → `src/`). Here's every file and what it is — **this is your map, so you
|
|
22
|
+
don't need to open them:**
|
|
21
23
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
- **
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
24
|
+
| file | what it is |
|
|
25
|
+
|---|---|
|
|
26
|
+
| `hooks/useEventsList.js` | listing logic — categories, active filter, offset "load more", empty count |
|
|
27
|
+
| `hooks/useEventDetail.js` | detail data for a slug — event + derived `type`/`open` registration state |
|
|
28
|
+
| `hooks/useRsvpForm.js` | RSVP submit logic (`YES`/`NO`, additional guests, `WAITLIST` result) |
|
|
29
|
+
| `hooks/useTicketing.js` | ticket selection + reserve → paid redirect / free in-app checkout |
|
|
30
|
+
| `components/EventCard.jsx`, `EventGrid.jsx` | event listing UI (grid + card, with empty state) |
|
|
31
|
+
| `components/CategoryFilter.jsx` | category menu (renders `label` + `assignedEventsCount`) |
|
|
32
|
+
| `components/EventRegistration.jsx` | branches on `registration.type` (RSVP / TICKETING / EXTERNAL / NONE) |
|
|
33
|
+
| `components/RsvpForm.jsx` | RSVP form UI over `useRsvpForm` |
|
|
34
|
+
| `components/TicketPicker.jsx` | ticket list + quantity + checkout UI over `useTicketing` |
|
|
35
|
+
| `components/WixManageBanner.jsx` | preview-only manage banner — drop it into your Layout (STEP 4) |
|
|
36
|
+
| `pages/Events.jsx`, `pages/EventDetail.jsx` | the two shipped routes (`/events`, `/events/:slug`) |
|
|
37
|
+
| `rest/wix-config.js` | **you set the ids here** (STEP 2) |
|
|
38
|
+
| `rest/wix-client.js` | visitor-token mint/refresh + REST transport (reads `wix-config.js`) |
|
|
39
|
+
| `rest/wix-events-browse.js` | browse/discovery helpers (`queryEvents`, `getEventBySlug`, categories, count) |
|
|
40
|
+
| `rest/wix-events-registration.js` | RSVP + ticketing helpers (`createRsvp`, `reserveTickets`, `getTicketCheckoutUrl`, `checkoutTickets`) |
|
|
41
|
+
|
|
42
|
+
They're already in place — go **straight to theming + wiring**, nothing to verify first. **Don't
|
|
43
|
+
`read_file` the shipped page/component/hook source to inspect it** — the table above says what each is
|
|
44
|
+
and every field shape you need is in the snippets below. Read a shipped file's source **only** on a
|
|
45
|
+
real fallback — a runtime error, or a field the snippets don't cover (see "Fallback only" at the
|
|
46
|
+
end). (Files missing? the install's `deploy` result lists what it wrote; re-run install, or copy
|
|
47
|
+
`references/events/app/` → `src/`.)
|
|
48
|
+
|
|
49
|
+
## STEP 2 — Credentials
|
|
50
|
+
Write `src/rest/wix-config.js` with your `WIX_CLIENT_ID` and `WIX_METASITE_ID` from the prompt — the
|
|
51
|
+
one place both ids live. The visitor refresh token minted from this id is persisted to localStorage
|
|
52
|
+
and **is** the identity of the visitor's ticket reservation — don't re-mint anonymously per load.
|
|
53
|
+
|
|
54
|
+
## STEP 3 — 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 in
|
|
56
|
+
`src/index.css` (`:root`/`.dark`: `--background`, `--foreground`, `--card`, `--primary`, `--muted`,
|
|
57
|
+
`--border`, `--radius`, `--font-*`) via shadcn Tailwind classes (`bg-card`, `text-foreground`,
|
|
58
|
+
`bg-primary`, `text-muted-foreground`, `border-border`, `rounded-lg`, `font-display`). Those tokens
|
|
59
|
+
are **already set to the brand by the design phase**, so the shipped pages are themed with zero work
|
|
60
|
+
here. To adjust the palette, edit `index.css` (`:root` **and** `.dark`) — the base44 way; **never add
|
|
61
|
+
a parallel theme file (e.g. a `theme.css`) or restyle the shipped JSX.** Build the Home/Header you add
|
|
62
|
+
(STEP 4) from the **same** base44 tokens/classes so it matches automatically. A dark brand is just
|
|
63
|
+
base44's dark palette in `index.css` — no per-component work.
|
|
64
|
+
|
|
65
|
+
## STEP 4 — Wire routes + provider (surgical `find_replace` on `src/App.jsx`, never a rewrite)
|
|
66
|
+
**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.
|
|
67
|
+
`App.jsx` carries required platform auth scaffolding (`AuthProvider`/`useAuth`) — edit it in, don't
|
|
68
|
+
replace it. (Events needs no cross-page provider — there's no cart; the RSVP/ticketing state is local
|
|
69
|
+
to the detail page.)
|
|
70
|
+
- Put your **header + footer in a `Layout`** that renders `<Outlet/>` between them, and nest every
|
|
71
|
+
route under one pathless `<Route element={<Layout/>}>`. Your brand chrome then wraps **every** page
|
|
72
|
+
— including the shipped `Events` / `EventDetail` — so you **never edit the shipped pages to add a
|
|
73
|
+
header/footer** (they render inside `<Outlet/>` as-is).
|
|
74
|
+
- **Pin the top chrome as one fixed block.** Put `<WixManageBanner/>` (shipped, preview-only) **above**
|
|
75
|
+
your `<Header/>` inside a single `position:fixed` top region — the header itself is plain in-flow
|
|
76
|
+
markup, the region owns the fixing — so banner + header ride together (no scroll drift/gap). Pad
|
|
77
|
+
the content by the region's **ResizeObserver-measured** height so it clears the chrome and
|
|
78
|
+
self-corrects when the banner is dismissed.
|
|
79
|
+
- Routes under the Layout: `/events` → `Events`, `/events/:slug` → `EventDetail` (both shipped, as-is).
|
|
80
|
+
**You add `/` → your own Home** page.
|
|
81
|
+
|
|
82
|
+
```jsx
|
|
83
|
+
import { useRef, useState, useEffect } from "react";
|
|
84
|
+
import { Routes, Route, Outlet } from "react-router-dom";
|
|
85
|
+
import WixManageBanner from "@/components/WixManageBanner"; // shipped, preview-only · default export, no props
|
|
86
|
+
import Events from "@/pages/Events"; // shipped · default export, no props
|
|
87
|
+
import EventDetail from "@/pages/EventDetail"; // shipped · default export, no props
|
|
88
|
+
import Home from "@/pages/Home"; // YOU build
|
|
89
|
+
import Header from "@/components/Header"; // YOU build — plain in-flow markup, NOT position:fixed
|
|
90
|
+
import Footer from "@/components/Footer"; // YOU build
|
|
91
|
+
|
|
92
|
+
function Layout() {
|
|
93
|
+
const topRef = useRef(null);
|
|
94
|
+
const [offset, setOffset] = useState(0);
|
|
95
|
+
useEffect(() => { // measure the fixed region → pad content below it
|
|
96
|
+
const ro = new ResizeObserver(() => setOffset(topRef.current?.offsetHeight ?? 0));
|
|
97
|
+
if (topRef.current) ro.observe(topRef.current);
|
|
98
|
+
return () => ro.disconnect();
|
|
99
|
+
}, []);
|
|
100
|
+
return (<>
|
|
101
|
+
<div ref={topRef} style={{ position: "fixed", top: 0, left: 0, right: 0, zIndex: 50 }}>
|
|
102
|
+
<WixManageBanner /> {/* null on the published site / when dismissed */}
|
|
103
|
+
<Header /> {/* your brand header, in-flow inside this fixed block */}
|
|
104
|
+
</div>
|
|
105
|
+
<div style={{ paddingTop: offset }}> {/* clears the chrome; shrinks when the banner is dismissed */}
|
|
106
|
+
<Outlet /> {/* shipped Events/EventDetail render here, untouched */}
|
|
107
|
+
<Footer />
|
|
108
|
+
</div>
|
|
109
|
+
</>);
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
<Routes>
|
|
113
|
+
<Route element={<Layout />}> {/* chrome wraps all */}
|
|
114
|
+
<Route path="/" element={<Home />} /> {/* yours */}
|
|
115
|
+
<Route path="/events" element={<Events />} /> {/* shipped, as-is */}
|
|
116
|
+
<Route path="/events/:slug" element={<EventDetail />} /> {/* shipped, as-is */}
|
|
117
|
+
</Route>
|
|
118
|
+
</Routes>
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
## What you build (not shipped)
|
|
122
|
+
The **home / landing page**, the **`Header`** and a **`Footer`** — the two you drop into the `Layout`
|
|
123
|
+
(STEP 4) so they wrap every route — plus the overall brand story, styled with the same base44
|
|
124
|
+
tokens/classes. **Compose the shipped pieces** — a "featured events" strip is just `queryEvents` + the
|
|
125
|
+
shipped `EventGrid`; the nav is a link to `/events`:
|
|
126
|
+
|
|
127
|
+
```jsx
|
|
128
|
+
import { useState, useEffect } from "react";
|
|
129
|
+
import { Link } from "react-router-dom";
|
|
130
|
+
import { queryEvents } from "@/rest/wix-events-browse";
|
|
131
|
+
import EventGrid from "@/components/EventGrid";
|
|
132
|
+
|
|
133
|
+
// Responsive header: choose ONE branch with a state flag (copy this pattern). Do NOT render a
|
|
134
|
+
// desktop nav AND a mobile nav toggled by Tailwind `hidden md:*` — these navs are inline-styled and
|
|
135
|
+
// an inline `display` beats a Tailwind class, so `hidden` never applies and BOTH branches render.
|
|
136
|
+
export function Header() {
|
|
137
|
+
const [mobile, setMobile] = useState(() => window.innerWidth < 768);
|
|
138
|
+
useEffect(() => {
|
|
139
|
+
const onResize = () => setMobile(window.innerWidth < 768);
|
|
140
|
+
window.addEventListener("resize", onResize); // keep it reactive to viewport changes
|
|
141
|
+
return () => window.removeEventListener("resize", onResize);
|
|
142
|
+
}, []);
|
|
143
|
+
return (
|
|
144
|
+
<nav style={{ display: "flex", alignItems: "center", justifyContent: "space-between" }}>
|
|
145
|
+
{/* brand/logo */}
|
|
146
|
+
{mobile ? <YourMenu /> : <Link to="/events">Events</Link>}
|
|
147
|
+
</nav>
|
|
148
|
+
);
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
export function Featured() { // on your home page
|
|
152
|
+
const [events, setEvents] = useState([]);
|
|
153
|
+
// NB: queryEvents returns { events, total, offset, nextOffset } — destructure the array.
|
|
154
|
+
useEffect(() => { queryEvents({ limit: 6 }).then(({ events }) => setEvents(events)); }, []);
|
|
155
|
+
return <EventGrid events={events} empty="Events coming soon." />;
|
|
156
|
+
}
|
|
157
|
+
```
|
|
158
|
+
Everything reads base44's design tokens (`index.css`), so your home/nav match the shipped pages automatically.
|
|
159
|
+
|
|
160
|
+
**Editing a component and the change doesn't show? It's the preview, not your code.** The dev preview
|
|
161
|
+
can serve a stale module after a write. Before diagnosing a visual bug you just "fixed", do a fresh
|
|
162
|
+
full navigate/reload of the preview and re-check — don't keep rewriting correct code against a stale
|
|
163
|
+
render.
|
|
164
|
+
|
|
165
|
+
## Using the client from your own UI
|
|
166
|
+
|
|
167
|
+
```jsx
|
|
168
|
+
// Every browse list helper returns an OBJECT { events, total, offset, nextOffset } — not a bare
|
|
169
|
+
// array. Destructure `events`; nextOffset is null when there are no more pages.
|
|
170
|
+
import { queryEvents, getEventBySlug, queryEventCategories, listEventsByCategory, countUpcomingEvents } from "@/rest/wix-events-browse";
|
|
171
|
+
|
|
172
|
+
const { events, nextOffset } = await queryEvents({ limit: 24 }); // live UPCOMING/STARTED, soonest first
|
|
173
|
+
const { categories } = await queryEventCategories(); // render category.label (NOT name)
|
|
174
|
+
const { events: inCat } = await listEventsByCategory(categories[0].id); // same shape + paging as queryEvents
|
|
175
|
+
const total = await countUpcomingEvents(); // 0 → shipped empty state
|
|
176
|
+
|
|
177
|
+
// Detail by slug — returns null on miss (the shipped EventDetail shows a not-found state):
|
|
178
|
+
const event = await getEventBySlug(slug);
|
|
179
|
+
|
|
180
|
+
// Image urls live at event.mainImage.url. shortDescription is a PLAIN string (safe to render).
|
|
181
|
+
// event.description is Ricos rich content { nodes: [...] } — NOT a string; render with @wix/ricos or
|
|
182
|
+
// walk nodes; NEVER call string methods (.slice/.split) on it — that crashes the page.
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
The registration flows are already wired in the shipped `EventRegistration` (branches on
|
|
186
|
+
`registration.type`, respects `registration.status` — only `OPEN_*` accepts registrations), so your
|
|
187
|
+
pages just render `<EventRegistration .../>` as the shipped `EventDetail` does. Doing a flow yourself:
|
|
188
|
+
|
|
189
|
+
```jsx
|
|
190
|
+
import { createRsvp, reserveTickets, getTicketCheckoutUrl, checkoutTickets } from "@/rest/wix-events-registration";
|
|
191
|
+
|
|
192
|
+
// RSVP (client-side): status "NO" only when registration.rsvp.responseType === "YES_AND_NO".
|
|
193
|
+
const rsvp = await createRsvp(event.id, { firstName, lastName, email }); // rsvp.status may be "WAITLIST"
|
|
194
|
+
|
|
195
|
+
// PAID tickets: reserve, then redirect to the Wix-hosted ticket form — NEVER a hand-built URL.
|
|
196
|
+
const reservation = await reserveTickets([{ ticketDefinitionId, quantity: 1 }]);
|
|
197
|
+
window.location.href = getTicketCheckoutUrl(event, reservation.id);
|
|
198
|
+
|
|
199
|
+
// FREE tickets only: finish in-app instead of redirecting (throws if payment is owed).
|
|
200
|
+
const order = await checkoutTickets(event.id, { reservationId: reservation.id, buyer, guests: [buyer] });
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
## Extending the client
|
|
204
|
+
Building something beyond the shipped pages (a "my registrations" account view, coupons, seating
|
|
205
|
+
maps, a schedule/agenda, canceling a reservation)? The helpers cover the common RSVP + ticketing
|
|
206
|
+
paths; for a gap, make the call with `wixApiRequest` — but look up the exact endpoint/body in the
|
|
207
|
+
official Wix Events API reference first, never guess:
|
|
117
208
|
- Events API reference: https://dev.wix.com/docs/api-reference/business-solutions/events.md
|
|
118
|
-
- Registration (RSVP + ticketing)
|
|
119
|
-
- Member login +
|
|
120
|
-
|
|
209
|
+
- Registration (RSVP + ticketing): https://dev.wix.com/docs/api-reference/business-solutions/events/registration/introduction.md
|
|
210
|
+
- Member login + "my registrations" → the **members** vertical (`references/members/INSTRUCTIONS.md`).
|
|
211
|
+
|
|
212
|
+
Fallback only — when you hit an error or need something not shown here: read the relevant shipped file
|
|
213
|
+
under `src/`, or look it up via the **`wix-docs`** skill.
|
|
121
214
|
|
|
122
|
-
|
|
123
|
-
|
|
215
|
+
## Hard rules
|
|
216
|
+
- Set `WIX_CLIENT_ID` (STEP 2) — not the placeholder.
|
|
217
|
+
- Style via base44 design tokens (`index.css` / shadcn Tailwind classes), never by rewriting the shipped components or adding a parallel theme file.
|
|
218
|
+
- Header/footer live in a `Layout` around `<Outlet/>` (STEP 4) — never edit the shipped `Events`/`EventDetail` to add chrome.
|
|
219
|
+
- The Layout's fixed top region owns positioning: `<WixManageBanner/>` above `<Header/>`; your `Header` is plain in-flow markup (not `position:fixed`).
|
|
220
|
+
- Paid ticket checkout goes through the shipped reserve → `getTicketCheckoutUrl` redirect (the Wix-hosted ticket form) — never a hand-built registration/ticket/payment URL.
|
|
221
|
+
- Render live Wix data or the shipped empty/closed/not-found state — never mock events, tickets, guest counts, or "X spots left".
|
|
124
222
|
|
|
125
223
|
## Point the user to their dashboard
|
|
126
|
-
|
|
224
|
+
Provide deep links so the owner can edit content (substitute the site's `metaSiteId`):
|
|
127
225
|
- **Events** — `https://manage.wix.com/dashboard/{metaSiteId}/events` (`Dashboard → Events` → **+ Add Event**; create the event, then set it up as **Ticketed** or **RSVP**; only published events appear in the app)
|
|
128
226
|
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
- [ ]
|
|
135
|
-
- [ ]
|
|
136
|
-
- [ ]
|
|
137
|
-
- [ ]
|
|
138
|
-
- [ ]
|
|
139
|
-
- [ ]
|
|
140
|
-
- [ ]
|
|
141
|
-
- [ ]
|
|
142
|
-
- [ ] Told the user at least once that they can continue setting up their events in the dashboard and provided deep links.
|
|
227
|
+
## Seeding
|
|
228
|
+
Seed events per `seed/SEED.md` (the build-time setup module) — separate from this client build; run in
|
|
229
|
+
parallel.
|
|
230
|
+
|
|
231
|
+
## Verify (before declaring done)
|
|
232
|
+
- [ ] Client files copied into `src/`; `WIX_CLIENT_ID` set (not the placeholder).
|
|
233
|
+
- [ ] Brand palette lives in `index.css` (`:root`/`.dark`); no parallel theme file; shipped components/pages not restyled or rewritten.
|
|
234
|
+
- [ ] Opened the vertical's data route(s) (not just the home page) and confirmed the shipped components render themed (surface, text, brand) with images.
|
|
235
|
+
- [ ] `Layout` (fixed `<WixManageBanner/>` + `<Header/>` region, then `<Outlet/>` + Footer) wraps all routes; shipped `Events`/`EventDetail` untouched; content clears the fixed chrome.
|
|
236
|
+
- [ ] Event grid renders live events; clicking a card opens the detail page by `slug`; visitor token persists across reload.
|
|
237
|
+
- [ ] Detail page branches correctly on `registration.type` (RSVP form vs. ticket picker vs. external link vs. none); closed registration / sold-out tickets show a clear state.
|
|
238
|
+
- [ ] RSVP submit creates a real RSVP (and surfaces a `WAITLIST` result when full); paid ticket purchase reserves then redirects via `getTicketCheckoutUrl`.
|
|
239
|
+
- [ ] Empty catalog shows the shipped empty state (`countUpcomingEvents()` is 0); no mock events anywhere.
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
// Category filter menu for the events listing. Pure UI — the active id + setter come from
|
|
2
|
+
// useEventsList. Display field is `name`; key/filter by `category.id`; the per-category
|
|
3
|
+
// count is `counts.assignedEventsCount`. Styled with base44 design tokens (shadcn Tailwind classes).
|
|
4
|
+
|
|
5
|
+
const chipBase = "py-1.5 px-3.5 cursor-pointer text-sm font-body border rounded-full";
|
|
6
|
+
const chipIdle = "border-border bg-card text-foreground";
|
|
7
|
+
const chipActive = "bg-primary text-primary-foreground border-primary";
|
|
8
|
+
|
|
9
|
+
export default function CategoryFilter({ categories, active, onSelect }) {
|
|
10
|
+
if (!categories?.length) return null;
|
|
11
|
+
return (
|
|
12
|
+
<nav className="flex flex-wrap gap-2 mb-4">
|
|
13
|
+
<button onClick={() => onSelect(null)} aria-pressed={active === null}
|
|
14
|
+
className={`${chipBase} ${active === null ? chipActive : chipIdle}`}>All</button>
|
|
15
|
+
{categories.map((c) => (
|
|
16
|
+
<button key={c.id} onClick={() => onSelect(c.id)} aria-pressed={active === c.id}
|
|
17
|
+
className={`${chipBase} ${active === c.id ? chipActive : chipIdle}`}>
|
|
18
|
+
{c.name} ({c.counts?.assignedEventsCount ?? 0})
|
|
19
|
+
</button>
|
|
20
|
+
))}
|
|
21
|
+
</nav>
|
|
22
|
+
);
|
|
23
|
+
}
|