@aexol/spectral 0.9.230 → 0.9.231
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +2 -0
- package/dist/designer/data/skills/blog-post.d.ts +3 -0
- package/dist/designer/data/skills/blog-post.d.ts.map +1 -0
- package/dist/designer/data/skills/blog-post.js +84 -0
- package/dist/designer/data/skills/blog-post.ts +87 -0
- package/dist/designer/data/skills/critique.d.ts +3 -0
- package/dist/designer/data/skills/critique.d.ts.map +1 -0
- package/dist/designer/data/skills/critique.js +109 -0
- package/dist/designer/data/skills/critique.ts +112 -0
- package/dist/designer/data/skills/dashboard.d.ts +3 -0
- package/dist/designer/data/skills/dashboard.d.ts.map +1 -0
- package/dist/designer/data/skills/dashboard.js +165 -0
- package/dist/designer/data/skills/dashboard.ts +168 -0
- package/dist/designer/data/skills/design-brief.d.ts +3 -0
- package/dist/designer/data/skills/design-brief.d.ts.map +1 -0
- package/dist/designer/data/skills/design-brief.js +141 -0
- package/dist/designer/data/skills/design-brief.ts +144 -0
- package/dist/designer/data/skills/design-skill.d.ts +10 -0
- package/dist/designer/data/skills/design-skill.d.ts.map +1 -0
- package/dist/designer/data/skills/design-skill.js +1 -0
- package/dist/designer/data/skills/design-skill.ts +9 -0
- package/dist/designer/data/skills/docs-page.d.ts +3 -0
- package/dist/designer/data/skills/docs-page.d.ts.map +1 -0
- package/dist/designer/data/skills/docs-page.js +68 -0
- package/dist/designer/data/skills/docs-page.ts +71 -0
- package/dist/designer/data/skills/index.d.ts +3 -0
- package/dist/designer/data/skills/index.d.ts.map +1 -0
- package/dist/designer/data/skills/index.js +28 -0
- package/dist/designer/data/skills/index.ts +30 -0
- package/dist/designer/data/skills/magazine-poster.d.ts +3 -0
- package/dist/designer/data/skills/magazine-poster.d.ts.map +1 -0
- package/dist/designer/data/skills/magazine-poster.js +70 -0
- package/dist/designer/data/skills/magazine-poster.ts +73 -0
- package/dist/designer/data/skills/mobile-app.d.ts +3 -0
- package/dist/designer/data/skills/mobile-app.d.ts.map +1 -0
- package/dist/designer/data/skills/mobile-app.js +229 -0
- package/dist/designer/data/skills/mobile-app.ts +232 -0
- package/dist/designer/data/skills/motion-frames.d.ts +3 -0
- package/dist/designer/data/skills/motion-frames.d.ts.map +1 -0
- package/dist/designer/data/skills/motion-frames.js +121 -0
- package/dist/designer/data/skills/motion-frames.ts +124 -0
- package/dist/designer/data/skills/pricing-page.d.ts +3 -0
- package/dist/designer/data/skills/pricing-page.d.ts.map +1 -0
- package/dist/designer/data/skills/pricing-page.js +76 -0
- package/dist/designer/data/skills/pricing-page.ts +79 -0
- package/dist/designer/data/skills/saas-landing.d.ts +3 -0
- package/dist/designer/data/skills/saas-landing.d.ts.map +1 -0
- package/dist/designer/data/skills/saas-landing.js +71 -0
- package/dist/designer/data/skills/saas-landing.ts +74 -0
- package/dist/designer/data/skills/slide-deck.d.ts +3 -0
- package/dist/designer/data/skills/slide-deck.d.ts.map +1 -0
- package/dist/designer/data/skills/slide-deck.js +213 -0
- package/dist/designer/data/skills/slide-deck.ts +216 -0
- package/dist/designer/data/skills/social-carousel.d.ts +3 -0
- package/dist/designer/data/skills/social-carousel.d.ts.map +1 -0
- package/dist/designer/data/skills/social-carousel.js +135 -0
- package/dist/designer/data/skills/social-carousel.ts +138 -0
- package/dist/designer/data/skills/web-prototype.d.ts +3 -0
- package/dist/designer/data/skills/web-prototype.d.ts.map +1 -0
- package/dist/designer/data/skills/web-prototype.js +159 -0
- package/dist/designer/data/skills/web-prototype.ts +162 -0
- package/dist/designer/skills.d.ts +4 -10
- package/dist/designer/skills.d.ts.map +1 -1
- package/dist/designer/skills.js +2 -1643
- package/dist/extensions/wizard/index.js +9 -1
- package/dist/generated/parser/ast/nodes.d.ts +115 -0
- package/dist/generated/parser/ast/nodes.d.ts.map +1 -0
- package/dist/generated/parser/ast/nodes.js +8 -0
- package/dist/generated/parser/lexer/lexer.d.ts +28 -0
- package/dist/generated/parser/lexer/lexer.d.ts.map +1 -0
- package/dist/generated/parser/{lexer.js → lexer/lexer.js} +1 -180
- package/dist/generated/parser/{lexer.d.ts → lexer/tokens.d.ts} +5 -24
- package/dist/generated/parser/lexer/tokens.d.ts.map +1 -0
- package/dist/generated/parser/lexer/tokens.js +187 -0
- package/dist/generated/parser/mod.d.ts +5 -7
- package/dist/generated/parser/mod.d.ts.map +1 -1
- package/dist/generated/parser/mod.js +2 -1
- package/dist/generated/parser/parser/cursor.d.ts +47 -0
- package/dist/generated/parser/parser/cursor.d.ts.map +1 -0
- package/dist/generated/parser/parser/cursor.js +12 -0
- package/dist/generated/parser/parser/definitions.d.ts +16 -0
- package/dist/generated/parser/parser/definitions.d.ts.map +1 -0
- package/dist/generated/parser/parser/definitions.js +353 -0
- package/dist/generated/parser/parser/expressions.d.ts +17 -0
- package/dist/generated/parser/parser/expressions.d.ts.map +1 -0
- package/dist/generated/parser/parser/expressions.js +165 -0
- package/dist/generated/parser/parser.d.ts +18 -133
- package/dist/generated/parser/parser.d.ts.map +1 -1
- package/dist/generated/parser/parser.js +9 -505
- package/dist/generated/parser/tokenizer.d.ts +1 -2
- package/dist/generated/parser/tokenizer.d.ts.map +1 -1
- package/dist/generated/parser/tokenizer.js +2 -1
- package/dist/generated/parser/validator.d.ts +1 -1
- package/dist/generated/parser/validator.d.ts.map +1 -1
- package/dist/mcp/glimpse-ui.js +9 -1
- package/dist/relay/dispatcher.d.ts +11 -104
- package/dist/relay/dispatcher.d.ts.map +1 -1
- package/dist/relay/dispatcher.js +10 -1130
- package/dist/relay/rest.d.ts +31 -0
- package/dist/relay/rest.d.ts.map +1 -0
- package/dist/relay/rest.js +85 -0
- package/dist/relay/routing.d.ts +109 -0
- package/dist/relay/routing.d.ts.map +1 -0
- package/dist/relay/routing.js +669 -0
- package/dist/relay/wizard-login.d.ts +17 -0
- package/dist/relay/wizard-login.d.ts.map +1 -0
- package/dist/relay/wizard-login.js +419 -0
- package/dist/sdk/agent-core/agent-loop.d.ts +2 -9
- package/dist/sdk/agent-core/agent-loop.d.ts.map +1 -1
- package/dist/sdk/agent-core/agent-loop.js +4 -288
- package/dist/sdk/agent-core/tool-execution.d.ts +33 -0
- package/dist/sdk/agent-core/tool-execution.d.ts.map +1 -0
- package/dist/sdk/agent-core/tool-execution.js +300 -0
- package/dist/sdk/ai/env-api-keys.js +9 -1
- package/dist/sdk/ai/providers/openai/reasoning-replay.d.ts +48 -0
- package/dist/sdk/ai/providers/openai/reasoning-replay.d.ts.map +1 -0
- package/dist/sdk/ai/providers/openai/reasoning-replay.js +209 -0
- package/dist/sdk/ai/providers/openai-completions.d.ts.map +1 -1
- package/dist/sdk/ai/providers/openai-completions.js +1 -203
- package/dist/sdk/coding-agent/core/compaction/compaction.d.ts +6 -118
- package/dist/sdk/coding-agent/core/compaction/compaction.d.ts.map +1 -1
- package/dist/sdk/coding-agent/core/compaction/compaction.js +11 -733
- package/dist/sdk/coding-agent/core/compaction/cut-points.d.ts +58 -0
- package/dist/sdk/coding-agent/core/compaction/cut-points.d.ts.map +1 -0
- package/dist/sdk/coding-agent/core/compaction/cut-points.js +191 -0
- package/dist/sdk/coding-agent/core/compaction/dedupe.d.ts +28 -0
- package/dist/sdk/coding-agent/core/compaction/dedupe.d.ts.map +1 -0
- package/dist/sdk/coding-agent/core/compaction/dedupe.js +156 -0
- package/dist/sdk/coding-agent/core/compaction/summarize.d.ts +21 -0
- package/dist/sdk/coding-agent/core/compaction/summarize.d.ts.map +1 -0
- package/dist/sdk/coding-agent/core/compaction/summarize.js +181 -0
- package/dist/sdk/coding-agent/core/compaction/tokens.d.ts +47 -0
- package/dist/sdk/coding-agent/core/compaction/tokens.d.ts.map +1 -0
- package/dist/sdk/coding-agent/core/compaction/tokens.js +224 -0
- package/dist/sdk/coding-agent/core/extensions/session-events.d.ts +157 -0
- package/dist/sdk/coding-agent/core/extensions/session-events.d.ts.map +1 -0
- package/dist/sdk/coding-agent/core/extensions/session-events.js +13 -0
- package/dist/sdk/coding-agent/core/extensions/types.d.ts +6 -365
- package/dist/sdk/coding-agent/core/extensions/types.d.ts.map +1 -1
- package/dist/sdk/coding-agent/core/extensions/types.js +2 -10
- package/dist/sdk/coding-agent/core/extensions/ui-types.d.ts +219 -0
- package/dist/sdk/coding-agent/core/extensions/ui-types.d.ts.map +1 -0
- package/dist/sdk/coding-agent/core/extensions/ui-types.js +4 -0
- package/dist/sdk/coding-agent/core/package/default-package-manager.d.ts +115 -0
- package/dist/sdk/coding-agent/core/package/default-package-manager.d.ts.map +1 -0
- package/dist/sdk/coding-agent/core/package/default-package-manager.js +1184 -0
- package/dist/sdk/coding-agent/core/package/discovery.d.ts +20 -0
- package/dist/sdk/coding-agent/core/package/discovery.d.ts.map +1 -0
- package/dist/sdk/coding-agent/core/package/discovery.js +283 -0
- package/dist/sdk/coding-agent/core/package/ignore.d.ts +29 -0
- package/dist/sdk/coding-agent/core/package/ignore.d.ts.map +1 -0
- package/dist/sdk/coding-agent/core/package/ignore.js +235 -0
- package/dist/sdk/coding-agent/core/package/types.d.ts +128 -0
- package/dist/sdk/coding-agent/core/package/types.d.ts.map +1 -0
- package/dist/sdk/coding-agent/core/package/types.js +18 -0
- package/dist/sdk/coding-agent/core/package/update-check.d.ts +43 -0
- package/dist/sdk/coding-agent/core/package/update-check.d.ts.map +1 -0
- package/dist/sdk/coding-agent/core/package/update-check.js +253 -0
- package/dist/sdk/coding-agent/core/package-manager.d.ts +2 -188
- package/dist/sdk/coding-agent/core/package-manager.d.ts.map +1 -1
- package/dist/sdk/coding-agent/core/package-manager.js +1 -1940
- package/dist/sdk/coding-agent/core/session/migrate.d.ts +18 -0
- package/dist/sdk/coding-agent/core/session/migrate.d.ts.map +1 -0
- package/dist/sdk/coding-agent/core/session/migrate.js +78 -0
- package/dist/sdk/coding-agent/core/session/types.d.ts +165 -0
- package/dist/sdk/coding-agent/core/session/types.d.ts.map +1 -0
- package/dist/sdk/coding-agent/core/session/types.js +4 -0
- package/dist/sdk/coding-agent/core/session-manager.d.ts +3 -161
- package/dist/sdk/coding-agent/core/session-manager.d.ts.map +1 -1
- package/dist/sdk/coding-agent/core/session-manager.js +4 -72
- package/package.json +2 -2
- package/dist/generated/parser/lexer.d.ts.map +0 -1
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
import type { DesignSkill } from "./design-skill.js";
|
|
2
|
+
|
|
3
|
+
export const socialCarousel: DesignSkill = {
|
|
4
|
+
name: "social-carousel",
|
|
5
|
+
scenario: "marketing",
|
|
6
|
+
description:
|
|
7
|
+
"Social media carousel. Multiple slides in a single HTML file with horizontal scroll, designed for Instagram/LinkedIn/Twitter export.",
|
|
8
|
+
outputKind: "html",
|
|
9
|
+
workflow: `# Social Carousel Skill
|
|
10
|
+
|
|
11
|
+
Produce a social media carousel as a single HTML file. 1080×1080 (Instagram) or 1200×628 (LinkedIn/Twitter), horizontal scroll, export-friendly.
|
|
12
|
+
|
|
13
|
+
## Phase 0 — Pre-flight
|
|
14
|
+
|
|
15
|
+
1. Read the design system.
|
|
16
|
+
2. Determine: platform (instagram=1080×1080, linkedin=1200×627), number of cards (3-10), topic.
|
|
17
|
+
3. Vocalize: "I'll create a [N]-card carousel for [platform] about [topic]."
|
|
18
|
+
|
|
19
|
+
## Phase 1 — Shell
|
|
20
|
+
|
|
21
|
+
Create \`carousel.html\`:
|
|
22
|
+
|
|
23
|
+
\`\`\`html
|
|
24
|
+
<!doctype html>
|
|
25
|
+
<html lang="en">
|
|
26
|
+
<head>
|
|
27
|
+
<meta charset="utf-8">
|
|
28
|
+
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
29
|
+
<title>Carousel</title>
|
|
30
|
+
<style>
|
|
31
|
+
*, *::before, *::after { box-sizing: border-box; margin: 0; }
|
|
32
|
+
|
|
33
|
+
:root {
|
|
34
|
+
--card-w: 1080px;
|
|
35
|
+
--card-h: 1080px;
|
|
36
|
+
/* Design system tokens */
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
body {
|
|
40
|
+
background: #f0f0f0;
|
|
41
|
+
display: flex;
|
|
42
|
+
justify-content: center;
|
|
43
|
+
align-items: center;
|
|
44
|
+
min-height: 100vh;
|
|
45
|
+
font-family: var(--font-sans);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
.carousel-container {
|
|
49
|
+
width: min(var(--card-w), 95vw);
|
|
50
|
+
overflow-x: auto;
|
|
51
|
+
scroll-snap-type: x mandatory;
|
|
52
|
+
display: flex;
|
|
53
|
+
gap: 16px;
|
|
54
|
+
padding: 40px 0;
|
|
55
|
+
-webkit-overflow-scrolling: touch;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
.card {
|
|
59
|
+
flex-shrink: 0;
|
|
60
|
+
width: min(var(--card-w), 90vw);
|
|
61
|
+
aspect-ratio: 1;
|
|
62
|
+
scroll-snap-align: center;
|
|
63
|
+
border-radius: 12px;
|
|
64
|
+
overflow: hidden;
|
|
65
|
+
background: var(--color-bg-primary);
|
|
66
|
+
display: flex;
|
|
67
|
+
flex-direction: column;
|
|
68
|
+
box-shadow: 0 4px 24px rgba(0,0,0,0.08);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
@media (max-width: 1100px) {
|
|
72
|
+
.card { width: 85vw; }
|
|
73
|
+
}
|
|
74
|
+
</style>
|
|
75
|
+
</head>
|
|
76
|
+
<body>
|
|
77
|
+
<div class="carousel-container">
|
|
78
|
+
<div class="card">
|
|
79
|
+
<!-- Card 1 content -->
|
|
80
|
+
</div>
|
|
81
|
+
<!-- More cards -->
|
|
82
|
+
</div>
|
|
83
|
+
</body>
|
|
84
|
+
</html>
|
|
85
|
+
\`\`\`
|
|
86
|
+
|
|
87
|
+
## Phase 2 — Card Layouts
|
|
88
|
+
|
|
89
|
+
### Title Card (first)
|
|
90
|
+
A bold, eye-catching title. Centered, large typography, accent color background or dark solid.
|
|
91
|
+
\`\`\`css
|
|
92
|
+
.card-title { flex: 1; display: flex; flex-direction: column; align-items: center; justify-content: center; padding: 80px; text-align: center; background: var(--color-accent); color: #fff; }
|
|
93
|
+
.card-title .number { font-size: 14px; opacity: 0.7; letter-spacing: 0.1em; text-transform: uppercase; margin-top: auto; }
|
|
94
|
+
.card-title h1 { font-size: 64px; font-weight: 800; line-height: 1.1; }
|
|
95
|
+
.card-title p { font-size: 24px; opacity: 0.9; margin-top: 16px; max-width: 600px; }
|
|
96
|
+
\`\`\`
|
|
97
|
+
|
|
98
|
+
### Content Card
|
|
99
|
+
\`\`\`css
|
|
100
|
+
.card-content { flex: 1; display: flex; flex-direction: column; padding: 64px; }
|
|
101
|
+
.card-content h2 { font-size: 42px; font-weight: 700; margin-bottom: 24px; }
|
|
102
|
+
.card-content p { font-size: 24px; line-height: 1.6; color: var(--color-text-secondary); }
|
|
103
|
+
.card-content .number { font-size: 14px; color: var(--color-text-secondary); margin-top: auto; }
|
|
104
|
+
\`\`\`
|
|
105
|
+
|
|
106
|
+
### Stat Card
|
|
107
|
+
\`\`\`css
|
|
108
|
+
.card-stat { flex: 1; display: flex; flex-direction: column; align-items: center; justify-content: center; padding: 80px; text-align: center; }
|
|
109
|
+
.card-stat .stat-value { font-size: 120px; font-weight: 800; color: var(--color-accent); line-height: 1; }
|
|
110
|
+
.card-stat .stat-label { font-size: 24px; color: var(--color-text-secondary); margin-top: 16px; }
|
|
111
|
+
\`\`\`
|
|
112
|
+
|
|
113
|
+
### Quote Card
|
|
114
|
+
\`\`\`css
|
|
115
|
+
.card-quote { flex: 1; display: flex; flex-direction: column; align-items: center; justify-content: center; padding: 80px; text-align: center; }
|
|
116
|
+
.card-quote blockquote { font-size: 36px; font-style: italic; line-height: 1.4; max-width: 700px; }
|
|
117
|
+
.card-quote cite { font-size: 20px; color: var(--color-text-secondary); margin-top: 24px; font-style: normal; }
|
|
118
|
+
\`\`\`
|
|
119
|
+
|
|
120
|
+
### CTA Card (last)
|
|
121
|
+
\`\`\`css
|
|
122
|
+
.card-cta { flex: 1; display: flex; flex-direction: column; align-items: center; justify-content: center; padding: 80px; text-align: center; background: var(--color-bg-primary); }
|
|
123
|
+
.card-cta h2 { font-size: 48px; font-weight: 700; margin-bottom: 16px; }
|
|
124
|
+
.card-cta p { font-size: 24px; color: var(--color-text-secondary); margin-bottom: 32px; }
|
|
125
|
+
.card-cta .cta-text { font-size: 28px; font-weight: 600; color: var(--color-accent); }
|
|
126
|
+
\`\`\`
|
|
127
|
+
|
|
128
|
+
## Phase 3 — Content Rules
|
|
129
|
+
|
|
130
|
+
- Each card has a clear visual hierarchy: big number/headline → supporting text → card number
|
|
131
|
+
- Card number shows position (e.g., "1/8") in bottom corner
|
|
132
|
+
- Title card grabs attention — use solid accent or dark bg
|
|
133
|
+
- Content cards: 30-60 words max
|
|
134
|
+
- Stat cards: one big number, one-line label
|
|
135
|
+
- Last card: always a CTA or summary with contact/handle
|
|
136
|
+
- Consistent padding within cards (64-80px)
|
|
137
|
+
- Each card works as a standalone image when screenshot`,
|
|
138
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"web-prototype.d.ts","sourceRoot":"","sources":["../../../../src/designer/data/skills/web-prototype.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD,eAAO,MAAM,YAAY,EAAE,WA+JxB,CAAC"}
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
export const webPrototype = {
|
|
2
|
+
name: "web-prototype",
|
|
3
|
+
scenario: "design",
|
|
4
|
+
description: "General-purpose web prototype. Single self-contained HTML file with modern CSS, responsive layout, and polished design tokens.",
|
|
5
|
+
outputKind: "html",
|
|
6
|
+
workflow: `# Web Prototype Skill
|
|
7
|
+
|
|
8
|
+
Produce a single, self-contained HTML file for a web page prototype. This is your workflow — follow it exactly.
|
|
9
|
+
|
|
10
|
+
## Phase 0 — Pre-flight (before writing any code)
|
|
11
|
+
|
|
12
|
+
1. Read the active DESIGN SYSTEM (provided below). Map its color tokens to CSS custom properties.
|
|
13
|
+
2. Determine: what kind of page? Landing page, marketing site, docs, SaaS, portfolio?
|
|
14
|
+
3. Vocalize the system you'll use before writing: "I'll use the [X] design system with [Y] color palette and [Z] typography."
|
|
15
|
+
|
|
16
|
+
## Phase 1 — HTML Shell
|
|
17
|
+
|
|
18
|
+
Create \`index.html\` with this skeleton:
|
|
19
|
+
|
|
20
|
+
\`\`\`html
|
|
21
|
+
<!doctype html>
|
|
22
|
+
<html lang="en">
|
|
23
|
+
<head>
|
|
24
|
+
<meta charset="utf-8">
|
|
25
|
+
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
26
|
+
<title>Page Title</title>
|
|
27
|
+
<style>
|
|
28
|
+
*, *::before, *::after { box-sizing: border-box; margin: 0; }
|
|
29
|
+
|
|
30
|
+
:root {
|
|
31
|
+
/* Map design system tokens here */
|
|
32
|
+
--color-bg: ...;
|
|
33
|
+
--color-text: ...;
|
|
34
|
+
--color-accent: ...;
|
|
35
|
+
--font-sans: ...;
|
|
36
|
+
--font-serif: ...;
|
|
37
|
+
--radius: 8px;
|
|
38
|
+
--max-width: 1080px;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
body {
|
|
42
|
+
font-family: var(--font-sans);
|
|
43
|
+
color: var(--color-text);
|
|
44
|
+
background: var(--color-bg);
|
|
45
|
+
line-height: 1.6;
|
|
46
|
+
-webkit-font-smoothing: antialiased;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
.container { max-width: var(--max-width); margin: 0 auto; padding: 0 24px; }
|
|
50
|
+
|
|
51
|
+
/* Write all component styles below */
|
|
52
|
+
</style>
|
|
53
|
+
</head>
|
|
54
|
+
<body>
|
|
55
|
+
<!-- Sections go here -->
|
|
56
|
+
</body>
|
|
57
|
+
</html>
|
|
58
|
+
\`\`\`
|
|
59
|
+
|
|
60
|
+
## Phase 2 — Compose Sections
|
|
61
|
+
|
|
62
|
+
Pick from these section patterns based on the page type. Each section is a semantic HTML block inside \`.container\`:
|
|
63
|
+
|
|
64
|
+
### Hero (always first)
|
|
65
|
+
\`\`\`html
|
|
66
|
+
<section class="hero">
|
|
67
|
+
<div class="container">
|
|
68
|
+
<h1>Bold headline that states the value</h1>
|
|
69
|
+
<p>One-sentence subtext that adds context. 20-30 words max.</p>
|
|
70
|
+
<div class="hero-actions">
|
|
71
|
+
<a href="#" class="btn-primary">Primary CTA</a>
|
|
72
|
+
<a href="#" class="btn-secondary">Secondary</a>
|
|
73
|
+
</div>
|
|
74
|
+
</div>
|
|
75
|
+
</section>
|
|
76
|
+
\`\`\`
|
|
77
|
+
|
|
78
|
+
### Feature Grid
|
|
79
|
+
\`\`\`html
|
|
80
|
+
<section class="features">
|
|
81
|
+
<div class="container">
|
|
82
|
+
<h2>Section heading</h2>
|
|
83
|
+
<div class="grid-3">
|
|
84
|
+
<div class="feature-card">
|
|
85
|
+
<div class="feature-icon">[icon]</div>
|
|
86
|
+
<h3>Feature name</h3>
|
|
87
|
+
<p>Concise description. One sentence.</p>
|
|
88
|
+
</div>
|
|
89
|
+
<!-- repeat 3-6 times -->
|
|
90
|
+
</div>
|
|
91
|
+
</div>
|
|
92
|
+
</section>
|
|
93
|
+
\`\`\`
|
|
94
|
+
|
|
95
|
+
### Social Proof
|
|
96
|
+
\`\`\`html
|
|
97
|
+
<section class="proof">
|
|
98
|
+
<div class="container">
|
|
99
|
+
<h2>Trusted by</h2>
|
|
100
|
+
<div class="logo-strip">[company logos or names]</div>
|
|
101
|
+
<blockquote>"Compelling quote from a real-sounding persona." <cite>— Name, Role at Company</cite></blockquote>
|
|
102
|
+
</div>
|
|
103
|
+
</section>
|
|
104
|
+
\`\`\`
|
|
105
|
+
|
|
106
|
+
### CTA Footer
|
|
107
|
+
\`\`\`html
|
|
108
|
+
<section class="cta">
|
|
109
|
+
<div class="container">
|
|
110
|
+
<h2>Ready to start?</h2>
|
|
111
|
+
<p>One-sentence prompt.</p>
|
|
112
|
+
<a href="#" class="btn-primary">Get Started</a>
|
|
113
|
+
</div>
|
|
114
|
+
</section>
|
|
115
|
+
\`\`\`
|
|
116
|
+
|
|
117
|
+
### Pricing (if needed)
|
|
118
|
+
\`\`\`html
|
|
119
|
+
<section class="pricing">
|
|
120
|
+
<div class="container">
|
|
121
|
+
<h2>Simple pricing</h2>
|
|
122
|
+
<div class="grid-3">
|
|
123
|
+
<div class="pricing-card">
|
|
124
|
+
<h3>Starter</h3>
|
|
125
|
+
<div class="price">$X<span>/mo</span></div>
|
|
126
|
+
<ul>
|
|
127
|
+
<li>Feature one</li>
|
|
128
|
+
<li>Feature two</li>
|
|
129
|
+
</ul>
|
|
130
|
+
<a href="#" class="btn-primary">Get Started</a>
|
|
131
|
+
</div>
|
|
132
|
+
<!-- 2-3 tiers -->
|
|
133
|
+
</div>
|
|
134
|
+
</div>
|
|
135
|
+
</section>
|
|
136
|
+
\`\`\`
|
|
137
|
+
|
|
138
|
+
## Phase 3 — Component Styles
|
|
139
|
+
|
|
140
|
+
Apply design-system tokens to each component:
|
|
141
|
+
|
|
142
|
+
- **Hero**: Full-bleed background matching --color-bg-secondary or --color-bg-primary (dark systems). h1 at 48-80px, 700-800 weight, tight line-height. Subtext at 18-20px, --color-text-secondary.
|
|
143
|
+
- **Grid**: CSS Grid, \`grid-template-columns: repeat(auto-fit, minmax(300px, 1fr))\`, 24-32px gap.
|
|
144
|
+
- **Feature Cards**: Padding 32px, background --color-bg-surface, border-radius --radius, subtle border from --color-border.
|
|
145
|
+
- **Buttons**: Display inline-flex, align-items center, padding 12px 24px, border-radius --radius, font-weight 600. Primary: --color-accent bg, white text. Secondary: transparent, accent border.
|
|
146
|
+
- **Responsive**: Mobile-first. At 768px, adjust grid columns, reduce heading sizes by 25%, stack hero content vertically.
|
|
147
|
+
|
|
148
|
+
## Phase 4 — Anti-Slop Check
|
|
149
|
+
|
|
150
|
+
Before finalizing, verify:
|
|
151
|
+
- [ ] No warm beige/cream/peach backgrounds (unless the design system specifies them)
|
|
152
|
+
- [ ] No Inter or Roboto unless the design system calls for them
|
|
153
|
+
- [ ] No gradient backgrounds unless the design system uses them
|
|
154
|
+
- [ ] No emoji as icons — use Unicode symbols or SVG
|
|
155
|
+
- [ ] No lorem ipsum — every word is meaningful
|
|
156
|
+
- [ ] No rounded-left-border accent cards (the "AI slop" signature)
|
|
157
|
+
- [ ] Colors come from the design system, not defaults
|
|
158
|
+
- [ ] Typography scale is consistent (not random sizes)`,
|
|
159
|
+
};
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
import type { DesignSkill } from "./design-skill.js";
|
|
2
|
+
|
|
3
|
+
export const webPrototype: DesignSkill = {
|
|
4
|
+
name: "web-prototype",
|
|
5
|
+
scenario: "design",
|
|
6
|
+
description:
|
|
7
|
+
"General-purpose web prototype. Single self-contained HTML file with modern CSS, responsive layout, and polished design tokens.",
|
|
8
|
+
outputKind: "html",
|
|
9
|
+
workflow: `# Web Prototype Skill
|
|
10
|
+
|
|
11
|
+
Produce a single, self-contained HTML file for a web page prototype. This is your workflow — follow it exactly.
|
|
12
|
+
|
|
13
|
+
## Phase 0 — Pre-flight (before writing any code)
|
|
14
|
+
|
|
15
|
+
1. Read the active DESIGN SYSTEM (provided below). Map its color tokens to CSS custom properties.
|
|
16
|
+
2. Determine: what kind of page? Landing page, marketing site, docs, SaaS, portfolio?
|
|
17
|
+
3. Vocalize the system you'll use before writing: "I'll use the [X] design system with [Y] color palette and [Z] typography."
|
|
18
|
+
|
|
19
|
+
## Phase 1 — HTML Shell
|
|
20
|
+
|
|
21
|
+
Create \`index.html\` with this skeleton:
|
|
22
|
+
|
|
23
|
+
\`\`\`html
|
|
24
|
+
<!doctype html>
|
|
25
|
+
<html lang="en">
|
|
26
|
+
<head>
|
|
27
|
+
<meta charset="utf-8">
|
|
28
|
+
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
29
|
+
<title>Page Title</title>
|
|
30
|
+
<style>
|
|
31
|
+
*, *::before, *::after { box-sizing: border-box; margin: 0; }
|
|
32
|
+
|
|
33
|
+
:root {
|
|
34
|
+
/* Map design system tokens here */
|
|
35
|
+
--color-bg: ...;
|
|
36
|
+
--color-text: ...;
|
|
37
|
+
--color-accent: ...;
|
|
38
|
+
--font-sans: ...;
|
|
39
|
+
--font-serif: ...;
|
|
40
|
+
--radius: 8px;
|
|
41
|
+
--max-width: 1080px;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
body {
|
|
45
|
+
font-family: var(--font-sans);
|
|
46
|
+
color: var(--color-text);
|
|
47
|
+
background: var(--color-bg);
|
|
48
|
+
line-height: 1.6;
|
|
49
|
+
-webkit-font-smoothing: antialiased;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
.container { max-width: var(--max-width); margin: 0 auto; padding: 0 24px; }
|
|
53
|
+
|
|
54
|
+
/* Write all component styles below */
|
|
55
|
+
</style>
|
|
56
|
+
</head>
|
|
57
|
+
<body>
|
|
58
|
+
<!-- Sections go here -->
|
|
59
|
+
</body>
|
|
60
|
+
</html>
|
|
61
|
+
\`\`\`
|
|
62
|
+
|
|
63
|
+
## Phase 2 — Compose Sections
|
|
64
|
+
|
|
65
|
+
Pick from these section patterns based on the page type. Each section is a semantic HTML block inside \`.container\`:
|
|
66
|
+
|
|
67
|
+
### Hero (always first)
|
|
68
|
+
\`\`\`html
|
|
69
|
+
<section class="hero">
|
|
70
|
+
<div class="container">
|
|
71
|
+
<h1>Bold headline that states the value</h1>
|
|
72
|
+
<p>One-sentence subtext that adds context. 20-30 words max.</p>
|
|
73
|
+
<div class="hero-actions">
|
|
74
|
+
<a href="#" class="btn-primary">Primary CTA</a>
|
|
75
|
+
<a href="#" class="btn-secondary">Secondary</a>
|
|
76
|
+
</div>
|
|
77
|
+
</div>
|
|
78
|
+
</section>
|
|
79
|
+
\`\`\`
|
|
80
|
+
|
|
81
|
+
### Feature Grid
|
|
82
|
+
\`\`\`html
|
|
83
|
+
<section class="features">
|
|
84
|
+
<div class="container">
|
|
85
|
+
<h2>Section heading</h2>
|
|
86
|
+
<div class="grid-3">
|
|
87
|
+
<div class="feature-card">
|
|
88
|
+
<div class="feature-icon">[icon]</div>
|
|
89
|
+
<h3>Feature name</h3>
|
|
90
|
+
<p>Concise description. One sentence.</p>
|
|
91
|
+
</div>
|
|
92
|
+
<!-- repeat 3-6 times -->
|
|
93
|
+
</div>
|
|
94
|
+
</div>
|
|
95
|
+
</section>
|
|
96
|
+
\`\`\`
|
|
97
|
+
|
|
98
|
+
### Social Proof
|
|
99
|
+
\`\`\`html
|
|
100
|
+
<section class="proof">
|
|
101
|
+
<div class="container">
|
|
102
|
+
<h2>Trusted by</h2>
|
|
103
|
+
<div class="logo-strip">[company logos or names]</div>
|
|
104
|
+
<blockquote>"Compelling quote from a real-sounding persona." <cite>— Name, Role at Company</cite></blockquote>
|
|
105
|
+
</div>
|
|
106
|
+
</section>
|
|
107
|
+
\`\`\`
|
|
108
|
+
|
|
109
|
+
### CTA Footer
|
|
110
|
+
\`\`\`html
|
|
111
|
+
<section class="cta">
|
|
112
|
+
<div class="container">
|
|
113
|
+
<h2>Ready to start?</h2>
|
|
114
|
+
<p>One-sentence prompt.</p>
|
|
115
|
+
<a href="#" class="btn-primary">Get Started</a>
|
|
116
|
+
</div>
|
|
117
|
+
</section>
|
|
118
|
+
\`\`\`
|
|
119
|
+
|
|
120
|
+
### Pricing (if needed)
|
|
121
|
+
\`\`\`html
|
|
122
|
+
<section class="pricing">
|
|
123
|
+
<div class="container">
|
|
124
|
+
<h2>Simple pricing</h2>
|
|
125
|
+
<div class="grid-3">
|
|
126
|
+
<div class="pricing-card">
|
|
127
|
+
<h3>Starter</h3>
|
|
128
|
+
<div class="price">$X<span>/mo</span></div>
|
|
129
|
+
<ul>
|
|
130
|
+
<li>Feature one</li>
|
|
131
|
+
<li>Feature two</li>
|
|
132
|
+
</ul>
|
|
133
|
+
<a href="#" class="btn-primary">Get Started</a>
|
|
134
|
+
</div>
|
|
135
|
+
<!-- 2-3 tiers -->
|
|
136
|
+
</div>
|
|
137
|
+
</div>
|
|
138
|
+
</section>
|
|
139
|
+
\`\`\`
|
|
140
|
+
|
|
141
|
+
## Phase 3 — Component Styles
|
|
142
|
+
|
|
143
|
+
Apply design-system tokens to each component:
|
|
144
|
+
|
|
145
|
+
- **Hero**: Full-bleed background matching --color-bg-secondary or --color-bg-primary (dark systems). h1 at 48-80px, 700-800 weight, tight line-height. Subtext at 18-20px, --color-text-secondary.
|
|
146
|
+
- **Grid**: CSS Grid, \`grid-template-columns: repeat(auto-fit, minmax(300px, 1fr))\`, 24-32px gap.
|
|
147
|
+
- **Feature Cards**: Padding 32px, background --color-bg-surface, border-radius --radius, subtle border from --color-border.
|
|
148
|
+
- **Buttons**: Display inline-flex, align-items center, padding 12px 24px, border-radius --radius, font-weight 600. Primary: --color-accent bg, white text. Secondary: transparent, accent border.
|
|
149
|
+
- **Responsive**: Mobile-first. At 768px, adjust grid columns, reduce heading sizes by 25%, stack hero content vertically.
|
|
150
|
+
|
|
151
|
+
## Phase 4 — Anti-Slop Check
|
|
152
|
+
|
|
153
|
+
Before finalizing, verify:
|
|
154
|
+
- [ ] No warm beige/cream/peach backgrounds (unless the design system specifies them)
|
|
155
|
+
- [ ] No Inter or Roboto unless the design system calls for them
|
|
156
|
+
- [ ] No gradient backgrounds unless the design system uses them
|
|
157
|
+
- [ ] No emoji as icons — use Unicode symbols or SVG
|
|
158
|
+
- [ ] No lorem ipsum — every word is meaningful
|
|
159
|
+
- [ ] No rounded-left-border accent cards (the "AI slop" signature)
|
|
160
|
+
- [ ] Colors come from the design system, not defaults
|
|
161
|
+
- [ ] Typography scale is consistent (not random sizes)`,
|
|
162
|
+
};
|
|
@@ -8,16 +8,10 @@
|
|
|
8
8
|
* The LLM reads the skill workflow, then uses its existing tools (write, read,
|
|
9
9
|
* bash) to produce output files in the working directory.
|
|
10
10
|
*/
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
/** What kind of artifact this produces */
|
|
16
|
-
outputKind: "html" | "html-multi" | "slides";
|
|
17
|
-
/** The full workflow guide for the LLM */
|
|
18
|
-
workflow: string;
|
|
19
|
-
}
|
|
20
|
-
export declare const DESIGN_SKILLS: DesignSkill[];
|
|
11
|
+
import { DESIGN_SKILLS } from "./data/skills/index.js";
|
|
12
|
+
import type { DesignSkill } from "./data/skills/design-skill.js";
|
|
13
|
+
export { DESIGN_SKILLS };
|
|
14
|
+
export type { DesignSkill };
|
|
21
15
|
/** Lookup a skill by name (case-insensitive). */
|
|
22
16
|
export declare function findSkill(name: string): DesignSkill | undefined;
|
|
23
17
|
/** Format a skill workflow as markdown for the LLM. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skills.d.ts","sourceRoot":"","sources":["../../src/designer/skills.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,
|
|
1
|
+
{"version":3,"file":"skills.d.ts","sourceRoot":"","sources":["../../src/designer/skills.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAEjE,OAAO,EAAE,aAAa,EAAE,CAAC;AACzB,YAAY,EAAE,WAAW,EAAE,CAAC;AAC5B,iDAAiD;AACjD,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS,CAM/D;AAED,uDAAuD;AACvD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,CAE5D;AAED,2CAA2C;AAC3C,wBAAgB,gBAAgB,IAAI,MAAM,CAYzC"}
|