designlang 3.0.0 → 4.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,36 @@
1
+ This is a [Next.js](https://nextjs.org) project bootstrapped with [`create-next-app`](https://nextjs.org/docs/app/api-reference/cli/create-next-app).
2
+
3
+ ## Getting Started
4
+
5
+ First, run the development server:
6
+
7
+ ```bash
8
+ npm run dev
9
+ # or
10
+ yarn dev
11
+ # or
12
+ pnpm dev
13
+ # or
14
+ bun dev
15
+ ```
16
+
17
+ Open [http://localhost:3000](http://localhost:3000) with your browser to see the result.
18
+
19
+ You can start editing the page by modifying `app/page.js`. The page auto-updates as you edit the file.
20
+
21
+ This project uses [`next/font`](https://nextjs.org/docs/app/building-your-application/optimizing/fonts) to automatically optimize and load [Geist](https://vercel.com/font), a new font family for Vercel.
22
+
23
+ ## Learn More
24
+
25
+ To learn more about Next.js, take a look at the following resources:
26
+
27
+ - [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API.
28
+ - [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial.
29
+
30
+ You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js) - your feedback and contributions are welcome!
31
+
32
+ ## Deploy on Vercel
33
+
34
+ The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js.
35
+
36
+ Check out our [Next.js deployment documentation](https://nextjs.org/docs/app/building-your-application/deploying) for more details.
Binary file
@@ -0,0 +1,432 @@
1
+ :root {
2
+ --red: #ff0000;
3
+ --black: #0a0a0a;
4
+ --white: #f5f0e8;
5
+ --cream: #e8e0d0;
6
+ --yellow: #ffdd00;
7
+ --gray: #333;
8
+ }
9
+
10
+ * { margin: 0; padding: 0; box-sizing: border-box; }
11
+
12
+ html { scroll-behavior: smooth; }
13
+
14
+ body {
15
+ background: var(--black);
16
+ color: var(--white);
17
+ font-family: 'Inter', sans-serif;
18
+ overflow-x: hidden;
19
+ cursor: crosshair;
20
+ }
21
+
22
+ ::selection {
23
+ background: var(--red);
24
+ color: var(--black);
25
+ }
26
+
27
+ a { color: inherit; }
28
+
29
+ /* ── HERO ── */
30
+ .hero {
31
+ min-height: 100vh;
32
+ display: flex;
33
+ flex-direction: column;
34
+ justify-content: center;
35
+ align-items: center;
36
+ position: relative;
37
+ border-bottom: 4px solid var(--red);
38
+ overflow: hidden;
39
+ }
40
+
41
+ .hero::before {
42
+ content: 'DESIGNLANG DESIGNLANG DESIGNLANG DESIGNLANG DESIGNLANG ';
43
+ position: absolute;
44
+ top: 0;
45
+ left: 0;
46
+ width: 300%;
47
+ font-family: 'Unbounded', sans-serif;
48
+ font-size: 14vw;
49
+ font-weight: 900;
50
+ color: rgba(255, 0, 0, 0.03);
51
+ white-space: nowrap;
52
+ pointer-events: none;
53
+ animation: scroll-text 20s linear infinite;
54
+ line-height: 1;
55
+ }
56
+
57
+ @keyframes scroll-text {
58
+ 0% { transform: translateX(0); }
59
+ 100% { transform: translateX(-33.33%); }
60
+ }
61
+
62
+ .hero-title {
63
+ font-family: 'Unbounded', sans-serif;
64
+ font-size: clamp(4rem, 12vw, 10rem);
65
+ font-weight: 900;
66
+ text-transform: uppercase;
67
+ letter-spacing: -0.04em;
68
+ line-height: 0.9;
69
+ text-align: center;
70
+ position: relative;
71
+ z-index: 1;
72
+ }
73
+
74
+ .hero-title span {
75
+ display: block;
76
+ color: var(--red);
77
+ font-size: 0.4em;
78
+ letter-spacing: 0.2em;
79
+ margin-top: 16px;
80
+ }
81
+
82
+ .hero-sub {
83
+ font-family: 'JetBrains Mono', monospace;
84
+ font-size: clamp(14px, 1.5vw, 18px);
85
+ color: #888;
86
+ margin-top: 32px;
87
+ text-align: center;
88
+ max-width: 600px;
89
+ line-height: 1.6;
90
+ z-index: 1;
91
+ }
92
+
93
+ .hero-cmd {
94
+ margin-top: 48px;
95
+ background: #111;
96
+ border: 2px solid var(--red);
97
+ padding: 20px 40px;
98
+ font-family: 'JetBrains Mono', monospace;
99
+ font-size: clamp(16px, 2vw, 22px);
100
+ color: var(--yellow);
101
+ position: relative;
102
+ z-index: 1;
103
+ transition: all 0.2s;
104
+ text-decoration: none;
105
+ display: inline-block;
106
+ }
107
+
108
+ .hero-cmd:hover {
109
+ background: var(--red);
110
+ color: var(--black);
111
+ transform: translate(-4px, -4px);
112
+ box-shadow: 4px 4px 0 var(--yellow);
113
+ }
114
+
115
+ .hero-cmd::before {
116
+ content: '$ ';
117
+ color: var(--red);
118
+ }
119
+
120
+ .hero-cmd:hover::before {
121
+ color: var(--black);
122
+ }
123
+
124
+ .scroll-hint {
125
+ position: absolute;
126
+ bottom: 40px;
127
+ font-family: 'JetBrains Mono', monospace;
128
+ font-size: 12px;
129
+ color: #444;
130
+ letter-spacing: 0.3em;
131
+ text-transform: uppercase;
132
+ animation: pulse 2s ease-in-out infinite;
133
+ }
134
+
135
+ @keyframes pulse {
136
+ 0%, 100% { opacity: 0.3; }
137
+ 50% { opacity: 1; }
138
+ }
139
+
140
+ /* ── SECTION LAYOUT ── */
141
+ section {
142
+ padding: 100px 24px;
143
+ max-width: 1400px;
144
+ margin: 0 auto;
145
+ }
146
+
147
+ .section-red {
148
+ background: var(--red);
149
+ color: var(--black);
150
+ max-width: 100%;
151
+ padding: 80px 24px;
152
+ }
153
+
154
+ .section-cream {
155
+ background: var(--cream);
156
+ color: var(--black);
157
+ max-width: 100%;
158
+ padding: 80px 24px;
159
+ }
160
+
161
+ .section-inner {
162
+ max-width: 1400px;
163
+ margin: 0 auto;
164
+ }
165
+
166
+ .section-title {
167
+ font-family: 'Unbounded', sans-serif;
168
+ font-size: clamp(2rem, 5vw, 4rem);
169
+ font-weight: 900;
170
+ text-transform: uppercase;
171
+ letter-spacing: -0.02em;
172
+ margin-bottom: 48px;
173
+ line-height: 1;
174
+ }
175
+
176
+ .section-title::after {
177
+ content: ' ///';
178
+ color: var(--red);
179
+ }
180
+
181
+ .section-red .section-title::after {
182
+ color: var(--black);
183
+ }
184
+
185
+ .section-cream .section-title::after {
186
+ color: var(--red);
187
+ }
188
+
189
+ /* ── OUTPUT FILES ── */
190
+ .files-grid {
191
+ display: grid;
192
+ grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
193
+ gap: 2px;
194
+ }
195
+
196
+ .file-card {
197
+ background: #111;
198
+ border: 2px solid #222;
199
+ padding: 28px;
200
+ transition: all 0.15s;
201
+ position: relative;
202
+ overflow: hidden;
203
+ }
204
+
205
+ .file-card:hover {
206
+ border-color: var(--red);
207
+ transform: translate(-2px, -2px);
208
+ box-shadow: 2px 2px 0 var(--red);
209
+ }
210
+
211
+ .file-card::before {
212
+ content: attr(data-num);
213
+ position: absolute;
214
+ top: -10px;
215
+ right: 10px;
216
+ font-family: 'Unbounded', sans-serif;
217
+ font-size: 80px;
218
+ font-weight: 900;
219
+ color: rgba(255, 0, 0, 0.06);
220
+ line-height: 1;
221
+ }
222
+
223
+ .file-name {
224
+ font-family: 'JetBrains Mono', monospace;
225
+ font-size: 15px;
226
+ color: var(--yellow);
227
+ margin-bottom: 8px;
228
+ }
229
+
230
+ .file-desc {
231
+ font-size: 14px;
232
+ color: #888;
233
+ line-height: 1.5;
234
+ }
235
+
236
+ /* ── FEATURES ── */
237
+ .features-list {
238
+ display: grid;
239
+ grid-template-columns: repeat(auto-fill, minmax(400px, 1fr));
240
+ gap: 0;
241
+ }
242
+
243
+ .feature {
244
+ padding: 32px;
245
+ border: 1px solid #222;
246
+ transition: all 0.15s;
247
+ }
248
+
249
+ .feature:hover {
250
+ background: #111;
251
+ border-color: var(--red);
252
+ }
253
+
254
+ .feature-name {
255
+ font-family: 'Unbounded', sans-serif;
256
+ font-size: 18px;
257
+ font-weight: 700;
258
+ text-transform: uppercase;
259
+ margin-bottom: 8px;
260
+ }
261
+
262
+ .feature-cmd {
263
+ font-family: 'JetBrains Mono', monospace;
264
+ font-size: 13px;
265
+ color: var(--yellow);
266
+ margin-bottom: 12px;
267
+ }
268
+
269
+ .feature-desc {
270
+ font-size: 14px;
271
+ color: #888;
272
+ line-height: 1.5;
273
+ }
274
+
275
+ /* ── SCORE DEMO ── */
276
+ .score-demo {
277
+ background: #111;
278
+ border: 2px solid var(--red);
279
+ padding: 40px;
280
+ font-family: 'JetBrains Mono', monospace;
281
+ font-size: 14px;
282
+ line-height: 2;
283
+ overflow-x: auto;
284
+ color: #ccc;
285
+ }
286
+
287
+ .score-grade {
288
+ font-family: 'Unbounded', sans-serif;
289
+ font-size: 64px;
290
+ font-weight: 900;
291
+ color: var(--red);
292
+ display: inline;
293
+ }
294
+
295
+ /* ── COMMANDS ── */
296
+ .commands-grid {
297
+ display: grid;
298
+ grid-template-columns: repeat(auto-fill, minmax(350px, 1fr));
299
+ gap: 2px;
300
+ }
301
+
302
+ .command-card {
303
+ background: var(--black);
304
+ padding: 32px;
305
+ border: 2px solid rgba(255,0,0,0.3);
306
+ transition: all 0.15s;
307
+ }
308
+
309
+ .command-card:hover {
310
+ border-color: var(--red);
311
+ background: rgba(255, 0, 0, 0.05);
312
+ }
313
+
314
+ .command-name {
315
+ font-family: 'JetBrains Mono', monospace;
316
+ font-size: 18px;
317
+ font-weight: 700;
318
+ color: var(--yellow);
319
+ margin-bottom: 12px;
320
+ }
321
+
322
+ .command-desc {
323
+ font-size: 14px;
324
+ color: #ccc;
325
+ line-height: 1.5;
326
+ }
327
+
328
+ /* ── STATS STRIP ── */
329
+ .stats-strip {
330
+ display: flex;
331
+ flex-wrap: wrap;
332
+ border-top: 2px solid var(--red);
333
+ border-bottom: 2px solid var(--red);
334
+ }
335
+
336
+ .stat {
337
+ flex: 1;
338
+ min-width: 150px;
339
+ padding: 32px 24px;
340
+ text-align: center;
341
+ border-right: 1px solid #222;
342
+ }
343
+
344
+ .stat:last-child { border-right: none; }
345
+
346
+ .stat-value {
347
+ font-family: 'Unbounded', sans-serif;
348
+ font-size: 48px;
349
+ font-weight: 900;
350
+ color: var(--red);
351
+ line-height: 1;
352
+ }
353
+
354
+ .stat-label {
355
+ font-family: 'JetBrains Mono', monospace;
356
+ font-size: 11px;
357
+ color: #666;
358
+ text-transform: uppercase;
359
+ letter-spacing: 0.15em;
360
+ margin-top: 8px;
361
+ }
362
+
363
+ /* ── FOOTER ── */
364
+ footer {
365
+ padding: 60px 24px;
366
+ text-align: center;
367
+ border-top: 4px solid var(--red);
368
+ }
369
+
370
+ footer a {
371
+ text-decoration: underline;
372
+ text-underline-offset: 4px;
373
+ }
374
+
375
+ footer a:hover {
376
+ color: var(--red);
377
+ }
378
+
379
+ .footer-title {
380
+ font-family: 'Unbounded', sans-serif;
381
+ font-size: 24px;
382
+ font-weight: 900;
383
+ text-transform: uppercase;
384
+ margin-bottom: 16px;
385
+ }
386
+
387
+ .footer-links {
388
+ display: flex;
389
+ gap: 32px;
390
+ justify-content: center;
391
+ margin-top: 24px;
392
+ font-family: 'JetBrains Mono', monospace;
393
+ font-size: 14px;
394
+ }
395
+
396
+ .footer-copy {
397
+ margin-top: 48px;
398
+ font-size: 12px;
399
+ color: #444;
400
+ }
401
+
402
+ /* ── MARQUEE ── */
403
+ .marquee {
404
+ overflow: hidden;
405
+ white-space: nowrap;
406
+ border-top: 2px solid #222;
407
+ border-bottom: 2px solid #222;
408
+ padding: 12px 0;
409
+ font-family: 'JetBrains Mono', monospace;
410
+ font-size: 13px;
411
+ color: #444;
412
+ }
413
+
414
+ .marquee-inner {
415
+ display: inline-block;
416
+ animation: marquee 30s linear infinite;
417
+ }
418
+
419
+ @keyframes marquee {
420
+ 0% { transform: translateX(0); }
421
+ 100% { transform: translateX(-50%); }
422
+ }
423
+
424
+ /* ── RESPONSIVE ── */
425
+ @media (max-width: 768px) {
426
+ .features-list { grid-template-columns: 1fr; }
427
+ .commands-grid { grid-template-columns: 1fr; }
428
+ .files-grid { grid-template-columns: 1fr; }
429
+ .stats-strip { flex-direction: column; }
430
+ .stat { border-right: none; border-bottom: 1px solid #222; }
431
+ .hero-cmd { font-size: 14px; padding: 16px 24px; }
432
+ }
@@ -0,0 +1,19 @@
1
+ import "./globals.css";
2
+
3
+ export const metadata = {
4
+ title: "DESIGNLANG — Reverse-Engineer Any Website's Design System",
5
+ description: "One command. 8 output files. Colors, typography, spacing, layout, accessibility, interactions, and more. npx designlang",
6
+ };
7
+
8
+ export default function RootLayout({ children }) {
9
+ return (
10
+ <html lang="en">
11
+ <head>
12
+ <link rel="preconnect" href="https://fonts.googleapis.com" />
13
+ <link rel="preconnect" href="https://fonts.gstatic.com" crossOrigin="" />
14
+ <link href="https://fonts.googleapis.com/css2?family=Unbounded:wght@400;700;900&family=JetBrains+Mono:wght@400;700&family=Inter:wght@400;500;600&display=swap" rel="stylesheet" />
15
+ </head>
16
+ <body>{children}</body>
17
+ </html>
18
+ );
19
+ }
@@ -0,0 +1,162 @@
1
+ export default function Home() {
2
+ const marqueeText = "COLORS // TYPOGRAPHY // SPACING // LAYOUT // SHADOWS // ACCESSIBILITY // COMPONENTS // ANIMATIONS // BREAKPOINTS // CSS VARIABLES // INTERACTIONS // RESPONSIVE // FIGMA // TAILWIND // REACT // SHADCN // ";
3
+
4
+ return (
5
+ <>
6
+ {/* ── HERO ── */}
7
+ <section className="hero">
8
+ <h1 className="hero-title">
9
+ DESIGN
10
+ <br />
11
+ LANG
12
+ <span>reverse-engineer any website</span>
13
+ </h1>
14
+ <p className="hero-sub">
15
+ One command extracts the complete design language from any live website.
16
+ 8 output files. 15 sections. 12 extractors. No other tool does this.
17
+ </p>
18
+ <a href="https://github.com/Manavarya09/design-extract" className="hero-cmd">
19
+ npx designlang https://vercel.com
20
+ </a>
21
+ <div className="scroll-hint">scroll down</div>
22
+ </section>
23
+
24
+ {/* ── STATS ── */}
25
+ <div className="stats-strip">
26
+ <div className="stat"><div className="stat-value">8</div><div className="stat-label">Output Files</div></div>
27
+ <div className="stat"><div className="stat-value">12</div><div className="stat-label">Extractors</div></div>
28
+ <div className="stat"><div className="stat-value">11</div><div className="stat-label">Component Types</div></div>
29
+ <div className="stat"><div className="stat-value">15</div><div className="stat-label">Markdown Sections</div></div>
30
+ <div className="stat"><div className="stat-value">7</div><div className="stat-label">Score Categories</div></div>
31
+ <div className="stat"><div className="stat-value">4</div><div className="stat-label">Viewports Crawled</div></div>
32
+ </div>
33
+
34
+ {/* ── MARQUEE ── */}
35
+ <div className="marquee">
36
+ <div className="marquee-inner">
37
+ {marqueeText}{marqueeText}{marqueeText}{marqueeText}
38
+ </div>
39
+ </div>
40
+
41
+ {/* ── OUTPUT FILES ── */}
42
+ <section>
43
+ <h2 className="section-title">8 Output Files</h2>
44
+ <div className="files-grid">
45
+ {[
46
+ { num: '01', name: '*-design-language.md', desc: 'AI-optimized markdown — feed it to any LLM and it recreates the design from scratch. 15 sections covering every aspect.' },
47
+ { num: '02', name: '*-preview.html', desc: 'Gorgeous dark-themed visual report with color swatches, type scale rendering, shadow cards, and accessibility score.' },
48
+ { num: '03', name: '*-tailwind.config.js', desc: 'Drop-in Tailwind CSS theme extension with colors, fonts, spacing, radii, shadows, and screens.' },
49
+ { num: '04', name: '*-variables.css', desc: 'CSS custom properties organized by category. Import directly into any project.' },
50
+ { num: '05', name: '*-figma-variables.json', desc: 'Figma Variables import format with light/dark mode support. Hand off to designers instantly.' },
51
+ { num: '06', name: '*-theme.js', desc: 'React/CSS-in-JS theme object compatible with Chakra UI, Stitches, and Vanilla Extract.' },
52
+ { num: '07', name: '*-shadcn-theme.css', desc: 'shadcn/ui theme variables in the exact format it expects. Paste into globals.css.' },
53
+ { num: '08', name: '*-design-tokens.json', desc: 'W3C Design Tokens community group format for tooling integration.' },
54
+ ].map(f => (
55
+ <div key={f.num} className="file-card" data-num={f.num}>
56
+ <div className="file-name">{f.name}</div>
57
+ <div className="file-desc">{f.desc}</div>
58
+ </div>
59
+ ))}
60
+ </div>
61
+ </section>
62
+
63
+ {/* ── WHAT IT EXTRACTS ── */}
64
+ <section className="section-red">
65
+ <div className="section-inner">
66
+ <h2 className="section-title">What It Extracts</h2>
67
+ <div className="features-list">
68
+ {[
69
+ { name: 'Colors', cmd: 'automatic', desc: 'Full palette with primary/secondary/accent/neutral classification. Gradients. Background and text colors with usage context.' },
70
+ { name: 'Typography', cmd: 'automatic', desc: 'Font families, type scale, heading/body styles, weight distribution, line heights, letter spacing.' },
71
+ { name: 'Spacing', cmd: 'automatic', desc: 'All unique values with automatic base-unit detection. Identifies 4px/8px grids.' },
72
+ { name: 'Layout System', cmd: 'automatic', desc: 'Grid column patterns, flex direction usage, container widths, gap values, justify/align patterns. The skeleton, not just the paint.' },
73
+ { name: 'Shadows', cmd: 'automatic', desc: 'All box-shadows parsed and classified by visual weight (xs through xl).' },
74
+ { name: 'Components', cmd: 'automatic', desc: '11 types: buttons, cards, inputs, links, navbars, footers, modals, dropdowns, tables, badges, avatars.' },
75
+ { name: 'Accessibility', cmd: 'automatic', desc: 'WCAG 2.1 contrast ratios for every fg/bg color pair. Overall score and failing pairs.' },
76
+ { name: 'Responsive', cmd: '--responsive', desc: 'Crawls at 4 viewports. Maps what changes between breakpoints — fonts, nav, columns, hamburger.' },
77
+ { name: 'Interactions', cmd: '--interactions', desc: 'Hovers and focuses interactive elements. Records actual style transitions — hover colors, focus rings, active states.' },
78
+ { name: 'CSS Variables', cmd: 'automatic', desc: 'All :root custom properties categorized by type — colors, spacing, typography, shadows, radii.' },
79
+ { name: 'Animations', cmd: 'automatic', desc: 'Transitions, easing functions, durations, and @keyframes rules.' },
80
+ { name: 'Design Score', cmd: 'automatic', desc: '7-category quality rating (A-F) — color discipline, typography, spacing, shadows, radii, accessibility, tokenization.' },
81
+ ].map(f => (
82
+ <div key={f.name} className="feature">
83
+ <div className="feature-name">{f.name}</div>
84
+ <div className="feature-cmd">{f.cmd}</div>
85
+ <div className="feature-desc">{f.desc}</div>
86
+ </div>
87
+ ))}
88
+ </div>
89
+ </div>
90
+ </section>
91
+
92
+ {/* ── COMMANDS ── */}
93
+ <section>
94
+ <h2 className="section-title">Commands</h2>
95
+ <div className="commands-grid">
96
+ {[
97
+ { name: 'designlang <url>', desc: 'Extract the full design language. Generates 8 output files.' },
98
+ { name: 'designlang <url> --full', desc: 'Everything at once — screenshots, responsive, interactions.' },
99
+ { name: 'designlang diff <A> <B>', desc: 'Compare two sites side-by-side. Outputs markdown and HTML.' },
100
+ { name: 'designlang brands <urls...>', desc: 'Multi-brand comparison matrix. Color overlap, typography, a11y scores.' },
101
+ { name: 'designlang clone <url>', desc: 'Generate a working Next.js starter with the extracted design applied.' },
102
+ { name: 'designlang score <url>', desc: 'Rate design system quality. 7 categories, A-F grade, actionable issues.' },
103
+ { name: 'designlang watch <url>', desc: 'Monitor a site for design changes on a configurable interval.' },
104
+ { name: 'designlang sync <url>', desc: 'Update local token files from the live site. Code-first source of truth.' },
105
+ { name: 'designlang history <url>', desc: 'View how a site\'s design has evolved over time.' },
106
+ ].map(c => (
107
+ <div key={c.name} className="command-card">
108
+ <div className="command-name">{c.name}</div>
109
+ <div className="command-desc">{c.desc}</div>
110
+ </div>
111
+ ))}
112
+ </div>
113
+ </section>
114
+
115
+ {/* ── SCORE DEMO ── */}
116
+ <section className="section-cream">
117
+ <div className="section-inner">
118
+ <h2 className="section-title">Design System Scoring</h2>
119
+ <div className="score-demo">
120
+ <div>$ designlang score https://vercel.com</div>
121
+ <br />
122
+ <div>&nbsp;&nbsp;<span className="score-grade">68</span>/100&nbsp;&nbsp;Grade: D</div>
123
+ <br />
124
+ <div>&nbsp;&nbsp;Color Discipline&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;██████████░░░░░░░░░░ 50</div>
125
+ <div>&nbsp;&nbsp;Typography&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;██████████████░░░░░░ 70</div>
126
+ <div>&nbsp;&nbsp;Spacing System&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;████████████████░░░░ 80</div>
127
+ <div>&nbsp;&nbsp;Shadows&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;██████████░░░░░░░░░░ 50</div>
128
+ <div>&nbsp;&nbsp;Border Radii&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;████████░░░░░░░░░░░░ 40</div>
129
+ <div>&nbsp;&nbsp;Accessibility&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;███████████████████░ 94</div>
130
+ <div>&nbsp;&nbsp;Tokenization&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;████████████████████ 100</div>
131
+ </div>
132
+ </div>
133
+ </section>
134
+
135
+ {/* ── AGENT SKILL ── */}
136
+ <section>
137
+ <h2 className="section-title">Agent Skill</h2>
138
+ <p style={{ fontSize: '18px', lineHeight: '1.7', color: '#aaa', maxWidth: '700px', marginBottom: '32px' }}>
139
+ Works with <strong style={{ color: '#fff' }}>Claude Code, Cursor, Codex, and 40+ AI coding agents</strong> via the skills ecosystem.
140
+ </p>
141
+ <div className="hero-cmd" style={{ display: 'inline-block' }}>
142
+ npx skills add Manavarya09/design-extract
143
+ </div>
144
+ </section>
145
+
146
+ {/* ── FOOTER ── */}
147
+ <footer>
148
+ <div className="footer-title">DESIGNLANG</div>
149
+ <p style={{ color: '#888', fontSize: '14px' }}>
150
+ Built by Manavarya Singh. MIT Licensed. Open Source.
151
+ </p>
152
+ <div className="footer-links">
153
+ <a href="https://github.com/Manavarya09/design-extract">GitHub</a>
154
+ <a href="https://www.npmjs.com/package/designlang">npm</a>
155
+ </div>
156
+ <div className="footer-copy">
157
+ No other tool extracts layout patterns, responsive behavior, interaction states, and scores design quality from a single command.
158
+ </div>
159
+ </footer>
160
+ </>
161
+ );
162
+ }
@@ -0,0 +1,7 @@
1
+ {
2
+ "compilerOptions": {
3
+ "paths": {
4
+ "@/*": ["./*"]
5
+ }
6
+ }
7
+ }
@@ -0,0 +1,6 @@
1
+ /** @type {import('next').NextConfig} */
2
+ const nextConfig = {
3
+ /* config options here */
4
+ };
5
+
6
+ export default nextConfig;