gemini-design-mcp 2.0.0 → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/index.js +26 -10
- package/build/tools/generate-frontend.d.ts +7 -11
- package/build/tools/generate-frontend.js +18 -23
- package/package.json +1 -1
package/build/index.js
CHANGED
|
@@ -39,25 +39,41 @@ STEP 2: VIBE SELECTION (required for new designs)
|
|
|
39
39
|
|
|
40
40
|
If the project has no existing design system, you MUST:
|
|
41
41
|
|
|
42
|
-
1. Generate 5 vibe options
|
|
43
|
-
|
|
44
|
-
• 🎨 "Playful & Vibrant" - Fun, colorful, energetic
|
|
45
|
-
• 🌙 "Dark & Techy" - Dark mode, neon accents, developer aesthetic
|
|
46
|
-
• 🌿 "Calm & Minimal" - Zen, whitespace, soft tones
|
|
47
|
-
• 🚀 "Bold & Modern" - Gradients, geometric shapes, striking
|
|
42
|
+
1. Generate 5 vibe options with RICH, EVOCATIVE descriptions (2-3 sentences each).
|
|
43
|
+
Each vibe should paint a vivid picture of the aesthetic. Examples:
|
|
48
44
|
|
|
49
|
-
|
|
45
|
+
• 🏛️ "Pristine Museum" - An ultra-clean, 'white-cube' aesthetic focused on
|
|
46
|
+
vast negative space and absolute stillness. The focus is entirely on the
|
|
47
|
+
content as if it were hanging in a modern gallery. Minimal chrome,
|
|
48
|
+
maximum breathing room.
|
|
50
49
|
|
|
51
|
-
|
|
50
|
+
• ⚡ "Technical Precision" - A layout-driven vibe that emphasizes the grid.
|
|
51
|
+
It feels intentional, structured, and slightly 'under construction' in a
|
|
52
|
+
cool, architectural way. Sharp edges, monospace accents, blueprint energy.
|
|
52
53
|
|
|
53
|
-
|
|
54
|
+
• 🌊 "Fluid & Organic" - Soft curves, flowing gradients, and a sense of
|
|
55
|
+
natural movement. Like water or silk, everything feels smooth and
|
|
56
|
+
interconnected. Calming yet sophisticated.
|
|
57
|
+
|
|
58
|
+
• 🔥 "Bold & Unapologetic" - High contrast, oversized typography, and
|
|
59
|
+
dramatic color blocks. It demands attention and makes a statement.
|
|
60
|
+
Not for the faint of heart.
|
|
61
|
+
|
|
62
|
+
• 🌙 "Dark Luxe" - Deep, rich darks with subtle metallic or jewel-tone
|
|
63
|
+
accents. Premium feel, like a high-end app at night. Sophisticated
|
|
64
|
+
shadows and glowing highlights.
|
|
65
|
+
|
|
66
|
+
2. Present the 5 vibes to the user and wait for their selection
|
|
67
|
+
|
|
68
|
+
3. Only THEN call this tool with the designSystem.vibe parameter filled
|
|
69
|
+
(Gemini will choose the best font to match the vibe automatically)
|
|
54
70
|
|
|
55
71
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
56
72
|
STEP 3: CALL THIS TOOL
|
|
57
73
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
58
74
|
|
|
59
75
|
Only after completing the above steps:
|
|
60
|
-
- New project: context=null, designSystem={
|
|
76
|
+
- New project: context=null, designSystem={vibe}, techStack specified
|
|
61
77
|
- Existing project: context=<relevant files>, techStack from analysis
|
|
62
78
|
|
|
63
79
|
CAPABILITIES:
|
|
@@ -4,8 +4,7 @@ export declare const generateFrontendSchema: {
|
|
|
4
4
|
context: z.ZodNullable<z.ZodString>;
|
|
5
5
|
techStack: z.ZodOptional<z.ZodString>;
|
|
6
6
|
designSystem: z.ZodOptional<z.ZodObject<{
|
|
7
|
-
|
|
8
|
-
vibe: z.ZodOptional<z.ZodObject<{
|
|
7
|
+
vibe: z.ZodObject<{
|
|
9
8
|
name: z.ZodString;
|
|
10
9
|
description: z.ZodString;
|
|
11
10
|
keywords: z.ZodArray<z.ZodString, "many">;
|
|
@@ -17,21 +16,19 @@ export declare const generateFrontendSchema: {
|
|
|
17
16
|
name: string;
|
|
18
17
|
description: string;
|
|
19
18
|
keywords: string[];
|
|
20
|
-
}
|
|
19
|
+
}>;
|
|
21
20
|
}, "strip", z.ZodTypeAny, {
|
|
22
|
-
|
|
23
|
-
vibe?: {
|
|
21
|
+
vibe: {
|
|
24
22
|
name: string;
|
|
25
23
|
description: string;
|
|
26
24
|
keywords: string[];
|
|
27
|
-
}
|
|
25
|
+
};
|
|
28
26
|
}, {
|
|
29
|
-
|
|
30
|
-
vibe?: {
|
|
27
|
+
vibe: {
|
|
31
28
|
name: string;
|
|
32
29
|
description: string;
|
|
33
30
|
keywords: string[];
|
|
34
|
-
}
|
|
31
|
+
};
|
|
35
32
|
}>>;
|
|
36
33
|
};
|
|
37
34
|
export declare function generateFrontend(params: {
|
|
@@ -39,8 +36,7 @@ export declare function generateFrontend(params: {
|
|
|
39
36
|
context: string | null;
|
|
40
37
|
techStack?: string;
|
|
41
38
|
designSystem?: {
|
|
42
|
-
|
|
43
|
-
vibe?: {
|
|
39
|
+
vibe: {
|
|
44
40
|
name: string;
|
|
45
41
|
description: string;
|
|
46
42
|
keywords: string[];
|
|
@@ -9,37 +9,32 @@ export const generateFrontendSchema = {
|
|
|
9
9
|
techStack: z.string().optional().describe("Tech stack (e.g., 'React + Tailwind', 'Vue + CSS', 'HTML/CSS vanilla', 'Next.js + shadcn'). " +
|
|
10
10
|
"If not specified, Gemini will choose based on context."),
|
|
11
11
|
designSystem: z.object({
|
|
12
|
-
font: z.string().optional().describe("Google Font name to use as primary font"),
|
|
13
12
|
vibe: z.object({
|
|
14
|
-
name: z.string().describe("Vibe name (e.g., '
|
|
15
|
-
description: z.string().describe("
|
|
16
|
-
keywords: z.array(z.string()).describe("Style keywords (e.g., ['minimal', '
|
|
17
|
-
}).
|
|
18
|
-
}).optional().describe("Design system
|
|
19
|
-
"user selects, then pass the selection here
|
|
13
|
+
name: z.string().describe("Vibe name (e.g., 'Pristine Museum', 'Dark Luxe')"),
|
|
14
|
+
description: z.string().describe("Rich, evocative description of the mood and aesthetic (2-3 sentences)"),
|
|
15
|
+
keywords: z.array(z.string()).describe("Style keywords (e.g., ['minimal', 'whitespace', 'gallery'])"),
|
|
16
|
+
}).describe("Selected design vibe from the vibe selection step"),
|
|
17
|
+
}).optional().describe("Design system with selected vibe. The calling agent generates vibe options, " +
|
|
18
|
+
"user selects, then pass the selection here. Gemini chooses the best font automatically."),
|
|
20
19
|
};
|
|
21
20
|
export async function generateFrontend(params) {
|
|
22
21
|
const { request, context, techStack, designSystem } = params;
|
|
23
22
|
// Build design system instructions if provided
|
|
24
23
|
let designSystemInstructions = '';
|
|
25
|
-
if (designSystem?.
|
|
26
|
-
const {
|
|
27
|
-
const fontInstructions = font
|
|
28
|
-
? `- **Font**: Use "${font}" from Google Fonts as the primary font family. Import it in the <head> or via CSS.`
|
|
29
|
-
: '';
|
|
30
|
-
const vibeInstructions = vibe
|
|
31
|
-
? `- **Design Vibe** "${vibe.name}":
|
|
32
|
-
Mood: ${vibe.description}
|
|
33
|
-
Keywords: ${vibe.keywords.join(', ')}
|
|
34
|
-
|
|
35
|
-
Interpret this vibe creatively - choose colors, gradients, and visual styling that embody this atmosphere. You have freedom in the specific colors, but the overall feel must match this vibe.`
|
|
36
|
-
: '';
|
|
24
|
+
if (designSystem?.vibe) {
|
|
25
|
+
const { vibe } = designSystem;
|
|
37
26
|
designSystemInstructions = `
|
|
38
|
-
MANDATORY DESIGN SYSTEM (User Selected):
|
|
39
|
-
|
|
40
|
-
${
|
|
27
|
+
MANDATORY DESIGN SYSTEM (User Selected Vibe):
|
|
28
|
+
|
|
29
|
+
**Design Vibe: "${vibe.name}"**
|
|
30
|
+
${vibe.description}
|
|
31
|
+
Keywords: ${vibe.keywords.join(', ')}
|
|
41
32
|
|
|
42
|
-
|
|
33
|
+
Interpret this vibe creatively:
|
|
34
|
+
- Choose colors, gradients, and visual styling that embody this atmosphere
|
|
35
|
+
- Select a font from Google Fonts that perfectly matches this vibe
|
|
36
|
+
- Apply consistent visual language throughout the entire interface
|
|
37
|
+
- You have freedom in the specific implementation, but the overall feel MUST match this vibe
|
|
43
38
|
`;
|
|
44
39
|
}
|
|
45
40
|
const systemPrompt = `${GENERATE_FRONTEND_PROMPT}
|