@wix/agent-skills 1.15.1 → 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 +3 -7
- 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 +1 -1
- package/skills/wix-app/references/EDITOR_REACT_COMPONENT.md +28 -9
- package/skills/wix-app/references/SERVICE_PLUGIN.md +12 -10
- package/skills/wix-app/references/app-tools/TOOLS.md +75 -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 +23 -2
- 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/CSS-GUIDELINES.md +27 -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 +2 -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/QUERY.md +32 -0
- package/skills/wix-docs/SKILL.md +35 -3
- package/skills/wix-headless/SKILL.md +3 -1
- 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 +24 -0
- package/skills/wix-headless/references/IMAGE_GENERATION.md +10 -0
- package/skills/wix-headless/references/inline-recipes/how-to-code-a-store.md +3 -2
- package/skills/wix-headless/references/inline-recipes/setup-online-store.md +32 -23
- package/skills/wix-headless/references/managed/CONNECT.md +1 -1
- package/skills/wix-headless/references/managed/CREATE.md +14 -0
- package/skills/wix-headless/references/managed/DEPLOYMENT.md +25 -0
- package/skills/wix-manage/SKILL.md +123 -7
- package/skills/wix-manage/references/analytics/analytics-dashboard-navigation.md +41 -0
- package/skills/wix-manage/references/app-installation/app-installation-dashboard-navigation.md +28 -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/diagnose-availability-issues.md +10 -1
- 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 +27 -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/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/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 +163 -190
- 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/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 +48 -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 +8 -4
- package/skills/wix-vibe-headless/platforms/base44.md +133 -98
- package/skills/wix-vibe-headless/platforms/generic.md +99 -64
- 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 -149
- 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} +87 -11
- 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} +1 -1
- 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/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 -157
- 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} +20 -1
- 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/portfolio/{wix-portfolio.js → app/rest/wix-portfolio.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
|
@@ -1,164 +1,270 @@
|
|
|
1
|
+
# Wix Storefront — ready-made client
|
|
1
2
|
|
|
2
|
-
|
|
3
|
+
The storefront client is **shipped as real files**, not snippets to regenerate. It's a complete
|
|
4
|
+
catalog + PDP + server-cart + checkout, styled with your app's design tokens (base44's
|
|
5
|
+
`src/index.css` — the shadcn palette the design phase already set). Copy it into the app and wire
|
|
6
|
+
the routes — you generate almost none of the commerce code (variant resolution, modifiers, stock
|
|
7
|
+
gating, the server cart all ship and are correct).
|
|
3
8
|
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
> |---|---|
|
|
8
|
-
> | `wix-store-catalog.js` | Products, categories, product detail, search |
|
|
9
|
-
> | `wix-store-cart.js` | Add to cart, cart management, checkout |
|
|
9
|
+
Talks to Wix directly over the public `WIX_CLIENT_ID` (anonymous visitor tokens). Never mock
|
|
10
|
+
products; never hand-build a `/checkout` URL — the shipped cart goes through the eCom
|
|
11
|
+
redirect-session.
|
|
10
12
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
13
|
+
## Prerequisites
|
|
14
|
+
- The site's **Wix Stores** catalog is the read/cart target. It's installed and seeded separately (see **Seeding** below), in parallel with this build — so it may be empty at build time; the client renders the shipped empty state until products land.
|
|
15
|
+
- The public headless **`WIX_CLIENT_ID`** from your prompt (buyer-facing, safe to hardcode/commit).
|
|
14
16
|
|
|
15
|
-
##
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
17
|
+
## STEP 1 — The client is already in `src/`
|
|
18
|
+
The install step (base44.md STEP 1) deployed the whole storefront UI client + REST scaffolds into
|
|
19
|
+
`src/` (imports use the `@/` alias → `src/`). Here's every file and what it is — **this is your map,
|
|
20
|
+
so you don't need to open them:**
|
|
19
21
|
|
|
20
|
-
|
|
21
|
-
|
|
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
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
22
|
+
| file | what it is |
|
|
23
|
+
|---|---|
|
|
24
|
+
| `context/CartContext.jsx` | `useCart()` provider: server cart, add/update/remove, checkout |
|
|
25
|
+
| `hooks/useProductDetail.js` | PDP data — product + variant resolution for a slug, plus load/add state |
|
|
26
|
+
| `hooks/useShop.js` | catalog listing — category menu, cursor paging, sort, failure state |
|
|
27
|
+
| `components/ProductCard.jsx`, `ProductGrid.jsx` | product listing UI (grid + card, skeletons, empty state). The tile carries quick add for single-variant products, colour dots + an option summary, and pre-order / sold-out / limited-stock / percent-off / merchant-ribbon badges — all from the list query, no extra request |
|
|
28
|
+
| `components/ProductGallery.jsx` | PDP main image + thumbnails |
|
|
29
|
+
| `lib/storeImage.js` | `productImage()` / `productGallery()` / `storeImage()` — normalise Wix image urls |
|
|
30
|
+
| `components/CartButton.jsx` | header cart **icon** button with a live-count badge |
|
|
31
|
+
| `components/CartDrawer.jsx` | slide-over cart (mount once; opens from `useCart`) |
|
|
32
|
+
| `components/VariantPicker.jsx` | option/variant selector used on the PDP — colour options render as real swatches, and picking one moves the gallery to that colour's photo |
|
|
33
|
+
| `components/WixManageBanner.jsx` | preview-only manage banner — drop it into your Layout (STEP 4) |
|
|
34
|
+
| `pages/Shop.jsx`, `pages/ProductDetail.jsx` | the two shipped routes (`/shop`, `/product/:slug`) |
|
|
35
|
+
| `rest/wix-config.js` | **you set the ids here** (STEP 2) |
|
|
36
|
+
| `rest/wix-client.js` + `rest/wix-store-*.js` | REST transport + catalog/cart helpers |
|
|
37
|
+
|
|
38
|
+
They're already in place — go **straight to theming + wiring**, nothing to verify first. **Don't
|
|
39
|
+
`read_file` the shipped page/component/hook source to inspect it** — the table above says what each is
|
|
40
|
+
and every field shape you need is in the snippets below. Read a shipped file's source **only** on a
|
|
41
|
+
real fallback — a runtime error, or a field the snippets don't cover (see "Fallback only" at the
|
|
42
|
+
end). (Files missing? the install's `deploy` result lists what it wrote; re-run install, or copy
|
|
43
|
+
`references/storefront/app/` → `src/`.)
|
|
44
|
+
|
|
45
|
+
## STEP 2 — Credentials
|
|
46
|
+
Write `src/rest/wix-config.js` with your `WIX_CLIENT_ID` and `WIX_METASITE_ID` from the prompt — the
|
|
47
|
+
one place both ids live.
|
|
48
|
+
|
|
49
|
+
## STEP 3 — Theme (nothing to style on the shipped components)
|
|
50
|
+
The shipped components carry **no palette of their own** — they render from base44's design tokens
|
|
51
|
+
in `src/index.css` (`:root`/`.dark`: `--background`, `--foreground`, `--card`, `--primary`,
|
|
52
|
+
`--muted`, `--border`, `--radius`, `--font-*`) via shadcn Tailwind classes (`bg-card`,
|
|
53
|
+
`text-foreground`, `bg-primary`, `text-muted-foreground`, `border-border`, `rounded-lg`,
|
|
54
|
+
`font-display`). Those tokens are **already set to the brand by the design phase**, so the shipped
|
|
55
|
+
pages are themed with zero work here. To adjust the palette, edit `index.css` (`:root` **and**
|
|
56
|
+
`.dark`) — the base44 way; **never add a parallel theme file (e.g. a `theme.css`) or restyle the
|
|
57
|
+
shipped JSX.** Build the Home/Header you add (STEP 4) from the **same** base44 tokens/classes so it
|
|
58
|
+
matches automatically. A dark brand is just base44's dark palette in `index.css` — no per-component work.
|
|
59
|
+
|
|
60
|
+
## STEP 4 — Wire routes + provider (surgical `find_replace` on `src/App.jsx`, never a rewrite)
|
|
61
|
+
**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.
|
|
62
|
+
`App.jsx` carries required platform auth scaffolding (`AuthProvider`/`useAuth`) — edit it in, don't
|
|
63
|
+
replace it.
|
|
64
|
+
- Wrap the routed tree in `<CartProvider>` (from `@/context/CartContext`).
|
|
65
|
+
- Put your **header + footer in a `Layout`** that renders `<Outlet/>` between them, and nest every
|
|
66
|
+
route under one pathless `<Route element={<Layout/>}>`. Your brand chrome then wraps **every** page
|
|
67
|
+
— including the shipped `Shop` / `ProductDetail` — so you **never edit the shipped pages to add a
|
|
68
|
+
header/footer** (they render inside `<Outlet/>` as-is). Mount `<CartDrawer/>` once in the Layout.
|
|
69
|
+
- **Pin the top chrome as one fixed block.** Put `<WixManageBanner/>` (shipped, preview-only) **above**
|
|
70
|
+
your `<Header/>` inside a single `position:fixed` top region — the header itself is plain in-flow
|
|
71
|
+
markup, the region owns the fixing — so banner + header ride together (no scroll drift/gap). Pad
|
|
72
|
+
the content by the region's measured height so it clears the chrome and self-corrects when the
|
|
73
|
+
banner is dismissed.
|
|
74
|
+
- Routes under the Layout: `/shop` → `Shop`, `/product/:slug` → `ProductDetail` (both shipped, as-is).
|
|
75
|
+
**You add `/` → your own Home** page.
|
|
76
|
+
|
|
77
|
+
```jsx
|
|
78
|
+
import { useRef, useState, useEffect } from "react";
|
|
79
|
+
import { Routes, Route, Outlet } from "react-router-dom";
|
|
80
|
+
import { CartProvider } from "@/context/CartContext";
|
|
81
|
+
import CartDrawer from "@/components/CartDrawer";
|
|
82
|
+
import WixManageBanner from "@/components/WixManageBanner"; // shipped, preview-only · default export, no props
|
|
83
|
+
import Shop from "@/pages/Shop"; // shipped · default export, no props
|
|
84
|
+
import ProductDetail from "@/pages/ProductDetail"; // shipped · default export, no props
|
|
85
|
+
import Home from "@/pages/Home"; // YOU build
|
|
86
|
+
import Header from "@/components/Header"; // YOU build — plain in-flow markup, NOT position:fixed
|
|
87
|
+
import Footer from "@/components/Footer"; // YOU build
|
|
88
|
+
|
|
89
|
+
function Layout() {
|
|
90
|
+
const topRef = useRef(null);
|
|
91
|
+
const [offset, setOffset] = useState(0);
|
|
92
|
+
useEffect(() => { // measure the fixed region → pad content below it
|
|
93
|
+
const ro = new ResizeObserver(() => setOffset(topRef.current?.offsetHeight ?? 0));
|
|
94
|
+
if (topRef.current) ro.observe(topRef.current);
|
|
95
|
+
return () => ro.disconnect();
|
|
96
|
+
}, []);
|
|
97
|
+
return (<>
|
|
98
|
+
<div ref={topRef} style={{ position: "fixed", top: 0, left: 0, right: 0, zIndex: 50 }}>
|
|
99
|
+
<WixManageBanner /> {/* null on the published site / when dismissed */}
|
|
100
|
+
<Header /> {/* your brand header, in-flow inside this fixed block */}
|
|
101
|
+
</div>
|
|
102
|
+
<div style={{ paddingTop: offset }}> {/* clears the chrome; shrinks when the banner is dismissed */}
|
|
103
|
+
<Outlet /> {/* shipped Shop/ProductDetail render here, untouched */}
|
|
104
|
+
<Footer />
|
|
105
|
+
</div>
|
|
106
|
+
<CartDrawer /> {/* overlays every page */}
|
|
107
|
+
</>);
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
<CartProvider>
|
|
111
|
+
<Routes>
|
|
112
|
+
<Route element={<Layout />}> {/* chrome wraps all */}
|
|
113
|
+
<Route path="/" element={<Home />} /> {/* yours */}
|
|
114
|
+
<Route path="/shop" element={<Shop />} /> {/* shipped, as-is */}
|
|
115
|
+
<Route path="/product/:slug" element={<ProductDetail />} /> {/* shipped, as-is */}
|
|
116
|
+
</Route>
|
|
117
|
+
</Routes>
|
|
118
|
+
</CartProvider>
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
## What you build (not shipped)
|
|
122
|
+
The **home / landing page**, the **`Header`** (mount `<CartButton/>` in it) and a **`Footer`** — the
|
|
123
|
+
two you drop into the `Layout` (STEP 4) so they wrap every route — plus the overall brand story,
|
|
124
|
+
styled from the same base44 tokens/classes. **Compose the shipped pieces** — a
|
|
125
|
+
featured strip is just `queryProducts` + the shipped `ProductGrid`; the nav is a `<CartButton/>`
|
|
126
|
+
(a clean cart-**icon** button with a live-count badge — render it as-is, don't wrap it in your own
|
|
127
|
+
text button) + a link to `/shop`:
|
|
128
|
+
|
|
129
|
+
```jsx
|
|
130
|
+
import { useState, useEffect } from "react";
|
|
131
|
+
import { Link } from "react-router-dom";
|
|
132
|
+
import { queryProducts } from "@/rest/wix-store-catalog";
|
|
133
|
+
import ProductGrid from "@/components/ProductGrid";
|
|
134
|
+
import CartButton from "@/components/CartButton";
|
|
135
|
+
|
|
136
|
+
// Responsive header: choose ONE branch with a state flag, so <CartButton/> mounts once.
|
|
137
|
+
// Do NOT render a desktop nav AND a mobile nav toggled by `hidden md:flex` / `md:hidden`:
|
|
138
|
+
// these navs are inline-styled, and an inline `display` beats a Tailwind class, so `hidden`
|
|
139
|
+
// never applies — BOTH branches render and you get two cart buttons. One branch = one cart.
|
|
140
|
+
export function Header() { // in your nav
|
|
141
|
+
const [mobile, setMobile] = useState(() => window.innerWidth < 768);
|
|
142
|
+
useEffect(() => {
|
|
143
|
+
const onResize = () => setMobile(window.innerWidth < 768);
|
|
144
|
+
window.addEventListener("resize", onResize); // keep it reactive to viewport changes
|
|
145
|
+
return () => window.removeEventListener("resize", onResize);
|
|
146
|
+
}, []);
|
|
147
|
+
return (
|
|
148
|
+
<nav style={{ display: "flex", alignItems: "center", justifyContent: "space-between" }}>
|
|
149
|
+
{/* brand/logo */}
|
|
150
|
+
{mobile
|
|
151
|
+
? <YourMenu /> // your hamburger + <CartButton/> here
|
|
152
|
+
: <div style={{ display: "flex", gap: 24 }}><Link to="/shop">Shop</Link><CartButton /></div>}
|
|
153
|
+
</nav>
|
|
154
|
+
);
|
|
155
|
+
}
|
|
156
|
+
export function Featured() { // on your home page
|
|
157
|
+
const [products, setProducts] = useState(null); // null → ProductGrid shows skeletons
|
|
158
|
+
// NB: queryProducts returns { products, nextCursor } — destructure the array.
|
|
159
|
+
useEffect(() => {
|
|
160
|
+
queryProducts({ limit: 8 })
|
|
161
|
+
.then(({ products }) => setProducts(products))
|
|
162
|
+
.catch(() => setProducts([])); // land on the empty state, not a spinner
|
|
163
|
+
}, []);
|
|
164
|
+
return <ProductGrid products={products} loading={products === null} empty="Products coming soon." />;
|
|
165
|
+
}
|
|
166
|
+
```
|
|
167
|
+
Everything reads base44's design tokens (`index.css`), so your home/nav match the shipped pages
|
|
168
|
+
automatically. `<CartButton/>` is an icon button (live-count badge) — drop it in as-is, it inherits `currentColor`.
|
|
169
|
+
|
|
170
|
+
**Editing a component and the change doesn't show? It's the preview, not your code.** The dev preview
|
|
171
|
+
can serve a stale module after a write. Before diagnosing a visual bug you just "fixed", do a fresh
|
|
172
|
+
full navigate/reload of the preview and re-check — don't keep rewriting correct code against a stale
|
|
173
|
+
render.
|
|
174
|
+
|
|
175
|
+
## Using the client from your own UI (cart, hand-built images)
|
|
176
|
+
|
|
177
|
+
```jsx
|
|
178
|
+
import { Link } from "react-router-dom";
|
|
179
|
+
import { useCart } from "@/context/CartContext";
|
|
180
|
+
|
|
181
|
+
// useCart() gives:
|
|
182
|
+
// { cart, itemCount, isOpen, setIsOpen, loading, error, clearError(),
|
|
183
|
+
// addToCart(productId, variantId?, qty=1, { modifierChoices?, customTextFields? }?),
|
|
184
|
+
// removeItem(lineItemId), updateQuantity(lineItemId, qty), checkout(), refreshCart() }
|
|
185
|
+
// Every mutation catches its own failure into `error` (the shipped CartDrawer renders it), so a
|
|
186
|
+
// refusal — an empty cart, or a line item that stopped being AVAILABLE — reaches the buyer instead
|
|
187
|
+
// of becoming an unhandled rejection.
|
|
188
|
+
//
|
|
189
|
+
// Cart money: every amount is { amount, convertedAmount, formattedAmount, formattedConvertedAmount } —
|
|
190
|
+
// show a formatted one so the currency symbol and grouping come from Wix. Read
|
|
191
|
+
// `cart.subtotalAfterDiscounts` rather than `cart.subtotal`: the two match until a cart-level coupon
|
|
192
|
+
// applies, and then `subtotal` is the pre-discount figure. `cart.discount` + `cart.appliedDiscounts`
|
|
193
|
+
// carry the reduction. Never sum line items yourself — tax and shipping resolve at checkout.
|
|
194
|
+
// `lineItems[].availability.quantityAvailable` is the stock cap for a quantity control.
|
|
195
|
+
|
|
196
|
+
function CartCount() { // header badge
|
|
197
|
+
const { itemCount, setIsOpen } = useCart();
|
|
198
|
+
return <button onClick={() => setIsOpen(true)}>Cart ({itemCount})</button>;
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
// Buy from a card → link to the PDP; the shipped ProductDetail owns options/variants + add-to-cart.
|
|
202
|
+
// (Listing helpers return no variants — only getProductBySlug does — so buying happens on the PDP.)
|
|
203
|
+
const CardBuy = ({ product }) => <Link to={`/product/${product.slug}`}>View</Link>;
|
|
204
|
+
|
|
205
|
+
// Doing add-to-cart yourself? addToCart resolves for an option-less product; wrap it — it rejects on
|
|
206
|
+
// out-of-stock / empty cart / a missing required selection, and you show that message.
|
|
207
|
+
async function quickAdd(addToCart, product) {
|
|
208
|
+
try { await addToCart(product.id); } catch (e) { alert(e.message); }
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
// An image you render yourself (hero / custom card): normalise the url through lib/storeImage — Wix
|
|
212
|
+
// returns these protocol-relative — and keep a token bg so a just-generated url that 404s for a
|
|
213
|
+
// second reads as a surface, not a blank block.
|
|
214
|
+
import { storeImage, productImage, productGallery } from "@/lib/storeImage";
|
|
215
|
+
function BrandImage({ url, alt }) {
|
|
216
|
+
return <div className="bg-card"><img src={storeImage(url)} alt={alt} /></div>;
|
|
217
|
+
}
|
|
218
|
+
// productImage(product) → the catalog image · productGallery(product) → every image, main first,
|
|
219
|
+
// de-duplicated (media.itemsInfo.items repeats the main one and video items carry no image url).
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
## Extending the client
|
|
223
|
+
Building something beyond the shipped pages? Copy these:
|
|
224
|
+
|
|
225
|
+
```jsx
|
|
226
|
+
// Every catalog/cart list helper returns { <plural>, nextCursor } — destructure the array:
|
|
227
|
+
const { products, nextCursor } = await queryProducts({ limit: 24 });
|
|
228
|
+
const { categories } = await queryCategories();
|
|
229
|
+
const menu = categories.filter((c) => c.slug !== "all-products"); // drop Wix's system category
|
|
230
|
+
const { products: inCategory } = await queryProductsByCategory(menu[0].id, { limit: 24 });
|
|
231
|
+
|
|
232
|
+
// product.plainDescription is HTML → render as HTML (the PDP does this):
|
|
233
|
+
<div dangerouslySetInnerHTML={{ __html: product.plainDescription }} />
|
|
234
|
+
// image urls live at: product.media.main.image.url · cart lineItems[].image.url
|
|
235
|
+
```
|
|
236
|
+
|
|
237
|
+
Fallback only — when you hit an error or need something not shown here (coupons, members, a field
|
|
238
|
+
these snippets don't have): read the relevant shipped file under `src/`, or look it up via the
|
|
239
|
+
**`wix-docs`** skill. Each helper in `wix-store-catalog.js` / `wix-store-cart.js` links its own
|
|
240
|
+
reference page inline; these are the areas they sit in:
|
|
241
|
+
- Stores catalog (products, categories, inventory): https://dev.wix.com/docs/api-reference/business-solutions/stores/catalog-v3.md
|
|
242
|
+
- eCommerce (cart, checkout, orders): https://dev.wix.com/docs/api-reference/business-solutions/e-commerce.md
|
|
243
|
+
- Headless redirect session (hosted checkout): https://dev.wix.com/docs/api-reference/business-management/headless/redirects.md
|
|
244
|
+
|
|
245
|
+
## Hard rules
|
|
246
|
+
- Set `WIX_CLIENT_ID` (STEP 2) — not the placeholder.
|
|
247
|
+
- Style via base44 design tokens (`index.css` / shadcn Tailwind classes), never by rewriting the shipped components or adding a parallel theme file.
|
|
248
|
+
- Header/footer live in a `Layout` around `<Outlet/>` (STEP 4) — never edit the shipped `Shop`/`ProductDetail` to add chrome.
|
|
249
|
+
- The Layout's fixed top region owns positioning: `<WixManageBanner/>` above `<Header/>`; your `Header` is plain in-flow markup (not `position:fixed`).
|
|
250
|
+
- Checkout goes through the shipped cart (redirect-session) — never a hand-built `/checkout` URL.
|
|
251
|
+
- Render live Wix data or the shipped empty state — never mock products.
|
|
143
252
|
|
|
144
253
|
## Point the user to their dashboard
|
|
145
|
-
|
|
146
|
-
- **Products** — `https://manage.wix.com/dashboard/{metaSiteId}/wix-stores/products`
|
|
147
|
-
- **Categories** — `https://manage.wix.com/dashboard/{metaSiteId}/wix-stores/categories/list`
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
- [ ]
|
|
155
|
-
- [ ]
|
|
156
|
-
- [ ]
|
|
157
|
-
- [ ]
|
|
158
|
-
- [ ]
|
|
159
|
-
- [ ]
|
|
160
|
-
- [ ]
|
|
161
|
-
- [ ]
|
|
162
|
-
- [ ] Empty state shown when `countProducts()` is 0
|
|
163
|
-
- [ ] No mock products anywhere
|
|
164
|
-
- [ ] Told the user at least once that they can continue setting up their store in the dashboard and provided deep links.
|
|
254
|
+
Provide deep links so the owner can edit content (substitute the site's `metaSiteId`):
|
|
255
|
+
- **Products** — `https://manage.wix.com/dashboard/{metaSiteId}/wix-stores/products`
|
|
256
|
+
- **Categories** — `https://manage.wix.com/dashboard/{metaSiteId}/wix-stores/categories/list`
|
|
257
|
+
|
|
258
|
+
## Seeding
|
|
259
|
+
Seed the catalog per `seed/SEED.md` (the build-time `setupStore` module) — separate from this
|
|
260
|
+
client build; run in parallel.
|
|
261
|
+
|
|
262
|
+
## Verify (before declaring done)
|
|
263
|
+
- [ ] Client files copied into `src/`; `WIX_CLIENT_ID` set (not the placeholder).
|
|
264
|
+
- [ ] Brand palette lives in `index.css` (`:root`/`.dark`); no parallel theme file; shipped components/pages not restyled or rewritten.
|
|
265
|
+
- [ ] **Opened `/shop` and a product detail page** (not just the home page) and confirmed the shipped cards render themed (surface, text, brand color) with images.
|
|
266
|
+
- [ ] `Layout` (fixed `<WixManageBanner/>` + `<Header/>` region, then `<Outlet/>` + Footer) wraps all routes; shipped `Shop`/`ProductDetail` untouched; content clears the fixed chrome; `<CartProvider>` wraps the tree; `<CartDrawer/>` mounted; `<CartButton/>` in the header.
|
|
267
|
+
- [ ] Cart survives reload (same visitor); add / update-qty / remove work; checkout redirects; the drawer shows a **subtotal**.
|
|
268
|
+
- [ ] Empty catalog shows the shipped empty state; no mock products anywhere.
|
|
269
|
+
- [ ] A product with several images shows **thumbnails** on the PDP, and one with per-variant prices shows a **range** on its card.
|
|
270
|
+
- [ ] Categories seeded? The `/shop` menu lists them (minus the auto-created `all-products`) and filters; a catalog past one page shows **Load more**.
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
// Header cart trigger — an icon button with a live item-count badge. Drop into the app header; opens the CartDrawer.
|
|
2
|
+
// Icon-only by design (no "Cart" text): reads the header's currentColor, so it inherits the brand automatically.
|
|
3
|
+
import { useCart } from "@/context/CartContext";
|
|
4
|
+
|
|
5
|
+
export default function CartButton() {
|
|
6
|
+
const { itemCount, setIsOpen } = useCart();
|
|
7
|
+
return (
|
|
8
|
+
<button onClick={() => setIsOpen(true)} aria-label={`Open cart${itemCount ? `, ${itemCount} item${itemCount > 1 ? "s" : ""}` : ""}`}
|
|
9
|
+
className="relative inline-flex items-center justify-center w-10 h-10 p-0 cursor-pointer bg-transparent text-current border-none rounded-sm">
|
|
10
|
+
<svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="1.8" strokeLinecap="round" strokeLinejoin="round" aria-hidden="true">
|
|
11
|
+
<path d="M6 2 3 6v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2V6l-3-4Z" />
|
|
12
|
+
<path d="M3 6h18" />
|
|
13
|
+
<path d="M16 10a4 4 0 0 1-8 0" />
|
|
14
|
+
</svg>
|
|
15
|
+
{itemCount > 0 && (
|
|
16
|
+
<span className="absolute -top-0.5 -right-0.5 min-w-[18px] h-[18px] px-[5px] py-0 inline-flex items-center justify-center text-[11px] font-semibold bg-primary text-primary-foreground rounded-full">{itemCount}</span>
|
|
17
|
+
)}
|
|
18
|
+
</button>
|
|
19
|
+
);
|
|
20
|
+
}
|