@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
@@ -1,356 +0,0 @@
1
- # UCP.tools Brand Style Guide
2
-
3
- Comprehensive brand guidelines based on the official logo.
4
-
5
- ---
6
-
7
- ## 1. LOGO
8
-
9
- ### Primary Logo
10
- - File: `public/logo.jpeg`
11
- - Usage: App icons, favicons, social media avatars
12
- - Concept: Shopping bag with checkmark = "validated commerce"
13
-
14
- ### Logo Variations
15
- | Variant | Use Case |
16
- |---------|----------|
17
- | Full color | Primary use, light backgrounds |
18
- | White | Dark backgrounds, overlays |
19
- | Monochrome | Print, low-color contexts |
20
-
21
- ### Clear Space
22
- Maintain padding equal to the height of the bag handle on all sides.
23
-
24
- ### Minimum Size
25
- - Digital: 32x32px minimum
26
- - Print: 0.5 inch minimum
27
-
28
- ---
29
-
30
- ## 2. COLOR PALETTE
31
-
32
- ### Primary Colors (from logo gradient)
33
-
34
- | Name | Hex | RGB | Usage |
35
- |------|-----|-----|-------|
36
- | **Blue** | `#2E86AB` | rgb(46, 134, 171) | Primary actions, links |
37
- | **Teal** | `#36B5A2` | rgb(54, 181, 162) | Gradient midpoint, accents |
38
- | **Green** | `#47C97A` | rgb(71, 201, 122) | Success states, validation |
39
-
40
- ### Brand Gradient
41
- ```css
42
- background: linear-gradient(135deg, #2E86AB 0%, #36B5A2 50%, #47C97A 100%);
43
- ```
44
-
45
- ### Secondary Colors
46
-
47
- | Name | Hex | Usage |
48
- |------|-----|-------|
49
- | **Dark** | `#1A2B3C` | Text, headings |
50
- | **Medium** | `#5A6978` | Secondary text |
51
- | **Light** | `#94A3B8` | Muted text, placeholders |
52
- | **Border** | `#E2E8F0` | Dividers, borders |
53
- | **Background** | `#F8FAFC` | Page background |
54
- | **Card** | `#FFFFFF` | Card backgrounds |
55
-
56
- ### Semantic Colors
57
-
58
- | Name | Hex | Usage |
59
- |------|-----|-------|
60
- | **Success** | `#47C97A` | Valid, success states |
61
- | **Warning** | `#F59E0B` | Warnings, caution |
62
- | **Error** | `#EF4444` | Errors, invalid states |
63
- | **Info** | `#2E86AB` | Information, tips |
64
-
65
- ### Grade Colors
66
-
67
- | Grade | Background | Text |
68
- |-------|------------|------|
69
- | A | `#DCFCE7` | `#16A34A` |
70
- | B | `#DBEAFE` | `#2563EB` |
71
- | C | `#FEF9C3` | `#CA8A04` |
72
- | D | `#FED7AA` | `#EA580C` |
73
- | F | `#FEE2E2` | `#DC2626` |
74
-
75
- ---
76
-
77
- ## 3. TYPOGRAPHY
78
-
79
- ### Font Stack
80
- ```css
81
- font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
82
- ```
83
-
84
- ### Type Scale
85
-
86
- | Element | Size | Weight | Line Height |
87
- |---------|------|--------|-------------|
88
- | H1 | 48px / 3rem | 700 | 1.2 |
89
- | H2 | 36px / 2.25rem | 700 | 1.25 |
90
- | H3 | 24px / 1.5rem | 600 | 1.3 |
91
- | H4 | 20px / 1.25rem | 600 | 1.4 |
92
- | Body | 16px / 1rem | 400 | 1.6 |
93
- | Small | 14px / 0.875rem | 400 | 1.5 |
94
- | Caption | 12px / 0.75rem | 500 | 1.4 |
95
-
96
- ### Logo Typography
97
- ```css
98
- .logo {
99
- font-size: 24px;
100
- font-weight: 700;
101
- background: linear-gradient(135deg, #2E86AB, #47C97A);
102
- -webkit-background-clip: text;
103
- -webkit-text-fill-color: transparent;
104
- }
105
- .logo .suffix {
106
- font-weight: 400;
107
- color: #5A6978;
108
- }
109
- ```
110
-
111
- ---
112
-
113
- ## 4. SPACING
114
-
115
- ### Base Unit
116
- 8px grid system
117
-
118
- | Token | Value | Usage |
119
- |-------|-------|-------|
120
- | `--space-1` | 4px | Tight spacing |
121
- | `--space-2` | 8px | Default gap |
122
- | `--space-3` | 12px | Small padding |
123
- | `--space-4` | 16px | Medium padding |
124
- | `--space-5` | 20px | Form groups |
125
- | `--space-6` | 24px | Section gaps |
126
- | `--space-8` | 32px | Card padding |
127
- | `--space-10` | 40px | Section padding |
128
- | `--space-12` | 48px | Large sections |
129
- | `--space-16` | 64px | Hero sections |
130
-
131
- ---
132
-
133
- ## 5. BORDER RADIUS
134
-
135
- | Token | Value | Usage |
136
- |-------|-------|-------|
137
- | `--radius-sm` | 4px | Small elements, badges |
138
- | `--radius-md` | 8px | Buttons, inputs |
139
- | `--radius-lg` | 12px | Cards |
140
- | `--radius-xl` | 16px | Modals |
141
- | `--radius-full` | 9999px | Pills, avatars |
142
-
143
- ---
144
-
145
- ## 6. SHADOWS
146
-
147
- ```css
148
- --shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.05);
149
- --shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -2px rgba(0, 0, 0, 0.1);
150
- --shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -4px rgba(0, 0, 0, 0.1);
151
- --shadow-xl: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 8px 10px -6px rgba(0, 0, 0, 0.1);
152
- ```
153
-
154
- ---
155
-
156
- ## 7. COMPONENTS
157
-
158
- ### Buttons
159
-
160
- #### Primary Button
161
- ```css
162
- .btn-primary {
163
- background: linear-gradient(135deg, #2E86AB, #36B5A2);
164
- color: white;
165
- padding: 12px 24px;
166
- border-radius: 8px;
167
- font-weight: 600;
168
- border: none;
169
- cursor: pointer;
170
- transition: transform 0.2s, box-shadow 0.2s;
171
- }
172
- .btn-primary:hover {
173
- transform: translateY(-1px);
174
- box-shadow: 0 4px 12px rgba(46, 134, 171, 0.4);
175
- }
176
- ```
177
-
178
- #### Secondary Button
179
- ```css
180
- .btn-secondary {
181
- background: white;
182
- color: #1A2B3C;
183
- padding: 12px 24px;
184
- border-radius: 8px;
185
- font-weight: 600;
186
- border: 2px solid #E2E8F0;
187
- cursor: pointer;
188
- }
189
- .btn-secondary:hover {
190
- border-color: #2E86AB;
191
- color: #2E86AB;
192
- }
193
- ```
194
-
195
- ### Cards
196
- ```css
197
- .card {
198
- background: white;
199
- border-radius: 12px;
200
- padding: 32px;
201
- box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
202
- border: 1px solid #E2E8F0;
203
- }
204
- ```
205
-
206
- ### Input Fields
207
- ```css
208
- input, select, textarea {
209
- width: 100%;
210
- padding: 12px 16px;
211
- border: 2px solid #E2E8F0;
212
- border-radius: 8px;
213
- font-size: 16px;
214
- transition: border-color 0.2s, box-shadow 0.2s;
215
- }
216
- input:focus {
217
- outline: none;
218
- border-color: #2E86AB;
219
- box-shadow: 0 0 0 3px rgba(46, 134, 171, 0.1);
220
- }
221
- ```
222
-
223
- ### Grade Badges
224
- ```css
225
- .grade-badge {
226
- display: inline-flex;
227
- align-items: center;
228
- gap: 8px;
229
- padding: 8px 16px;
230
- border-radius: 20px;
231
- font-weight: 700;
232
- font-size: 18px;
233
- }
234
- ```
235
-
236
- ---
237
-
238
- ## 8. ICONOGRAPHY
239
-
240
- ### Style Guidelines
241
- - Line weight: 2px stroke
242
- - Corner radius: Rounded caps and joins
243
- - Size: 24x24px default, 20x20px small, 32x32px large
244
-
245
- ### Common Icons
246
- | Icon | Usage |
247
- |------|-------|
248
- | Checkmark | Success, valid, complete |
249
- | X/Cross | Error, invalid, close |
250
- | Warning triangle | Warnings, caution |
251
- | Info circle | Information, tips |
252
- | Shopping bag | Commerce, UCP |
253
- | Shield | Security, validation |
254
-
255
- ---
256
-
257
- ## 9. MOTION
258
-
259
- ### Transitions
260
- ```css
261
- --transition-fast: 150ms ease;
262
- --transition-base: 200ms ease;
263
- --transition-slow: 300ms ease;
264
- ```
265
-
266
- ### Hover Effects
267
- - Buttons: `translateY(-1px)` + shadow increase
268
- - Cards: `translateY(-2px)` + shadow increase
269
- - Links: Color change only
270
-
271
- ---
272
-
273
- ## 10. RESPONSIVE BREAKPOINTS
274
-
275
- | Name | Width | Usage |
276
- |------|-------|-------|
277
- | Mobile | < 640px | Single column |
278
- | Tablet | 640-1024px | Two columns |
279
- | Desktop | > 1024px | Full layout |
280
-
281
- ---
282
-
283
- ## 11. VOICE & TONE
284
-
285
- ### Brand Voice
286
- - **Developer-first**: Technical but accessible
287
- - **Direct**: Clear, no fluff
288
- - **Helpful**: Solution-oriented
289
- - **Independent**: Not affiliated with Google/Shopify
290
-
291
- ### Writing Guidelines
292
- - Use active voice
293
- - Lead with benefits
294
- - Include code examples
295
- - Avoid jargon unless necessary
296
-
297
- ### Example Copy
298
-
299
- **Headlines:**
300
- - "Get ready for AI commerce"
301
- - "Validate your UCP profile"
302
- - "Check your AI commerce readiness"
303
-
304
- **CTAs:**
305
- - "Validate Now"
306
- - "Generate Profile"
307
- - "Get Started"
308
-
309
- ---
310
-
311
- ## 12. FILE ASSETS
312
-
313
- ### Required Files
314
- ```
315
- public/
316
- ├── logo.jpeg # Primary logo (square)
317
- ├── logo-white.png # White version for dark bg
318
- ├── favicon.ico # Browser favicon
319
- ├── favicon-32x32.png # 32px favicon
320
- ├── favicon-16x16.png # 16px favicon
321
- ├── apple-touch-icon.png # 180x180 iOS icon
322
- ├── og-image.png # 1200x630 social share
323
- └── brand.css # CSS design tokens
324
- ```
325
-
326
- ---
327
-
328
- ## 13. CSS DESIGN TOKENS
329
-
330
- See `public/brand.css` for the complete implementation of all design tokens as CSS custom properties.
331
-
332
- ---
333
-
334
- ## 14. USAGE EXAMPLES
335
-
336
- ### Hero Section
337
- ```html
338
- <section class="hero">
339
- <h1>UCP Profile <span class="gradient-text">Validator</span></h1>
340
- <p>Check if your store is ready for AI shopping agents</p>
341
- <button class="btn-primary">Validate Now</button>
342
- </section>
343
- ```
344
-
345
- ### Gradient Text
346
- ```css
347
- .gradient-text {
348
- background: linear-gradient(135deg, #2E86AB, #47C97A);
349
- -webkit-background-clip: text;
350
- -webkit-text-fill-color: transparent;
351
- }
352
- ```
353
-
354
- ---
355
-
356
- *Last updated: January 2026*
@@ -1,39 +0,0 @@
1
- CREATE TABLE "benchmark_stats" (
2
- "id" integer PRIMARY KEY GENERATED ALWAYS AS IDENTITY (sequence name "benchmark_stats_id_seq" INCREMENT BY 1 MINVALUE 1 MAXVALUE 2147483647 START WITH 1 CACHE 1),
3
- "score_bucket" integer NOT NULL,
4
- "count" integer DEFAULT 0 NOT NULL,
5
- CONSTRAINT "benchmark_stats_score_bucket_unique" UNIQUE("score_bucket")
6
- );
7
- --> statement-breakpoint
8
- CREATE TABLE "benchmark_summary" (
9
- "id" integer PRIMARY KEY DEFAULT 1 NOT NULL,
10
- "total_validations" integer DEFAULT 0 NOT NULL,
11
- "avg_score" numeric(5, 2) DEFAULT '0',
12
- "updated_at" timestamp DEFAULT now() NOT NULL
13
- );
14
- --> statement-breakpoint
15
- CREATE TABLE "merchants" (
16
- "id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
17
- "domain" varchar(255) NOT NULL,
18
- "display_name" varchar(255) NOT NULL,
19
- "description" text,
20
- "logo_url" varchar(512),
21
- "website_url" varchar(512),
22
- "category" varchar(100),
23
- "country_code" varchar(2),
24
- "ucp_score" integer,
25
- "ucp_grade" varchar(2),
26
- "transports" varchar(255),
27
- "is_public" boolean DEFAULT true NOT NULL,
28
- "is_verified" boolean DEFAULT false NOT NULL,
29
- "last_validated_at" timestamp,
30
- "created_at" timestamp DEFAULT now() NOT NULL,
31
- "updated_at" timestamp DEFAULT now() NOT NULL,
32
- CONSTRAINT "merchants_domain_unique" UNIQUE("domain")
33
- );
34
- --> statement-breakpoint
35
- CREATE INDEX "idx_merchants_domain" ON "merchants" USING btree ("domain");--> statement-breakpoint
36
- CREATE INDEX "idx_merchants_category" ON "merchants" USING btree ("category");--> statement-breakpoint
37
- CREATE INDEX "idx_merchants_country" ON "merchants" USING btree ("country_code");--> statement-breakpoint
38
- CREATE INDEX "idx_merchants_score" ON "merchants" USING btree ("ucp_score");--> statement-breakpoint
39
- CREATE INDEX "idx_merchants_public" ON "merchants" USING btree ("is_public");
@@ -1,309 +0,0 @@
1
- {
2
- "id": "f7439a2c-cb5b-4649-b69f-738b854831e5",
3
- "prevId": "00000000-0000-0000-0000-000000000000",
4
- "version": "7",
5
- "dialect": "postgresql",
6
- "tables": {
7
- "public.benchmark_stats": {
8
- "name": "benchmark_stats",
9
- "schema": "",
10
- "columns": {
11
- "id": {
12
- "name": "id",
13
- "type": "integer",
14
- "primaryKey": true,
15
- "notNull": true,
16
- "identity": {
17
- "type": "always",
18
- "name": "benchmark_stats_id_seq",
19
- "schema": "public",
20
- "increment": "1",
21
- "startWith": "1",
22
- "minValue": "1",
23
- "maxValue": "2147483647",
24
- "cache": "1",
25
- "cycle": false
26
- }
27
- },
28
- "score_bucket": {
29
- "name": "score_bucket",
30
- "type": "integer",
31
- "primaryKey": false,
32
- "notNull": true
33
- },
34
- "count": {
35
- "name": "count",
36
- "type": "integer",
37
- "primaryKey": false,
38
- "notNull": true,
39
- "default": 0
40
- }
41
- },
42
- "indexes": {},
43
- "foreignKeys": {},
44
- "compositePrimaryKeys": {},
45
- "uniqueConstraints": {
46
- "benchmark_stats_score_bucket_unique": {
47
- "name": "benchmark_stats_score_bucket_unique",
48
- "nullsNotDistinct": false,
49
- "columns": [
50
- "score_bucket"
51
- ]
52
- }
53
- },
54
- "policies": {},
55
- "checkConstraints": {},
56
- "isRLSEnabled": false
57
- },
58
- "public.benchmark_summary": {
59
- "name": "benchmark_summary",
60
- "schema": "",
61
- "columns": {
62
- "id": {
63
- "name": "id",
64
- "type": "integer",
65
- "primaryKey": true,
66
- "notNull": true,
67
- "default": 1
68
- },
69
- "total_validations": {
70
- "name": "total_validations",
71
- "type": "integer",
72
- "primaryKey": false,
73
- "notNull": true,
74
- "default": 0
75
- },
76
- "avg_score": {
77
- "name": "avg_score",
78
- "type": "numeric(5, 2)",
79
- "primaryKey": false,
80
- "notNull": false,
81
- "default": "'0'"
82
- },
83
- "updated_at": {
84
- "name": "updated_at",
85
- "type": "timestamp",
86
- "primaryKey": false,
87
- "notNull": true,
88
- "default": "now()"
89
- }
90
- },
91
- "indexes": {},
92
- "foreignKeys": {},
93
- "compositePrimaryKeys": {},
94
- "uniqueConstraints": {},
95
- "policies": {},
96
- "checkConstraints": {},
97
- "isRLSEnabled": false
98
- },
99
- "public.merchants": {
100
- "name": "merchants",
101
- "schema": "",
102
- "columns": {
103
- "id": {
104
- "name": "id",
105
- "type": "uuid",
106
- "primaryKey": true,
107
- "notNull": true,
108
- "default": "gen_random_uuid()"
109
- },
110
- "domain": {
111
- "name": "domain",
112
- "type": "varchar(255)",
113
- "primaryKey": false,
114
- "notNull": true
115
- },
116
- "display_name": {
117
- "name": "display_name",
118
- "type": "varchar(255)",
119
- "primaryKey": false,
120
- "notNull": true
121
- },
122
- "description": {
123
- "name": "description",
124
- "type": "text",
125
- "primaryKey": false,
126
- "notNull": false
127
- },
128
- "logo_url": {
129
- "name": "logo_url",
130
- "type": "varchar(512)",
131
- "primaryKey": false,
132
- "notNull": false
133
- },
134
- "website_url": {
135
- "name": "website_url",
136
- "type": "varchar(512)",
137
- "primaryKey": false,
138
- "notNull": false
139
- },
140
- "category": {
141
- "name": "category",
142
- "type": "varchar(100)",
143
- "primaryKey": false,
144
- "notNull": false
145
- },
146
- "country_code": {
147
- "name": "country_code",
148
- "type": "varchar(2)",
149
- "primaryKey": false,
150
- "notNull": false
151
- },
152
- "ucp_score": {
153
- "name": "ucp_score",
154
- "type": "integer",
155
- "primaryKey": false,
156
- "notNull": false
157
- },
158
- "ucp_grade": {
159
- "name": "ucp_grade",
160
- "type": "varchar(2)",
161
- "primaryKey": false,
162
- "notNull": false
163
- },
164
- "transports": {
165
- "name": "transports",
166
- "type": "varchar(255)",
167
- "primaryKey": false,
168
- "notNull": false
169
- },
170
- "is_public": {
171
- "name": "is_public",
172
- "type": "boolean",
173
- "primaryKey": false,
174
- "notNull": true,
175
- "default": true
176
- },
177
- "is_verified": {
178
- "name": "is_verified",
179
- "type": "boolean",
180
- "primaryKey": false,
181
- "notNull": true,
182
- "default": false
183
- },
184
- "last_validated_at": {
185
- "name": "last_validated_at",
186
- "type": "timestamp",
187
- "primaryKey": false,
188
- "notNull": false
189
- },
190
- "created_at": {
191
- "name": "created_at",
192
- "type": "timestamp",
193
- "primaryKey": false,
194
- "notNull": true,
195
- "default": "now()"
196
- },
197
- "updated_at": {
198
- "name": "updated_at",
199
- "type": "timestamp",
200
- "primaryKey": false,
201
- "notNull": true,
202
- "default": "now()"
203
- }
204
- },
205
- "indexes": {
206
- "idx_merchants_domain": {
207
- "name": "idx_merchants_domain",
208
- "columns": [
209
- {
210
- "expression": "domain",
211
- "isExpression": false,
212
- "asc": true,
213
- "nulls": "last"
214
- }
215
- ],
216
- "isUnique": false,
217
- "concurrently": false,
218
- "method": "btree",
219
- "with": {}
220
- },
221
- "idx_merchants_category": {
222
- "name": "idx_merchants_category",
223
- "columns": [
224
- {
225
- "expression": "category",
226
- "isExpression": false,
227
- "asc": true,
228
- "nulls": "last"
229
- }
230
- ],
231
- "isUnique": false,
232
- "concurrently": false,
233
- "method": "btree",
234
- "with": {}
235
- },
236
- "idx_merchants_country": {
237
- "name": "idx_merchants_country",
238
- "columns": [
239
- {
240
- "expression": "country_code",
241
- "isExpression": false,
242
- "asc": true,
243
- "nulls": "last"
244
- }
245
- ],
246
- "isUnique": false,
247
- "concurrently": false,
248
- "method": "btree",
249
- "with": {}
250
- },
251
- "idx_merchants_score": {
252
- "name": "idx_merchants_score",
253
- "columns": [
254
- {
255
- "expression": "ucp_score",
256
- "isExpression": false,
257
- "asc": true,
258
- "nulls": "last"
259
- }
260
- ],
261
- "isUnique": false,
262
- "concurrently": false,
263
- "method": "btree",
264
- "with": {}
265
- },
266
- "idx_merchants_public": {
267
- "name": "idx_merchants_public",
268
- "columns": [
269
- {
270
- "expression": "is_public",
271
- "isExpression": false,
272
- "asc": true,
273
- "nulls": "last"
274
- }
275
- ],
276
- "isUnique": false,
277
- "concurrently": false,
278
- "method": "btree",
279
- "with": {}
280
- }
281
- },
282
- "foreignKeys": {},
283
- "compositePrimaryKeys": {},
284
- "uniqueConstraints": {
285
- "merchants_domain_unique": {
286
- "name": "merchants_domain_unique",
287
- "nullsNotDistinct": false,
288
- "columns": [
289
- "domain"
290
- ]
291
- }
292
- },
293
- "policies": {},
294
- "checkConstraints": {},
295
- "isRLSEnabled": false
296
- }
297
- },
298
- "enums": {},
299
- "schemas": {},
300
- "sequences": {},
301
- "roles": {},
302
- "policies": {},
303
- "views": {},
304
- "_meta": {
305
- "columns": {},
306
- "schemas": {},
307
- "tables": {}
308
- }
309
- }
@@ -1,13 +0,0 @@
1
- {
2
- "version": "7",
3
- "dialect": "postgresql",
4
- "entries": [
5
- {
6
- "idx": 0,
7
- "version": "7",
8
- "when": 1768464233041,
9
- "tag": "0000_black_king_cobra",
10
- "breakpoints": true
11
- }
12
- ]
13
- }