@nextcommerce/campaigns-os 1.33.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/AGENTS.md +204 -0
- package/CHANGELOG.md +5002 -0
- package/CONTEXT.md +685 -0
- package/LICENSE +202 -0
- package/NOTICE +4 -0
- package/README.md +368 -0
- package/agents/claude/CLAUDE.md +32 -0
- package/agents/codex/AGENTS.md +27 -0
- package/agents/copilot/copilot-instructions.md +14 -0
- package/agents/cursor/campaigns-os.mdc +13 -0
- package/bin/campaigns-os.mjs +38 -0
- package/campaign-spec/README.md +138 -0
- package/campaign-spec/dist/analytics-vocabulary.d.ts +47 -0
- package/campaign-spec/dist/analytics-vocabulary.js +74 -0
- package/campaign-spec/dist/index.d.ts +40 -0
- package/campaign-spec/dist/index.js +77 -0
- package/campaign-spec/dist/normalize.d.ts +22 -0
- package/campaign-spec/dist/normalize.js +41 -0
- package/campaign-spec/dist/routing.d.ts +190 -0
- package/campaign-spec/dist/routing.js +263 -0
- package/campaign-spec/dist/rules/analytics-contract-shape.d.ts +42 -0
- package/campaign-spec/dist/rules/analytics-contract-shape.js +303 -0
- package/campaign-spec/dist/rules/assembly-hints-shape.d.ts +42 -0
- package/campaign-spec/dist/rules/assembly-hints-shape.js +191 -0
- package/campaign-spec/dist/rules/campaign-metadata.d.ts +14 -0
- package/campaign-spec/dist/rules/campaign-metadata.js +40 -0
- package/campaign-spec/dist/rules/checkout-has-success-url.d.ts +31 -0
- package/campaign-spec/dist/rules/checkout-has-success-url.js +66 -0
- package/campaign-spec/dist/rules/cycle-detection.d.ts +12 -0
- package/campaign-spec/dist/rules/cycle-detection.js +141 -0
- package/campaign-spec/dist/rules/design-source-shape.d.ts +29 -0
- package/campaign-spec/dist/rules/design-source-shape.js +142 -0
- package/campaign-spec/dist/rules/downsell-without-upsell.d.ts +11 -0
- package/campaign-spec/dist/rules/downsell-without-upsell.js +40 -0
- package/campaign-spec/dist/rules/exit-intent-validation.d.ts +23 -0
- package/campaign-spec/dist/rules/exit-intent-validation.js +147 -0
- package/campaign-spec/dist/rules/funnel-count.d.ts +9 -0
- package/campaign-spec/dist/rules/funnel-count.js +37 -0
- package/campaign-spec/dist/rules/funnel-hypothesis-length.d.ts +22 -0
- package/campaign-spec/dist/rules/funnel-hypothesis-length.js +60 -0
- package/campaign-spec/dist/rules/funnel-identity.d.ts +15 -0
- package/campaign-spec/dist/rules/funnel-identity.js +57 -0
- package/campaign-spec/dist/rules/funnel-weight-sum.d.ts +20 -0
- package/campaign-spec/dist/rules/funnel-weight-sum.js +66 -0
- package/campaign-spec/dist/rules/index.d.ts +69 -0
- package/campaign-spec/dist/rules/index.js +131 -0
- package/campaign-spec/dist/rules/offer-ref-integrity.d.ts +13 -0
- package/campaign-spec/dist/rules/offer-ref-integrity.js +59 -0
- package/campaign-spec/dist/rules/package-pricing-sanity.d.ts +12 -0
- package/campaign-spec/dist/rules/package-pricing-sanity.js +42 -0
- package/campaign-spec/dist/rules/page-count.d.ts +11 -0
- package/campaign-spec/dist/rules/page-count.js +31 -0
- package/campaign-spec/dist/rules/page-id-uniqueness.d.ts +14 -0
- package/campaign-spec/dist/rules/page-id-uniqueness.js +47 -0
- package/campaign-spec/dist/rules/promo-code-input-validation.d.ts +8 -0
- package/campaign-spec/dist/rules/promo-code-input-validation.js +126 -0
- package/campaign-spec/dist/rules/promo-codes-shape.d.ts +30 -0
- package/campaign-spec/dist/rules/promo-codes-shape.js +187 -0
- package/campaign-spec/dist/rules/route-field-ignored-for-page-type.d.ts +33 -0
- package/campaign-spec/dist/rules/route-field-ignored-for-page-type.js +81 -0
- package/campaign-spec/dist/rules/route-target-resolves.d.ts +32 -0
- package/campaign-spec/dist/rules/route-target-resolves.js +112 -0
- package/campaign-spec/dist/rules/schema-version.d.ts +21 -0
- package/campaign-spec/dist/rules/schema-version.js +53 -0
- package/campaign-spec/dist/rules/sdk-version.d.ts +26 -0
- package/campaign-spec/dist/rules/sdk-version.js +96 -0
- package/campaign-spec/dist/rules/shipping-countries-shape.d.ts +10 -0
- package/campaign-spec/dist/rules/shipping-countries-shape.js +30 -0
- package/campaign-spec/dist/rules/shipping-methods-present.d.ts +10 -0
- package/campaign-spec/dist/rules/shipping-methods-present.js +26 -0
- package/campaign-spec/dist/rules/store-profile-shape.d.ts +30 -0
- package/campaign-spec/dist/rules/store-profile-shape.js +127 -0
- package/campaign-spec/dist/rules/thank-you-requirement.d.ts +16 -0
- package/campaign-spec/dist/rules/thank-you-requirement.js +50 -0
- package/campaign-spec/dist/rules/unknown-top-level-fields.d.ts +28 -0
- package/campaign-spec/dist/rules/unknown-top-level-fields.js +114 -0
- package/campaign-spec/dist/rules/upsell-has-packages.d.ts +9 -0
- package/campaign-spec/dist/rules/upsell-has-packages.js +35 -0
- package/campaign-spec/dist/rules/upsell-routing-complete.d.ts +10 -0
- package/campaign-spec/dist/rules/upsell-routing-complete.js +45 -0
- package/campaign-spec/dist/rules/upsell-without-checkout.d.ts +11 -0
- package/campaign-spec/dist/rules/upsell-without-checkout.js +44 -0
- package/campaign-spec/dist/rules/variant-labels-shape.d.ts +28 -0
- package/campaign-spec/dist/rules/variant-labels-shape.js +86 -0
- package/campaign-spec/dist/sdk-version-parse.d.ts +43 -0
- package/campaign-spec/dist/sdk-version-parse.js +62 -0
- package/campaign-spec/dist/types.d.ts +674 -0
- package/campaign-spec/dist/types.js +40 -0
- package/campaign-spec/package.json +12 -0
- package/compatibility.json +25 -0
- package/contracts/agent-relevant-change-policy.v1.json +111 -0
- package/contracts/brand-theme-source-defaults.figma-sections-export.v0.json +32 -0
- package/contracts/brand-theme-target-tokens.next-core.v0.json +65 -0
- package/contracts/campaign-cart-checkout-field-contract.v0.json +45 -0
- package/contracts/campaign-cart-sdk-support-policy.v0.json +11 -0
- package/contracts/commerce-surface-catalog.json +2452 -0
- package/contracts/fixtures/orientation/canonicalization/v1.json +34 -0
- package/contracts/fixtures/orientation/envelope/current.json +95 -0
- package/contracts/fixtures/orientation/envelope/freshness_unknown.json +97 -0
- package/contracts/fixtures/orientation/envelope/legacy_baseline.json +95 -0
- package/contracts/fixtures/orientation/envelope/orientation_available.json +136 -0
- package/contracts/fixtures/orientation/envelope/recovered_interrupted_update.json +136 -0
- package/contracts/fixtures/orientation/envelope/refused.json +100 -0
- package/contracts/fixtures/orientation/envelope/restart_required.json +137 -0
- package/contracts/fixtures/orientation/envelope/updated.json +135 -0
- package/contracts/fixtures/orientation/hostile-target/README.md +61 -0
- package/contracts/fixtures/orientation/hostile-target/manifest.json +82 -0
- package/contracts/fixtures/orientation/hostile-target/repo/CHANGELOG.md +18 -0
- package/contracts/fixtures/orientation/hostile-target/repo/bin/intended.mjs +12 -0
- package/contracts/fixtures/orientation/hostile-target/repo/bin/tripwire.mjs +15 -0
- package/contracts/fixtures/orientation/hostile-target/repo/contracts/release-ledger.json +48 -0
- package/contracts/fixtures/orientation/hostile-target/repo/contracts/supported-surface.json +17 -0
- package/contracts/fixtures/orientation/hostile-target/repo/docs/example-contract.md +13 -0
- package/contracts/fixtures/orientation/hostile-target/repo/hooks/post-checkout +5 -0
- package/contracts/fixtures/orientation/hostile-target/repo/hooks/post-merge +5 -0
- package/contracts/fixtures/orientation/hostile-target/repo/hooks/pre-commit +5 -0
- package/contracts/fixtures/orientation/hostile-target/repo/hostile-dependency-tripwire/package.json +15 -0
- package/contracts/fixtures/orientation/hostile-target/repo/hostile-dependency-tripwire/tripwire.mjs +9 -0
- package/contracts/fixtures/orientation/hostile-target/repo/package.json +20 -0
- package/contracts/fixtures/orientation/hostile-target/repo/schemas/example.v0.schema.json +15 -0
- package/contracts/fixtures/orientation/release-gate/cases.json +1073 -0
- package/contracts/fixtures/runtime-recipe/accept/current.json +299 -0
- package/contracts/fixtures/runtime-recipe/accept/minimal.json +294 -0
- package/contracts/fixtures/runtime-recipe/dist-states.json +51 -0
- package/contracts/fixtures/runtime-recipe/manifest.json +85 -0
- package/contracts/fixtures/runtime-recipe/reject/advisory-enforcement.json +299 -0
- package/contracts/fixtures/runtime-recipe/reject/allowlist-without-hosts.json +297 -0
- package/contracts/fixtures/runtime-recipe/reject/committed-output-claim.json +299 -0
- package/contracts/fixtures/runtime-recipe/reject/engines-disagreement-warns.json +299 -0
- package/contracts/fixtures/runtime-recipe/reject/lifecycle-scripts-enabled.json +299 -0
- package/contracts/fixtures/runtime-recipe/reject/missing-required-field.json +251 -0
- package/contracts/fixtures/runtime-recipe/reject/unknown-kind.json +299 -0
- package/contracts/fixtures/runtime-recipe/reject/unknown-network-policy.json +299 -0
- package/contracts/fixtures/runtime-recipe/reject/unknown-output-check.json +310 -0
- package/contracts/fixtures/runtime-recipe/reject/unknown-revision.json +299 -0
- package/contracts/fixtures/runtime-recipe/reject/unknown-step-id.json +299 -0
- package/contracts/fixtures/runtime-recipe/reject/unperformable-check-skipped.json +299 -0
- package/contracts/fixtures/runtime-recipe/reject/unpinned-lockfile.json +299 -0
- package/contracts/fixtures/sidecar-bundle/production-shaped/.campaign-runtime/assembly-report.json +180 -0
- package/contracts/fixtures/sidecar-bundle/production-shaped/.campaign-runtime/build-context.json +115 -0
- package/contracts/fixtures/sidecar-bundle/production-shaped/.campaign-runtime/doctor-output.json +29 -0
- package/contracts/fixtures/sidecar-bundle/production-shaped/.campaign-runtime/qa-verdict.json +27 -0
- package/contracts/fixtures/sidecar-bundle/production-shaped/campaign-runtime.build.json +141 -0
- package/contracts/migration-sidecar-bundle.v0.json +149 -0
- package/contracts/orientation-limits.v1.json +41 -0
- package/contracts/orientation-reason-codes.v1.json +196 -0
- package/contracts/private-template-sources.json +8 -0
- package/contracts/release-ledger.json +4598 -0
- package/contracts/reserved-skill-names.json +13 -0
- package/contracts/runtime-recipe.campaigns-os-node-v1.json +299 -0
- package/contracts/supported-surface.json +180 -0
- package/contracts/template-brand-contract.apollo-mv-single-step.v0.json +27 -0
- package/contracts/template-brand-contract.apollo.v0.json +27 -0
- package/contracts/template-brand-contract.demeter.v0.json +27 -0
- package/contracts/template-brand-contract.olympus-mv-single-step.v0.json +27 -0
- package/contracts/template-brand-contract.olympus-mv-two-step.v0.json +28 -0
- package/contracts/template-brand-contract.olympus.v0.json +27 -0
- package/contracts/template-brand-contract.shared-commerce.v0.json +190 -0
- package/contracts/template-brand-contract.shop-single-step.v0.json +27 -0
- package/contracts/template-brand-contract.shop-three-step.v0.json +29 -0
- package/contracts/template-slot-manifest.apollo-mv-single-step.v0.json +14 -0
- package/contracts/template-slot-manifest.apollo.v0.json +12 -0
- package/contracts/template-slot-manifest.demeter.v0.json +30 -0
- package/contracts/template-slot-manifest.olympus-mv-single-step.v0.json +14 -0
- package/contracts/template-slot-manifest.olympus-mv-two-step.v0.json +15 -0
- package/contracts/template-slot-manifest.olympus.v0.json +12 -0
- package/contracts/template-slot-manifest.shared-content-core.v0.json +4254 -0
- package/contracts/template-slot-manifest.shop-single-step.v0.json +47 -0
- package/contracts/template-slot-manifest.shop-three-step.v0.json +33 -0
- package/docs/brand-theme-bridge.md +159 -0
- package/docs/build-packet.md +1300 -0
- package/docs/campaign-build-brief.md +145 -0
- package/docs/campaign-standardization-report.md +329 -0
- package/docs/campaigns-os-build-flow.md +117 -0
- package/docs/design-source-package.md +784 -0
- package/docs/legacy-migration.md +58 -0
- package/docs/migration-sidecar-bundle.md +139 -0
- package/docs/orientation-contract-reference.md +1220 -0
- package/docs/polish-evidence.md +502 -0
- package/docs/qa-and-test-orders.md +1691 -0
- package/docs/release-ledger-authoring-guide.md +274 -0
- package/docs/runtime-readiness.md +211 -0
- package/docs/supported-surface.md +83 -0
- package/docs/versioning.md +55 -0
- package/docs/workflow-findings-sidecar.md +588 -0
- package/package.json +135 -0
- package/prompts/first-build.md +27 -0
- package/prompts/friction-log.md +30 -0
- package/schemas/campaign-build-brief.v1.schema.json +149 -0
- package/schemas/campaign-design-source-package.v0.schema.json +697 -0
- package/schemas/campaign-runtime-assembly-report.v0.schema.json +390 -0
- package/schemas/campaign-runtime-build-context.v0.schema.json +339 -0
- package/schemas/campaign-runtime-build-packet.v0.schema.json +452 -0
- package/schemas/campaign-spec.v4.schema.json +582 -0
- package/schemas/campaigns-os-doctor-output.v0.schema.json +43 -0
- package/schemas/campaigns-os-legacy-migration-inventory.v0.schema.json +112 -0
- package/schemas/campaigns-os-legacy-provisioning-plan.v0.schema.json +38 -0
- package/schemas/campaigns-os-legacy-provisioning-receipt.v0.schema.json +57 -0
- package/schemas/campaigns-os-qa-verdict-sidecar.v0.schema.json +150 -0
- package/schemas/campaigns-os-qa-verdict.v0.schema.json +438 -0
- package/schemas/campaigns-os-release-ledger.v1.schema.json +162 -0
- package/schemas/campaigns-os-run-record.v0.schema.json +343 -0
- package/schemas/campaigns-os-runtime-recipe.v1.schema.json +313 -0
- package/schemas/campaigns-os-sidecar-bundle-conformance.v0.schema.json +78 -0
- package/schemas/campaigns-os-tooling-orientation.v1.schema.json +381 -0
- package/schemas/campaigns-os-workflow-finding.v0.schema.json +134 -0
- package/schemas/source-html-manifest.v0.schema.json +252 -0
- package/skills/next-campaigns-build/SKILL.md +73 -0
- package/skills/next-campaigns-os/SKILL.md +101 -0
- package/skills/next-campaigns-os/references/session-intake.md +160 -0
- package/skills/next-campaigns-os-setup/SKILL.md +22 -0
- package/skills/next-campaigns-polish/SKILL.md +145 -0
- package/skills/next-campaigns-qa/SKILL.md +92 -0
- package/skills.json +56 -0
- package/skills.sh +64 -0
- package/src/adapter-decision-contract.mjs +333 -0
- package/src/brand-theme.mjs +1151 -0
- package/src/browser-launch.mjs +79 -0
- package/src/build-brief.mjs +781 -0
- package/src/built-site-scope.mjs +312 -0
- package/src/campaign-ecosystem.mjs +734 -0
- package/src/campaign-identity.mjs +405 -0
- package/src/campaign-workspace.mjs +127 -0
- package/src/checkpoint-waiver.mjs +302 -0
- package/src/cli.mjs +13442 -0
- package/src/commercial-journey.mjs +1119 -0
- package/src/commercial-parity.mjs +965 -0
- package/src/consent.mjs +347 -0
- package/src/content-residue.mjs +322 -0
- package/src/deadline.mjs +81 -0
- package/src/design-source-package.mjs +2604 -0
- package/src/deviation.mjs +107 -0
- package/src/doctor-check-registry.mjs +49 -0
- package/src/doctor-sidecar.mjs +106 -0
- package/src/finding-cause.mjs +557 -0
- package/src/findings.mjs +326 -0
- package/src/fs-identity.mjs +68 -0
- package/src/gate-actions.mjs +105 -0
- package/src/html-scan.mjs +53 -0
- package/src/install-mode.mjs +272 -0
- package/src/legacy-migration.d.ts +128 -0
- package/src/legacy-migration.mjs +510 -0
- package/src/lifecycle.mjs +338 -0
- package/src/local-proof.mjs +401 -0
- package/src/map-pin-writeback.mjs +210 -0
- package/src/orchestration-stage-contract.mjs +81 -0
- package/src/package-install-fixture.mjs +33 -0
- package/src/page-kit-build-summary.mjs +175 -0
- package/src/page-kit-campaign-config.mjs +57 -0
- package/src/page-kit-sdk-version.mjs +392 -0
- package/src/page-kit-store-profile.mjs +369 -0
- package/src/page-kit-sync.mjs +162 -0
- package/src/polish-browser.mjs +867 -0
- package/src/polish-capture.mjs +1094 -0
- package/src/polish-deadline.mjs +51 -0
- package/src/polish-gate.mjs +739 -0
- package/src/polish-node.mjs +639 -0
- package/src/polish-page-load.mjs +1100 -0
- package/src/private-template-source.mjs +237 -0
- package/src/proof-policy.mjs +82 -0
- package/src/qa-analytics-correctness.mjs +307 -0
- package/src/qa-analytics-errors.mjs +38 -0
- package/src/qa-analytics-parity.mjs +699 -0
- package/src/qa-binding-evidence.mjs +140 -0
- package/src/qa-browser.mjs +6608 -0
- package/src/qa-cart-entry.mjs +406 -0
- package/src/qa-commercial-parity.mjs +641 -0
- package/src/qa-node.mjs +3620 -0
- package/src/qa-order-bump.mjs +381 -0
- package/src/qa-parity-capture.mjs +428 -0
- package/src/qa-parity-fixture.mjs +359 -0
- package/src/qa-publish.mjs +362 -0
- package/src/qa-purchase-data-layer.mjs +263 -0
- package/src/qa-route-probe.mjs +272 -0
- package/src/qa-sidecar.mjs +188 -0
- package/src/qa-test-order-topology.mjs +207 -0
- package/src/qa-url-privacy.mjs +13 -0
- package/src/qa-verdict-discovery.mjs +192 -0
- package/src/qa-verdict-publish.mjs +105 -0
- package/src/qa-verdict.mjs +287 -0
- package/src/remit.mjs +388 -0
- package/src/repo-scan.mjs +83 -0
- package/src/route-identity.mjs +133 -0
- package/src/run-record-closeout.mjs +229 -0
- package/src/run-record.mjs +839 -0
- package/src/run-session.mjs +226 -0
- package/src/runtime-state-ignore.mjs +113 -0
- package/src/sdk-attribute-index.mjs +212 -0
- package/src/sdk-markup.mjs +358 -0
- package/src/sdk-meta-tags.mjs +52 -0
- package/src/shell-token.mjs +7 -0
- package/src/sidecar-bundle.mjs +399 -0
- package/src/source-asset-crawl.mjs +469 -0
- package/src/source-html-intake.mjs +627 -0
- package/src/source-html-manifest.mjs +276 -0
- package/src/source-prep.mjs +284 -0
- package/src/spec-derive-store.mjs +431 -0
- package/src/spec-derive.mjs +514 -0
- package/src/spec-fetch.mjs +66 -0
- package/src/spec-hash.mjs +48 -0
- package/src/spec-identity.mjs +27 -0
- package/src/stage-ledger.mjs +509 -0
- package/src/standardization-report.mjs +1297 -0
- package/src/template-brand-contract.mjs +473 -0
- package/src/template-freshness.mjs +196 -0
- package/src/template-reference.mjs +81 -0
- package/src/template-slot-manifest.mjs +150 -0
- package/src/text-safety.mjs +62 -0
- package/src/theme-gate.mjs +185 -0
- package/src/upsell-selector-scope.mjs +299 -0
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schema_version": "template-brand-contract/v0",
|
|
3
|
+
"family": "olympus-mv-two-step",
|
|
4
|
+
"extends": "template-brand-contract.shared-commerce.v0.json",
|
|
5
|
+
"description": "Brand contract for the Olympus MV two-step select-then-checkout starter-template family.",
|
|
6
|
+
"family_inventory": {
|
|
7
|
+
"supported_pages": ["landing", "presell", "select", "checkout", "upsell", "receipt"],
|
|
8
|
+
"required_sdk_anchors": {
|
|
9
|
+
"select": ["data-next-bundle-selector", "data-next-bundle-card"],
|
|
10
|
+
"checkout": ["data-next-bundle-slots-for", "data-next-bundle-slot-template-id", "data-next-payment-method", "data-next-cart-summary"],
|
|
11
|
+
"upsell": ["data-next-upsell", "data-next-bundle-selector", "data-next-bundle-slots-for"],
|
|
12
|
+
"receipt": ["data-next-order-items"]
|
|
13
|
+
},
|
|
14
|
+
"theme_insertion_point": "Load brand-theme.css from frontmatter styles after css/next-core.css on select, checkout, upsell, downsell, and receipt pages.",
|
|
15
|
+
"default_color_residue": ["#3c7dff", "#0a265c"],
|
|
16
|
+
"pricing_presentation": "Select-step bundle cards and checkout MV slots use SDK display modes for compare/current, unit-plus-total, savings, and full-price presentations.",
|
|
17
|
+
"bundle_picker": "Two-step flow: select page chooses cart/package, checkout stage resolves configurable variant slots.",
|
|
18
|
+
"order_bump": "Optional bump variants are valid only when prepurchase packages exist and must not sync line total unless specified.",
|
|
19
|
+
"upsell_downsell": "MV and bundle upsell includes use upsell_offer, upsell_mv_tiers, or upsell_bundle_tiers with visible price rows.",
|
|
20
|
+
"exit_pop": {
|
|
21
|
+
"default_included": false,
|
|
22
|
+
"include": "exit-intent-popup.html",
|
|
23
|
+
"default_coupon_codes": ["SAVE10"],
|
|
24
|
+
"behavior": "Available include only; strip unless CampaignSpec checkout exit_intent or promo_code_input maps an offer/code."
|
|
25
|
+
},
|
|
26
|
+
"qa_selectors": [".checkout-wrapper", ".submit-button", ".os-card.next-selected", ".price-wrapper", ".brand-logo"]
|
|
27
|
+
}
|
|
28
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schema_version": "template-brand-contract/v0",
|
|
3
|
+
"family": "olympus",
|
|
4
|
+
"extends": "template-brand-contract.shared-commerce.v0.json",
|
|
5
|
+
"description": "Brand contract for the Olympus tiered-bundle starter-template family.",
|
|
6
|
+
"family_inventory": {
|
|
7
|
+
"supported_pages": ["landing", "presell", "checkout", "upsell", "receipt"],
|
|
8
|
+
"required_sdk_anchors": {
|
|
9
|
+
"checkout": ["data-next-bundle-selector", "data-next-bundle-card", "data-next-payment-method", "data-next-payment-form", "data-next-express-checkout"],
|
|
10
|
+
"upsell": ["data-next-upsell", "data-next-bundle-selector", "data-next-bundle-card"],
|
|
11
|
+
"receipt": ["data-next-order-items"]
|
|
12
|
+
},
|
|
13
|
+
"theme_insertion_point": "Load brand-theme.css from frontmatter styles after css/next-core.css on checkout, upsell, downsell, and receipt pages.",
|
|
14
|
+
"default_color_residue": ["#3c7dff", "#0a265c"],
|
|
15
|
+
"pricing_presentation": "Tiered checkout cards and bundle upsells support compare/current, savings badge/amount, unit-plus-total, and full-price modes through SDK display nodes.",
|
|
16
|
+
"bundle_picker": "Tiered bundle cards with data-next-bundle-selector and data-next-bundle-card anchors.",
|
|
17
|
+
"order_bump": "Pre-purchase bump variants use bump-check01.html or bump-switch01.html and data-next-package-toggle anchors.",
|
|
18
|
+
"upsell_downsell": "Bundle stepper, tier-pills, and tier-cards upsells require a visible price row above the accept CTA.",
|
|
19
|
+
"exit_pop": {
|
|
20
|
+
"default_included": false,
|
|
21
|
+
"include": "exit-intent-popup.html",
|
|
22
|
+
"default_coupon_codes": ["EXIT5"],
|
|
23
|
+
"behavior": "Available include only; strip unless CampaignSpec checkout exit_intent or promo_code_input maps an offer/code."
|
|
24
|
+
},
|
|
25
|
+
"qa_selectors": [".checkout-wrapper", ".submit-button", ".os-card.next-selected", ".price-wrapper", ".brand-logo"]
|
|
26
|
+
}
|
|
27
|
+
}
|
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schema_version": "template-brand-contract/v0",
|
|
3
|
+
"description": "Shared brand, residue, pricing, and offer-surface rules for starter-template commerce families that consume next-core.css brand tokens.",
|
|
4
|
+
"brand_tokens": {
|
|
5
|
+
"consumed_namespace": "--brand--*",
|
|
6
|
+
"required_overrides": [
|
|
7
|
+
"--brand--color--primary",
|
|
8
|
+
"--brand--color--primary-dark"
|
|
9
|
+
],
|
|
10
|
+
"recommended_overrides": [
|
|
11
|
+
"--brand--color--cta-primary",
|
|
12
|
+
"--brand--color--primary-light",
|
|
13
|
+
"--brand--color--primary-lighter",
|
|
14
|
+
"--brand--color--rating-star"
|
|
15
|
+
],
|
|
16
|
+
"forbidden_default_values": {
|
|
17
|
+
"--brand--color--primary": "#3c7dff",
|
|
18
|
+
"--brand--color--primary-dark": "#0a265c"
|
|
19
|
+
},
|
|
20
|
+
"note": "Starter commerce pages consume --brand--* tokens from next-core.css. Campaign-namespace tokens style custom source markup only; they never restyle SDK commerce surfaces unless mapped into --brand--* overrides."
|
|
21
|
+
},
|
|
22
|
+
"css_load_order": {
|
|
23
|
+
"core_stylesheet": "next-core.css",
|
|
24
|
+
"brand_layer": "brand-theme.css",
|
|
25
|
+
"rule": "brand_layer_after_core",
|
|
26
|
+
"applies_to_page_types": ["checkout", "select", "upsell", "downsell", "receipt"]
|
|
27
|
+
},
|
|
28
|
+
"default_residue": {
|
|
29
|
+
"logo": {
|
|
30
|
+
"asset": "images/next-logo.png",
|
|
31
|
+
"selector": "img.brand-logo",
|
|
32
|
+
"page_types": ["checkout", "select", "upsell", "downsell", "receipt"],
|
|
33
|
+
"rule": "Campaign brand logo must replace the starter next-logo.png on commerce pages unless the CampaignSpec store branding intentionally keeps it."
|
|
34
|
+
},
|
|
35
|
+
"payment_chrome": {
|
|
36
|
+
"methods": ["paypal", "klarna"],
|
|
37
|
+
"selectors": [
|
|
38
|
+
".payment-method__icon--paypal-logo",
|
|
39
|
+
".payment-method__icon--paypal-txt",
|
|
40
|
+
".payment-method__icon--klarna-logo"
|
|
41
|
+
],
|
|
42
|
+
"assets": [
|
|
43
|
+
"images/paypal.svg",
|
|
44
|
+
"images/paypal-logo.svg",
|
|
45
|
+
"images/paypal-txt.svg",
|
|
46
|
+
"images/klarna-logo.svg",
|
|
47
|
+
"images/upsell-payment-logos.svg"
|
|
48
|
+
],
|
|
49
|
+
"asset_sha256": {
|
|
50
|
+
"images/paypal.svg": "7c84e9a91a694ca48ad6899325862bb509ba927281198d4c9d1c5da31de6054a",
|
|
51
|
+
"images/paypal-logo.svg": "adf9b3c556710fac2e0f2ecf748a1f82afd023d7957336ef228db33f1deb83d3",
|
|
52
|
+
"images/paypal-txt.svg": "65b5b5ac3704273a1a888af98295d7ef805682c6c3c24554349eb10ef7f6f2ef",
|
|
53
|
+
"images/klarna-logo.svg": "e0229bc62001597c3c2428e64c1032a53963f082b90560f8fad21c3c34a8bec6",
|
|
54
|
+
"images/upsell-payment-logos.svg": "54a8f046ae047a79d1318a98ac808cc61f15ca31cd1a232f7b5577405caa4936"
|
|
55
|
+
},
|
|
56
|
+
"asset_pin": {
|
|
57
|
+
"repo": "NextCommerceCo/campaign-cart-starter-templates",
|
|
58
|
+
"sha": "a7cc8beaf9d332c5d8e501d36fb9d4d7e3667468",
|
|
59
|
+
"path": "src/<family>/assets/<asset>",
|
|
60
|
+
"note": "asset_sha256 is the sha256 of each shipped starter asset at this commit (the commerce-surface-catalog _synced_from_sha pin; the bytes are identical across every family). A served asset whose bytes hash to the shipped value is the untouched starter asset and counts as residue even though its markup names no method; different bytes mean it was edited in place. check-template-doctrine verifies these hashes against the pinned checkout."
|
|
61
|
+
},
|
|
62
|
+
"rule": "Remove unless the method is listed in CampaignSpec available_payment_methods / available_express_payment_methods. Template chrome outside the SDK payment-method include counts as implied payment-method residue.",
|
|
63
|
+
"note": "paypal intentionally has two selectors. QA fails if any selector for an unsupported method remains visible."
|
|
64
|
+
}
|
|
65
|
+
},
|
|
66
|
+
"demo_assets": {
|
|
67
|
+
"page_types": ["checkout", "select", "upsell", "downsell", "receipt", "presell", "landing"],
|
|
68
|
+
"assets": ["images/1x1_1.svg", "images/1x1_2.svg"],
|
|
69
|
+
"rule": "Template demo placeholder assets (1x1 spacer SVGs, repeated benefit icons, starter imagery) must be re-skinned to the campaign's real assets before launch. Surviving demo assets are a warning, not a blocker: the agent should replace them rather than ship template placeholders. Declared per family; arrays replace on extends, so a family lists its own demo-asset set."
|
|
70
|
+
},
|
|
71
|
+
"qa_inspection": {
|
|
72
|
+
"forbidden_computed_colors": [
|
|
73
|
+
{ "hex": "#3c7dff", "rgb": "rgb(60, 125, 255)", "token": "--brand--color--primary" },
|
|
74
|
+
{ "hex": "#0a265c", "rgb": "rgb(10, 38, 92)", "token": "--brand--color--primary-dark" }
|
|
75
|
+
],
|
|
76
|
+
"placeholder_text_residue": {
|
|
77
|
+
"page_types": ["checkout", "select", "upsell", "downsell", "receipt", "presell", "landing"],
|
|
78
|
+
"terms": ["Lorem", "lorem ipsum", "Placeholder", "TODO", "Product Name"],
|
|
79
|
+
"rule": "Rendered campaign output must not contain literal template placeholder copy. Every term is replaced from the CampaignSpec/design before QA; QA fails (blocker) on any match in visible page text, regardless of any theme-gate waiver. Matched on word boundaries, case-insensitive. Scope is governed by page_types: the blocker applies only to the listed campaign funnel page types (generic, non-funnel pages whose type is not listed are not checked). Narrow page_types to exempt a page type where placeholder copy is acceptable."
|
|
80
|
+
},
|
|
81
|
+
"computed_style_checks": [
|
|
82
|
+
{
|
|
83
|
+
"id": "checkout_submit_button",
|
|
84
|
+
"page_types": ["checkout"],
|
|
85
|
+
"selector": ".submit-button",
|
|
86
|
+
"properties": ["background-color", "border-color"],
|
|
87
|
+
"optional": false
|
|
88
|
+
},
|
|
89
|
+
{
|
|
90
|
+
"id": "selected_bundle_card",
|
|
91
|
+
"page_types": ["checkout", "select"],
|
|
92
|
+
"selector": ".os-card.next-selected",
|
|
93
|
+
"properties": ["border-color", "outline-color"],
|
|
94
|
+
"optional": true
|
|
95
|
+
},
|
|
96
|
+
{
|
|
97
|
+
"id": "announcement_bar",
|
|
98
|
+
"page_types": ["checkout", "upsell", "downsell"],
|
|
99
|
+
"selector": ".announcement",
|
|
100
|
+
"properties": ["background-color"],
|
|
101
|
+
"optional": true
|
|
102
|
+
},
|
|
103
|
+
{
|
|
104
|
+
"id": "bump_outline",
|
|
105
|
+
"page_types": ["checkout"],
|
|
106
|
+
"selector": "[data-next-package-sync='false'], .bump-offer, .order-bump",
|
|
107
|
+
"properties": ["border-color", "outline-color"],
|
|
108
|
+
"optional": true
|
|
109
|
+
},
|
|
110
|
+
{
|
|
111
|
+
"id": "upsell_accept_cta",
|
|
112
|
+
"page_types": ["upsell", "downsell"],
|
|
113
|
+
"selector": "[data-next-action='accept'], [data-next-upsell-action='add'], a[href*='upsell-accept'], .submit-button",
|
|
114
|
+
"properties": ["background-color"],
|
|
115
|
+
"optional": false
|
|
116
|
+
}
|
|
117
|
+
]
|
|
118
|
+
},
|
|
119
|
+
"pricing_surfaces": {
|
|
120
|
+
"modes": ["full_price", "compare_at_current", "unit_price_plus_total", "savings_badge_amount", "code_discounted_post_checkout"],
|
|
121
|
+
"legacy_aliases": {
|
|
122
|
+
"discounted": "compare_at_current",
|
|
123
|
+
"compare_at": "compare_at_current",
|
|
124
|
+
"unit_total": "unit_price_plus_total",
|
|
125
|
+
"unit_only": "full_price"
|
|
126
|
+
},
|
|
127
|
+
"rule": "Pricing surfaces render via mode-driven partial arguments, never via campaign CSS that hides price rows. Campaign stylesheets must not apply display:none to price wrappers or SDK price displays.",
|
|
128
|
+
"same_price_strike_rule": "If no offer, voucher, compare-at value, or code-discounted post-checkout state governs an order bump, upsell, or downsell, render full_price only; do not show identical struck-through and current prices.",
|
|
129
|
+
"forbidden_css_hides": [
|
|
130
|
+
".price-wrapper",
|
|
131
|
+
".prices-text-wrapper",
|
|
132
|
+
".price-display",
|
|
133
|
+
".cart-price",
|
|
134
|
+
".summary_price",
|
|
135
|
+
"[data-next-display*='price']"
|
|
136
|
+
],
|
|
137
|
+
"surfaces": {
|
|
138
|
+
"checkout_bundle": {
|
|
139
|
+
"default_mode": "compare_at_current",
|
|
140
|
+
"price_row_selectors": [".price-wrapper", ".cart-price", "[data-next-bundle-display*='price']", "[data-next-display*='price']"]
|
|
141
|
+
},
|
|
142
|
+
"bump": {
|
|
143
|
+
"default_mode": "full_price",
|
|
144
|
+
"price_row_selectors": [".price-wrapper", ".cart-price", "[data-next-display*='price']"]
|
|
145
|
+
},
|
|
146
|
+
"upsell": {
|
|
147
|
+
"default_mode": "full_price",
|
|
148
|
+
"price_row_selectors": [".price-wrapper", ".price-display", ".summary_price", "[data-next-display*='price']"],
|
|
149
|
+
"visible_price_rows_by_mode": {
|
|
150
|
+
"full_price": 1,
|
|
151
|
+
"compare_at_current": 2,
|
|
152
|
+
"unit_price_plus_total": 2,
|
|
153
|
+
"savings_badge_amount": 2,
|
|
154
|
+
"code_discounted_post_checkout": 2
|
|
155
|
+
},
|
|
156
|
+
"note": "A full_price upsell shows exactly one visible price row adjacent to the accept control. Zero visible price rows on an upsell/downsell offer is a blocker."
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
},
|
|
160
|
+
"checkout_fields": {
|
|
161
|
+
"initial_hint_state": {
|
|
162
|
+
"rule": "Empty checkout fields must have a legible initial hint state: either visible labels, placeholder-style hints, or both. Accessible-only labels are not sufficient if the visible placeholder/hint text is stripped from empty inputs.",
|
|
163
|
+
"valid_patterns": ["visible_label", "placeholder_style_hint", "visible_label_plus_placeholder"],
|
|
164
|
+
"applies_to": ["customer", "shipping", "billing", "payment_hosted_fields"],
|
|
165
|
+
"surface_definitions": {
|
|
166
|
+
"customer": "Customer identity fields rendered by the checkout template, such as email and phone.",
|
|
167
|
+
"shipping": "Shipping address fields rendered by the checkout template.",
|
|
168
|
+
"billing": "Billing address fields rendered by the checkout template when distinct from shipping.",
|
|
169
|
+
"payment_hosted_fields": "Third-party hosted payment iframes or SDK-owned payment fields whose initial visible labels, placeholders, or frame hints must remain legible."
|
|
170
|
+
},
|
|
171
|
+
"polish_evidence_key": "checkout_review.field_labels"
|
|
172
|
+
}
|
|
173
|
+
},
|
|
174
|
+
"exit_pop": {
|
|
175
|
+
"requires_spec_surface": ["exit_intent", "promo_code_input"],
|
|
176
|
+
"residue_literals": [
|
|
177
|
+
"exit-intent-popup",
|
|
178
|
+
"data-template=\"exit-intent\"",
|
|
179
|
+
"data-exit-intent-action",
|
|
180
|
+
"data-coupon-code=\"EXIT5\"",
|
|
181
|
+
"data-coupon-code=\"EXIT10\"",
|
|
182
|
+
"data-coupon-code=\"SAVE10\""
|
|
183
|
+
],
|
|
184
|
+
"blank_widget_literals": [
|
|
185
|
+
"data-coupon-code=\"\"",
|
|
186
|
+
"Apply My Discount Coupon"
|
|
187
|
+
],
|
|
188
|
+
"rule": "If an exit-intent include or default widget ships without CampaignSpec checkout exit_intent or promo_code_input behavior, strip it or record a hard warning. If present, it must apply the mapped offer through the SDK/API coupon path and use cart.hasCoupon(\"CODE\") style conditionals for applied-state presentation."
|
|
189
|
+
}
|
|
190
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schema_version": "template-brand-contract/v0",
|
|
3
|
+
"family": "shop-single-step",
|
|
4
|
+
"extends": "template-brand-contract.shared-commerce.v0.json",
|
|
5
|
+
"description": "Brand contract for the Shop single-step checkout starter-template family.",
|
|
6
|
+
"family_inventory": {
|
|
7
|
+
"supported_pages": ["landing", "presell", "checkout", "upsell", "receipt"],
|
|
8
|
+
"required_sdk_anchors": {
|
|
9
|
+
"checkout": ["data-next-cart-summary", "data-next-express-checkout", "data-next-payment-method", "data-next-payment-form"],
|
|
10
|
+
"upsell": ["data-next-upsell", "data-next-bundle-selector"],
|
|
11
|
+
"receipt": ["data-next-order-items"]
|
|
12
|
+
},
|
|
13
|
+
"theme_insertion_point": "Load brand-theme.css from frontmatter styles after css/next-core.css on checkout, upsell, downsell, and receipt pages.",
|
|
14
|
+
"default_color_residue": ["#3c7dff", "#0a265c"],
|
|
15
|
+
"pricing_presentation": "Shop summary/payment shell uses SDK cart summary prices; upsells support full-price and offer-discounted compare/current modes.",
|
|
16
|
+
"bundle_picker": "No tiered checkout picker by default; cart summary and payment shell are the protected SDK surface.",
|
|
17
|
+
"order_bump": "Shop bump-check02.html can render only when a bump package exists; otherwise remove the bump surface.",
|
|
18
|
+
"upsell_downsell": "Shop upsell offer includes use upsell_offer or upsell_bundle_tiers with a visible price row above the accept CTA.",
|
|
19
|
+
"exit_pop": {
|
|
20
|
+
"default_included": false,
|
|
21
|
+
"include": "exit-intent-popup.html",
|
|
22
|
+
"default_coupon_codes": ["SAVE10"],
|
|
23
|
+
"behavior": "Available include only; strip unless CampaignSpec checkout exit_intent or promo_code_input maps an offer/code."
|
|
24
|
+
},
|
|
25
|
+
"qa_selectors": [".checkout-wrapper", ".submit-button", ".cart-price", ".price-wrapper", ".brand-logo"]
|
|
26
|
+
}
|
|
27
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schema_version": "template-brand-contract/v0",
|
|
3
|
+
"family": "shop-three-step",
|
|
4
|
+
"extends": "template-brand-contract.shared-commerce.v0.json",
|
|
5
|
+
"description": "Brand contract for the Shop three-step information/shipping/billing starter-template family.",
|
|
6
|
+
"family_inventory": {
|
|
7
|
+
"supported_pages": ["landing", "presell", "information", "shipping", "billing", "upsell", "receipt"],
|
|
8
|
+
"required_sdk_anchors": {
|
|
9
|
+
"information": ["next-success-url"],
|
|
10
|
+
"shipping": ["data-next-shipping-id"],
|
|
11
|
+
"billing": ["data-next-payment-method", "data-next-payment-form"],
|
|
12
|
+
"upsell": ["data-next-upsell", "data-next-bundle-selector"],
|
|
13
|
+
"receipt": ["data-next-order-items"]
|
|
14
|
+
},
|
|
15
|
+
"theme_insertion_point": "Load brand-theme.css from frontmatter styles after css/next-core.css on information, shipping, billing, upsell, downsell, and receipt pages.",
|
|
16
|
+
"default_color_residue": ["#3c7dff", "#0a265c"],
|
|
17
|
+
"pricing_presentation": "Billing and upsell surfaces use SDK cart/order displays; shipping prices come from window.next.getShippingMethods(), not static Olympus-style shipping_methods frontmatter.",
|
|
18
|
+
"bundle_picker": "No checkout bundle picker; the family uses a multi-step shop flow with dynamic shipping before billing.",
|
|
19
|
+
"order_bump": "No promoted order-bump contract yet; unsupported bump widgets must be removed unless the family contract is promoted.",
|
|
20
|
+
"upsell_downsell": "Shop three-step upsells currently include inline refs plus upsell_offer/upsell_bundle_tiers mapping hints; both must be replaced from CampaignSpec/API.",
|
|
21
|
+
"exit_pop": {
|
|
22
|
+
"default_included": false,
|
|
23
|
+
"include": null,
|
|
24
|
+
"default_coupon_codes": [],
|
|
25
|
+
"behavior": "No promoted exit-pop include in the three-step family; any copied exit widget must be stripped unless CampaignSpec maps an offer/code."
|
|
26
|
+
},
|
|
27
|
+
"qa_selectors": [".checkout-wrapper", ".submit-button", ".price-wrapper", ".brand-logo", "[data-next-shipping-id]"]
|
|
28
|
+
}
|
|
29
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schema_version": "template-slot-manifest/v0",
|
|
3
|
+
"family": "apollo-mv-single-step",
|
|
4
|
+
"extends": "template-slot-manifest.shared-content-core.v0.json",
|
|
5
|
+
"description": "Content-slot manifest for the apollo-mv-single-step starter-template family. Shared slots come from the content-slot core; this overlay declares family-specific keys and commerce-owned pages.",
|
|
6
|
+
"overlay": {
|
|
7
|
+
"pages": {}
|
|
8
|
+
},
|
|
9
|
+
"commerce_owned_pages": [
|
|
10
|
+
"checkout",
|
|
11
|
+
"upsell-mv",
|
|
12
|
+
"variant-picker"
|
|
13
|
+
]
|
|
14
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schema_version": "template-slot-manifest/v0",
|
|
3
|
+
"family": "apollo",
|
|
4
|
+
"extends": "template-slot-manifest.shared-content-core.v0.json",
|
|
5
|
+
"description": "Content-slot manifest for the apollo starter-template family. Shared slots come from the content-slot core; this overlay declares family-specific keys and commerce-owned pages.",
|
|
6
|
+
"overlay": {
|
|
7
|
+
"pages": {}
|
|
8
|
+
},
|
|
9
|
+
"commerce_owned_pages": [
|
|
10
|
+
"checkout"
|
|
11
|
+
]
|
|
12
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schema_version": "template-slot-manifest/v0",
|
|
3
|
+
"family": "demeter",
|
|
4
|
+
"extends": "template-slot-manifest.shared-content-core.v0.json",
|
|
5
|
+
"description": "Content-slot manifest for the demeter starter-template family. Shared slots come from the content-slot core; this overlay declares family-specific keys and commerce-owned pages.",
|
|
6
|
+
"overlay": {
|
|
7
|
+
"pages": {
|
|
8
|
+
"receipt": {
|
|
9
|
+
"sections": [
|
|
10
|
+
{
|
|
11
|
+
"section": "family_overlay",
|
|
12
|
+
"slots": [
|
|
13
|
+
{
|
|
14
|
+
"key": "receipt_summary",
|
|
15
|
+
"kind": "commerce",
|
|
16
|
+
"role": "commerce_structure",
|
|
17
|
+
"owner": "commerce",
|
|
18
|
+
"description": "Structured commerce configuration \u2014 owned by the commerce-surface catalog and the family brand contract, not the content-slot layer.",
|
|
19
|
+
"reference": "integrated_commerce_surface_ref"
|
|
20
|
+
}
|
|
21
|
+
]
|
|
22
|
+
}
|
|
23
|
+
]
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
},
|
|
27
|
+
"commerce_owned_pages": [
|
|
28
|
+
"checkout"
|
|
29
|
+
]
|
|
30
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schema_version": "template-slot-manifest/v0",
|
|
3
|
+
"family": "olympus-mv-single-step",
|
|
4
|
+
"extends": "template-slot-manifest.shared-content-core.v0.json",
|
|
5
|
+
"description": "Content-slot manifest for the olympus-mv-single-step starter-template family. Shared slots come from the content-slot core; this overlay declares family-specific keys and commerce-owned pages.",
|
|
6
|
+
"overlay": {
|
|
7
|
+
"pages": {}
|
|
8
|
+
},
|
|
9
|
+
"commerce_owned_pages": [
|
|
10
|
+
"checkout",
|
|
11
|
+
"upsell-mv",
|
|
12
|
+
"variant-picker"
|
|
13
|
+
]
|
|
14
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schema_version": "template-slot-manifest/v0",
|
|
3
|
+
"family": "olympus-mv-two-step",
|
|
4
|
+
"extends": "template-slot-manifest.shared-content-core.v0.json",
|
|
5
|
+
"description": "Content-slot manifest for the olympus-mv-two-step starter-template family. Shared slots come from the content-slot core; this overlay declares family-specific keys and commerce-owned pages.",
|
|
6
|
+
"overlay": {
|
|
7
|
+
"pages": {}
|
|
8
|
+
},
|
|
9
|
+
"commerce_owned_pages": [
|
|
10
|
+
"checkout",
|
|
11
|
+
"upsell-mv",
|
|
12
|
+
"variant-picker",
|
|
13
|
+
"select"
|
|
14
|
+
]
|
|
15
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schema_version": "template-slot-manifest/v0",
|
|
3
|
+
"family": "olympus",
|
|
4
|
+
"extends": "template-slot-manifest.shared-content-core.v0.json",
|
|
5
|
+
"description": "Content-slot manifest for the olympus starter-template family. Shared slots come from the content-slot core; this overlay declares family-specific keys and commerce-owned pages.",
|
|
6
|
+
"overlay": {
|
|
7
|
+
"pages": {}
|
|
8
|
+
},
|
|
9
|
+
"commerce_owned_pages": [
|
|
10
|
+
"checkout"
|
|
11
|
+
]
|
|
12
|
+
}
|