@ucptools/validator 1.0.0 → 1.1.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/dist/auth/config.d.ts +20 -0
- package/dist/auth/config.d.ts.map +1 -0
- package/dist/auth/config.js +114 -0
- package/dist/auth/config.js.map +1 -0
- package/dist/auth/index.d.ts +5 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/index.js +17 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/auth/middleware.d.ts +45 -0
- package/dist/auth/middleware.d.ts.map +1 -0
- package/dist/auth/middleware.js +170 -0
- package/dist/auth/middleware.js.map +1 -0
- package/dist/auth/service.d.ts +80 -0
- package/dist/auth/service.d.ts.map +1 -0
- package/dist/auth/service.js +298 -0
- package/dist/auth/service.js.map +1 -0
- package/dist/cli/index.d.ts +6 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +375 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/mock-server.d.ts +20 -0
- package/dist/cli/mock-server.d.ts.map +1 -0
- package/dist/cli/mock-server.js +261 -0
- package/dist/cli/mock-server.js.map +1 -0
- package/dist/compliance/compliance-generator.d.ts +34 -0
- package/dist/compliance/compliance-generator.d.ts.map +1 -0
- package/dist/compliance/compliance-generator.js +320 -0
- package/dist/compliance/compliance-generator.js.map +1 -0
- package/dist/compliance/index.d.ts +8 -0
- package/dist/compliance/index.d.ts.map +1 -0
- package/dist/compliance/index.js +17 -0
- package/dist/compliance/index.js.map +1 -0
- package/dist/compliance/templates.d.ts +34 -0
- package/dist/compliance/templates.d.ts.map +1 -0
- package/{src/compliance/templates.ts → dist/compliance/templates.js} +117 -155
- package/dist/compliance/templates.js.map +1 -0
- package/dist/compliance/types.d.ts +64 -0
- package/dist/compliance/types.d.ts.map +1 -0
- package/dist/compliance/types.js +64 -0
- package/dist/compliance/types.js.map +1 -0
- package/dist/db/index.d.ts +17 -0
- package/dist/db/index.d.ts.map +1 -0
- package/dist/db/index.js +80 -0
- package/dist/db/index.js.map +1 -0
- package/dist/db/schema.d.ts +3886 -0
- package/dist/db/schema.d.ts.map +1 -0
- package/dist/db/schema.js +425 -0
- package/dist/db/schema.js.map +1 -0
- package/dist/db/utils.d.ts +252 -0
- package/dist/db/utils.d.ts.map +1 -0
- package/dist/db/utils.js +295 -0
- package/dist/db/utils.js.map +1 -0
- package/dist/feed-analyzer/feed-analyzer.d.ts +26 -0
- package/dist/feed-analyzer/feed-analyzer.d.ts.map +1 -0
- package/{src/feed-analyzer/feed-analyzer.ts → dist/feed-analyzer/feed-analyzer.js} +856 -726
- package/dist/feed-analyzer/feed-analyzer.js.map +1 -0
- package/dist/feed-analyzer/index.d.ts +8 -0
- package/dist/feed-analyzer/index.d.ts.map +1 -0
- package/dist/feed-analyzer/index.js +19 -0
- package/dist/feed-analyzer/index.js.map +1 -0
- package/dist/feed-analyzer/types.d.ts +285 -0
- package/dist/feed-analyzer/types.d.ts.map +1 -0
- package/dist/feed-analyzer/types.js +175 -0
- package/dist/feed-analyzer/types.js.map +1 -0
- package/{src/generator/index.ts → dist/generator/index.d.ts} +1 -1
- package/dist/generator/index.d.ts.map +1 -0
- package/dist/generator/index.js +13 -0
- package/dist/generator/index.js.map +1 -0
- package/dist/generator/key-generator.d.ts +24 -0
- package/dist/generator/key-generator.d.ts.map +1 -0
- package/dist/generator/key-generator.js +144 -0
- package/dist/generator/key-generator.js.map +1 -0
- package/dist/generator/profile-builder.d.ts +15 -0
- package/dist/generator/profile-builder.d.ts.map +1 -0
- package/dist/generator/profile-builder.js +338 -0
- package/dist/generator/profile-builder.js.map +1 -0
- package/dist/hosting/artifacts-generator.d.ts +10 -0
- package/dist/hosting/artifacts-generator.d.ts.map +1 -0
- package/{src/hosting/artifacts-generator.ts → dist/hosting/artifacts-generator.js} +191 -241
- package/dist/hosting/artifacts-generator.js.map +1 -0
- package/{src/hosting/index.ts → dist/hosting/index.d.ts} +1 -1
- package/dist/hosting/index.d.ts.map +1 -0
- package/dist/hosting/index.js +10 -0
- package/dist/hosting/index.js.map +1 -0
- package/dist/index.d.ts +18 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +78 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/analytics.d.ts +337 -0
- package/dist/lib/analytics.d.ts.map +1 -0
- package/dist/lib/analytics.js +188 -0
- package/dist/lib/analytics.js.map +1 -0
- package/{src/security/index.ts → dist/security/index.d.ts} +8 -15
- package/dist/security/index.d.ts.map +1 -0
- package/dist/security/index.js +12 -0
- package/dist/security/index.js.map +1 -0
- package/dist/security/security-scanner.d.ts +10 -0
- package/dist/security/security-scanner.d.ts.map +1 -0
- package/dist/security/security-scanner.js +669 -0
- package/dist/security/security-scanner.js.map +1 -0
- package/dist/security/types.d.ts +80 -0
- package/dist/security/types.d.ts.map +1 -0
- package/dist/security/types.js +21 -0
- package/dist/security/types.js.map +1 -0
- package/dist/services/analytics.d.ts +114 -0
- package/dist/services/analytics.d.ts.map +1 -0
- package/dist/services/analytics.js +862 -0
- package/dist/services/analytics.js.map +1 -0
- package/dist/services/badge.d.ts +31 -0
- package/dist/services/badge.d.ts.map +1 -0
- package/dist/services/badge.js +152 -0
- package/dist/services/badge.js.map +1 -0
- package/dist/services/cron.d.ts +125 -0
- package/dist/services/cron.d.ts.map +1 -0
- package/dist/services/cron.js +613 -0
- package/dist/services/cron.js.map +1 -0
- package/dist/services/directory.d.ts +106 -0
- package/dist/services/directory.d.ts.map +1 -0
- package/dist/services/directory.js +351 -0
- package/dist/services/directory.js.map +1 -0
- package/dist/services/email.d.ts +112 -0
- package/dist/services/email.d.ts.map +1 -0
- package/dist/services/email.js +772 -0
- package/dist/services/email.js.map +1 -0
- package/dist/services/hosted-profiles.d.ts +77 -0
- package/dist/services/hosted-profiles.d.ts.map +1 -0
- package/dist/services/hosted-profiles.js +433 -0
- package/dist/services/hosted-profiles.js.map +1 -0
- package/dist/services/latency.d.ts +67 -0
- package/dist/services/latency.d.ts.map +1 -0
- package/dist/services/latency.js +274 -0
- package/dist/services/latency.js.map +1 -0
- package/dist/services/manifest-compliance.d.ts +64 -0
- package/dist/services/manifest-compliance.d.ts.map +1 -0
- package/dist/services/manifest-compliance.js +271 -0
- package/dist/services/manifest-compliance.js.map +1 -0
- package/dist/services/monitoring-diff.d.ts +31 -0
- package/dist/services/monitoring-diff.d.ts.map +1 -0
- package/dist/services/monitoring-diff.js +189 -0
- package/dist/services/monitoring-diff.js.map +1 -0
- package/dist/services/notifications.d.ts +46 -0
- package/dist/services/notifications.d.ts.map +1 -0
- package/dist/services/notifications.js +88 -0
- package/dist/services/notifications.js.map +1 -0
- package/dist/services/stripe.d.ts +93 -0
- package/dist/services/stripe.d.ts.map +1 -0
- package/dist/services/stripe.js +490 -0
- package/dist/services/stripe.js.map +1 -0
- package/dist/services/validation-history.d.ts +99 -0
- package/dist/services/validation-history.d.ts.map +1 -0
- package/dist/services/validation-history.js +344 -0
- package/dist/services/validation-history.js.map +1 -0
- package/dist/services/validation-logging.d.ts +103 -0
- package/dist/services/validation-logging.d.ts.map +1 -0
- package/dist/services/validation-logging.js +210 -0
- package/dist/services/validation-logging.js.map +1 -0
- package/dist/services/validation.d.ts +119 -0
- package/dist/services/validation.d.ts.map +1 -0
- package/dist/services/validation.js +1185 -0
- package/dist/services/validation.js.map +1 -0
- package/dist/simulator/agent-simulator.d.ts +69 -0
- package/dist/simulator/agent-simulator.d.ts.map +1 -0
- package/dist/simulator/agent-simulator.js +870 -0
- package/dist/simulator/agent-simulator.js.map +1 -0
- package/{src/simulator/index.ts → dist/simulator/index.d.ts} +7 -7
- package/dist/simulator/index.d.ts.map +1 -0
- package/dist/simulator/index.js +23 -0
- package/dist/simulator/index.js.map +1 -0
- package/{src/simulator/types.ts → dist/simulator/types.d.ts} +171 -170
- package/dist/simulator/types.d.ts.map +1 -0
- package/dist/simulator/types.js +18 -0
- package/dist/simulator/types.js.map +1 -0
- package/dist/types/acp-validation.d.ts +87 -0
- package/dist/types/acp-validation.d.ts.map +1 -0
- package/dist/types/acp-validation.js +40 -0
- package/dist/types/acp-validation.js.map +1 -0
- package/dist/types/analytics.d.ts +182 -0
- package/dist/types/analytics.d.ts.map +1 -0
- package/dist/types/analytics.js +7 -0
- package/dist/types/analytics.js.map +1 -0
- package/dist/types/generator.d.ts +106 -0
- package/dist/types/generator.d.ts.map +1 -0
- package/dist/types/generator.js +6 -0
- package/dist/types/generator.js.map +1 -0
- package/{src/types/index.ts → dist/types/index.d.ts} +1 -1
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +23 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/ucp-profile.d.ts +111 -0
- package/dist/types/ucp-profile.d.ts.map +1 -0
- package/dist/types/ucp-profile.js +45 -0
- package/dist/types/ucp-profile.js.map +1 -0
- package/dist/types/validation.d.ts +76 -0
- package/dist/types/validation.d.ts.map +1 -0
- package/dist/types/validation.js +42 -0
- package/dist/types/validation.js.map +1 -0
- package/dist/validator/acp/index.d.ts +31 -0
- package/dist/validator/acp/index.d.ts.map +1 -0
- package/dist/validator/acp/index.js +574 -0
- package/dist/validator/acp/index.js.map +1 -0
- package/dist/validator/index.d.ts +26 -0
- package/dist/validator/index.d.ts.map +1 -0
- package/dist/validator/index.js +161 -0
- package/dist/validator/index.js.map +1 -0
- package/dist/validator/network-validator.d.ts +28 -0
- package/dist/validator/network-validator.d.ts.map +1 -0
- package/dist/validator/network-validator.js +319 -0
- package/dist/validator/network-validator.js.map +1 -0
- package/dist/validator/rules-validator.d.ts +19 -0
- package/dist/validator/rules-validator.d.ts.map +1 -0
- package/dist/validator/rules-validator.js +306 -0
- package/dist/validator/rules-validator.js.map +1 -0
- package/dist/validator/sdk-validator.d.ts +58 -0
- package/dist/validator/sdk-validator.d.ts.map +1 -0
- package/{src/validator/sdk-validator.ts → dist/validator/sdk-validator.js} +273 -330
- package/dist/validator/sdk-validator.js.map +1 -0
- package/dist/validator/structural-validator.d.ts +11 -0
- package/dist/validator/structural-validator.d.ts.map +1 -0
- package/dist/validator/structural-validator.js +549 -0
- package/dist/validator/structural-validator.js.map +1 -0
- package/dist/validator/utils.d.ts +51 -0
- package/dist/validator/utils.d.ts.map +1 -0
- package/dist/validator/utils.js +132 -0
- package/dist/validator/utils.js.map +1 -0
- package/package.json +44 -12
- package/CLAUDE.md +0 -109
- package/api/analyze-feed.js +0 -140
- package/api/badge.js +0 -185
- package/api/benchmark.js +0 -177
- package/api/directory-stats.ts +0 -29
- package/api/directory.ts +0 -73
- package/api/generate-compliance.js +0 -143
- package/api/generate-schema.js +0 -457
- package/api/generate.js +0 -132
- package/api/security-scan.js +0 -133
- package/api/simulate.js +0 -187
- package/api/tsconfig.json +0 -10
- package/api/validate.js +0 -1351
- package/apify-actor/.actor/actor.json +0 -68
- package/apify-actor/.actor/input_schema.json +0 -32
- package/apify-actor/APIFY-STORE-LISTING.md +0 -412
- package/apify-actor/Dockerfile +0 -8
- package/apify-actor/README.md +0 -166
- package/apify-actor/main.ts +0 -111
- package/apify-actor/package.json +0 -17
- package/apify-actor/src/main.js +0 -199
- package/docs/BRAND-IDENTITY.md +0 -238
- package/docs/BRAND-STYLE-GUIDE.md +0 -356
- package/drizzle/0000_black_king_cobra.sql +0 -39
- package/drizzle/meta/0000_snapshot.json +0 -309
- package/drizzle/meta/_journal.json +0 -13
- package/drizzle.config.ts +0 -10
- package/public/.well-known/ucp +0 -25
- package/public/android-chrome-192x192.png +0 -0
- package/public/android-chrome-512x512.png +0 -0
- package/public/apple-touch-icon.png +0 -0
- package/public/brand.css +0 -321
- package/public/directory.html +0 -701
- package/public/favicon-16x16.png +0 -0
- package/public/favicon-32x32.png +0 -0
- package/public/favicon.ico +0 -0
- package/public/guides/bigcommerce.html +0 -743
- package/public/guides/fastucp.html +0 -838
- package/public/guides/magento.html +0 -779
- package/public/guides/shopify.html +0 -726
- package/public/guides/squarespace.html +0 -749
- package/public/guides/wix.html +0 -747
- package/public/guides/woocommerce.html +0 -733
- package/public/index.html +0 -3835
- package/public/learn.html +0 -396
- package/public/logo.jpeg +0 -0
- package/public/og-image-icon.png +0 -0
- package/public/og-image.png +0 -0
- package/public/robots.txt +0 -6
- package/public/site.webmanifest +0 -31
- package/public/sitemap.xml +0 -69
- package/public/social/linkedin-banner-1128x191.png +0 -0
- package/public/social/temp.PNG +0 -0
- package/public/social/x-header-1500x500.png +0 -0
- package/public/verify.html +0 -410
- package/scripts/generate-favicons.js +0 -44
- package/scripts/generate-ico.js +0 -23
- package/scripts/generate-og-image.js +0 -45
- package/scripts/reset-db.ts +0 -77
- package/scripts/seed-db.ts +0 -71
- package/scripts/setup-benchmark-db.js +0 -70
- package/src/api/server.ts +0 -266
- package/src/cli/index.ts +0 -302
- package/src/compliance/compliance-generator.ts +0 -452
- package/src/compliance/index.ts +0 -28
- package/src/compliance/types.ts +0 -170
- package/src/db/index.ts +0 -28
- package/src/db/schema.ts +0 -84
- package/src/feed-analyzer/index.ts +0 -34
- package/src/feed-analyzer/types.ts +0 -354
- package/src/generator/key-generator.ts +0 -124
- package/src/generator/profile-builder.ts +0 -402
- package/src/index.ts +0 -105
- package/src/security/security-scanner.ts +0 -604
- package/src/security/types.ts +0 -55
- package/src/services/directory.ts +0 -434
- package/src/simulator/agent-simulator.ts +0 -941
- package/src/types/generator.ts +0 -140
- package/src/types/ucp-profile.ts +0 -140
- package/src/types/validation.ts +0 -89
- package/src/validator/index.ts +0 -194
- package/src/validator/network-validator.ts +0 -417
- package/src/validator/rules-validator.ts +0 -297
- package/src/validator/structural-validator.ts +0 -476
- package/tests/fixtures/non-compliant-profile.json +0 -25
- package/tests/fixtures/official-sample-profile.json +0 -75
- package/tests/integration/benchmark.test.ts +0 -207
- package/tests/integration/database.test.ts +0 -163
- package/tests/integration/directory-api.test.ts +0 -268
- package/tests/integration/simulate-api.test.ts +0 -230
- package/tests/integration/validate-api.test.ts +0 -269
- package/tests/setup.ts +0 -15
- package/tests/unit/agent-simulator.test.ts +0 -575
- package/tests/unit/compliance-generator.test.ts +0 -374
- package/tests/unit/directory-service.test.ts +0 -272
- package/tests/unit/feed-analyzer.test.ts +0 -517
- package/tests/unit/lint-suggestions.test.ts +0 -423
- package/tests/unit/official-samples.test.ts +0 -211
- package/tests/unit/pdf-report.test.ts +0 -390
- package/tests/unit/sdk-validator.test.ts +0 -531
- package/tests/unit/security-scanner.test.ts +0 -410
- package/tests/unit/validation.test.ts +0 -390
- package/tsconfig.json +0 -20
- package/vercel.json +0 -34
- package/vitest.config.ts +0 -22
|
@@ -1,743 +0,0 @@
|
|
|
1
|
-
<!DOCTYPE html>
|
|
2
|
-
<html lang="en">
|
|
3
|
-
|
|
4
|
-
<head>
|
|
5
|
-
<!-- Google Analytics -->
|
|
6
|
-
<script async src="https://www.googletagmanager.com/gtag/js?id=G-J5JSHV7H1E"></script>
|
|
7
|
-
<script>
|
|
8
|
-
window.dataLayer = window.dataLayer || [];
|
|
9
|
-
function gtag() { dataLayer.push(arguments); }
|
|
10
|
-
gtag('js', new Date());
|
|
11
|
-
gtag('config', 'G-J5JSHV7H1E');
|
|
12
|
-
</script>
|
|
13
|
-
<meta charset="UTF-8">
|
|
14
|
-
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
15
|
-
<title>BigCommerce UCP Implementation Guide - AI Commerce Ready | UCP Tools</title>
|
|
16
|
-
<meta name="description"
|
|
17
|
-
content="Step-by-step guide to implementing UCP (Universal Commerce Protocol) on BigCommerce. Make your store AI-ready for ChatGPT and AI shopping agents.">
|
|
18
|
-
<link rel="canonical" href="https://ucptools.dev/guides/bigcommerce">
|
|
19
|
-
<link rel="icon" type="image/x-icon" href="/favicon.ico">
|
|
20
|
-
<link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png">
|
|
21
|
-
<link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png">
|
|
22
|
-
<link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png">
|
|
23
|
-
<link rel="manifest" href="/site.webmanifest">
|
|
24
|
-
<meta name="theme-color" content="#121118">
|
|
25
|
-
<meta property="og:title" content="BigCommerce UCP Implementation Guide - AI Commerce Ready">
|
|
26
|
-
<meta property="og:description"
|
|
27
|
-
content="Make your BigCommerce store AI-ready with UCP. Complete implementation guide.">
|
|
28
|
-
<meta property="og:image" content="/og-image.png">
|
|
29
|
-
<meta property="og:type" content="article">
|
|
30
|
-
|
|
31
|
-
<!-- Google Fonts -->
|
|
32
|
-
<link rel="preconnect" href="https://fonts.googleapis.com">
|
|
33
|
-
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
|
34
|
-
<link
|
|
35
|
-
href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=Fira+Code:wght@400;500&display=swap"
|
|
36
|
-
rel="stylesheet">
|
|
37
|
-
|
|
38
|
-
<style>
|
|
39
|
-
:root {
|
|
40
|
-
--brand-blue: #2E86AB;
|
|
41
|
-
--brand-teal: #36B5A2;
|
|
42
|
-
--brand-green: #47C97A;
|
|
43
|
-
--brand-gradient: linear-gradient(135deg, #2E86AB 0%, #36B5A2 50%, #47C97A 100%);
|
|
44
|
-
--platform-color: #121118;
|
|
45
|
-
--platform-accent: #5C5CE0;
|
|
46
|
-
--color-dark: #1A2B3C;
|
|
47
|
-
--color-medium: #5A6978;
|
|
48
|
-
--color-light: #94A3B8;
|
|
49
|
-
--color-border: #E2E8F0;
|
|
50
|
-
--color-background: #F8FAFC;
|
|
51
|
-
--color-card: #FFFFFF;
|
|
52
|
-
--color-success: #47C97A;
|
|
53
|
-
--color-warning: #F59E0B;
|
|
54
|
-
--color-error: #EF4444;
|
|
55
|
-
--color-info: #2E86AB;
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
* { box-sizing: border-box; margin: 0; padding: 0; }
|
|
59
|
-
|
|
60
|
-
body {
|
|
61
|
-
font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
|
|
62
|
-
background: var(--color-background);
|
|
63
|
-
color: var(--color-dark);
|
|
64
|
-
line-height: 1.6;
|
|
65
|
-
min-height: 100vh;
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
a { color: var(--brand-blue); text-decoration: none; }
|
|
69
|
-
a:hover { text-decoration: underline; }
|
|
70
|
-
|
|
71
|
-
.container { max-width: 1200px; margin: 0 auto; padding: 0 20px; }
|
|
72
|
-
|
|
73
|
-
header {
|
|
74
|
-
background: var(--color-card);
|
|
75
|
-
border-bottom: 1px solid var(--color-border);
|
|
76
|
-
padding: 16px 0;
|
|
77
|
-
position: sticky;
|
|
78
|
-
top: 0;
|
|
79
|
-
z-index: 1000;
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
.header-inner {
|
|
83
|
-
display: flex;
|
|
84
|
-
justify-content: space-between;
|
|
85
|
-
align-items: center;
|
|
86
|
-
max-width: 1200px;
|
|
87
|
-
margin: 0 auto;
|
|
88
|
-
padding: 0 20px;
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
.logo {
|
|
92
|
-
display: flex;
|
|
93
|
-
align-items: center;
|
|
94
|
-
gap: 12px;
|
|
95
|
-
font-size: 24px;
|
|
96
|
-
font-weight: 700;
|
|
97
|
-
text-decoration: none;
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
.logo:hover { text-decoration: none; }
|
|
101
|
-
.logo-icon { width: 40px; height: 40px; border-radius: 8px; }
|
|
102
|
-
|
|
103
|
-
.logo-text {
|
|
104
|
-
background: var(--brand-gradient);
|
|
105
|
-
-webkit-background-clip: text;
|
|
106
|
-
-webkit-text-fill-color: transparent;
|
|
107
|
-
background-clip: text;
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
.logo-suffix { font-weight: 400; -webkit-text-fill-color: var(--color-medium); }
|
|
111
|
-
|
|
112
|
-
nav { display: flex; gap: 8px; }
|
|
113
|
-
|
|
114
|
-
nav a {
|
|
115
|
-
padding: 8px 16px;
|
|
116
|
-
color: var(--color-medium);
|
|
117
|
-
text-decoration: none;
|
|
118
|
-
font-weight: 500;
|
|
119
|
-
border-radius: 6px;
|
|
120
|
-
transition: all 0.2s;
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
nav a:hover {
|
|
124
|
-
color: var(--brand-blue);
|
|
125
|
-
background: rgba(46, 134, 171, 0.08);
|
|
126
|
-
text-decoration: none;
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
nav a.active {
|
|
130
|
-
color: var(--brand-blue);
|
|
131
|
-
background: rgba(46, 134, 171, 0.12);
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
.guide-hero {
|
|
135
|
-
background: linear-gradient(135deg, #121118 0%, #2a2838 50%, #5C5CE0 100%);
|
|
136
|
-
color: white;
|
|
137
|
-
padding: 80px 0;
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
.guide-hero .container { max-width: 800px; }
|
|
141
|
-
|
|
142
|
-
.guide-hero h1 {
|
|
143
|
-
font-size: 2.75rem;
|
|
144
|
-
font-weight: 700;
|
|
145
|
-
margin-bottom: 16px;
|
|
146
|
-
line-height: 1.2;
|
|
147
|
-
}
|
|
148
|
-
|
|
149
|
-
.guide-hero p {
|
|
150
|
-
font-size: 1.25rem;
|
|
151
|
-
opacity: 0.9;
|
|
152
|
-
line-height: 1.6;
|
|
153
|
-
margin-bottom: 24px;
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
.guide-badges { display: flex; gap: 12px; flex-wrap: wrap; }
|
|
157
|
-
|
|
158
|
-
.guide-badge {
|
|
159
|
-
background: rgba(255, 255, 255, 0.15);
|
|
160
|
-
backdrop-filter: blur(10px);
|
|
161
|
-
padding: 8px 16px;
|
|
162
|
-
border-radius: 24px;
|
|
163
|
-
font-size: 0.9rem;
|
|
164
|
-
font-weight: 500;
|
|
165
|
-
border: 1px solid rgba(255, 255, 255, 0.1);
|
|
166
|
-
}
|
|
167
|
-
|
|
168
|
-
.guide-content {
|
|
169
|
-
display: grid;
|
|
170
|
-
grid-template-columns: 1fr 260px;
|
|
171
|
-
gap: 60px;
|
|
172
|
-
max-width: 1100px;
|
|
173
|
-
margin: 0 auto;
|
|
174
|
-
padding: 60px 20px;
|
|
175
|
-
}
|
|
176
|
-
|
|
177
|
-
@media (max-width: 968px) {
|
|
178
|
-
.guide-content { grid-template-columns: 1fr; gap: 40px; }
|
|
179
|
-
.guide-sidebar { order: -1; }
|
|
180
|
-
}
|
|
181
|
-
|
|
182
|
-
@media (max-width: 600px) {
|
|
183
|
-
.guide-hero h1 { font-size: 2rem; }
|
|
184
|
-
.guide-hero p { font-size: 1.1rem; }
|
|
185
|
-
.header-inner { flex-direction: column; gap: 16px; }
|
|
186
|
-
nav { flex-wrap: wrap; justify-content: center; }
|
|
187
|
-
}
|
|
188
|
-
|
|
189
|
-
.guide-main section { margin-bottom: 48px; }
|
|
190
|
-
|
|
191
|
-
.guide-main h2 {
|
|
192
|
-
color: var(--color-dark);
|
|
193
|
-
font-size: 1.75rem;
|
|
194
|
-
font-weight: 700;
|
|
195
|
-
margin-bottom: 20px;
|
|
196
|
-
padding-bottom: 12px;
|
|
197
|
-
border-bottom: 2px solid var(--color-border);
|
|
198
|
-
}
|
|
199
|
-
|
|
200
|
-
.guide-main h3 {
|
|
201
|
-
font-size: 1.25rem;
|
|
202
|
-
font-weight: 600;
|
|
203
|
-
margin: 32px 0 16px;
|
|
204
|
-
color: var(--color-dark);
|
|
205
|
-
}
|
|
206
|
-
|
|
207
|
-
.guide-main p {
|
|
208
|
-
margin-bottom: 16px;
|
|
209
|
-
color: var(--color-medium);
|
|
210
|
-
font-size: 1.05rem;
|
|
211
|
-
line-height: 1.7;
|
|
212
|
-
}
|
|
213
|
-
|
|
214
|
-
.guide-main ul, .guide-main ol { margin-bottom: 20px; padding-left: 24px; }
|
|
215
|
-
|
|
216
|
-
.guide-main li {
|
|
217
|
-
margin-bottom: 10px;
|
|
218
|
-
color: var(--color-medium);
|
|
219
|
-
line-height: 1.6;
|
|
220
|
-
}
|
|
221
|
-
|
|
222
|
-
.guide-main li strong { color: var(--color-dark); }
|
|
223
|
-
|
|
224
|
-
pre {
|
|
225
|
-
background: #1e1e1e;
|
|
226
|
-
color: #d4d4d4;
|
|
227
|
-
padding: 24px;
|
|
228
|
-
border-radius: 12px;
|
|
229
|
-
overflow-x: auto;
|
|
230
|
-
margin: 20px 0;
|
|
231
|
-
font-family: 'Fira Code', 'Monaco', 'Consolas', monospace;
|
|
232
|
-
font-size: 0.9rem;
|
|
233
|
-
line-height: 1.6;
|
|
234
|
-
border: 1px solid #333;
|
|
235
|
-
}
|
|
236
|
-
|
|
237
|
-
code { font-family: 'Fira Code', 'Monaco', 'Consolas', monospace; }
|
|
238
|
-
|
|
239
|
-
:not(pre)>code {
|
|
240
|
-
background: #EEF2F6;
|
|
241
|
-
padding: 3px 8px;
|
|
242
|
-
border-radius: 6px;
|
|
243
|
-
font-size: 0.9em;
|
|
244
|
-
color: var(--platform-accent);
|
|
245
|
-
font-weight: 500;
|
|
246
|
-
}
|
|
247
|
-
|
|
248
|
-
.step-number {
|
|
249
|
-
display: inline-flex;
|
|
250
|
-
align-items: center;
|
|
251
|
-
justify-content: center;
|
|
252
|
-
width: 32px;
|
|
253
|
-
height: 32px;
|
|
254
|
-
background: var(--platform-accent);
|
|
255
|
-
color: white;
|
|
256
|
-
border-radius: 50%;
|
|
257
|
-
font-weight: 700;
|
|
258
|
-
font-size: 0.9rem;
|
|
259
|
-
margin-right: 12px;
|
|
260
|
-
}
|
|
261
|
-
|
|
262
|
-
.step-title {
|
|
263
|
-
display: flex;
|
|
264
|
-
align-items: center;
|
|
265
|
-
font-size: 1.25rem;
|
|
266
|
-
font-weight: 600;
|
|
267
|
-
margin: 32px 0 16px;
|
|
268
|
-
color: var(--color-dark);
|
|
269
|
-
}
|
|
270
|
-
|
|
271
|
-
.tip-box {
|
|
272
|
-
background: #EFF6FF;
|
|
273
|
-
border-left: 4px solid var(--brand-blue);
|
|
274
|
-
padding: 20px 24px;
|
|
275
|
-
border-radius: 0 12px 12px 0;
|
|
276
|
-
margin: 24px 0;
|
|
277
|
-
}
|
|
278
|
-
|
|
279
|
-
.tip-box.warning { background: #FEF3C7; border-color: var(--color-warning); }
|
|
280
|
-
.tip-box.success { background: #DCFCE7; border-color: var(--color-success); }
|
|
281
|
-
.tip-box.platform { background: #F0F0FF; border-color: var(--platform-accent); }
|
|
282
|
-
|
|
283
|
-
.tip-box strong {
|
|
284
|
-
display: block;
|
|
285
|
-
margin-bottom: 6px;
|
|
286
|
-
color: var(--color-dark);
|
|
287
|
-
font-size: 1rem;
|
|
288
|
-
}
|
|
289
|
-
|
|
290
|
-
.tip-box p, .tip-box { color: var(--color-medium); font-size: 0.95rem; }
|
|
291
|
-
|
|
292
|
-
.cta-box {
|
|
293
|
-
background: var(--brand-gradient);
|
|
294
|
-
color: white;
|
|
295
|
-
padding: 40px;
|
|
296
|
-
border-radius: 16px;
|
|
297
|
-
text-align: center;
|
|
298
|
-
margin: 32px 0;
|
|
299
|
-
box-shadow: 0 8px 32px rgba(46, 134, 171, 0.25);
|
|
300
|
-
}
|
|
301
|
-
|
|
302
|
-
.cta-box h3 { color: white; font-size: 1.5rem; margin-bottom: 12px; }
|
|
303
|
-
.cta-box p { color: rgba(255, 255, 255, 0.9); margin-bottom: 24px; font-size: 1.05rem; }
|
|
304
|
-
|
|
305
|
-
.cta-box .btn {
|
|
306
|
-
background: white;
|
|
307
|
-
color: var(--brand-blue);
|
|
308
|
-
padding: 14px 32px;
|
|
309
|
-
border-radius: 8px;
|
|
310
|
-
text-decoration: none;
|
|
311
|
-
font-weight: 600;
|
|
312
|
-
font-size: 1rem;
|
|
313
|
-
display: inline-block;
|
|
314
|
-
transition: all 0.2s;
|
|
315
|
-
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
|
|
316
|
-
}
|
|
317
|
-
|
|
318
|
-
.cta-box .btn:hover {
|
|
319
|
-
transform: translateY(-2px);
|
|
320
|
-
box-shadow: 0 6px 20px rgba(0, 0, 0, 0.2);
|
|
321
|
-
text-decoration: none;
|
|
322
|
-
}
|
|
323
|
-
|
|
324
|
-
table {
|
|
325
|
-
width: 100%;
|
|
326
|
-
border-collapse: collapse;
|
|
327
|
-
margin: 20px 0;
|
|
328
|
-
background: var(--color-card);
|
|
329
|
-
border-radius: 12px;
|
|
330
|
-
overflow: hidden;
|
|
331
|
-
border: 1px solid var(--color-border);
|
|
332
|
-
}
|
|
333
|
-
|
|
334
|
-
th, td {
|
|
335
|
-
text-align: left;
|
|
336
|
-
padding: 16px 20px;
|
|
337
|
-
border-bottom: 1px solid var(--color-border);
|
|
338
|
-
}
|
|
339
|
-
|
|
340
|
-
th { background: var(--color-background); font-weight: 600; color: var(--color-dark); }
|
|
341
|
-
tr:last-child td { border-bottom: none; }
|
|
342
|
-
td code { background: #EEF2F6; padding: 4px 8px; border-radius: 4px; }
|
|
343
|
-
|
|
344
|
-
.guide-sidebar { position: sticky; top: 100px; align-self: start; }
|
|
345
|
-
|
|
346
|
-
.sidebar-toc {
|
|
347
|
-
background: var(--color-card);
|
|
348
|
-
border: 1px solid var(--color-border);
|
|
349
|
-
border-radius: 12px;
|
|
350
|
-
padding: 24px;
|
|
351
|
-
}
|
|
352
|
-
|
|
353
|
-
.sidebar-toc h4 {
|
|
354
|
-
font-size: 0.8rem;
|
|
355
|
-
text-transform: uppercase;
|
|
356
|
-
letter-spacing: 1px;
|
|
357
|
-
color: var(--color-light);
|
|
358
|
-
margin-bottom: 16px;
|
|
359
|
-
font-weight: 600;
|
|
360
|
-
}
|
|
361
|
-
|
|
362
|
-
.sidebar-toc ul { list-style: none; padding: 0; margin: 0; }
|
|
363
|
-
.sidebar-toc li { margin-bottom: 0; }
|
|
364
|
-
|
|
365
|
-
.sidebar-toc a {
|
|
366
|
-
display: block;
|
|
367
|
-
padding: 10px 12px;
|
|
368
|
-
color: var(--color-medium);
|
|
369
|
-
text-decoration: none;
|
|
370
|
-
font-size: 0.9rem;
|
|
371
|
-
border-radius: 6px;
|
|
372
|
-
transition: all 0.2s;
|
|
373
|
-
}
|
|
374
|
-
|
|
375
|
-
.sidebar-toc a:hover {
|
|
376
|
-
color: var(--platform-accent);
|
|
377
|
-
background: rgba(92, 92, 224, 0.08);
|
|
378
|
-
text-decoration: none;
|
|
379
|
-
}
|
|
380
|
-
|
|
381
|
-
.other-guides {
|
|
382
|
-
margin-top: 24px;
|
|
383
|
-
padding-top: 24px;
|
|
384
|
-
border-top: 1px solid var(--color-border);
|
|
385
|
-
}
|
|
386
|
-
|
|
387
|
-
.other-guides h4 {
|
|
388
|
-
font-size: 0.8rem;
|
|
389
|
-
text-transform: uppercase;
|
|
390
|
-
letter-spacing: 1px;
|
|
391
|
-
color: var(--color-light);
|
|
392
|
-
margin-bottom: 12px;
|
|
393
|
-
font-weight: 600;
|
|
394
|
-
}
|
|
395
|
-
|
|
396
|
-
.other-guides a {
|
|
397
|
-
display: block;
|
|
398
|
-
padding: 8px 12px;
|
|
399
|
-
color: var(--color-medium);
|
|
400
|
-
font-size: 0.85rem;
|
|
401
|
-
border-radius: 6px;
|
|
402
|
-
transition: all 0.2s;
|
|
403
|
-
}
|
|
404
|
-
|
|
405
|
-
.other-guides a:hover {
|
|
406
|
-
color: var(--brand-blue);
|
|
407
|
-
background: rgba(46, 134, 171, 0.08);
|
|
408
|
-
text-decoration: none;
|
|
409
|
-
}
|
|
410
|
-
|
|
411
|
-
footer {
|
|
412
|
-
background: var(--color-dark);
|
|
413
|
-
color: white;
|
|
414
|
-
padding: 48px 0;
|
|
415
|
-
margin-top: 60px;
|
|
416
|
-
text-align: center;
|
|
417
|
-
}
|
|
418
|
-
|
|
419
|
-
footer p { margin: 0; opacity: 0.9; }
|
|
420
|
-
footer a { color: var(--brand-teal); }
|
|
421
|
-
footer a:hover { color: var(--brand-green); }
|
|
422
|
-
.footer-links { margin-top: 12px; opacity: 0.7; }
|
|
423
|
-
</style>
|
|
424
|
-
</head>
|
|
425
|
-
|
|
426
|
-
<body>
|
|
427
|
-
<header>
|
|
428
|
-
<div class="header-inner">
|
|
429
|
-
<a href="/" class="logo">
|
|
430
|
-
<img src="/logo.jpeg" alt="UCP.tools logo" class="logo-icon">
|
|
431
|
-
<span class="logo-text">UCP<span class="logo-suffix">.tools</span></span>
|
|
432
|
-
</a>
|
|
433
|
-
<nav>
|
|
434
|
-
<a href="/">Validator</a>
|
|
435
|
-
<a href="/learn">Learn</a>
|
|
436
|
-
<a href="/directory">Directory</a>
|
|
437
|
-
<a href="/guides/bigcommerce" class="active">BigCommerce</a>
|
|
438
|
-
</nav>
|
|
439
|
-
</div>
|
|
440
|
-
</header>
|
|
441
|
-
|
|
442
|
-
<div class="guide-hero">
|
|
443
|
-
<div class="container">
|
|
444
|
-
<h1>🛍️ BigCommerce UCP Implementation</h1>
|
|
445
|
-
<p>Make your BigCommerce store AI-ready. Enable ChatGPT, Google AI Mode, and AI shopping agents to discover and transact with your products.</p>
|
|
446
|
-
<div class="guide-badges">
|
|
447
|
-
<span class="guide-badge">🤖 AI Agent Ready</span>
|
|
448
|
-
<span class="guide-badge">📡 REST API</span>
|
|
449
|
-
<span class="guide-badge">⚙️ Stencil Themes</span>
|
|
450
|
-
<span class="guide-badge">🔒 Enterprise Ready</span>
|
|
451
|
-
</div>
|
|
452
|
-
</div>
|
|
453
|
-
</div>
|
|
454
|
-
|
|
455
|
-
<div class="guide-content">
|
|
456
|
-
<main class="guide-main">
|
|
457
|
-
<section id="overview">
|
|
458
|
-
<h2>Why Add UCP to BigCommerce?</h2>
|
|
459
|
-
<p>
|
|
460
|
-
BigCommerce is a leading enterprise eCommerce platform with powerful APIs and headless capabilities. Adding UCP support positions your store for AI-driven commerce and enables AI agents to discover and purchase products.
|
|
461
|
-
</p>
|
|
462
|
-
<ul>
|
|
463
|
-
<li><strong>Powerful APIs:</strong> BigCommerce's REST and GraphQL APIs integrate naturally with UCP</li>
|
|
464
|
-
<li><strong>Headless Ready:</strong> Perfect for headless commerce implementations</li>
|
|
465
|
-
<li><strong>Multi-Storefront:</strong> Support multiple storefronts with separate UCP profiles</li>
|
|
466
|
-
<li><strong>B2B Capabilities:</strong> Expose B2B pricing and catalogs to AI agents</li>
|
|
467
|
-
</ul>
|
|
468
|
-
|
|
469
|
-
<div class="tip-box platform">
|
|
470
|
-
<strong>🏢 Enterprise Feature</strong>
|
|
471
|
-
BigCommerce's Script Manager and WebDAV access make UCP implementation straightforward without custom app development.
|
|
472
|
-
</div>
|
|
473
|
-
</section>
|
|
474
|
-
|
|
475
|
-
<section id="methods">
|
|
476
|
-
<h2>Implementation Methods</h2>
|
|
477
|
-
|
|
478
|
-
<table>
|
|
479
|
-
<tr>
|
|
480
|
-
<th>Method</th>
|
|
481
|
-
<th>Difficulty</th>
|
|
482
|
-
<th>Best For</th>
|
|
483
|
-
</tr>
|
|
484
|
-
<tr>
|
|
485
|
-
<td><strong>WebDAV Upload</strong></td>
|
|
486
|
-
<td>Easy</td>
|
|
487
|
-
<td>Quick setup, static profile</td>
|
|
488
|
-
</tr>
|
|
489
|
-
<tr>
|
|
490
|
-
<td><strong>Stencil Theme</strong></td>
|
|
491
|
-
<td>Medium</td>
|
|
492
|
-
<td>Dynamic profile from store data</td>
|
|
493
|
-
</tr>
|
|
494
|
-
<tr>
|
|
495
|
-
<td><strong>Custom App</strong></td>
|
|
496
|
-
<td>Advanced</td>
|
|
497
|
-
<td>Full control, enterprise needs</td>
|
|
498
|
-
</tr>
|
|
499
|
-
</table>
|
|
500
|
-
</section>
|
|
501
|
-
|
|
502
|
-
<section id="webdav-method">
|
|
503
|
-
<h2>Method 1: WebDAV Upload (Easiest)</h2>
|
|
504
|
-
<p>Upload your UCP profile directly to BigCommerce using WebDAV.</p>
|
|
505
|
-
|
|
506
|
-
<div class="step-title"><span class="step-number">1</span>Generate Your UCP Profile</div>
|
|
507
|
-
|
|
508
|
-
<div class="cta-box">
|
|
509
|
-
<h3>Generate Your UCP Profile</h3>
|
|
510
|
-
<p>Create a customized UCP profile for your BigCommerce store.</p>
|
|
511
|
-
<a href="/#generate" class="btn">Open Generator →</a>
|
|
512
|
-
</div>
|
|
513
|
-
|
|
514
|
-
<div class="step-title"><span class="step-number">2</span>Get WebDAV Credentials</div>
|
|
515
|
-
<ol>
|
|
516
|
-
<li>In your BigCommerce admin, go to <strong>Server Settings → File Access (WebDAV)</strong></li>
|
|
517
|
-
<li>Note your WebDAV URL, username, and password</li>
|
|
518
|
-
</ol>
|
|
519
|
-
|
|
520
|
-
<div class="step-title"><span class="step-number">3</span>Connect via WebDAV</div>
|
|
521
|
-
<p>Use a WebDAV client (Cyberduck, WinSCP, or Finder on Mac):</p>
|
|
522
|
-
|
|
523
|
-
<pre><span style="color:#6A9955"># WebDAV URL format</span>
|
|
524
|
-
https://store-XXXXX.mybigcommerce.com/dav
|
|
525
|
-
|
|
526
|
-
<span style="color:#6A9955"># Or using command line</span>
|
|
527
|
-
cadaver https://store-XXXXX.mybigcommerce.com/dav</pre>
|
|
528
|
-
|
|
529
|
-
<div class="step-title"><span class="step-number">4</span>Upload UCP Profile</div>
|
|
530
|
-
<ol>
|
|
531
|
-
<li>Navigate to the <code>/content/</code> folder</li>
|
|
532
|
-
<li>Create a folder named <code>.well-known</code></li>
|
|
533
|
-
<li>Upload your <code>ucp.json</code> file as <code>ucp</code> (no extension)</li>
|
|
534
|
-
</ol>
|
|
535
|
-
|
|
536
|
-
<div class="tip-box">
|
|
537
|
-
<strong>💡 File Path</strong>
|
|
538
|
-
The final path should be: <code>/content/.well-known/ucp</code>
|
|
539
|
-
</div>
|
|
540
|
-
|
|
541
|
-
<div class="step-title"><span class="step-number">5</span>Configure Server</div>
|
|
542
|
-
<p>BigCommerce serves files from <code>/content/</code> at the root. Your UCP profile will be accessible at:</p>
|
|
543
|
-
<pre>https://yourstore.com/.well-known/ucp</pre>
|
|
544
|
-
|
|
545
|
-
<div class="tip-box warning">
|
|
546
|
-
<strong>⚠️ Content Type</strong>
|
|
547
|
-
If your file isn't served as JSON, you may need to create a redirect or use the Stencil method below.
|
|
548
|
-
</div>
|
|
549
|
-
</section>
|
|
550
|
-
|
|
551
|
-
<section id="stencil-method">
|
|
552
|
-
<h2>Method 2: Stencil Theme</h2>
|
|
553
|
-
<p>For dynamic UCP profiles that pull data from your store settings.</p>
|
|
554
|
-
|
|
555
|
-
<div class="step-title"><span class="step-number">1</span>Set Up Stencil CLI</div>
|
|
556
|
-
<pre><span style="color:#6A9955"># Install Stencil CLI</span>
|
|
557
|
-
npm install -g @bigcommerce/stencil-cli
|
|
558
|
-
|
|
559
|
-
<span style="color:#6A9955"># Clone your theme</span>
|
|
560
|
-
stencil init</pre>
|
|
561
|
-
|
|
562
|
-
<div class="step-title"><span class="step-number">2</span>Create UCP Template</div>
|
|
563
|
-
<p>Create a new template file <code>templates/pages/custom/ucp.html</code>:</p>
|
|
564
|
-
|
|
565
|
-
<pre><span style="color:#808080">---</span>
|
|
566
|
-
<span style="color:#9CDCFE">layout</span>: <span style="color:#CE9178">false</span>
|
|
567
|
-
<span style="color:#808080">---</span>
|
|
568
|
-
{
|
|
569
|
-
<span style="color:#9CDCFE">"profile_version"</span>: <span style="color:#CE9178">"1.0"</span>,
|
|
570
|
-
<span style="color:#9CDCFE">"merchant"</span>: {
|
|
571
|
-
<span style="color:#9CDCFE">"name"</span>: <span style="color:#CE9178">"{{settings.store_name}}"</span>,
|
|
572
|
-
<span style="color:#9CDCFE">"url"</span>: <span style="color:#CE9178">"{{settings.base_url}}"</span>,
|
|
573
|
-
<span style="color:#9CDCFE">"contact"</span>: {
|
|
574
|
-
<span style="color:#9CDCFE">"email"</span>: <span style="color:#CE9178">"{{settings.store_email}}"</span>,
|
|
575
|
-
<span style="color:#9CDCFE">"phone"</span>: <span style="color:#CE9178">"{{settings.store_phone}}"</span>
|
|
576
|
-
}
|
|
577
|
-
},
|
|
578
|
-
<span style="color:#9CDCFE">"capabilities"</span>: [<span style="color:#CE9178">"browse"</span>, <span style="color:#CE9178">"search"</span>],
|
|
579
|
-
<span style="color:#9CDCFE">"policies"</span>: {
|
|
580
|
-
<span style="color:#9CDCFE">"returns_url"</span>: <span style="color:#CE9178">"{{settings.base_url}}/returns-policy/"</span>,
|
|
581
|
-
<span style="color:#9CDCFE">"shipping_url"</span>: <span style="color:#CE9178">"{{settings.base_url}}/shipping/"</span>,
|
|
582
|
-
<span style="color:#9CDCFE">"privacy_url"</span>: <span style="color:#CE9178">"{{settings.base_url}}/privacy-policy/"</span>
|
|
583
|
-
},
|
|
584
|
-
<span style="color:#9CDCFE">"service_bindings"</span>: [
|
|
585
|
-
{
|
|
586
|
-
<span style="color:#9CDCFE">"type"</span>: <span style="color:#CE9178">"REST"</span>,
|
|
587
|
-
<span style="color:#9CDCFE">"base_url"</span>: <span style="color:#CE9178">"https://api.bigcommerce.com/stores/{{settings.store_hash}}/v3"</span>
|
|
588
|
-
}
|
|
589
|
-
]
|
|
590
|
-
}</pre>
|
|
591
|
-
|
|
592
|
-
<div class="step-title"><span class="step-number">3</span>Add Route</div>
|
|
593
|
-
<p>In <code>config.json</code>, add a custom route:</p>
|
|
594
|
-
|
|
595
|
-
<pre>{
|
|
596
|
-
<span style="color:#9CDCFE">"routes"</span>: {
|
|
597
|
-
<span style="color:#9CDCFE">"custom"</span>: {
|
|
598
|
-
<span style="color:#9CDCFE">".well-known/ucp"</span>: <span style="color:#CE9178">"pages/custom/ucp"</span>
|
|
599
|
-
}
|
|
600
|
-
}
|
|
601
|
-
}</pre>
|
|
602
|
-
|
|
603
|
-
<div class="step-title"><span class="step-number">4</span>Deploy Theme</div>
|
|
604
|
-
<pre><span style="color:#6A9955"># Bundle and push theme</span>
|
|
605
|
-
stencil bundle
|
|
606
|
-
stencil push</pre>
|
|
607
|
-
</section>
|
|
608
|
-
|
|
609
|
-
<section id="api-integration">
|
|
610
|
-
<h2>BigCommerce API Integration</h2>
|
|
611
|
-
<p>
|
|
612
|
-
BigCommerce's APIs work well with UCP. Expose your API endpoints in the UCP profile for AI agents.
|
|
613
|
-
</p>
|
|
614
|
-
|
|
615
|
-
<h3>Useful API Endpoints</h3>
|
|
616
|
-
<table>
|
|
617
|
-
<tr>
|
|
618
|
-
<th>Endpoint</th>
|
|
619
|
-
<th>Purpose</th>
|
|
620
|
-
</tr>
|
|
621
|
-
<tr>
|
|
622
|
-
<td><code>/v3/catalog/products</code></td>
|
|
623
|
-
<td>Product catalog browsing</td>
|
|
624
|
-
</tr>
|
|
625
|
-
<tr>
|
|
626
|
-
<td><code>/v3/catalog/categories</code></td>
|
|
627
|
-
<td>Category navigation</td>
|
|
628
|
-
</tr>
|
|
629
|
-
<tr>
|
|
630
|
-
<td><code>/v3/carts</code></td>
|
|
631
|
-
<td>Shopping cart management</td>
|
|
632
|
-
</tr>
|
|
633
|
-
<tr>
|
|
634
|
-
<td><code>/v3/checkouts</code></td>
|
|
635
|
-
<td>Checkout process</td>
|
|
636
|
-
</tr>
|
|
637
|
-
</table>
|
|
638
|
-
|
|
639
|
-
<div class="tip-box">
|
|
640
|
-
<strong>💡 API Tokens</strong>
|
|
641
|
-
For AI agents to use your API, you'll need to provide appropriate authentication. Consider creating read-only tokens for product discovery.
|
|
642
|
-
</div>
|
|
643
|
-
</section>
|
|
644
|
-
|
|
645
|
-
<section id="validation">
|
|
646
|
-
<h2>Validate Your Implementation</h2>
|
|
647
|
-
|
|
648
|
-
<div class="cta-box">
|
|
649
|
-
<h3>Validate Your BigCommerce Store</h3>
|
|
650
|
-
<p>Check your UCP implementation and AI commerce readiness.</p>
|
|
651
|
-
<a href="/" class="btn">Run Validation →</a>
|
|
652
|
-
</div>
|
|
653
|
-
</section>
|
|
654
|
-
|
|
655
|
-
<section id="common-issues">
|
|
656
|
-
<h2>Common Issues & Solutions</h2>
|
|
657
|
-
|
|
658
|
-
<table>
|
|
659
|
-
<tr>
|
|
660
|
-
<th>Issue</th>
|
|
661
|
-
<th>Solution</th>
|
|
662
|
-
</tr>
|
|
663
|
-
<tr>
|
|
664
|
-
<td>404 on <code>/.well-known/ucp</code></td>
|
|
665
|
-
<td>Check WebDAV file path or Stencil route config</td>
|
|
666
|
-
</tr>
|
|
667
|
-
<tr>
|
|
668
|
-
<td>Wrong content type</td>
|
|
669
|
-
<td>Use Stencil with <code>layout: false</code> for JSON response</td>
|
|
670
|
-
</tr>
|
|
671
|
-
<tr>
|
|
672
|
-
<td>CDN caching issues</td>
|
|
673
|
-
<td>Purge CDN cache after uploading new profile</td>
|
|
674
|
-
</tr>
|
|
675
|
-
<tr>
|
|
676
|
-
<td>CORS errors</td>
|
|
677
|
-
<td>BigCommerce handles CORS for content files automatically</td>
|
|
678
|
-
</tr>
|
|
679
|
-
</table>
|
|
680
|
-
</section>
|
|
681
|
-
|
|
682
|
-
<section id="testing">
|
|
683
|
-
<h2>🤖 Test with AI Agents</h2>
|
|
684
|
-
|
|
685
|
-
<div class="cta-box">
|
|
686
|
-
<h3>Run AI Agent Simulation</h3>
|
|
687
|
-
<p>Test how AI shopping agents will interact with your BigCommerce store.</p>
|
|
688
|
-
<a href="/#simulate" class="btn">Open Simulator →</a>
|
|
689
|
-
</div>
|
|
690
|
-
</section>
|
|
691
|
-
|
|
692
|
-
<section id="resources">
|
|
693
|
-
<h2>Resources</h2>
|
|
694
|
-
<ul>
|
|
695
|
-
<li><a href="https://ucp.dev" target="_blank">Official UCP Specification</a></li>
|
|
696
|
-
<li><a href="https://developer.bigcommerce.com/docs/rest-catalog" target="_blank">BigCommerce Catalog API</a></li>
|
|
697
|
-
<li><a href="https://developer.bigcommerce.com/docs/storefront/stencil" target="_blank">Stencil Theme Development</a></li>
|
|
698
|
-
<li><a href="https://support.bigcommerce.com/s/article/File-Access-WebDAV" target="_blank">BigCommerce WebDAV Guide</a></li>
|
|
699
|
-
<li><a href="/learn">UCP Learning Center</a></li>
|
|
700
|
-
</ul>
|
|
701
|
-
</section>
|
|
702
|
-
</main>
|
|
703
|
-
|
|
704
|
-
<aside class="guide-sidebar">
|
|
705
|
-
<div class="sidebar-toc">
|
|
706
|
-
<h4>On This Page</h4>
|
|
707
|
-
<ul>
|
|
708
|
-
<li><a href="#overview">Why Add UCP?</a></li>
|
|
709
|
-
<li><a href="#methods">Implementation Methods</a></li>
|
|
710
|
-
<li><a href="#webdav-method">WebDAV Upload</a></li>
|
|
711
|
-
<li><a href="#stencil-method">Stencil Theme</a></li>
|
|
712
|
-
<li><a href="#api-integration">API Integration</a></li>
|
|
713
|
-
<li><a href="#validation">Validation</a></li>
|
|
714
|
-
<li><a href="#common-issues">Common Issues</a></li>
|
|
715
|
-
<li><a href="#testing">Test with AI</a></li>
|
|
716
|
-
<li><a href="#resources">Resources</a></li>
|
|
717
|
-
</ul>
|
|
718
|
-
</div>
|
|
719
|
-
|
|
720
|
-
<div class="other-guides">
|
|
721
|
-
<h4>Other Platforms</h4>
|
|
722
|
-
<a href="/guides/shopify">Shopify</a>
|
|
723
|
-
<a href="/guides/woocommerce">WooCommerce</a>
|
|
724
|
-
<a href="/guides/magento">Magento</a>
|
|
725
|
-
<a href="/guides/wix">Wix</a>
|
|
726
|
-
<a href="/guides/squarespace">Squarespace</a>
|
|
727
|
-
</div>
|
|
728
|
-
</aside>
|
|
729
|
-
</div>
|
|
730
|
-
|
|
731
|
-
<footer>
|
|
732
|
-
<div class="container">
|
|
733
|
-
<p>UCP Tools — Built for the AI Commerce era</p>
|
|
734
|
-
<p class="footer-links">
|
|
735
|
-
<a href="https://github.com/Nolpak14/ucp-tools" target="_blank">GitHub</a> ·
|
|
736
|
-
<a href="https://ucp.dev" target="_blank">UCP Spec</a> ·
|
|
737
|
-
<a href="/">Validator</a>
|
|
738
|
-
</p>
|
|
739
|
-
</div>
|
|
740
|
-
</footer>
|
|
741
|
-
</body>
|
|
742
|
-
|
|
743
|
-
</html>
|