@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
package/public/learn.html
DELETED
|
@@ -1,396 +0,0 @@
|
|
|
1
|
-
<!DOCTYPE html>
|
|
2
|
-
<html lang="en">
|
|
3
|
-
<head>
|
|
4
|
-
<!-- Google Analytics -->
|
|
5
|
-
<script async src="https://www.googletagmanager.com/gtag/js?id=G-J5JSHV7H1E"></script>
|
|
6
|
-
<script>
|
|
7
|
-
window.dataLayer = window.dataLayer || [];
|
|
8
|
-
function gtag(){dataLayer.push(arguments);}
|
|
9
|
-
gtag('js', new Date());
|
|
10
|
-
gtag('config', 'G-J5JSHV7H1E');
|
|
11
|
-
</script>
|
|
12
|
-
<!-- Ahrefs Analytics -->
|
|
13
|
-
<script src="https://analytics.ahrefs.com/analytics.js" data-key="w/KDij6w81HzA8oXaw60JA" async></script>
|
|
14
|
-
<meta charset="UTF-8">
|
|
15
|
-
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
16
|
-
<title>What is Universal Commerce Protocol (UCP)? Complete Guide to AI Shopping | UCP.tools</title>
|
|
17
|
-
<meta name="description" content="Complete guide to the Universal Commerce Protocol (UCP) - the open standard by Google and Shopify enabling AI shopping agents. Learn how UCP works, Jan 2026 requirements, Schema.org integration, and how to make your e-commerce store AI-ready.">
|
|
18
|
-
<meta name="keywords" content="Universal Commerce Protocol, UCP, What is UCP, AI Shopping, Google Shopify UCP, AI Agents, E-commerce Protocol, Schema.org, Google AI Mode, AI Commerce Standard">
|
|
19
|
-
<meta name="robots" content="index, follow">
|
|
20
|
-
<link rel="canonical" href="https://ucptools.dev/learn">
|
|
21
|
-
<link rel="icon" type="image/x-icon" href="/favicon.ico">
|
|
22
|
-
<link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png">
|
|
23
|
-
<link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png">
|
|
24
|
-
<meta name="theme-color" content="#2E86AB">
|
|
25
|
-
<meta name="google-site-verification" content="Ra49U5gMiADsSr9byqzFnI-GJVA4Gj0_i38nJewkhaU" />
|
|
26
|
-
|
|
27
|
-
<!-- Open Graph / Facebook -->
|
|
28
|
-
<meta property="og:type" content="article">
|
|
29
|
-
<meta property="og:url" content="https://ucptools.dev/learn">
|
|
30
|
-
<meta property="og:title" content="What is Universal Commerce Protocol (UCP)? Complete Guide">
|
|
31
|
-
<meta property="og:description" content="Learn about the Universal Commerce Protocol (UCP) - the open standard by Google and Shopify for AI shopping agents. Essential guide for e-commerce in 2026.">
|
|
32
|
-
<meta property="og:image" content="https://ucptools.dev/og-image.png">
|
|
33
|
-
<meta property="og:site_name" content="UCP.tools">
|
|
34
|
-
<meta property="article:published_time" content="2025-01-01T00:00:00Z">
|
|
35
|
-
<meta property="article:modified_time" content="2026-01-15T00:00:00Z">
|
|
36
|
-
|
|
37
|
-
<!-- Twitter Card -->
|
|
38
|
-
<meta name="twitter:card" content="summary_large_image">
|
|
39
|
-
<meta name="twitter:url" content="https://ucptools.dev/learn">
|
|
40
|
-
<meta name="twitter:title" content="What is Universal Commerce Protocol (UCP)? Complete Guide">
|
|
41
|
-
<meta name="twitter:description" content="Complete guide to UCP - the Google and Shopify standard for AI shopping agents. Learn Jan 2026 requirements.">
|
|
42
|
-
<meta name="twitter:image" content="https://ucptools.dev/og-image.png">
|
|
43
|
-
|
|
44
|
-
<!-- JSON-LD Structured Data -->
|
|
45
|
-
<script type="application/ld+json">
|
|
46
|
-
{
|
|
47
|
-
"@context": "https://schema.org",
|
|
48
|
-
"@type": "Article",
|
|
49
|
-
"headline": "What is Universal Commerce Protocol (UCP)? Complete Guide to AI Shopping",
|
|
50
|
-
"description": "Complete guide to the Universal Commerce Protocol (UCP) - the open standard by Google and Shopify enabling AI shopping agents.",
|
|
51
|
-
"image": "https://ucptools.dev/og-image.png",
|
|
52
|
-
"author": {
|
|
53
|
-
"@type": "Organization",
|
|
54
|
-
"name": "UCP.tools",
|
|
55
|
-
"url": "https://ucptools.dev/"
|
|
56
|
-
},
|
|
57
|
-
"publisher": {
|
|
58
|
-
"@type": "Organization",
|
|
59
|
-
"name": "UCP.tools",
|
|
60
|
-
"logo": {
|
|
61
|
-
"@type": "ImageObject",
|
|
62
|
-
"url": "https://ucptools.dev/logo.jpeg"
|
|
63
|
-
}
|
|
64
|
-
},
|
|
65
|
-
"datePublished": "2025-01-01",
|
|
66
|
-
"dateModified": "2026-01-15",
|
|
67
|
-
"mainEntityOfPage": {
|
|
68
|
-
"@type": "WebPage",
|
|
69
|
-
"@id": "https://ucptools.dev/learn"
|
|
70
|
-
},
|
|
71
|
-
"breadcrumb": {
|
|
72
|
-
"@type": "BreadcrumbList",
|
|
73
|
-
"itemListElement": [
|
|
74
|
-
{"@type": "ListItem", "position": 1, "name": "Home", "item": "https://ucptools.dev/"},
|
|
75
|
-
{"@type": "ListItem", "position": 2, "name": "Learn UCP", "item": "https://ucptools.dev/learn"}
|
|
76
|
-
]
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
</script>
|
|
80
|
-
<style>
|
|
81
|
-
:root {
|
|
82
|
-
--brand-blue: #2E86AB;
|
|
83
|
-
--brand-teal: #36B5A2;
|
|
84
|
-
--brand-green: #47C97A;
|
|
85
|
-
--brand-gradient: linear-gradient(135deg, #2E86AB 0%, #36B5A2 50%, #47C97A 100%);
|
|
86
|
-
--color-dark: #1A2B3C;
|
|
87
|
-
--color-medium: #5A6978;
|
|
88
|
-
--color-border: #E2E8F0;
|
|
89
|
-
--color-background: #F8FAFC;
|
|
90
|
-
--color-card: #FFFFFF;
|
|
91
|
-
}
|
|
92
|
-
* { box-sizing: border-box; margin: 0; padding: 0; }
|
|
93
|
-
body {
|
|
94
|
-
font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
|
|
95
|
-
background: var(--color-background);
|
|
96
|
-
color: var(--color-dark);
|
|
97
|
-
line-height: 1.7;
|
|
98
|
-
}
|
|
99
|
-
.container { max-width: 800px; margin: 0 auto; padding: 0 20px; }
|
|
100
|
-
header {
|
|
101
|
-
background: var(--color-card);
|
|
102
|
-
border-bottom: 1px solid var(--color-border);
|
|
103
|
-
padding: 16px 0;
|
|
104
|
-
}
|
|
105
|
-
.header-inner {
|
|
106
|
-
display: flex;
|
|
107
|
-
justify-content: space-between;
|
|
108
|
-
align-items: center;
|
|
109
|
-
max-width: 1200px;
|
|
110
|
-
margin: 0 auto;
|
|
111
|
-
padding: 0 20px;
|
|
112
|
-
}
|
|
113
|
-
.logo {
|
|
114
|
-
display: flex;
|
|
115
|
-
align-items: center;
|
|
116
|
-
gap: 12px;
|
|
117
|
-
font-size: 24px;
|
|
118
|
-
font-weight: 700;
|
|
119
|
-
text-decoration: none;
|
|
120
|
-
}
|
|
121
|
-
.logo-icon { width: 40px; height: 40px; border-radius: 8px; }
|
|
122
|
-
.logo-text {
|
|
123
|
-
background: var(--brand-gradient);
|
|
124
|
-
-webkit-background-clip: text;
|
|
125
|
-
-webkit-text-fill-color: transparent;
|
|
126
|
-
}
|
|
127
|
-
.logo-suffix { font-weight: 400; -webkit-text-fill-color: var(--color-medium); }
|
|
128
|
-
nav a {
|
|
129
|
-
margin-left: 24px;
|
|
130
|
-
color: var(--color-medium);
|
|
131
|
-
text-decoration: none;
|
|
132
|
-
}
|
|
133
|
-
nav a:hover { color: var(--brand-blue); }
|
|
134
|
-
/* Dropdown */
|
|
135
|
-
.dropdown { position: relative; display: inline-block; margin-left: 24px; }
|
|
136
|
-
.dropdown-toggle { color: var(--color-medium); cursor: pointer; background: none; border: none; font-size: inherit; font-family: inherit; padding: 0; }
|
|
137
|
-
.dropdown-toggle:hover, .dropdown:hover .dropdown-toggle { color: var(--brand-blue); }
|
|
138
|
-
.dropdown-toggle::after { content: '▼'; font-size: 0.6em; margin-left: 4px; vertical-align: middle; }
|
|
139
|
-
.dropdown-menu { display: none; position: absolute; top: 100%; left: 0; background: var(--color-card); border: 1px solid var(--color-border); border-radius: 8px; box-shadow: 0 4px 12px rgba(0,0,0,0.1); min-width: 180px; z-index: 1001; padding: 8px 0; margin-top: 8px; }
|
|
140
|
-
.dropdown:hover .dropdown-menu { display: block; }
|
|
141
|
-
.dropdown-menu a { display: block; padding: 10px 16px; color: var(--color-medium); text-decoration: none; margin-left: 0; }
|
|
142
|
-
.dropdown-menu a:hover { background: rgba(46,134,171,0.08); color: var(--brand-blue); }
|
|
143
|
-
.dropdown-divider { height: 1px; background: var(--color-border); margin: 8px 0; }
|
|
144
|
-
.hero {
|
|
145
|
-
padding: 60px 20px;
|
|
146
|
-
text-align: center;
|
|
147
|
-
background: linear-gradient(135deg, rgba(46, 134, 171, 0.1) 0%, rgba(71, 201, 122, 0.1) 100%);
|
|
148
|
-
}
|
|
149
|
-
.hero h1 { font-size: 42px; margin-bottom: 16px; }
|
|
150
|
-
.hero p { font-size: 20px; color: var(--color-medium); max-width: 600px; margin: 0 auto; }
|
|
151
|
-
.content { padding: 60px 20px; }
|
|
152
|
-
.content h2 {
|
|
153
|
-
font-size: 28px;
|
|
154
|
-
margin: 40px 0 20px;
|
|
155
|
-
color: var(--color-dark);
|
|
156
|
-
}
|
|
157
|
-
.content h2:first-child { margin-top: 0; }
|
|
158
|
-
.content p { margin-bottom: 16px; color: #374151; }
|
|
159
|
-
.content ul { margin: 16px 0 16px 24px; }
|
|
160
|
-
.content li { margin-bottom: 8px; }
|
|
161
|
-
.highlight-box {
|
|
162
|
-
background: linear-gradient(135deg, rgba(46, 134, 171, 0.1) 0%, rgba(71, 201, 122, 0.1) 100%);
|
|
163
|
-
border-left: 4px solid var(--brand-blue);
|
|
164
|
-
padding: 20px 24px;
|
|
165
|
-
border-radius: 0 8px 8px 0;
|
|
166
|
-
margin: 24px 0;
|
|
167
|
-
}
|
|
168
|
-
.highlight-box strong { color: var(--brand-blue); }
|
|
169
|
-
.partners {
|
|
170
|
-
display: flex;
|
|
171
|
-
flex-wrap: wrap;
|
|
172
|
-
gap: 12px;
|
|
173
|
-
margin: 20px 0;
|
|
174
|
-
}
|
|
175
|
-
.partner-tag {
|
|
176
|
-
background: var(--color-card);
|
|
177
|
-
border: 1px solid var(--color-border);
|
|
178
|
-
padding: 8px 16px;
|
|
179
|
-
border-radius: 20px;
|
|
180
|
-
font-size: 14px;
|
|
181
|
-
font-weight: 500;
|
|
182
|
-
}
|
|
183
|
-
.cta-box {
|
|
184
|
-
background: var(--color-card);
|
|
185
|
-
border: 2px solid var(--brand-blue);
|
|
186
|
-
border-radius: 12px;
|
|
187
|
-
padding: 32px;
|
|
188
|
-
text-align: center;
|
|
189
|
-
margin: 40px 0;
|
|
190
|
-
}
|
|
191
|
-
.cta-box h3 { margin-bottom: 12px; }
|
|
192
|
-
.cta-box p { margin-bottom: 20px; color: var(--color-medium); }
|
|
193
|
-
.btn {
|
|
194
|
-
display: inline-block;
|
|
195
|
-
padding: 14px 28px;
|
|
196
|
-
background: var(--brand-gradient);
|
|
197
|
-
color: white;
|
|
198
|
-
border: none;
|
|
199
|
-
border-radius: 8px;
|
|
200
|
-
font-size: 16px;
|
|
201
|
-
font-weight: 600;
|
|
202
|
-
text-decoration: none;
|
|
203
|
-
transition: transform 0.2s, box-shadow 0.2s;
|
|
204
|
-
}
|
|
205
|
-
.btn:hover {
|
|
206
|
-
transform: translateY(-1px);
|
|
207
|
-
box-shadow: 0 4px 12px rgba(46, 134, 171, 0.4);
|
|
208
|
-
}
|
|
209
|
-
.timeline {
|
|
210
|
-
border-left: 3px solid var(--brand-teal);
|
|
211
|
-
padding-left: 24px;
|
|
212
|
-
margin: 24px 0;
|
|
213
|
-
}
|
|
214
|
-
.timeline-item {
|
|
215
|
-
position: relative;
|
|
216
|
-
margin-bottom: 24px;
|
|
217
|
-
}
|
|
218
|
-
.timeline-item::before {
|
|
219
|
-
content: '';
|
|
220
|
-
position: absolute;
|
|
221
|
-
left: -30px;
|
|
222
|
-
top: 4px;
|
|
223
|
-
width: 12px;
|
|
224
|
-
height: 12px;
|
|
225
|
-
background: var(--brand-teal);
|
|
226
|
-
border-radius: 50%;
|
|
227
|
-
}
|
|
228
|
-
.timeline-date {
|
|
229
|
-
font-weight: 600;
|
|
230
|
-
color: var(--brand-blue);
|
|
231
|
-
}
|
|
232
|
-
code {
|
|
233
|
-
background: #f1f5f9;
|
|
234
|
-
padding: 2px 8px;
|
|
235
|
-
border-radius: 4px;
|
|
236
|
-
font-family: monospace;
|
|
237
|
-
font-size: 14px;
|
|
238
|
-
}
|
|
239
|
-
pre {
|
|
240
|
-
background: var(--color-dark);
|
|
241
|
-
color: #e2e8f0;
|
|
242
|
-
padding: 20px;
|
|
243
|
-
border-radius: 8px;
|
|
244
|
-
overflow-x: auto;
|
|
245
|
-
font-size: 13px;
|
|
246
|
-
margin: 16px 0;
|
|
247
|
-
}
|
|
248
|
-
footer {
|
|
249
|
-
padding: 40px 20px;
|
|
250
|
-
text-align: center;
|
|
251
|
-
color: var(--color-medium);
|
|
252
|
-
border-top: 1px solid var(--color-border);
|
|
253
|
-
background: var(--color-card);
|
|
254
|
-
}
|
|
255
|
-
footer a { color: var(--brand-blue); text-decoration: none; }
|
|
256
|
-
@media (max-width: 600px) {
|
|
257
|
-
.hero h1 { font-size: 28px; }
|
|
258
|
-
.header-inner { flex-direction: column; gap: 16px; }
|
|
259
|
-
}
|
|
260
|
-
</style>
|
|
261
|
-
</head>
|
|
262
|
-
<body>
|
|
263
|
-
<header>
|
|
264
|
-
<div class="header-inner">
|
|
265
|
-
<a href="/" class="logo">
|
|
266
|
-
<img src="/logo.jpeg" alt="UCP Tools" class="logo-icon">
|
|
267
|
-
<span class="logo-text">UCP<span class="logo-suffix">.tools</span></span>
|
|
268
|
-
</a>
|
|
269
|
-
<nav>
|
|
270
|
-
<a href="/">Validate</a>
|
|
271
|
-
<a href="/learn" style="color: var(--brand-blue); font-weight: 600;">Learn</a>
|
|
272
|
-
<div class="dropdown">
|
|
273
|
-
<span class="dropdown-toggle">Guides</span>
|
|
274
|
-
<div class="dropdown-menu">
|
|
275
|
-
<a href="/guides/fastucp">⚡ FastUCP</a>
|
|
276
|
-
<div class="dropdown-divider"></div>
|
|
277
|
-
<a href="/guides/shopify">🛒 Shopify</a>
|
|
278
|
-
<a href="/guides/woocommerce">🔌 WooCommerce</a>
|
|
279
|
-
<a href="/guides/magento">🧱 Magento</a>
|
|
280
|
-
<a href="/guides/wix">✨ Wix</a>
|
|
281
|
-
<a href="/guides/bigcommerce">📦 BigCommerce</a>
|
|
282
|
-
<a href="/guides/squarespace">◼️ Squarespace</a>
|
|
283
|
-
</div>
|
|
284
|
-
</div>
|
|
285
|
-
<a href="https://ucp.dev" target="_blank">Spec</a>
|
|
286
|
-
</nav>
|
|
287
|
-
</div>
|
|
288
|
-
</header>
|
|
289
|
-
|
|
290
|
-
<section class="hero">
|
|
291
|
-
<div class="container">
|
|
292
|
-
<h1>What is UCP?</h1>
|
|
293
|
-
<p>The Universal Commerce Protocol is the new standard that lets AI agents shop on your store. Here's why it matters.</p>
|
|
294
|
-
</div>
|
|
295
|
-
</section>
|
|
296
|
-
|
|
297
|
-
<section class="content">
|
|
298
|
-
<div class="container">
|
|
299
|
-
|
|
300
|
-
<h2>The Problem UCP Solves</h2>
|
|
301
|
-
<p>AI assistants like ChatGPT, Google Gemini, and Microsoft Copilot are becoming the new way people shop. But there's a problem: <strong>AI agents can't easily find or buy from most online stores.</strong></p>
|
|
302
|
-
<p>Without a standard protocol, each AI platform would need custom integrations with every store. That doesn't scale.</p>
|
|
303
|
-
|
|
304
|
-
<div class="highlight-box">
|
|
305
|
-
<strong>UCP is like robots.txt for commerce.</strong> Just as robots.txt tells search engines how to crawl your site, UCP tells AI agents how to shop on your store.
|
|
306
|
-
</div>
|
|
307
|
-
|
|
308
|
-
<h2>Who Created UCP?</h2>
|
|
309
|
-
<p>UCP was developed by Google and Shopify, with endorsement from 60+ major companies:</p>
|
|
310
|
-
<div class="partners">
|
|
311
|
-
<span class="partner-tag">Google</span>
|
|
312
|
-
<span class="partner-tag">Shopify</span>
|
|
313
|
-
<span class="partner-tag">Walmart</span>
|
|
314
|
-
<span class="partner-tag">Target</span>
|
|
315
|
-
<span class="partner-tag">Stripe</span>
|
|
316
|
-
<span class="partner-tag">PayPal</span>
|
|
317
|
-
<span class="partner-tag">Visa</span>
|
|
318
|
-
<span class="partner-tag">Mastercard</span>
|
|
319
|
-
<span class="partner-tag">Best Buy</span>
|
|
320
|
-
<span class="partner-tag">Home Depot</span>
|
|
321
|
-
<span class="partner-tag">Etsy</span>
|
|
322
|
-
<span class="partner-tag">Wayfair</span>
|
|
323
|
-
</div>
|
|
324
|
-
|
|
325
|
-
<h2>How Does UCP Work?</h2>
|
|
326
|
-
<p>Merchants publish a JSON file at a standard location:</p>
|
|
327
|
-
<pre>https://yourstore.com/.well-known/ucp</pre>
|
|
328
|
-
<p>This file tells AI agents:</p>
|
|
329
|
-
<ul>
|
|
330
|
-
<li><strong>What capabilities your store supports</strong> (checkout, orders, fulfillment)</li>
|
|
331
|
-
<li><strong>How to connect</strong> (API endpoints, authentication)</li>
|
|
332
|
-
<li><strong>What version of UCP you use</strong></li>
|
|
333
|
-
</ul>
|
|
334
|
-
|
|
335
|
-
<h2>Why Should You Care?</h2>
|
|
336
|
-
<p>AI-powered shopping is growing fast:</p>
|
|
337
|
-
<ul>
|
|
338
|
-
<li><strong>$20.9 billion</strong> in AI-assisted purchases expected in 2026</li>
|
|
339
|
-
<li><strong>ChatGPT checkout</strong> already live with Target, Walmart, Etsy</li>
|
|
340
|
-
<li><strong>Google AI Mode</strong> launching with UCP integration</li>
|
|
341
|
-
<li><strong>Microsoft Copilot Checkout</strong> auto-enrolling Shopify stores</li>
|
|
342
|
-
</ul>
|
|
343
|
-
|
|
344
|
-
<div class="highlight-box">
|
|
345
|
-
<strong>If you don't have UCP, AI agents will skip your store</strong> and send customers to competitors who do.
|
|
346
|
-
</div>
|
|
347
|
-
|
|
348
|
-
<h2>Timeline</h2>
|
|
349
|
-
<div class="timeline">
|
|
350
|
-
<div class="timeline-item">
|
|
351
|
-
<div class="timeline-date">January 2026</div>
|
|
352
|
-
<div>Google and Shopify announce UCP at NRF 2026</div>
|
|
353
|
-
</div>
|
|
354
|
-
<div class="timeline-item">
|
|
355
|
-
<div class="timeline-date">Q1 2026</div>
|
|
356
|
-
<div>Google AI Mode in Search launches with UCP</div>
|
|
357
|
-
</div>
|
|
358
|
-
<div class="timeline-item">
|
|
359
|
-
<div class="timeline-date">2026</div>
|
|
360
|
-
<div>Major AI platforms integrate UCP checkout</div>
|
|
361
|
-
</div>
|
|
362
|
-
<div class="timeline-item">
|
|
363
|
-
<div class="timeline-date">2027+</div>
|
|
364
|
-
<div>UCP becomes standard for AI commerce</div>
|
|
365
|
-
</div>
|
|
366
|
-
</div>
|
|
367
|
-
|
|
368
|
-
<h2>UCP vs. Other Protocols</h2>
|
|
369
|
-
<p>UCP isn't the only protocol. OpenAI has the <strong>Agentic Commerce Protocol (ACP)</strong> with Stripe. But UCP has more momentum with Google, Shopify, and 60+ partners backing it.</p>
|
|
370
|
-
<p>Smart merchants will implement both, but UCP is the priority for now.</p>
|
|
371
|
-
|
|
372
|
-
<div class="cta-box">
|
|
373
|
-
<h3>Check If Your Store is Ready</h3>
|
|
374
|
-
<p>Our free validator checks your UCP profile and shows exactly what to fix.</p>
|
|
375
|
-
<a href="/" class="btn">Validate Your Store</a>
|
|
376
|
-
</div>
|
|
377
|
-
|
|
378
|
-
<h2>Resources</h2>
|
|
379
|
-
<ul>
|
|
380
|
-
<li><a href="https://ucp.dev" target="_blank">Official UCP Specification</a></li>
|
|
381
|
-
<li><a href="https://developers.googleblog.com/under-the-hood-universal-commerce-protocol-ucp/" target="_blank">Google Developer Blog: Under the Hood</a></li>
|
|
382
|
-
<li><a href="https://www.shopify.com/ucp" target="_blank">Shopify UCP Page</a></li>
|
|
383
|
-
<li><a href="https://shopify.engineering/UCP" target="_blank">Shopify Engineering: Building UCP</a></li>
|
|
384
|
-
</ul>
|
|
385
|
-
|
|
386
|
-
</div>
|
|
387
|
-
</section>
|
|
388
|
-
|
|
389
|
-
<footer>
|
|
390
|
-
<div class="container">
|
|
391
|
-
<p><strong>UCP Tools</strong> • <a href="/">Validator</a> • <a href="/learn">Learn</a> • <a href="mailto:hello@ucptools.dev">Contact</a></p>
|
|
392
|
-
<p style="margin-top: 8px; font-size: 14px;">Independent project. Not affiliated with Google or Shopify.</p>
|
|
393
|
-
</div>
|
|
394
|
-
</footer>
|
|
395
|
-
</body>
|
|
396
|
-
</html>
|
package/public/logo.jpeg
DELETED
|
Binary file
|
package/public/og-image-icon.png
DELETED
|
Binary file
|
package/public/og-image.png
DELETED
|
Binary file
|
package/public/robots.txt
DELETED
package/public/site.webmanifest
DELETED
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "UCP.tools - AI Commerce Readiness",
|
|
3
|
-
"short_name": "UCP.tools",
|
|
4
|
-
"description": "Generate, validate, and host UCP Business Profiles for AI-powered commerce",
|
|
5
|
-
"start_url": "/",
|
|
6
|
-
"display": "standalone",
|
|
7
|
-
"background_color": "#F8FAFC",
|
|
8
|
-
"theme_color": "#2E86AB",
|
|
9
|
-
"icons": [
|
|
10
|
-
{
|
|
11
|
-
"src": "/favicon-16x16.png",
|
|
12
|
-
"sizes": "16x16",
|
|
13
|
-
"type": "image/png"
|
|
14
|
-
},
|
|
15
|
-
{
|
|
16
|
-
"src": "/favicon-32x32.png",
|
|
17
|
-
"sizes": "32x32",
|
|
18
|
-
"type": "image/png"
|
|
19
|
-
},
|
|
20
|
-
{
|
|
21
|
-
"src": "/android-chrome-192x192.png",
|
|
22
|
-
"sizes": "192x192",
|
|
23
|
-
"type": "image/png"
|
|
24
|
-
},
|
|
25
|
-
{
|
|
26
|
-
"src": "/android-chrome-512x512.png",
|
|
27
|
-
"sizes": "512x512",
|
|
28
|
-
"type": "image/png"
|
|
29
|
-
}
|
|
30
|
-
]
|
|
31
|
-
}
|
package/public/sitemap.xml
DELETED
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
-
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
|
|
3
|
-
<url>
|
|
4
|
-
<loc>https://ucptools.dev/</loc>
|
|
5
|
-
<lastmod>2026-01-15</lastmod>
|
|
6
|
-
<changefreq>weekly</changefreq>
|
|
7
|
-
<priority>1.0</priority>
|
|
8
|
-
</url>
|
|
9
|
-
<url>
|
|
10
|
-
<loc>https://ucptools.dev/verify</loc>
|
|
11
|
-
<lastmod>2026-01-15</lastmod>
|
|
12
|
-
<changefreq>weekly</changefreq>
|
|
13
|
-
<priority>0.9</priority>
|
|
14
|
-
</url>
|
|
15
|
-
<url>
|
|
16
|
-
<loc>https://ucptools.dev/learn</loc>
|
|
17
|
-
<lastmod>2026-01-14</lastmod>
|
|
18
|
-
<changefreq>monthly</changefreq>
|
|
19
|
-
<priority>0.8</priority>
|
|
20
|
-
</url>
|
|
21
|
-
<url>
|
|
22
|
-
<loc>https://ucptools.dev/directory</loc>
|
|
23
|
-
<lastmod>2026-01-15</lastmod>
|
|
24
|
-
<changefreq>weekly</changefreq>
|
|
25
|
-
<priority>0.8</priority>
|
|
26
|
-
</url>
|
|
27
|
-
<url>
|
|
28
|
-
<loc>https://ucptools.dev/guides/fastucp</loc>
|
|
29
|
-
<lastmod>2026-01-15</lastmod>
|
|
30
|
-
<changefreq>monthly</changefreq>
|
|
31
|
-
<priority>0.7</priority>
|
|
32
|
-
</url>
|
|
33
|
-
<url>
|
|
34
|
-
<loc>https://ucptools.dev/guides/shopify</loc>
|
|
35
|
-
<lastmod>2026-01-16</lastmod>
|
|
36
|
-
<changefreq>monthly</changefreq>
|
|
37
|
-
<priority>0.7</priority>
|
|
38
|
-
</url>
|
|
39
|
-
<url>
|
|
40
|
-
<loc>https://ucptools.dev/guides/woocommerce</loc>
|
|
41
|
-
<lastmod>2026-01-16</lastmod>
|
|
42
|
-
<changefreq>monthly</changefreq>
|
|
43
|
-
<priority>0.7</priority>
|
|
44
|
-
</url>
|
|
45
|
-
<url>
|
|
46
|
-
<loc>https://ucptools.dev/guides/magento</loc>
|
|
47
|
-
<lastmod>2026-01-16</lastmod>
|
|
48
|
-
<changefreq>monthly</changefreq>
|
|
49
|
-
<priority>0.7</priority>
|
|
50
|
-
</url>
|
|
51
|
-
<url>
|
|
52
|
-
<loc>https://ucptools.dev/guides/wix</loc>
|
|
53
|
-
<lastmod>2026-01-16</lastmod>
|
|
54
|
-
<changefreq>monthly</changefreq>
|
|
55
|
-
<priority>0.7</priority>
|
|
56
|
-
</url>
|
|
57
|
-
<url>
|
|
58
|
-
<loc>https://ucptools.dev/guides/bigcommerce</loc>
|
|
59
|
-
<lastmod>2026-01-16</lastmod>
|
|
60
|
-
<changefreq>monthly</changefreq>
|
|
61
|
-
<priority>0.7</priority>
|
|
62
|
-
</url>
|
|
63
|
-
<url>
|
|
64
|
-
<loc>https://ucptools.dev/guides/squarespace</loc>
|
|
65
|
-
<lastmod>2026-01-16</lastmod>
|
|
66
|
-
<changefreq>monthly</changefreq>
|
|
67
|
-
<priority>0.7</priority>
|
|
68
|
-
</url>
|
|
69
|
-
</urlset>
|
|
Binary file
|
package/public/social/temp.PNG
DELETED
|
Binary file
|
|
Binary file
|