@design-guard/core 0.3.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.
- package/dist/index.d.ts +20 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +18 -0
- package/dist/index.js.map +1 -0
- package/dist/research/business-researcher.d.ts +42 -0
- package/dist/research/business-researcher.d.ts.map +1 -0
- package/dist/research/business-researcher.js +888 -0
- package/dist/research/business-researcher.js.map +1 -0
- package/dist/research/design-synthesizer.d.ts +47 -0
- package/dist/research/design-synthesizer.d.ts.map +1 -0
- package/dist/research/design-synthesizer.js +628 -0
- package/dist/research/design-synthesizer.js.map +1 -0
- package/dist/research/research-cache.d.ts +7 -0
- package/dist/research/research-cache.d.ts.map +1 -0
- package/dist/research/research-cache.js +62 -0
- package/dist/research/research-cache.js.map +1 -0
- package/dist/research/types.d.ts +99 -0
- package/dist/research/types.d.ts.map +1 -0
- package/dist/research/types.js +6 -0
- package/dist/research/types.js.map +1 -0
- package/dist/templates/design-md.d.ts +53 -0
- package/dist/templates/design-md.d.ts.map +1 -0
- package/dist/templates/design-md.js +315 -0
- package/dist/templates/design-md.js.map +1 -0
- package/dist/templates/prompts.d.ts +32 -0
- package/dist/templates/prompts.d.ts.map +1 -0
- package/dist/templates/prompts.js +39 -0
- package/dist/templates/prompts.js.map +1 -0
- package/dist/tokens/dtcg-converter.d.ts +62 -0
- package/dist/tokens/dtcg-converter.d.ts.map +1 -0
- package/dist/tokens/dtcg-converter.js +385 -0
- package/dist/tokens/dtcg-converter.js.map +1 -0
- package/dist/utils/prompt-enhancer.d.ts +22 -0
- package/dist/utils/prompt-enhancer.d.ts.map +1 -0
- package/dist/utils/prompt-enhancer.js +104 -0
- package/dist/utils/prompt-enhancer.js.map +1 -0
- package/dist/utils/validators.d.ts +126 -0
- package/dist/utils/validators.d.ts.map +1 -0
- package/dist/utils/validators.js +110 -0
- package/dist/utils/validators.js.map +1 -0
- package/dist/validation/design-validator.d.ts +45 -0
- package/dist/validation/design-validator.d.ts.map +1 -0
- package/dist/validation/design-validator.js +396 -0
- package/dist/validation/design-validator.js.map +1 -0
- package/dist/validation/output-validator.d.ts +46 -0
- package/dist/validation/output-validator.d.ts.map +1 -0
- package/dist/validation/output-validator.js +146 -0
- package/dist/validation/output-validator.js.map +1 -0
- package/dist/validation/rules/alt-text.d.ts +8 -0
- package/dist/validation/rules/alt-text.d.ts.map +1 -0
- package/dist/validation/rules/alt-text.js +35 -0
- package/dist/validation/rules/alt-text.js.map +1 -0
- package/dist/validation/rules/business-alignment.d.ts +7 -0
- package/dist/validation/rules/business-alignment.d.ts.map +1 -0
- package/dist/validation/rules/business-alignment.js +98 -0
- package/dist/validation/rules/business-alignment.js.map +1 -0
- package/dist/validation/rules/color-adherence.d.ts +8 -0
- package/dist/validation/rules/color-adherence.d.ts.map +1 -0
- package/dist/validation/rules/color-adherence.js +92 -0
- package/dist/validation/rules/color-adherence.js.map +1 -0
- package/dist/validation/rules/empty-body.d.ts +6 -0
- package/dist/validation/rules/empty-body.d.ts.map +1 -0
- package/dist/validation/rules/empty-body.js +24 -0
- package/dist/validation/rules/empty-body.js.map +1 -0
- package/dist/validation/rules/heading-hierarchy.d.ts +8 -0
- package/dist/validation/rules/heading-hierarchy.d.ts.map +1 -0
- package/dist/validation/rules/heading-hierarchy.js +48 -0
- package/dist/validation/rules/heading-hierarchy.js.map +1 -0
- package/dist/validation/rules/index.d.ts +21 -0
- package/dist/validation/rules/index.d.ts.map +1 -0
- package/dist/validation/rules/index.js +66 -0
- package/dist/validation/rules/index.js.map +1 -0
- package/dist/validation/rules/no-centered-everything.d.ts +6 -0
- package/dist/validation/rules/no-centered-everything.d.ts.map +1 -0
- package/dist/validation/rules/no-centered-everything.js +59 -0
- package/dist/validation/rules/no-centered-everything.js.map +1 -0
- package/dist/validation/rules/no-default-fonts.d.ts +8 -0
- package/dist/validation/rules/no-default-fonts.d.ts.map +1 -0
- package/dist/validation/rules/no-default-fonts.js +111 -0
- package/dist/validation/rules/no-default-fonts.js.map +1 -0
- package/dist/validation/rules/no-div-soup.d.ts +6 -0
- package/dist/validation/rules/no-div-soup.d.ts.map +1 -0
- package/dist/validation/rules/no-div-soup.js +45 -0
- package/dist/validation/rules/no-div-soup.js.map +1 -0
- package/dist/validation/rules/no-duplicate-ctas.d.ts +6 -0
- package/dist/validation/rules/no-duplicate-ctas.d.ts.map +1 -0
- package/dist/validation/rules/no-duplicate-ctas.js +32 -0
- package/dist/validation/rules/no-duplicate-ctas.js.map +1 -0
- package/dist/validation/rules/no-generic-hero.d.ts +7 -0
- package/dist/validation/rules/no-generic-hero.d.ts.map +1 -0
- package/dist/validation/rules/no-generic-hero.js +46 -0
- package/dist/validation/rules/no-generic-hero.js.map +1 -0
- package/dist/validation/rules/no-icon-grid.d.ts +8 -0
- package/dist/validation/rules/no-icon-grid.d.ts.map +1 -0
- package/dist/validation/rules/no-icon-grid.js +43 -0
- package/dist/validation/rules/no-icon-grid.js.map +1 -0
- package/dist/validation/rules/no-lorem-ipsum.d.ts +6 -0
- package/dist/validation/rules/no-lorem-ipsum.d.ts.map +1 -0
- package/dist/validation/rules/no-lorem-ipsum.js +66 -0
- package/dist/validation/rules/no-lorem-ipsum.js.map +1 -0
- package/dist/validation/rules/no-missing-meta.d.ts +6 -0
- package/dist/validation/rules/no-missing-meta.d.ts.map +1 -0
- package/dist/validation/rules/no-missing-meta.js +49 -0
- package/dist/validation/rules/no-missing-meta.js.map +1 -0
- package/dist/validation/rules/no-missing-responsive.d.ts +6 -0
- package/dist/validation/rules/no-missing-responsive.d.ts.map +1 -0
- package/dist/validation/rules/no-missing-responsive.js +30 -0
- package/dist/validation/rules/no-missing-responsive.js.map +1 -0
- package/dist/validation/rules/no-placeholder-images.d.ts +6 -0
- package/dist/validation/rules/no-placeholder-images.d.ts.map +1 -0
- package/dist/validation/rules/no-placeholder-images.js +73 -0
- package/dist/validation/rules/no-placeholder-images.js.map +1 -0
- package/dist/validation/rules/no-saas-speak.d.ts +6 -0
- package/dist/validation/rules/no-saas-speak.d.ts.map +1 -0
- package/dist/validation/rules/no-saas-speak.js +74 -0
- package/dist/validation/rules/no-saas-speak.js.map +1 -0
- package/dist/validation/rules/no-slop-gradients.d.ts +6 -0
- package/dist/validation/rules/no-slop-gradients.d.ts.map +1 -0
- package/dist/validation/rules/no-slop-gradients.js +24 -0
- package/dist/validation/rules/no-slop-gradients.js.map +1 -0
- package/dist/validation/rules/no-uniform-spacing.d.ts +6 -0
- package/dist/validation/rules/no-uniform-spacing.d.ts.map +1 -0
- package/dist/validation/rules/no-uniform-spacing.js +64 -0
- package/dist/validation/rules/no-uniform-spacing.js.map +1 -0
- package/dist/validation/rules/types.d.ts +36 -0
- package/dist/validation/rules/types.d.ts.map +1 -0
- package/dist/validation/rules/types.js +7 -0
- package/dist/validation/rules/types.js.map +1 -0
- package/dist/validation/tailwind-parser.d.ts +36 -0
- package/dist/validation/tailwind-parser.d.ts.map +1 -0
- package/dist/validation/tailwind-parser.js +214 -0
- package/dist/validation/tailwind-parser.js.map +1 -0
- package/package.json +45 -0
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { BusinessResearchResult, SiteAnalysis } from './types.js';
|
|
2
|
+
export declare function isCacheValid(cachedAt: string, ttlDays?: number): boolean;
|
|
3
|
+
export declare function cacheResearch(companyName: string, result: BusinessResearchResult): void;
|
|
4
|
+
export declare function getCachedResearch(companyName: string): BusinessResearchResult | null;
|
|
5
|
+
export declare function cacheSiteAnalysis(url: string, analysis: SiteAnalysis): void;
|
|
6
|
+
export declare function getCachedSiteAnalysis(url: string): SiteAnalysis | null;
|
|
7
|
+
//# sourceMappingURL=research-cache.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"research-cache.d.ts","sourceRoot":"","sources":["../../src/research/research-cache.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,sBAAsB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAevE,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,SAAiB,GAAG,OAAO,CAIhF;AAED,wBAAgB,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,sBAAsB,GAAG,IAAI,CAIvF;AAED,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,sBAAsB,GAAG,IAAI,CASpF;AAED,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,GAAG,IAAI,CAK3E;AAED,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CAStE"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { mkdirSync, writeFileSync, readFileSync, existsSync } from 'node:fs';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
import { createHash } from 'node:crypto';
|
|
4
|
+
const CACHE_DIR = '.dg-research';
|
|
5
|
+
const CACHE_TTL_DAYS = 7;
|
|
6
|
+
function ensureCacheDir() {
|
|
7
|
+
const dir = join(process.cwd(), CACHE_DIR);
|
|
8
|
+
if (!existsSync(dir))
|
|
9
|
+
mkdirSync(dir, { recursive: true });
|
|
10
|
+
return dir;
|
|
11
|
+
}
|
|
12
|
+
function hashKey(key) {
|
|
13
|
+
return createHash('md5').update(key).digest('hex').slice(0, 12);
|
|
14
|
+
}
|
|
15
|
+
export function isCacheValid(cachedAt, ttlDays = CACHE_TTL_DAYS) {
|
|
16
|
+
const cached = new Date(cachedAt).getTime();
|
|
17
|
+
const now = Date.now();
|
|
18
|
+
return (now - cached) < ttlDays * 24 * 60 * 60 * 1000;
|
|
19
|
+
}
|
|
20
|
+
export function cacheResearch(companyName, result) {
|
|
21
|
+
const dir = ensureCacheDir();
|
|
22
|
+
writeFileSync(join(dir, 'latest.json'), JSON.stringify(result, null, 2) + '\n');
|
|
23
|
+
writeFileSync(join(dir, `${hashKey(companyName)}.json`), JSON.stringify(result, null, 2) + '\n');
|
|
24
|
+
}
|
|
25
|
+
export function getCachedResearch(companyName) {
|
|
26
|
+
const dir = join(process.cwd(), CACHE_DIR);
|
|
27
|
+
const file = join(dir, `${hashKey(companyName)}.json`);
|
|
28
|
+
if (!existsSync(file))
|
|
29
|
+
return null;
|
|
30
|
+
try {
|
|
31
|
+
const data = JSON.parse(readFileSync(file, 'utf-8'));
|
|
32
|
+
if (isCacheValid(data.researchedAt))
|
|
33
|
+
return data;
|
|
34
|
+
return null;
|
|
35
|
+
}
|
|
36
|
+
catch {
|
|
37
|
+
return null;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
export function cacheSiteAnalysis(url, analysis) {
|
|
41
|
+
const dir = ensureCacheDir();
|
|
42
|
+
const sitesDir = join(dir, 'sites');
|
|
43
|
+
if (!existsSync(sitesDir))
|
|
44
|
+
mkdirSync(sitesDir, { recursive: true });
|
|
45
|
+
writeFileSync(join(sitesDir, `${hashKey(url)}.json`), JSON.stringify(analysis, null, 2) + '\n');
|
|
46
|
+
}
|
|
47
|
+
export function getCachedSiteAnalysis(url) {
|
|
48
|
+
const dir = join(process.cwd(), CACHE_DIR, 'sites');
|
|
49
|
+
const file = join(dir, `${hashKey(url)}.json`);
|
|
50
|
+
if (!existsSync(file))
|
|
51
|
+
return null;
|
|
52
|
+
try {
|
|
53
|
+
const data = JSON.parse(readFileSync(file, 'utf-8'));
|
|
54
|
+
if (isCacheValid(data.fetchedAt))
|
|
55
|
+
return data;
|
|
56
|
+
return null;
|
|
57
|
+
}
|
|
58
|
+
catch {
|
|
59
|
+
return null;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=research-cache.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"research-cache.js","sourceRoot":"","sources":["../../src/research/research-cache.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared types for the Design Intelligence Agent pipeline.
|
|
3
|
+
* Used by: business-researcher, design-synthesizer, design-validator, discover command.
|
|
4
|
+
*/
|
|
5
|
+
export interface BusinessBrief {
|
|
6
|
+
companyName: string;
|
|
7
|
+
industry: string;
|
|
8
|
+
targetAudience: string;
|
|
9
|
+
aesthetic: string;
|
|
10
|
+
websiteUrl?: string;
|
|
11
|
+
competitorUrls?: string[];
|
|
12
|
+
locale?: string;
|
|
13
|
+
}
|
|
14
|
+
export interface ExtractedColor {
|
|
15
|
+
hex: string;
|
|
16
|
+
frequency: number;
|
|
17
|
+
context: 'background' | 'text' | 'accent' | 'border' | 'unknown';
|
|
18
|
+
}
|
|
19
|
+
export interface ExtractedPalette {
|
|
20
|
+
colors: ExtractedColor[];
|
|
21
|
+
dominantHex: string;
|
|
22
|
+
accentHex?: string;
|
|
23
|
+
}
|
|
24
|
+
export interface ExtractedTypography {
|
|
25
|
+
fonts: string[];
|
|
26
|
+
headingFont?: string;
|
|
27
|
+
bodyFont?: string;
|
|
28
|
+
}
|
|
29
|
+
export interface SiteAnalysis {
|
|
30
|
+
url: string;
|
|
31
|
+
palette: ExtractedPalette;
|
|
32
|
+
typography: ExtractedTypography;
|
|
33
|
+
layoutPatterns: string[];
|
|
34
|
+
contentTone: 'formal' | 'casual' | 'technical' | 'warm' | 'neutral';
|
|
35
|
+
navItems: string[];
|
|
36
|
+
ctaTexts: string[];
|
|
37
|
+
fetchedAt: string;
|
|
38
|
+
}
|
|
39
|
+
export interface CompetitorAnalysis {
|
|
40
|
+
url: string;
|
|
41
|
+
name: string;
|
|
42
|
+
palette: ExtractedPalette;
|
|
43
|
+
typography: ExtractedTypography;
|
|
44
|
+
strengths: string[];
|
|
45
|
+
commonPatterns: string[];
|
|
46
|
+
fetchedAt: string;
|
|
47
|
+
}
|
|
48
|
+
export interface AudienceInsight {
|
|
49
|
+
trustSignals: string[];
|
|
50
|
+
accessibilityNeeds: string[];
|
|
51
|
+
culturalConsiderations: string[];
|
|
52
|
+
expectations: string[];
|
|
53
|
+
}
|
|
54
|
+
export interface MarketPosition {
|
|
55
|
+
pricePoint: 'budget' | 'mid-range' | 'premium' | 'luxury';
|
|
56
|
+
reach: 'local' | 'regional' | 'national' | 'global';
|
|
57
|
+
personality: 'traditional' | 'modern' | 'innovative' | 'disruptive';
|
|
58
|
+
}
|
|
59
|
+
export interface BusinessModelContext {
|
|
60
|
+
type: 'physical-retail' | 'e-commerce' | 'saas' | 'marketplace' | 'service' | 'media' | 'nonprofit' | 'other';
|
|
61
|
+
primaryRevenue: string;
|
|
62
|
+
websitePurpose: string;
|
|
63
|
+
primaryUserGoals: string[];
|
|
64
|
+
keyFeatures: string[];
|
|
65
|
+
notFeatures: string[];
|
|
66
|
+
differentiators: string[];
|
|
67
|
+
confidence: number;
|
|
68
|
+
}
|
|
69
|
+
export interface BusinessResearchResult {
|
|
70
|
+
brief: BusinessBrief;
|
|
71
|
+
businessModel: BusinessModelContext;
|
|
72
|
+
currentSite?: SiteAnalysis;
|
|
73
|
+
competitors: CompetitorAnalysis[];
|
|
74
|
+
audienceInsights: AudienceInsight;
|
|
75
|
+
marketPosition: MarketPosition;
|
|
76
|
+
researchedAt: string;
|
|
77
|
+
confidence: number;
|
|
78
|
+
fallbacksUsed: string[];
|
|
79
|
+
}
|
|
80
|
+
export interface DesignQualityIssue {
|
|
81
|
+
section: string;
|
|
82
|
+
severity: 'error' | 'warning' | 'info';
|
|
83
|
+
message: string;
|
|
84
|
+
}
|
|
85
|
+
export interface DesignQualityScore {
|
|
86
|
+
specificity: number;
|
|
87
|
+
differentiation: number;
|
|
88
|
+
completeness: number;
|
|
89
|
+
actionability: number;
|
|
90
|
+
total: number;
|
|
91
|
+
issues: DesignQualityIssue[];
|
|
92
|
+
}
|
|
93
|
+
export interface SynthesizedDesign {
|
|
94
|
+
markdown: string;
|
|
95
|
+
tokenEstimate: number;
|
|
96
|
+
qualityScore: DesignQualityScore;
|
|
97
|
+
sources: string[];
|
|
98
|
+
}
|
|
99
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/research/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/research/types.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
export interface DesignBrief {
|
|
2
|
+
companyName: string;
|
|
3
|
+
industry: string;
|
|
4
|
+
targetAudience: string;
|
|
5
|
+
aesthetic: string;
|
|
6
|
+
primaryColor?: string;
|
|
7
|
+
secondaryColor?: string;
|
|
8
|
+
}
|
|
9
|
+
export interface IndustryPalette {
|
|
10
|
+
primary: {
|
|
11
|
+
name: string;
|
|
12
|
+
hex: string;
|
|
13
|
+
};
|
|
14
|
+
secondary: {
|
|
15
|
+
name: string;
|
|
16
|
+
hex: string;
|
|
17
|
+
};
|
|
18
|
+
accent?: {
|
|
19
|
+
name: string;
|
|
20
|
+
hex: string;
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
export declare const INDUSTRY_PALETTES: Record<string, IndustryPalette>;
|
|
24
|
+
export declare function matchIndustry(industry: string): IndustryPalette;
|
|
25
|
+
export interface AestheticModifier {
|
|
26
|
+
surface: {
|
|
27
|
+
name: string;
|
|
28
|
+
hex: string;
|
|
29
|
+
};
|
|
30
|
+
onSurface: {
|
|
31
|
+
name: string;
|
|
32
|
+
hex: string;
|
|
33
|
+
};
|
|
34
|
+
muted: {
|
|
35
|
+
name: string;
|
|
36
|
+
hex: string;
|
|
37
|
+
};
|
|
38
|
+
headingFont: string;
|
|
39
|
+
bodyFont: string;
|
|
40
|
+
monoFont: string;
|
|
41
|
+
iconStyle: string;
|
|
42
|
+
borderRadius: string;
|
|
43
|
+
shadowStyle: string;
|
|
44
|
+
}
|
|
45
|
+
export declare const AESTHETIC_MODIFIERS: Record<string, AestheticModifier>;
|
|
46
|
+
export declare function matchAesthetic(aesthetic: string): AestheticModifier;
|
|
47
|
+
export declare function generateImageryGuidelines(industry: string, audience: string): string;
|
|
48
|
+
export declare function generateDosAndDonts(industry: string, audience: string): {
|
|
49
|
+
dos: string[];
|
|
50
|
+
donts: string[];
|
|
51
|
+
};
|
|
52
|
+
export declare function generateDesignMdTemplate(brief: DesignBrief): string;
|
|
53
|
+
//# sourceMappingURL=design-md.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"design-md.d.ts","sourceRoot":"","sources":["../../src/templates/design-md.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,WAAW;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAID,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;IACvC,SAAS,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;IACzC,MAAM,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;CACxC;AAED,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAe7D,CAAC;AAEF,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,eAAe,CAmB/D;AAID,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;IACvC,SAAS,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;IACzC,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;IACrC,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAmEjE,CAAC;AAEF,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,iBAAiB,CASnE;AAID,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAiBpF;AAID,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG;IAAE,GAAG,EAAE,MAAM,EAAE,CAAC;IAAC,KAAK,EAAE,MAAM,EAAE,CAAA;CAAE,CA2E1G;AAYD,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,CA2FnE"}
|
|
@@ -0,0 +1,315 @@
|
|
|
1
|
+
export const INDUSTRY_PALETTES = {
|
|
2
|
+
retail: { primary: { name: 'Retail Red', hex: '#DC0C0C' }, secondary: { name: 'Value Gold', hex: '#F5B800' } },
|
|
3
|
+
grocery: { primary: { name: 'Fresh Green', hex: '#2D8F4E' }, secondary: { name: 'Harvest Orange', hex: '#E87B35' } },
|
|
4
|
+
discount: { primary: { name: 'Bold Red', hex: '#CC1100' }, secondary: { name: 'Savings Yellow', hex: '#FFBF00' } },
|
|
5
|
+
fintech: { primary: { name: 'Trust Navy', hex: '#0F2B5B' }, secondary: { name: 'Signal Blue', hex: '#2563EB' } },
|
|
6
|
+
saas: { primary: { name: 'Product Blue', hex: '#1E40AF' }, secondary: { name: 'Action Indigo', hex: '#6366F1' } },
|
|
7
|
+
healthcare: { primary: { name: 'Medical Teal', hex: '#0D7377' }, secondary: { name: 'Care Blue', hex: '#38BDF8' } },
|
|
8
|
+
wellness: { primary: { name: 'Sage', hex: '#6B8F5E' }, secondary: { name: 'Terracotta', hex: '#C4704B' } },
|
|
9
|
+
education: { primary: { name: 'Academic Blue', hex: '#1E3A8A' }, secondary: { name: 'Knowledge Amber', hex: '#D97706' } },
|
|
10
|
+
food: { primary: { name: 'Appetite Red', hex: '#B91C1C' }, secondary: { name: 'Warm Spice', hex: '#D97706' }, accent: { name: 'Fresh Herb', hex: '#16A34A' } },
|
|
11
|
+
fashion: { primary: { name: 'Noir', hex: '#1A1A1A' }, secondary: { name: 'Rose Gold', hex: '#C4917B' } },
|
|
12
|
+
technology: { primary: { name: 'Deep Slate', hex: '#1E293B' }, secondary: { name: 'Electric Cyan', hex: '#06B6D4' } },
|
|
13
|
+
realestate: { primary: { name: 'Estate Green', hex: '#1B4332' }, secondary: { name: 'Copper', hex: '#B87333' } },
|
|
14
|
+
legal: { primary: { name: 'Barrister Navy', hex: '#1E2D4F' }, secondary: { name: 'Parchment Gold', hex: '#B8860B' } },
|
|
15
|
+
nonprofit: { primary: { name: 'Purpose Teal', hex: '#0F766E' }, secondary: { name: 'Heart Coral', hex: '#F97066' } },
|
|
16
|
+
};
|
|
17
|
+
export function matchIndustry(industry) {
|
|
18
|
+
const lower = industry.toLowerCase();
|
|
19
|
+
for (const [key, palette] of Object.entries(INDUSTRY_PALETTES)) {
|
|
20
|
+
if (lower.includes(key))
|
|
21
|
+
return palette;
|
|
22
|
+
}
|
|
23
|
+
// Fuzzy matches
|
|
24
|
+
if (/tienda|store|shop|mercado|supermarket|supermercado|despensa/.test(lower))
|
|
25
|
+
return INDUSTRY_PALETTES.retail;
|
|
26
|
+
if (/descuento|discount|hard.?discount|barato|ahorro|budget/.test(lower))
|
|
27
|
+
return INDUSTRY_PALETTES.discount;
|
|
28
|
+
if (/banco|bank|pago|payment|dinero|money|crypto|finanza/.test(lower))
|
|
29
|
+
return INDUSTRY_PALETTES.fintech;
|
|
30
|
+
if (/salud|health|medic|clinic|hospital|doctor|pharma/.test(lower))
|
|
31
|
+
return INDUSTRY_PALETTES.healthcare;
|
|
32
|
+
if (/comida|restauran|café|coffee|bakery|panader/.test(lower))
|
|
33
|
+
return INDUSTRY_PALETTES.food;
|
|
34
|
+
if (/escuela|school|university|academia|curso|learn|educa/.test(lower))
|
|
35
|
+
return INDUSTRY_PALETTES.education;
|
|
36
|
+
if (/ropa|cloth|moda|apparel|boutique|luxury/.test(lower))
|
|
37
|
+
return INDUSTRY_PALETTES.fashion;
|
|
38
|
+
if (/software|app|plataforma|platform|tech|digital|ai|cloud/.test(lower))
|
|
39
|
+
return INDUSTRY_PALETTES.technology;
|
|
40
|
+
if (/inmobili|property|real.?estate|bienes.?raices/.test(lower))
|
|
41
|
+
return INDUSTRY_PALETTES.realestate;
|
|
42
|
+
if (/yoga|spa|bienestar|organic|natural/.test(lower))
|
|
43
|
+
return INDUSTRY_PALETTES.wellness;
|
|
44
|
+
if (/ong|fundaci|caridad|charity|social.?impact/.test(lower))
|
|
45
|
+
return INDUSTRY_PALETTES.nonprofit;
|
|
46
|
+
if (/abogad|lawyer|legal|notari|juridi/.test(lower))
|
|
47
|
+
return INDUSTRY_PALETTES.legal;
|
|
48
|
+
return INDUSTRY_PALETTES.saas; // default for unrecognized
|
|
49
|
+
}
|
|
50
|
+
export const AESTHETIC_MODIFIERS = {
|
|
51
|
+
bold: {
|
|
52
|
+
surface: { name: 'Soft White', hex: '#FAFAF8' },
|
|
53
|
+
onSurface: { name: 'Charcoal', hex: '#2D2D2D' },
|
|
54
|
+
muted: { name: 'Warm Gray', hex: '#E8E6E1' },
|
|
55
|
+
headingFont: '"Space Grotesk", sans-serif',
|
|
56
|
+
bodyFont: '"Libre Franklin", sans-serif',
|
|
57
|
+
monoFont: '"JetBrains Mono", monospace',
|
|
58
|
+
iconStyle: 'Lucide icons, 24px default, 2px stroke, solid style',
|
|
59
|
+
borderRadius: '6px buttons, 8px cards, 4px badges',
|
|
60
|
+
shadowStyle: 'Hard shadow: 4px 4px 0px On-Surface for emphasis, subtle elevation elsewhere',
|
|
61
|
+
},
|
|
62
|
+
elegant: {
|
|
63
|
+
surface: { name: 'Pearl', hex: '#F8F6F0' },
|
|
64
|
+
onSurface: { name: 'Deep Charcoal', hex: '#2B2B2B' },
|
|
65
|
+
muted: { name: 'Oyster', hex: '#E5E0D8' },
|
|
66
|
+
headingFont: '"DM Serif Display", serif',
|
|
67
|
+
bodyFont: '"Source Sans 3", sans-serif',
|
|
68
|
+
monoFont: '"IBM Plex Mono", monospace',
|
|
69
|
+
iconStyle: 'Lucide icons, 20px default, 1.5px stroke, outline style',
|
|
70
|
+
borderRadius: '4px buttons, 8px cards, 2px badges',
|
|
71
|
+
shadowStyle: 'Subtle: 0 1px 3px rgba(0,0,0,0.08), larger on hover',
|
|
72
|
+
},
|
|
73
|
+
warm: {
|
|
74
|
+
surface: { name: 'Cream', hex: '#FDF8F0' },
|
|
75
|
+
onSurface: { name: 'Espresso', hex: '#3B2F2F' },
|
|
76
|
+
muted: { name: 'Sand', hex: '#EDE5D8' },
|
|
77
|
+
headingFont: '"Outfit", sans-serif',
|
|
78
|
+
bodyFont: '"Instrument Sans", sans-serif',
|
|
79
|
+
monoFont: '"JetBrains Mono", monospace',
|
|
80
|
+
iconStyle: 'Phosphor icons, 24px default, regular weight, duotone style',
|
|
81
|
+
borderRadius: '8px buttons, 12px cards, 20px badges',
|
|
82
|
+
shadowStyle: 'Warm: 0 4px 12px rgba(59,47,47,0.06)',
|
|
83
|
+
},
|
|
84
|
+
playful: {
|
|
85
|
+
surface: { name: 'Snow', hex: '#FAFBFC' },
|
|
86
|
+
onSurface: { name: 'Ink', hex: '#1E1E2E' },
|
|
87
|
+
muted: { name: 'Lavender Mist', hex: '#EDE9FE' },
|
|
88
|
+
headingFont: '"Sora", sans-serif',
|
|
89
|
+
bodyFont: '"Nunito Sans", sans-serif',
|
|
90
|
+
monoFont: '"Fira Code", monospace',
|
|
91
|
+
iconStyle: 'Phosphor icons, 24px default, bold weight, filled style',
|
|
92
|
+
borderRadius: '12px buttons, 16px cards, 100px badges (pill)',
|
|
93
|
+
shadowStyle: 'Colorful: 0 4px 14px rgba(124,58,237,0.10)',
|
|
94
|
+
},
|
|
95
|
+
minimal: {
|
|
96
|
+
surface: { name: 'White', hex: '#FFFFFF' },
|
|
97
|
+
onSurface: { name: 'Slate', hex: '#334155' },
|
|
98
|
+
muted: { name: 'Cool Gray', hex: '#F1F5F9' },
|
|
99
|
+
headingFont: '"Instrument Serif", serif',
|
|
100
|
+
bodyFont: '"Geist", sans-serif',
|
|
101
|
+
monoFont: '"Geist Mono", monospace',
|
|
102
|
+
iconStyle: 'Lucide icons, 20px default, 1.5px stroke, outline style',
|
|
103
|
+
borderRadius: '4px buttons, 6px cards, 2px badges',
|
|
104
|
+
shadowStyle: 'None by default, 0 1px 2px rgba(0,0,0,0.05) on hover',
|
|
105
|
+
},
|
|
106
|
+
confident: {
|
|
107
|
+
surface: { name: 'Clean White', hex: '#FFFFFF' },
|
|
108
|
+
onSurface: { name: 'Dark Graphite', hex: '#333333' },
|
|
109
|
+
muted: { name: 'Soft Gray', hex: '#F4F4F5' },
|
|
110
|
+
headingFont: '"DM Sans", sans-serif',
|
|
111
|
+
bodyFont: '"Nunito Sans", sans-serif',
|
|
112
|
+
monoFont: '"JetBrains Mono", monospace',
|
|
113
|
+
iconStyle: 'Heroicons outline, 20px default, 1.5px stroke',
|
|
114
|
+
borderRadius: '6px buttons, 8px cards, 4px badges',
|
|
115
|
+
shadowStyle: '0 2px 8px rgba(0,0,0,0.06), lift on hover',
|
|
116
|
+
},
|
|
117
|
+
};
|
|
118
|
+
export function matchAesthetic(aesthetic) {
|
|
119
|
+
const lower = aesthetic.toLowerCase();
|
|
120
|
+
if (/bold|industrial|strong|powerful|edgy|striking/.test(lower))
|
|
121
|
+
return AESTHETIC_MODIFIERS.bold;
|
|
122
|
+
if (/elegant|premium|luxury|corporate|formal|sophisticated/.test(lower))
|
|
123
|
+
return AESTHETIC_MODIFIERS.elegant;
|
|
124
|
+
if (/warm|organic|natural|earthy|cozy|friendly|welcoming/.test(lower))
|
|
125
|
+
return AESTHETIC_MODIFIERS.warm;
|
|
126
|
+
if (/playful|vibrant|fun|creative|colorful|energetic|bright/.test(lower))
|
|
127
|
+
return AESTHETIC_MODIFIERS.playful;
|
|
128
|
+
if (/minimal|clean|simple|understated|quiet|sparse/.test(lower))
|
|
129
|
+
return AESTHETIC_MODIFIERS.minimal;
|
|
130
|
+
if (/confident|modern|trustworthy|reliable|accessible|smart/.test(lower))
|
|
131
|
+
return AESTHETIC_MODIFIERS.confident;
|
|
132
|
+
return AESTHETIC_MODIFIERS.confident;
|
|
133
|
+
}
|
|
134
|
+
// ─── Audience-aware imagery ─────────────────────────────────────────
|
|
135
|
+
export function generateImageryGuidelines(industry, audience) {
|
|
136
|
+
const lower = `${industry} ${audience}`.toLowerCase();
|
|
137
|
+
if (/famili|familia|hogar|casa|home|parent|madre|padre/.test(lower))
|
|
138
|
+
return 'Warm lifestyle photography of real families — shopping, cooking, sharing meals together. Natural indoor lighting, authentic (not staged). Product photography on clean backgrounds. Hero images: wide 16:9 with people, not just products.';
|
|
139
|
+
if (/developer|engineer|cto|technical|programm/.test(lower))
|
|
140
|
+
return 'Clean product screenshots, code editor views, terminal interfaces. Technical diagrams with brand colors. Abstract geometric patterns for backgrounds. Developer-friendly, no corporate stock photos.';
|
|
141
|
+
if (/executive|cfo|ceo|director|manager|enterprise/.test(lower))
|
|
142
|
+
return 'Professional editorial photography, conference rooms, skyline views. Data visualization graphics. Polished headshots. Muted tones, sharp focus, 16:9 hero, 3:4 portraits.';
|
|
143
|
+
if (/joven|young|student|millennial|gen.?z|teen|creativ/.test(lower))
|
|
144
|
+
return 'Dynamic, candid photography with saturated colors. User-generated content style. Bold compositions, unusual angles. 1:1 for social, 16:9 for hero, 9:16 for mobile stories.';
|
|
145
|
+
if (/salud|health|patient|wellness|bienestar/.test(lower))
|
|
146
|
+
return 'Calming photography with natural light and soft focus. Real people in wellness settings. Green and white dominant imagery. Avoid clinical/sterile aesthetics.';
|
|
147
|
+
if (/investor|financ|dinero|ahorro|saving/.test(lower))
|
|
148
|
+
return 'Clean data visualizations, growth charts, abstract financial patterns. Professional but approachable. Avoid cliché money/coin imagery.';
|
|
149
|
+
return 'Professional photography that reflects the target audience authentically. 16:9 hero images, 4:3 feature images, 1:1 team/product shots. Natural lighting preferred. Avoid generic stock photography.';
|
|
150
|
+
}
|
|
151
|
+
// ─── Industry-specific Do's and Don'ts ──────────────────────────────
|
|
152
|
+
export function generateDosAndDonts(industry, audience) {
|
|
153
|
+
const baseDos = [
|
|
154
|
+
'Use consistent spacing from the scale',
|
|
155
|
+
'Maintain high contrast (4.5:1 minimum) for text readability',
|
|
156
|
+
'Use Primary color sparingly — reserve for CTAs and key emphasis',
|
|
157
|
+
'Use asymmetric or non-standard layouts for at least one section',
|
|
158
|
+
'Vary card sizes and spacing to create visual rhythm',
|
|
159
|
+
'Vary section backgrounds (alternate between Surface and Muted)',
|
|
160
|
+
];
|
|
161
|
+
const baseDonts = [
|
|
162
|
+
"Don't use Inter, Poppins, or system sans-serif as the primary font",
|
|
163
|
+
"Don't use purple-to-blue gradients anywhere",
|
|
164
|
+
"Don't use uniform border-radius (>12px) on all elements",
|
|
165
|
+
"Don't use standard three-column icon grids as the second page section",
|
|
166
|
+
"Don't use generic stock illustrations (3D blobs, abstract shapes)",
|
|
167
|
+
"Don't center-align body text longer than 2 lines",
|
|
168
|
+
];
|
|
169
|
+
const lower = `${industry} ${audience}`.toLowerCase();
|
|
170
|
+
const extraDos = [];
|
|
171
|
+
const extraDonts = [];
|
|
172
|
+
// Retail / discount specific
|
|
173
|
+
if (/retail|tienda|store|shop|discount|descuento|supermercado|grocery|despensa/.test(lower)) {
|
|
174
|
+
extraDos.push('Show prices prominently in every product display');
|
|
175
|
+
extraDos.push('Use real product photography, never illustrations for products');
|
|
176
|
+
extraDos.push('Show concrete savings amounts (pesos, not percentages)');
|
|
177
|
+
extraDonts.push("Don't make it look cheap — maintain a confident, trustworthy tone throughout");
|
|
178
|
+
extraDonts.push("Don't use dark backgrounds for main content areas");
|
|
179
|
+
extraDonts.push("Don't hide pricing behind clicks — visibility builds trust");
|
|
180
|
+
}
|
|
181
|
+
// Fintech / financial
|
|
182
|
+
if (/fintech|bank|financ|payment|pago|crypto/.test(lower)) {
|
|
183
|
+
extraDos.push('Use data visualizations and charts to show growth/savings');
|
|
184
|
+
extraDos.push('Include security trust signals (badges, certifications)');
|
|
185
|
+
extraDonts.push("Don't use playful or casual language for financial data");
|
|
186
|
+
extraDonts.push("Don't use red for positive financial metrics (red = loss in finance)");
|
|
187
|
+
}
|
|
188
|
+
// SaaS / technology (exclude retail/grocery matches)
|
|
189
|
+
if (/saas|software|platform|app\b|cloud|ai\b/.test(lower) && !/retail|tienda|store|grocery|supermercado/.test(lower)) {
|
|
190
|
+
extraDos.push('Include code examples or API references where relevant');
|
|
191
|
+
extraDos.push('Show product screenshots with realistic data, not lorem ipsum');
|
|
192
|
+
extraDonts.push("Don't use marketing jargon without substance ('revolutionize', 'seamless')");
|
|
193
|
+
extraDonts.push("Don't show empty-state UIs in marketing screenshots");
|
|
194
|
+
}
|
|
195
|
+
// Mexican / Latin American market
|
|
196
|
+
if (/mexican|mexico|méxico|latin|familia|barrio/.test(lower)) {
|
|
197
|
+
extraDos.push('Use Spanish-language copy that feels natural, not translated');
|
|
198
|
+
extraDos.push('Reflect local culture authentically — avoid stereotypes');
|
|
199
|
+
extraDonts.push("Don't use American/European stock photography for Mexican audiences");
|
|
200
|
+
extraDonts.push("Don't use English text in customer-facing UI elements");
|
|
201
|
+
}
|
|
202
|
+
// Healthcare / wellness
|
|
203
|
+
if (/health|salud|wellness|bienestar|medic|clinic/.test(lower)) {
|
|
204
|
+
extraDos.push('Use calming color tones and generous whitespace');
|
|
205
|
+
extraDos.push('Ensure WCAG AAA compliance for critical health information');
|
|
206
|
+
extraDonts.push("Don't use aggressive CTAs or urgency tactics for health content");
|
|
207
|
+
}
|
|
208
|
+
// Education
|
|
209
|
+
if (/educa|school|escuela|university|learn|curso|academy/.test(lower)) {
|
|
210
|
+
extraDos.push('Use clear visual hierarchy for learning paths and course structure');
|
|
211
|
+
extraDos.push('Include progress indicators and achievement elements');
|
|
212
|
+
extraDonts.push("Don't make navigation complex — students need clear paths");
|
|
213
|
+
}
|
|
214
|
+
return {
|
|
215
|
+
dos: [...baseDos, ...extraDos],
|
|
216
|
+
donts: [...baseDonts, ...extraDonts],
|
|
217
|
+
};
|
|
218
|
+
}
|
|
219
|
+
// ─── Visual theme description ───────────────────────────────────────
|
|
220
|
+
function generateThemeDescription(brief) {
|
|
221
|
+
const { companyName, industry, targetAudience, aesthetic } = brief;
|
|
222
|
+
const toneWord = aesthetic.split(/\s+/)[0];
|
|
223
|
+
return `${aesthetic} design language for ${companyName}, a ${industry} brand. Every screen should feel intentionally crafted for ${targetAudience} — not generic, not templated. The visual identity balances a ${toneWord} tone with the practical needs of ${targetAudience}, creating an experience that feels both professional and human.`;
|
|
224
|
+
}
|
|
225
|
+
// ─── Main generator ─────────────────────────────────────────────────
|
|
226
|
+
export function generateDesignMdTemplate(brief) {
|
|
227
|
+
const industryPalette = matchIndustry(brief.industry);
|
|
228
|
+
const aesthetic = matchAesthetic(brief.aesthetic);
|
|
229
|
+
const imagery = generateImageryGuidelines(brief.industry, brief.targetAudience);
|
|
230
|
+
const { dos, donts } = generateDosAndDonts(brief.industry, brief.targetAudience);
|
|
231
|
+
const themeDesc = generateThemeDescription(brief);
|
|
232
|
+
const primary = brief.primaryColor || industryPalette.primary.hex;
|
|
233
|
+
const primaryName = brief.primaryColor ? 'Brand Primary' : industryPalette.primary.name;
|
|
234
|
+
const secondary = brief.secondaryColor || industryPalette.secondary.hex;
|
|
235
|
+
const secondaryName = brief.secondaryColor ? 'Brand Secondary' : industryPalette.secondary.name;
|
|
236
|
+
const accentRow = industryPalette.accent
|
|
237
|
+
? `| Accent | ${industryPalette.accent.name} | ${industryPalette.accent.hex} | Tertiary highlights, category markers |\n`
|
|
238
|
+
: '';
|
|
239
|
+
return `# ${brief.companyName} — Design System
|
|
240
|
+
|
|
241
|
+
## 1. Visual Theme & Atmosphere
|
|
242
|
+
|
|
243
|
+
${themeDesc}
|
|
244
|
+
|
|
245
|
+
## 2. Color Palette & Roles
|
|
246
|
+
|
|
247
|
+
| Role | Name | Hex | Usage |
|
|
248
|
+
|------|------|-----|-------|
|
|
249
|
+
| Primary | ${primaryName} | ${primary} | Main brand color, CTAs, key UI elements |
|
|
250
|
+
| Secondary | ${secondaryName} | ${secondary} | Supporting elements, hover states, accents |
|
|
251
|
+
${accentRow}| Surface | ${aesthetic.surface.name} | ${aesthetic.surface.hex} | Background, cards |
|
|
252
|
+
| On-Surface | ${aesthetic.onSurface.name} | ${aesthetic.onSurface.hex} | Body text on surface |
|
|
253
|
+
| Error | Signal Red | #DC2626 | Error states, destructive actions |
|
|
254
|
+
| Success | Verified Green | #16A34A | Success states, confirmations |
|
|
255
|
+
| Muted | ${aesthetic.muted.name} | ${aesthetic.muted.hex} | Disabled states, section alternates |
|
|
256
|
+
| Border | Light Border | #E5E5E5 | Card borders, dividers, input outlines |
|
|
257
|
+
|
|
258
|
+
## 3. Typography
|
|
259
|
+
|
|
260
|
+
- **Heading**: ${aesthetic.headingFont}
|
|
261
|
+
- **Body**: ${aesthetic.bodyFont}
|
|
262
|
+
- **Mono**: ${aesthetic.monoFont}
|
|
263
|
+
|
|
264
|
+
| Element | Size | Weight | Line Height |
|
|
265
|
+
|---------|------|--------|-------------|
|
|
266
|
+
| H1 | 2.75rem | 700 | 1.15 |
|
|
267
|
+
| H2 | 2rem | 700 | 1.2 |
|
|
268
|
+
| H3 | 1.375rem | 600 | 1.3 |
|
|
269
|
+
| Body | 1rem | 400 | 1.6 |
|
|
270
|
+
| Small | 0.875rem | 400 | 1.5 |
|
|
271
|
+
|
|
272
|
+
## 4. Spacing & Layout
|
|
273
|
+
|
|
274
|
+
- **Base unit**: 4px
|
|
275
|
+
- **Scale**: 4, 8, 12, 16, 24, 32, 48, 64, 96
|
|
276
|
+
- **Max content width**: 1200px
|
|
277
|
+
- **Grid**: 12-column, 20px gutter
|
|
278
|
+
- **Breakpoints**: 640px (sm), 768px (md), 1024px (lg), 1280px (xl)
|
|
279
|
+
- **Section vertical padding**: 64px desktop, 40px mobile
|
|
280
|
+
|
|
281
|
+
## 5. Component Patterns
|
|
282
|
+
|
|
283
|
+
### Buttons
|
|
284
|
+
- Primary: filled with Primary color, white text, ${aesthetic.borderRadius.split(',')[0]}, 14px 28px padding
|
|
285
|
+
- Secondary: outline with Primary border, Primary text
|
|
286
|
+
- Ghost: no background, Primary text, hover shows Muted background
|
|
287
|
+
|
|
288
|
+
### Cards
|
|
289
|
+
- Surface background, 1px Border color, ${aesthetic.borderRadius.split(',')[1]?.trim() || '8px'}, 20px padding
|
|
290
|
+
- Shadow: ${aesthetic.shadowStyle}
|
|
291
|
+
- Hover: slight elevation increase
|
|
292
|
+
|
|
293
|
+
### Inputs
|
|
294
|
+
- 1px Border color, ${aesthetic.borderRadius.split(',')[0]}, 12px 16px padding
|
|
295
|
+
- Focus: Primary border, subtle Primary ring
|
|
296
|
+
- Error: Error border, Error text below
|
|
297
|
+
|
|
298
|
+
## 6. Iconography
|
|
299
|
+
|
|
300
|
+
${aesthetic.iconStyle}
|
|
301
|
+
|
|
302
|
+
## 7. Imagery Guidelines
|
|
303
|
+
|
|
304
|
+
${imagery}
|
|
305
|
+
|
|
306
|
+
## 8. Do's and Don'ts
|
|
307
|
+
|
|
308
|
+
### Do
|
|
309
|
+
${dos.map(d => `- ${d}`).join('\n')}
|
|
310
|
+
|
|
311
|
+
### Don't
|
|
312
|
+
${donts.map(d => `- ${d}`).join('\n')}
|
|
313
|
+
`;
|
|
314
|
+
}
|
|
315
|
+
//# sourceMappingURL=design-md.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"design-md.js","sourceRoot":"","sources":["../../src/templates/design-md.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
export interface ScreenSpec {
|
|
2
|
+
productName: string;
|
|
3
|
+
productDescription: string;
|
|
4
|
+
pageType: string;
|
|
5
|
+
targetUser: string;
|
|
6
|
+
visualTone: string;
|
|
7
|
+
sections: string[];
|
|
8
|
+
hasDesignMd: boolean;
|
|
9
|
+
}
|
|
10
|
+
export interface RefinementSpec {
|
|
11
|
+
screenName: string;
|
|
12
|
+
sectionTarget: string;
|
|
13
|
+
change: string;
|
|
14
|
+
details?: string[];
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Build an initial generation prompt using zoom-out-zoom-in framework.
|
|
18
|
+
*/
|
|
19
|
+
export declare function buildInitialPrompt(spec: ScreenSpec): string;
|
|
20
|
+
/**
|
|
21
|
+
* Build a refinement prompt (one change at a time).
|
|
22
|
+
*/
|
|
23
|
+
export declare function buildRefinementPrompt(spec: RefinementSpec): string;
|
|
24
|
+
/**
|
|
25
|
+
* Build a localization prompt (apply after layout is established).
|
|
26
|
+
*/
|
|
27
|
+
export declare function buildLocalePrompt(language: string): string;
|
|
28
|
+
/**
|
|
29
|
+
* Build a multi-screen consistency prefix.
|
|
30
|
+
*/
|
|
31
|
+
export declare function buildConsistencyPrefix(referenceScreen: string): string;
|
|
32
|
+
//# sourceMappingURL=prompts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../../src/templates/prompts.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,UAAU;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,WAAW,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,CAc3D;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,cAAc,GAAG,MAAM,CAQlE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAE1D;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,eAAe,EAAE,MAAM,GAAG,MAAM,CAEtE"}
|