@ucptools/validator 1.0.0 → 1.0.1

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.
Files changed (236) hide show
  1. package/.claude/settings.local.json +60 -0
  2. package/.vercel/README.txt +11 -0
  3. package/.vercel/project.json +1 -0
  4. package/dist/cli/index.d.ts +6 -0
  5. package/dist/cli/index.d.ts.map +1 -0
  6. package/dist/cli/index.js +279 -0
  7. package/dist/cli/index.js.map +1 -0
  8. package/dist/compliance/compliance-generator.d.ts +34 -0
  9. package/dist/compliance/compliance-generator.d.ts.map +1 -0
  10. package/dist/compliance/compliance-generator.js +320 -0
  11. package/dist/compliance/compliance-generator.js.map +1 -0
  12. package/dist/compliance/index.d.ts +8 -0
  13. package/dist/compliance/index.d.ts.map +1 -0
  14. package/dist/compliance/index.js +17 -0
  15. package/dist/compliance/index.js.map +1 -0
  16. package/dist/compliance/templates.d.ts +34 -0
  17. package/dist/compliance/templates.d.ts.map +1 -0
  18. package/{src/compliance/templates.ts → dist/compliance/templates.js} +117 -155
  19. package/dist/compliance/templates.js.map +1 -0
  20. package/dist/compliance/types.d.ts +64 -0
  21. package/dist/compliance/types.d.ts.map +1 -0
  22. package/dist/compliance/types.js +64 -0
  23. package/dist/compliance/types.js.map +1 -0
  24. package/dist/db/index.d.ts +11 -0
  25. package/dist/db/index.d.ts.map +1 -0
  26. package/dist/db/index.js +63 -0
  27. package/dist/db/index.js.map +1 -0
  28. package/dist/db/schema.d.ts +444 -0
  29. package/dist/db/schema.d.ts.map +1 -0
  30. package/dist/db/schema.js +65 -0
  31. package/dist/db/schema.js.map +1 -0
  32. package/dist/feed-analyzer/feed-analyzer.d.ts +26 -0
  33. package/dist/feed-analyzer/feed-analyzer.d.ts.map +1 -0
  34. package/{src/feed-analyzer/feed-analyzer.ts → dist/feed-analyzer/feed-analyzer.js} +642 -726
  35. package/dist/feed-analyzer/feed-analyzer.js.map +1 -0
  36. package/dist/feed-analyzer/index.d.ts +8 -0
  37. package/dist/feed-analyzer/index.d.ts.map +1 -0
  38. package/dist/feed-analyzer/index.js +19 -0
  39. package/dist/feed-analyzer/index.js.map +1 -0
  40. package/dist/feed-analyzer/types.d.ts +204 -0
  41. package/dist/feed-analyzer/types.d.ts.map +1 -0
  42. package/dist/feed-analyzer/types.js +162 -0
  43. package/dist/feed-analyzer/types.js.map +1 -0
  44. package/{src/generator/index.ts → dist/generator/index.d.ts} +1 -1
  45. package/dist/generator/index.d.ts.map +1 -0
  46. package/dist/generator/index.js +13 -0
  47. package/dist/generator/index.js.map +1 -0
  48. package/dist/generator/key-generator.d.ts +24 -0
  49. package/dist/generator/key-generator.d.ts.map +1 -0
  50. package/dist/generator/key-generator.js +144 -0
  51. package/dist/generator/key-generator.js.map +1 -0
  52. package/dist/generator/profile-builder.d.ts +15 -0
  53. package/dist/generator/profile-builder.d.ts.map +1 -0
  54. package/dist/generator/profile-builder.js +338 -0
  55. package/dist/generator/profile-builder.js.map +1 -0
  56. package/dist/hosting/artifacts-generator.d.ts +10 -0
  57. package/dist/hosting/artifacts-generator.d.ts.map +1 -0
  58. package/{src/hosting/artifacts-generator.ts → dist/hosting/artifacts-generator.js} +191 -241
  59. package/dist/hosting/artifacts-generator.js.map +1 -0
  60. package/{src/hosting/index.ts → dist/hosting/index.d.ts} +1 -1
  61. package/dist/hosting/index.d.ts.map +1 -0
  62. package/dist/hosting/index.js +10 -0
  63. package/dist/hosting/index.js.map +1 -0
  64. package/dist/index.d.ts +18 -0
  65. package/dist/index.d.ts.map +1 -0
  66. package/dist/index.js +78 -0
  67. package/dist/index.js.map +1 -0
  68. package/{src/security/index.ts → dist/security/index.d.ts} +8 -15
  69. package/dist/security/index.d.ts.map +1 -0
  70. package/dist/security/index.js +12 -0
  71. package/dist/security/index.js.map +1 -0
  72. package/dist/security/security-scanner.d.ts +10 -0
  73. package/dist/security/security-scanner.d.ts.map +1 -0
  74. package/dist/security/security-scanner.js +541 -0
  75. package/dist/security/security-scanner.js.map +1 -0
  76. package/dist/security/types.d.ts +48 -0
  77. package/dist/security/types.d.ts.map +1 -0
  78. package/dist/security/types.js +21 -0
  79. package/dist/security/types.js.map +1 -0
  80. package/dist/services/directory.d.ts +104 -0
  81. package/dist/services/directory.d.ts.map +1 -0
  82. package/dist/services/directory.js +333 -0
  83. package/dist/services/directory.js.map +1 -0
  84. package/dist/simulator/agent-simulator.d.ts +69 -0
  85. package/dist/simulator/agent-simulator.d.ts.map +1 -0
  86. package/{src/simulator/agent-simulator.ts → dist/simulator/agent-simulator.js} +650 -941
  87. package/dist/simulator/agent-simulator.js.map +1 -0
  88. package/{src/simulator/index.ts → dist/simulator/index.d.ts} +7 -7
  89. package/dist/simulator/index.d.ts.map +1 -0
  90. package/dist/simulator/index.js +23 -0
  91. package/dist/simulator/index.js.map +1 -0
  92. package/{src/simulator/types.ts → dist/simulator/types.d.ts} +145 -170
  93. package/dist/simulator/types.d.ts.map +1 -0
  94. package/dist/simulator/types.js +18 -0
  95. package/dist/simulator/types.js.map +1 -0
  96. package/dist/types/generator.d.ts +106 -0
  97. package/dist/types/generator.d.ts.map +1 -0
  98. package/dist/types/generator.js +6 -0
  99. package/dist/types/generator.js.map +1 -0
  100. package/{src/types/index.ts → dist/types/index.d.ts} +1 -1
  101. package/dist/types/index.d.ts.map +1 -0
  102. package/dist/types/index.js +23 -0
  103. package/dist/types/index.js.map +1 -0
  104. package/dist/types/ucp-profile.d.ts +103 -0
  105. package/dist/types/ucp-profile.d.ts.map +1 -0
  106. package/dist/types/ucp-profile.js +45 -0
  107. package/dist/types/ucp-profile.js.map +1 -0
  108. package/dist/types/validation.d.ts +68 -0
  109. package/dist/types/validation.d.ts.map +1 -0
  110. package/dist/types/validation.js +32 -0
  111. package/dist/types/validation.js.map +1 -0
  112. package/dist/validator/index.d.ts +26 -0
  113. package/dist/validator/index.d.ts.map +1 -0
  114. package/dist/validator/index.js +161 -0
  115. package/dist/validator/index.js.map +1 -0
  116. package/dist/validator/network-validator.d.ts +28 -0
  117. package/dist/validator/network-validator.d.ts.map +1 -0
  118. package/dist/validator/network-validator.js +319 -0
  119. package/dist/validator/network-validator.js.map +1 -0
  120. package/dist/validator/rules-validator.d.ts +11 -0
  121. package/dist/validator/rules-validator.d.ts.map +1 -0
  122. package/dist/validator/rules-validator.js +257 -0
  123. package/dist/validator/rules-validator.js.map +1 -0
  124. package/dist/validator/sdk-validator.d.ts +58 -0
  125. package/dist/validator/sdk-validator.d.ts.map +1 -0
  126. package/{src/validator/sdk-validator.ts → dist/validator/sdk-validator.js} +273 -330
  127. package/dist/validator/sdk-validator.js.map +1 -0
  128. package/dist/validator/structural-validator.d.ts +11 -0
  129. package/dist/validator/structural-validator.d.ts.map +1 -0
  130. package/dist/validator/structural-validator.js +415 -0
  131. package/dist/validator/structural-validator.js.map +1 -0
  132. package/package.json +1 -1
  133. package/publish-output.txt +0 -0
  134. package/CLAUDE.md +0 -109
  135. package/api/analyze-feed.js +0 -140
  136. package/api/badge.js +0 -185
  137. package/api/benchmark.js +0 -177
  138. package/api/directory-stats.ts +0 -29
  139. package/api/directory.ts +0 -73
  140. package/api/generate-compliance.js +0 -143
  141. package/api/generate-schema.js +0 -457
  142. package/api/generate.js +0 -132
  143. package/api/security-scan.js +0 -133
  144. package/api/simulate.js +0 -187
  145. package/api/tsconfig.json +0 -10
  146. package/api/validate.js +0 -1351
  147. package/apify-actor/.actor/actor.json +0 -68
  148. package/apify-actor/.actor/input_schema.json +0 -32
  149. package/apify-actor/APIFY-STORE-LISTING.md +0 -412
  150. package/apify-actor/Dockerfile +0 -8
  151. package/apify-actor/README.md +0 -166
  152. package/apify-actor/main.ts +0 -111
  153. package/apify-actor/package.json +0 -17
  154. package/apify-actor/src/main.js +0 -199
  155. package/docs/BRAND-IDENTITY.md +0 -238
  156. package/docs/BRAND-STYLE-GUIDE.md +0 -356
  157. package/drizzle/0000_black_king_cobra.sql +0 -39
  158. package/drizzle/meta/0000_snapshot.json +0 -309
  159. package/drizzle/meta/_journal.json +0 -13
  160. package/drizzle.config.ts +0 -10
  161. package/public/.well-known/ucp +0 -25
  162. package/public/android-chrome-192x192.png +0 -0
  163. package/public/android-chrome-512x512.png +0 -0
  164. package/public/apple-touch-icon.png +0 -0
  165. package/public/brand.css +0 -321
  166. package/public/directory.html +0 -701
  167. package/public/favicon-16x16.png +0 -0
  168. package/public/favicon-32x32.png +0 -0
  169. package/public/favicon.ico +0 -0
  170. package/public/guides/bigcommerce.html +0 -743
  171. package/public/guides/fastucp.html +0 -838
  172. package/public/guides/magento.html +0 -779
  173. package/public/guides/shopify.html +0 -726
  174. package/public/guides/squarespace.html +0 -749
  175. package/public/guides/wix.html +0 -747
  176. package/public/guides/woocommerce.html +0 -733
  177. package/public/index.html +0 -3835
  178. package/public/learn.html +0 -396
  179. package/public/logo.jpeg +0 -0
  180. package/public/og-image-icon.png +0 -0
  181. package/public/og-image.png +0 -0
  182. package/public/robots.txt +0 -6
  183. package/public/site.webmanifest +0 -31
  184. package/public/sitemap.xml +0 -69
  185. package/public/social/linkedin-banner-1128x191.png +0 -0
  186. package/public/social/temp.PNG +0 -0
  187. package/public/social/x-header-1500x500.png +0 -0
  188. package/public/verify.html +0 -410
  189. package/scripts/generate-favicons.js +0 -44
  190. package/scripts/generate-ico.js +0 -23
  191. package/scripts/generate-og-image.js +0 -45
  192. package/scripts/reset-db.ts +0 -77
  193. package/scripts/seed-db.ts +0 -71
  194. package/scripts/setup-benchmark-db.js +0 -70
  195. package/src/api/server.ts +0 -266
  196. package/src/cli/index.ts +0 -302
  197. package/src/compliance/compliance-generator.ts +0 -452
  198. package/src/compliance/index.ts +0 -28
  199. package/src/compliance/types.ts +0 -170
  200. package/src/db/index.ts +0 -28
  201. package/src/db/schema.ts +0 -84
  202. package/src/feed-analyzer/index.ts +0 -34
  203. package/src/feed-analyzer/types.ts +0 -354
  204. package/src/generator/key-generator.ts +0 -124
  205. package/src/generator/profile-builder.ts +0 -402
  206. package/src/index.ts +0 -105
  207. package/src/security/security-scanner.ts +0 -604
  208. package/src/security/types.ts +0 -55
  209. package/src/services/directory.ts +0 -434
  210. package/src/types/generator.ts +0 -140
  211. package/src/types/ucp-profile.ts +0 -140
  212. package/src/types/validation.ts +0 -89
  213. package/src/validator/index.ts +0 -194
  214. package/src/validator/network-validator.ts +0 -417
  215. package/src/validator/rules-validator.ts +0 -297
  216. package/src/validator/structural-validator.ts +0 -476
  217. package/tests/fixtures/non-compliant-profile.json +0 -25
  218. package/tests/fixtures/official-sample-profile.json +0 -75
  219. package/tests/integration/benchmark.test.ts +0 -207
  220. package/tests/integration/database.test.ts +0 -163
  221. package/tests/integration/directory-api.test.ts +0 -268
  222. package/tests/integration/simulate-api.test.ts +0 -230
  223. package/tests/integration/validate-api.test.ts +0 -269
  224. package/tests/setup.ts +0 -15
  225. package/tests/unit/agent-simulator.test.ts +0 -575
  226. package/tests/unit/compliance-generator.test.ts +0 -374
  227. package/tests/unit/directory-service.test.ts +0 -272
  228. package/tests/unit/feed-analyzer.test.ts +0 -517
  229. package/tests/unit/lint-suggestions.test.ts +0 -423
  230. package/tests/unit/official-samples.test.ts +0 -211
  231. package/tests/unit/pdf-report.test.ts +0 -390
  232. package/tests/unit/sdk-validator.test.ts +0 -531
  233. package/tests/unit/security-scanner.test.ts +0 -410
  234. package/tests/unit/validation.test.ts +0 -390
  235. package/vercel.json +0 -34
  236. 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> &bull; <a href="/">Validator</a> &bull; <a href="/learn">Learn</a> &bull; <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
Binary file
Binary file
package/public/robots.txt DELETED
@@ -1,6 +0,0 @@
1
- # robots.txt for ucptools.dev
2
- User-agent: *
3
- Allow: /
4
-
5
- # Sitemap
6
- Sitemap: https://ucptools.dev/sitemap.xml
@@ -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
- }
@@ -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
Binary file