@utopia-studio-design/design-system-cli 0.1.0 → 0.2.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.
Files changed (52) hide show
  1. package/README.md +12 -41
  2. package/bin/utopia-ds-mcp.mjs +55 -0
  3. package/bin/utopia-ds.mjs +233 -318
  4. package/data/docs/ai-platform-plan.md +53 -0
  5. package/data/docs/arabic-friendly.md +72 -0
  6. package/data/docs/foundations.md +154 -0
  7. package/data/docs/guide.md +37 -0
  8. package/data/docs/quick-start-ai.md +122 -0
  9. package/data/docs/shadcn-conversion.md +35 -0
  10. package/data/docs/theme-authoring.md +46 -0
  11. package/data/manifests/catalog.json +546 -0
  12. package/data/manifests/components.json +4780 -0
  13. package/data/manifests/patterns.json +12 -0
  14. package/data/manifests/templates.json +96 -0
  15. package/data/manifests/theme-barrier-intelligence.json +123 -0
  16. package/data/manifests/theme-dextrum.json +255 -0
  17. package/data/manifests/theme-utopia-default.json +163 -0
  18. package/data/manifests/themes.json +417 -0
  19. package/data/templates/saas-solution-homepage/README.md +52 -0
  20. package/data/templates/saas-solution-homepage/agents/index.html +1 -0
  21. package/data/templates/saas-solution-homepage/changelog/index.html +1 -0
  22. package/data/templates/saas-solution-homepage/contact-sales/index.html +1 -0
  23. package/data/templates/saas-solution-homepage/customers/aster-labs/index.html +1 -0
  24. package/data/templates/saas-solution-homepage/customers/index.html +1 -0
  25. package/data/templates/saas-solution-homepage/index.html +17 -0
  26. package/data/templates/saas-solution-homepage/integrations/index.html +1 -0
  27. package/data/templates/saas-solution-homepage/integrations/slack/index.html +1 -0
  28. package/data/templates/saas-solution-homepage/main.tsx +642 -0
  29. package/data/templates/saas-solution-homepage/pricing/index.html +1 -0
  30. package/data/templates/saas-solution-homepage/product/index.html +1 -0
  31. package/data/templates/saas-solution-homepage/styles.css +863 -0
  32. package/data/templates/saas-solution-homepage/template.manifest.json +36 -0
  33. package/lib/api.mjs +146 -0
  34. package/package.json +13 -20
  35. package/LICENSE +0 -21
  36. package/templates/agent-docs/examples.md +0 -33
  37. package/templates/agent-docs/index.md +0 -78
  38. package/templates/agent-docs/llms.txt +0 -33
  39. package/templates/components/badge.tsx +0 -12
  40. package/templates/components/brand-action.tsx +0 -32
  41. package/templates/components/button-group.tsx +0 -30
  42. package/templates/components/button.tsx +0 -44
  43. package/templates/components/card.tsx +0 -23
  44. package/templates/components/cta-section.tsx +0 -34
  45. package/templates/components/icon-button.tsx +0 -44
  46. package/templates/components/page-hero.tsx +0 -47
  47. package/templates/components/tooltip.tsx +0 -48
  48. package/templates/components/topbar.tsx +0 -59
  49. package/templates/lib/utils.ts +0 -6
  50. package/templates/styles/styles.css +0 -271
  51. package/templates/styles/tokens.css +0 -21
  52. package/templates/tokens.json +0 -41
@@ -0,0 +1,417 @@
1
+ {
2
+ "defaultTheme": "utopia-default",
3
+ "intent": "Themes are token-contract and visual-policy implementations. Utopia Default is the first locked theme, not the entire design system.",
4
+ "coreBoundary": {
5
+ "owns": [
6
+ "semantic token contract",
7
+ "component APIs",
8
+ "accessibility",
9
+ "Arabic-friendly baseline",
10
+ "theme extension mechanism"
11
+ ],
12
+ "doesNotOwn": [
13
+ "brand palette",
14
+ "brand typography",
15
+ "brand icon policy",
16
+ "brand voice",
17
+ "brand-specific layout philosophy"
18
+ ]
19
+ },
20
+ "translations": {
21
+ "ar": {
22
+ "intent": "الثيمات تطبيقات لعقد التوكنات والسياسة البصرية. ثيم The Utopia Studio الافتراضي هو أول ثيم مقفل، وليس نظام التصميم كله.",
23
+ "coreBoundary": {
24
+ "doesNotOwn": [
25
+ "لوحة ألوان العلامة",
26
+ "طباعة العلامة",
27
+ "سياسة أيقونات العلامة",
28
+ "صوت العلامة",
29
+ "فلسفة التخطيط الخاصة بالعلامة"
30
+ ]
31
+ }
32
+ }
33
+ },
34
+ "requiredSemanticRoles": [
35
+ "--background",
36
+ "--foreground",
37
+ "--card",
38
+ "--card-foreground",
39
+ "--primary",
40
+ "--primary-foreground",
41
+ "--secondary",
42
+ "--secondary-foreground",
43
+ "--muted",
44
+ "--muted-foreground",
45
+ "--border",
46
+ "--input",
47
+ "--ring",
48
+ "--radius",
49
+ "--radius-control",
50
+ "--radius-surface",
51
+ "--radius-chat-bubble",
52
+ "--radius-chat-composer",
53
+ "--radius-chat-token",
54
+ "--shadow-control",
55
+ "--motion-duration-press",
56
+ "--motion-duration-page",
57
+ "--motion-duration-expand",
58
+ "--motion-duration-reveal",
59
+ "--motion-duration-icon",
60
+ "--motion-ease-standard",
61
+ "--motion-ease-emphasized",
62
+ "--motion-ease-icon",
63
+ "--motion-press-scale",
64
+ "--motion-distance-page",
65
+ "--motion-distance-reveal",
66
+ "--font-sans",
67
+ "--font-display",
68
+ "--font-ui-support",
69
+ "--font-marketing-display",
70
+ "--font-arabic",
71
+ "--font-arabic-body",
72
+ "--font-arabic-display",
73
+ "--font-weight-arabic-body",
74
+ "--font-weight-arabic-display",
75
+ "--font-size-display",
76
+ "--font-size-arabic-body",
77
+ "--font-size-arabic-body-lg",
78
+ "--font-size-arabic-display",
79
+ "--line-height-arabic",
80
+ "--line-height-arabic-body",
81
+ "--line-height-arabic-display",
82
+ "--tracking-arabic",
83
+ "--tracking-arabic-display",
84
+ "--sidebar-width",
85
+ "--control-height-sm",
86
+ "--sidebar-width-collapsed",
87
+ "--sidebar-min-block-size",
88
+ "--sidebar-rail-size",
89
+ "--button-height",
90
+ "--card-padding",
91
+ "--overlay",
92
+ "--modal-surface",
93
+ "--popover-surface"
94
+ ],
95
+ "themes": [
96
+ {
97
+ "id": "utopia-default",
98
+ "name": "The Utopia Studio Default",
99
+ "shortName": "Utopia Default",
100
+ "locked": true,
101
+ "role": "default brand theme",
102
+ "description": "The default Ceramic theme for The Utopia Studio. It maps semantic roles to Special Black, White, Brick Red, Light Grey, TWK Lausanne, IBM Plex Sans Arabic, square geometry, and border-led depth.",
103
+ "bestFor": ["The Utopia Studio products", "Ceramic documentation", "brand-led editorial and operational surfaces"],
104
+ "principles": ["architectural hierarchy", "square geometry", "restrained Brick Red emphasis", "border-led elevation", "bilingual Latin and Arabic typography"],
105
+ "brandAsset": {
106
+ "kind": "wordmark",
107
+ "src": "/brand/the-utopia-studio-wordmark.avif",
108
+ "alt": "The Utopia Studio",
109
+ "usage": "The wordmark may identify The Utopia Studio branded surfaces. It is not a required core component asset."
110
+ },
111
+ "translations": {
112
+ "ar": {
113
+ "name": "ثيم The Utopia Studio الافتراضي",
114
+ "role": "ثيم العلامة الافتراضي",
115
+ "description": "الثيم الافتراضي لـ Ceramic وThe Utopia Studio. يربط الأدوار الدلالية بألوان العلامة وخطي TWK Lausanne وIBM Plex Sans Arabic والهندسة المربعة والعمق المعتمد على الحدود.",
116
+ "bestFor": ["منتجات The Utopia Studio", "توثيق Ceramic", "الأسطح التحريرية والتشغيلية المرتبطة بالعلامة"],
117
+ "principles": ["تسلسل معماري", "هندسة مربعة", "إبراز مقيد بلون Brick Red", "ارتفاع يعتمد على الحدود", "طباعة ثنائية للاتينية والعربية"],
118
+ "brandAssetUsage": "يمكن للعلامة النصية تعريف الأسطح التابعة لـ The Utopia Studio، لكنها ليست أصلا مطلوبا لمكونات الجوهر."
119
+ }
120
+ },
121
+ "policyManifest": "packages/design-system/src/manifests/theme-utopia-default.json",
122
+ "css": "packages/design-system/src/themes/utopia-default.css",
123
+ "iconSystem": "utopia-dot-bar",
124
+ "values": {
125
+ "--background": "#3C3235",
126
+ "--foreground": "#FFFFFF",
127
+ "--card": "#FFFFFF",
128
+ "--card-foreground": "#3C3235",
129
+ "--primary": "#CC5536",
130
+ "--primary-foreground": "#FFFFFF",
131
+ "--secondary": "#EEEEEE",
132
+ "--secondary-foreground": "#3C3235",
133
+ "--muted": "#635B5E",
134
+ "--muted-foreground": "#BDB7B9",
135
+ "--border": "rgba(255,255,255,0.18)",
136
+ "--input": "rgba(255,255,255,0.24)",
137
+ "--ring": "#CC5536",
138
+ "--radius": "0px",
139
+ "--radius-control": "0px",
140
+ "--radius-surface": "0px",
141
+ "--radius-chat-bubble": "0px",
142
+ "--radius-chat-composer": "0px",
143
+ "--radius-chat-token": "0px",
144
+ "--shadow-control": "none",
145
+ "--motion-duration-press": "160ms",
146
+ "--motion-duration-page": "200ms",
147
+ "--motion-duration-expand": "320ms",
148
+ "--motion-duration-reveal": "520ms",
149
+ "--motion-duration-icon": "640ms",
150
+ "--motion-ease-standard": "cubic-bezier(0.2, 0, 0, 1)",
151
+ "--motion-ease-emphasized": "cubic-bezier(0.16, 1, 0.3, 1)",
152
+ "--motion-ease-icon": "cubic-bezier(0.16, 1, 0.3, 1)",
153
+ "--motion-press-scale": "0.97",
154
+ "--motion-distance-page": "8px",
155
+ "--motion-distance-reveal": "8px",
156
+ "--font-sans": "TWK Lausanne",
157
+ "--font-display": "TWK Lausanne",
158
+ "--font-ui-support": "TWK Lausanne",
159
+ "--font-marketing-display": "TWK Lausanne",
160
+ "--font-arabic": "IBM Plex Sans Arabic",
161
+ "--font-arabic-body": "IBM Plex Sans Arabic",
162
+ "--font-arabic-display": "IBM Plex Sans Arabic",
163
+ "--font-weight-arabic-body": "400",
164
+ "--font-weight-arabic-display": "700",
165
+ "--font-size-display": "clamp(44px, 8vw, 96px)",
166
+ "--font-size-arabic-body": "16px",
167
+ "--font-size-arabic-body-lg": "19px",
168
+ "--font-size-arabic-display": "clamp(42px, 7.6vw, 91px)",
169
+ "--line-height-arabic": "1.75",
170
+ "--line-height-arabic-body": "1.75",
171
+ "--line-height-arabic-display": "1.16",
172
+ "--tracking-arabic": "0",
173
+ "--tracking-arabic-display": "0",
174
+ "--sidebar-width": "17rem",
175
+ "--control-height-sm": "32px",
176
+ "--sidebar-width-collapsed": "4rem",
177
+ "--sidebar-min-block-size": "30rem",
178
+ "--sidebar-rail-size": "8px",
179
+ "--overlay": "rgb(60 50 53 / 86%)",
180
+ "--modal-surface": "Special Black",
181
+ "--popover-surface": "Special Black"
182
+ }
183
+ },
184
+ {
185
+ "id": "dextrum",
186
+ "name": "Dextrum",
187
+ "locked": false,
188
+ "role": "brand theme",
189
+ "description": "Dark Blue, Ocean Blue, Charcoal Blue, Timid White. Manrope drives product UI and default headings; Clash Grotesk is marketing-only.",
190
+ "bestFor": ["Dextrum product UI", "technical sales surfaces", "data-heavy operational workflows"],
191
+ "principles": ["calm technical hierarchy", "blue-led product surfaces", "Manrope product typography", "Lucide icon system"],
192
+ "brandAsset": {
193
+ "kind": "logo",
194
+ "src": "/brand/dextrum-logo.svg",
195
+ "alt": "Dextrum",
196
+ "usage": "Use only on Dextrum-branded surfaces."
197
+ },
198
+ "translations": {
199
+ "ar": {
200
+ "name": "Dextrum",
201
+ "role": "ثيم علامة",
202
+ "description": "ثيم تقني بأزرق داكن وأزرق محيطي وأبيض هادئ. يستخدم Manrope لواجهة المنتج وClash Grotesk للتسويق فقط.",
203
+ "bestFor": ["واجهات منتج Dextrum", "أسطح المبيعات التقنية", "سير العمل التشغيلي كثيف البيانات"],
204
+ "principles": ["تسلسل تقني هادئ", "أسطح منتج يقودها الأزرق", "طباعة منتج بخط Manrope", "نظام أيقونات Lucide"],
205
+ "brandAssetUsage": "يستخدم الشعار فقط على الأسطح التابعة لعلامة Dextrum."
206
+ }
207
+ },
208
+ "policyManifest": "packages/design-system/src/manifests/theme-dextrum.json",
209
+ "css": "packages/design-system/src/themes/dextrum.css",
210
+ "iconSystem": "lucide",
211
+ "values": {
212
+ "--background": "#192B39",
213
+ "--foreground": "#EAEAEA",
214
+ "--card": "#2F3F4C",
215
+ "--card-foreground": "#EAEAEA",
216
+ "--primary": "#3E8ECC",
217
+ "--primary-foreground": "#EAEAEA",
218
+ "--secondary": "#2F3F4C",
219
+ "--secondary-foreground": "#EAEAEA",
220
+ "--muted": "#243746",
221
+ "--muted-foreground": "#9BA6AE",
222
+ "--border": "rgba(234,234,234,0.14)",
223
+ "--input": "rgba(234,234,234,0.20)",
224
+ "--ring": "#3E8ECC",
225
+ "--radius": "6px",
226
+ "--radius-control": "6px",
227
+ "--radius-surface": "8px",
228
+ "--radius-chat-bubble": "18px",
229
+ "--radius-chat-composer": "24px",
230
+ "--radius-chat-token": "14px",
231
+ "--shadow-control": "none",
232
+ "--motion-duration-press": "160ms",
233
+ "--motion-duration-page": "200ms",
234
+ "--motion-duration-expand": "320ms",
235
+ "--motion-duration-reveal": "520ms",
236
+ "--motion-duration-icon": "640ms",
237
+ "--motion-ease-standard": "cubic-bezier(0.2, 0, 0, 1)",
238
+ "--motion-ease-emphasized": "cubic-bezier(0.16, 1, 0.3, 1)",
239
+ "--motion-ease-icon": "cubic-bezier(0.16, 1, 0.3, 1)",
240
+ "--motion-press-scale": "0.97",
241
+ "--motion-distance-page": "8px",
242
+ "--motion-distance-reveal": "8px",
243
+ "--font-sans": "Manrope",
244
+ "--font-display": "Manrope",
245
+ "--font-ui-support": "Satoshi",
246
+ "--font-marketing-display": "Clash Grotesk",
247
+ "--font-arabic": "IBM Plex Sans Arabic",
248
+ "--font-arabic-body": "IBM Plex Sans Arabic",
249
+ "--font-arabic-display": "IBM Plex Sans Arabic",
250
+ "--font-weight-arabic-body": "400",
251
+ "--font-weight-arabic-display": "700",
252
+ "--font-size-display": "clamp(2.75rem, 7vw, 5.5rem)",
253
+ "--font-size-arabic-body": "16px",
254
+ "--font-size-arabic-body-lg": "18px",
255
+ "--font-size-arabic-display": "clamp(2.625rem, 6.6vw, 5.25rem)",
256
+ "--line-height-arabic": "1.75",
257
+ "--line-height-arabic-body": "1.75",
258
+ "--line-height-arabic-display": "1.14",
259
+ "--tracking-arabic": "0",
260
+ "--tracking-arabic-display": "0",
261
+ "--sidebar-width": "17rem",
262
+ "--control-height-sm": "2rem",
263
+ "--sidebar-width-collapsed": "4rem",
264
+ "--sidebar-min-block-size": "30rem",
265
+ "--sidebar-rail-size": "8px",
266
+ "--button-height": "40px",
267
+ "--card-padding": "24px",
268
+ "--overlay": "color-mix(in srgb, #192B39 84%, transparent)",
269
+ "--modal-surface": "#2F3F4C",
270
+ "--popover-surface": "#2F3F4C"
271
+ }
272
+ },
273
+ {
274
+ "id": "barrier-intelligence",
275
+ "name": "Barrier Intelligence",
276
+ "locked": false,
277
+ "role": "brand theme",
278
+ "description": "Near-black surfaces with warm gold accents, ink hierarchy, and Hanken Grotesk for product UI. Marketing typography remains theme-scoped only.",
279
+ "bestFor": ["Barrier Intelligence product UI", "risk and intelligence workflows", "high-contrast analytical products"],
280
+ "principles": ["near-black hierarchy", "warm gold emphasis", "dense analytical surfaces", "Lucide icon system"],
281
+ "translations": {
282
+ "ar": {
283
+ "name": "Barrier Intelligence",
284
+ "role": "ثيم علامة",
285
+ "description": "ثيم بأسطح شبه سوداء ولمسات ذهبية دافئة وتسلسل حبر واضح وخط Hanken Grotesk لواجهة المنتج.",
286
+ "bestFor": ["واجهات Barrier Intelligence", "سير عمل المخاطر والاستخبارات", "المنتجات التحليلية عالية التباين"],
287
+ "principles": ["تسلسل شبه أسود", "إبراز ذهبي دافئ", "أسطح تحليلية كثيفة", "نظام أيقونات Lucide"],
288
+ "brandAssetUsage": "تبقى أصول العلامة خارج شريط هيكل Ceramic."
289
+ }
290
+ },
291
+ "policyManifest": "packages/design-system/src/manifests/theme-barrier-intelligence.json",
292
+ "css": "packages/design-system/src/themes/barrier-intelligence.css",
293
+ "iconSystem": "lucide",
294
+ "values": {
295
+ "--background": "#000000",
296
+ "--foreground": "#F5F5F2",
297
+ "--card": "#0E0E0E",
298
+ "--card-foreground": "#F5F5F2",
299
+ "--primary": "#A6824C",
300
+ "--primary-foreground": "#1A1208",
301
+ "--secondary": "#141414",
302
+ "--secondary-foreground": "#F5F5F2",
303
+ "--muted": "#0A0A0A",
304
+ "--muted-foreground": "#9A9893",
305
+ "--border": "color-mix(in srgb, #1C1C1C 82%, transparent)",
306
+ "--input": "color-mix(in srgb, #1C1C1C 70%, transparent)",
307
+ "--ring": "#A6824C",
308
+ "--radius": "12px",
309
+ "--radius-control": "6px",
310
+ "--radius-surface": "14px",
311
+ "--radius-chat-bubble": "18px",
312
+ "--radius-chat-composer": "24px",
313
+ "--radius-chat-token": "14px",
314
+ "--shadow-control": "none",
315
+ "--motion-duration-press": "160ms",
316
+ "--motion-duration-page": "200ms",
317
+ "--motion-duration-expand": "320ms",
318
+ "--motion-duration-reveal": "520ms",
319
+ "--motion-duration-icon": "640ms",
320
+ "--motion-ease-standard": "cubic-bezier(0.2, 0, 0, 1)",
321
+ "--motion-ease-emphasized": "cubic-bezier(0.16, 1, 0.3, 1)",
322
+ "--motion-ease-icon": "cubic-bezier(0.16, 1, 0.3, 1)",
323
+ "--motion-press-scale": "0.97",
324
+ "--motion-distance-page": "8px",
325
+ "--motion-distance-reveal": "8px",
326
+ "--font-sans": "Hanken Grotesk",
327
+ "--font-display": "Hanken Grotesk",
328
+ "--font-ui-support": "Hanken Grotesk",
329
+ "--font-marketing-display": "Hanken Grotesk",
330
+ "--font-arabic": "IBM Plex Sans Arabic",
331
+ "--font-arabic-body": "IBM Plex Sans Arabic",
332
+ "--font-arabic-display": "IBM Plex Sans Arabic",
333
+ "--font-weight-arabic-body": "400",
334
+ "--font-weight-arabic-display": "700",
335
+ "--font-size-display": "clamp(2.875rem, 7.6vw, 5.75rem)",
336
+ "--font-size-arabic-body": "16px",
337
+ "--font-size-arabic-body-lg": "18px",
338
+ "--font-size-arabic-display": "clamp(2.75rem, 7.2vw, 5.5rem)",
339
+ "--line-height-arabic": "1.75",
340
+ "--line-height-arabic-body": "1.75",
341
+ "--line-height-arabic-display": "1.14",
342
+ "--tracking-arabic": "0",
343
+ "--tracking-arabic-display": "0",
344
+ "--sidebar-width": "17rem",
345
+ "--control-height-sm": "2rem",
346
+ "--sidebar-width-collapsed": "4rem",
347
+ "--sidebar-min-block-size": "30rem",
348
+ "--sidebar-rail-size": "8px",
349
+ "--button-height": "40px",
350
+ "--card-padding": "24px",
351
+ "--overlay": "color-mix(in srgb, #000000 86%, transparent)",
352
+ "--modal-surface": "#141414",
353
+ "--popover-surface": "#141414"
354
+ }
355
+ }
356
+ ],
357
+ "plannedThemeSlots": [
358
+ {
359
+ "id": "venture",
360
+ "name": "Venture Proof",
361
+ "status": "planned",
362
+ "purpose": "Portfolio and company proof surfaces.",
363
+ "audience": ["venture studios", "portfolios", "company profiles"],
364
+ "visualDirection": "Editorial proof hierarchy with strong media, concise evidence, and calm navigation.",
365
+ "semanticExtensions": ["--proof-accent", "--proof-media-surface", "--proof-metric-foreground"],
366
+ "requiredValidation": ["case-study density", "mixed media ratios", "Arabic company profiles", "LTR and RTL carousels"],
367
+ "translations": { "ar": { "name": "إثبات المشاريع", "purpose": "أسطح للمحافظ وإثبات الشركات.", "audience": ["استوديوهات المشاريع", "المحافظ", "ملفات الشركات"], "visualDirection": "تسلسل تحريري للأدلة مع وسائط قوية وأدلة مختصرة وتنقل هادئ.", "requiredValidation": ["كثافة دراسات الحالة", "نسب الوسائط المختلطة", "ملفات شركات عربية", "عارضات شرائح LTR وRTL"] } }
368
+ },
369
+ {
370
+ "id": "operator",
371
+ "name": "Operator Console",
372
+ "status": "planned",
373
+ "purpose": "Dense product and internal tool interfaces.",
374
+ "audience": ["operators", "internal tools", "admin products"],
375
+ "visualDirection": "High-density operational hierarchy with compact controls and clear exception states.",
376
+ "semanticExtensions": ["--operator-density", "--operator-row-height", "--operator-exception"],
377
+ "requiredValidation": ["dense tables", "keyboard navigation", "Arabic filters", "RTL side navigation"],
378
+ "translations": { "ar": { "name": "وحدة المشغّل", "purpose": "واجهات كثيفة للمنتجات والأدوات الداخلية.", "audience": ["المشغّلون", "الأدوات الداخلية", "منتجات الإدارة"], "visualDirection": "تسلسل تشغيلي عالي الكثافة مع عناصر تحكم مختصرة وحالات استثناء واضحة.", "requiredValidation": ["الجداول الكثيفة", "التنقل بلوحة المفاتيح", "مرشحات عربية", "تنقل جانبي RTL"] } }
379
+ },
380
+ {
381
+ "id": "editorial",
382
+ "name": "Editorial Resource",
383
+ "status": "planned",
384
+ "purpose": "Resource articles and technical guides.",
385
+ "audience": ["documentation teams", "research publishers", "technical resources"],
386
+ "visualDirection": "Reading-first typography with restrained navigation, annotations, code, and media.",
387
+ "semanticExtensions": ["--editorial-measure", "--editorial-note", "--editorial-code-surface"],
388
+ "requiredValidation": ["long-form reading", "code overflow", "Arabic article rhythm", "bilingual tables of contents"],
389
+ "translations": { "ar": { "name": "المورد التحريري", "purpose": "مقالات الموارد والأدلة التقنية.", "audience": ["فرق التوثيق", "ناشرو الأبحاث", "الموارد التقنية"], "visualDirection": "طباعة تضع القراءة أولا مع تنقل هادئ وملاحظات وكود ووسائط.", "requiredValidation": ["قراءة المحتوى الطويل", "تجاوز الكود", "إيقاع المقال العربي", "جداول محتويات ثنائية اللغة"] } }
390
+ },
391
+ {
392
+ "id": "application",
393
+ "name": "Application Flow",
394
+ "status": "planned",
395
+ "purpose": "Forms, eligibility, conversion, and onboarding flows.",
396
+ "audience": ["applications", "onboarding", "eligibility and conversion flows"],
397
+ "visualDirection": "Trustworthy step-by-step interaction with strong progress, validation, and recovery states.",
398
+ "semanticExtensions": ["--flow-progress", "--flow-validation", "--flow-review-surface"],
399
+ "requiredValidation": ["multi-step recovery", "localized validation", "Arabic forms", "RTL progress order"],
400
+ "translations": { "ar": { "name": "مسار التقديم", "purpose": "النماذج والأهلية والتحويل ومسارات الانضمام.", "audience": ["طلبات التقديم", "الانضمام", "مسارات الأهلية والتحويل"], "visualDirection": "تفاعل موثوق خطوة بخطوة مع حالات واضحة للتقدم والتحقق والاستعادة.", "requiredValidation": ["استعادة المسارات متعددة الخطوات", "تحقق موضّع", "نماذج عربية", "ترتيب تقدم RTL"] } }
401
+ }
402
+ ],
403
+ "arabicFriendly": {
404
+ "required": true,
405
+ "rules": [
406
+ "Support dir=\"ltr\" and dir=\"rtl\".",
407
+ "Use logical CSS properties.",
408
+ "Use start/end naming, not left/right APIs.",
409
+ "Validate mixed English/Arabic labels.",
410
+ "Use Arabic body and display typography tokens.",
411
+ "Set Arabic display size from the Latin display scale at approximately 95%, with Arabic line-height preserved for readability.",
412
+ "Do not map Latin uppercase display styling to Arabic.",
413
+ "Mirror directional arrows, chevrons, navigation, carousel, progress, and sidebar affordances intentionally.",
414
+ "Do not invent Arabic copy."
415
+ ]
416
+ }
417
+ }
@@ -0,0 +1,52 @@
1
+ # SaaS Solution Website
2
+
3
+ A production-oriented Ceramic template for a complete product-led SaaS website. It uses Linear only as an information-architecture reference: compact value proposition, early product proof, progressive feature depth, dedicated proof and adoption surfaces, and consistent navigation across the site. No Linear copy, brand primitives, or assets are included.
4
+
5
+ ## Run
6
+
7
+ ```bash
8
+ npm run dev -- --host 127.0.0.1 --port 3017
9
+ ```
10
+
11
+ Open `/templates/saas-solution-homepage/index.html?seed=1974341818#agents`.
12
+
13
+ ## Page family
14
+
15
+ - `/index.html` — homepage narrative
16
+ - `/product/` — product overview
17
+ - `/agents/` — agent and automation detail
18
+ - `/integrations/` — integration directory
19
+ - `/integrations/slack/` — integration detail
20
+ - `/customers/` — customer story index
21
+ - `/customers/aster-labs/` — customer case study
22
+ - `/pricing/` — pricing, comparison, and FAQ
23
+ - `/changelog/` — product updates
24
+ - `/contact-sales/` — sales form and success state
25
+
26
+ Every page preserves the `seed` query parameter through internal navigation.
27
+
28
+ ## Package import
29
+
30
+ ```tsx
31
+ import {
32
+ Badge,
33
+ Button,
34
+ Card,
35
+ CardContent,
36
+ CardHeader,
37
+ CardTitle,
38
+ TopNav,
39
+ TopNavItem,
40
+ } from '@utopia-studio-design/design-system'
41
+ import '@utopia-studio-design/design-system/core.css'
42
+ import '@utopia-studio-design/design-system/themes/utopia-default.css'
43
+ ```
44
+
45
+ Generate a themed copy with `npx utopia-ds template template-saas-solution-homepage --theme dextrum --copy ./saas-website`. The CLI rewrites the static theme import, document metadata, runtime theme constant, and `.ceramic/config.json` together. The template consumes semantic roles only. It uses logical CSS properties, mirrors directional icons in RTL, supports mixed Arabic and English data, and reads the `seed` query parameter deterministically.
46
+
47
+ ## Adaptation boundaries
48
+
49
+ - Replace seeded names, metrics, pricing, and claims before production.
50
+ - Keep the section sequence when the product story depends on workflow depth; remove a section only when the buying criterion is genuinely absent.
51
+ - Replace the demo interface with reviewed product UI while preserving accessible labels and keyboard behavior.
52
+ - Extend semantic tokens in the active theme instead of adding brand literals to reusable components.
@@ -0,0 +1 @@
1
+ <!doctype html><html lang="en" dir="ltr" data-theme="utopia-default" data-color-mode="dark"><head><meta charset="UTF-8" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="color-scheme" content="dark light" /><style>html{color-scheme:dark}html[data-color-mode="light"]{color-scheme:light}html,body,#root{min-block-size:100%;margin:0;background:Canvas;color:CanvasText}</style><script>try{const mode=localStorage.getItem("ceramic-saas-mode");const locale=localStorage.getItem("ceramic-saas-locale");if(mode==="light")document.documentElement.dataset.colorMode="light";if(locale==="ar"){document.documentElement.lang="ar";document.documentElement.dir="rtl"}}catch{}</script><meta name="description" content="Ceramic agents and automation product page template." /><title>Agents — SaaS Solution Template</title></head><body><a class="skip-link" href="#main-content">Skip to content</a><div id="root"></div><script type="module" src="../main.tsx"></script></body></html>
@@ -0,0 +1 @@
1
+ <!doctype html><html lang="en" dir="ltr" data-theme="utopia-default" data-color-mode="dark"><head><meta charset="UTF-8" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="color-scheme" content="dark light" /><style>html{color-scheme:dark}html[data-color-mode="light"]{color-scheme:light}html,body,#root{min-block-size:100%;margin:0;background:Canvas;color:CanvasText}</style><script>try{const mode=localStorage.getItem("ceramic-saas-mode");const locale=localStorage.getItem("ceramic-saas-locale");if(mode==="light")document.documentElement.dataset.colorMode="light";if(locale==="ar"){document.documentElement.lang="ar";document.documentElement.dir="rtl"}}catch{}</script><meta name="description" content="Ceramic SaaS changelog template." /><title>Changelog — SaaS Solution Template</title></head><body><a class="skip-link" href="#main-content">Skip to content</a><div id="root"></div><script type="module" src="../main.tsx"></script></body></html>
@@ -0,0 +1 @@
1
+ <!doctype html><html lang="en" dir="ltr" data-theme="utopia-default" data-color-mode="dark"><head><meta charset="UTF-8" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="color-scheme" content="dark light" /><style>html{color-scheme:dark}html[data-color-mode="light"]{color-scheme:light}html,body,#root{min-block-size:100%;margin:0;background:Canvas;color:CanvasText}</style><script>try{const mode=localStorage.getItem("ceramic-saas-mode");const locale=localStorage.getItem("ceramic-saas-locale");if(mode==="light")document.documentElement.dataset.colorMode="light";if(locale==="ar"){document.documentElement.lang="ar";document.documentElement.dir="rtl"}}catch{}</script><meta name="description" content="Ceramic SaaS contact sales template." /><title>Contact Sales — SaaS Solution Template</title></head><body><a class="skip-link" href="#main-content">Skip to content</a><div id="root"></div><script type="module" src="../main.tsx"></script></body></html>
@@ -0,0 +1 @@
1
+ <!doctype html><html lang="en" dir="ltr" data-theme="utopia-default" data-color-mode="dark"><head><meta charset="UTF-8" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="color-scheme" content="dark light" /><style>html{color-scheme:dark}html[data-color-mode="light"]{color-scheme:light}html,body,#root{min-block-size:100%;margin:0;background:Canvas;color:CanvasText}</style><script>try{const mode=localStorage.getItem("ceramic-saas-mode");const locale=localStorage.getItem("ceramic-saas-locale");if(mode==="light")document.documentElement.dataset.colorMode="light";if(locale==="ar"){document.documentElement.lang="ar";document.documentElement.dir="rtl"}}catch{}</script><meta name="description" content="Ceramic SaaS customer case study template." /><title>Customer Story — SaaS Solution Template</title></head><body><a class="skip-link" href="#main-content">Skip to content</a><div id="root"></div><script type="module" src="../../main.tsx"></script></body></html>
@@ -0,0 +1 @@
1
+ <!doctype html><html lang="en" dir="ltr" data-theme="utopia-default" data-color-mode="dark"><head><meta charset="UTF-8" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="color-scheme" content="dark light" /><style>html{color-scheme:dark}html[data-color-mode="light"]{color-scheme:light}html,body,#root{min-block-size:100%;margin:0;background:Canvas;color:CanvasText}</style><script>try{const mode=localStorage.getItem("ceramic-saas-mode");const locale=localStorage.getItem("ceramic-saas-locale");if(mode==="light")document.documentElement.dataset.colorMode="light";if(locale==="ar"){document.documentElement.lang="ar";document.documentElement.dir="rtl"}}catch{}</script><meta name="description" content="Ceramic SaaS customer stories index template." /><title>Customers — SaaS Solution Template</title></head><body><a class="skip-link" href="#main-content">Skip to content</a><div id="root"></div><script type="module" src="../main.tsx"></script></body></html>
@@ -0,0 +1,17 @@
1
+ <!doctype html>
2
+ <html lang="en" dir="ltr" data-theme="utopia-default" data-color-mode="dark">
3
+ <head>
4
+ <meta charset="UTF-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
+ <meta name="color-scheme" content="dark light" />
7
+ <style>html{color-scheme:dark}html[data-color-mode="light"]{color-scheme:light}html,body,#root{min-block-size:100%;margin:0;background:Canvas;color:CanvasText}</style>
8
+ <script>try{const mode=localStorage.getItem('ceramic-saas-mode');const locale=localStorage.getItem('ceramic-saas-locale');if(mode==='light')document.documentElement.dataset.colorMode='light';if(locale==='ar'){document.documentElement.lang='ar';document.documentElement.dir='rtl'}}catch{}</script>
9
+ <meta name="description" content="A production-ready SaaS solution homepage template built with the Utopia Ceramic Design System." />
10
+ <title>SaaS Solution Homepage — Utopia Ceramic Template</title>
11
+ </head>
12
+ <body>
13
+ <a class="skip-link" href="#main-content">Skip to content</a>
14
+ <div id="root"></div>
15
+ <script type="module" src="./main.tsx"></script>
16
+ </body>
17
+ </html>
@@ -0,0 +1 @@
1
+ <!doctype html><html lang="en" dir="ltr" data-theme="utopia-default" data-color-mode="dark"><head><meta charset="UTF-8" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="color-scheme" content="dark light" /><style>html{color-scheme:dark}html[data-color-mode="light"]{color-scheme:light}html,body,#root{min-block-size:100%;margin:0;background:Canvas;color:CanvasText}</style><script>try{const mode=localStorage.getItem("ceramic-saas-mode");const locale=localStorage.getItem("ceramic-saas-locale");if(mode==="light")document.documentElement.dataset.colorMode="light";if(locale==="ar"){document.documentElement.lang="ar";document.documentElement.dir="rtl"}}catch{}</script><meta name="description" content="Ceramic SaaS integrations directory template." /><title>Integrations — SaaS Solution Template</title></head><body><a class="skip-link" href="#main-content">Skip to content</a><div id="root"></div><script type="module" src="../main.tsx"></script></body></html>
@@ -0,0 +1 @@
1
+ <!doctype html><html lang="en" dir="ltr" data-theme="utopia-default" data-color-mode="dark"><head><meta charset="UTF-8" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="color-scheme" content="dark light" /><style>html{color-scheme:dark}html[data-color-mode="light"]{color-scheme:light}html,body,#root{min-block-size:100%;margin:0;background:Canvas;color:CanvasText}</style><script>try{const mode=localStorage.getItem("ceramic-saas-mode");const locale=localStorage.getItem("ceramic-saas-locale");if(mode==="light")document.documentElement.dataset.colorMode="light";if(locale==="ar"){document.documentElement.lang="ar";document.documentElement.dir="rtl"}}catch{}</script><meta name="description" content="Ceramic SaaS integration detail page template." /><title>Integration Detail — SaaS Solution Template</title></head><body><a class="skip-link" href="#main-content">Skip to content</a><div id="root"></div><script type="module" src="../../main.tsx"></script></body></html>