@yuktishaalaa/yuktai 3.0.16 → 4.0.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.
@@ -0,0 +1,1109 @@
1
+ function p(e,r){return e.replace(/\{\{SITE_NAME\}\}/g,r.SITE_NAME).replace(/\{\{THEME_COLOR\}\}/g,r.THEME_COLOR).replace(/\{\{TAGLINE\}\}/g,r.TAGLINE).replace(/\{\{YEAR\}\}/g,r.YEAR)}var l={blue:"#1a73e8",green:"#0d9488",purple:"#7c3aed",red:"#dc2626",orange:"#ea580c",teal:"#0891b2",indigo:"#4f46e5",gray:"#374151"},g=e=>`{
2
+ "name": "${e.toLowerCase().replace(/\s+/g,"-")}",
3
+ "version": "0.1.0",
4
+ "private": true,
5
+ "scripts": {
6
+ "dev": "next dev",
7
+ "build": "next build",
8
+ "start": "next start",
9
+ "lint": "next lint"
10
+ },
11
+ "dependencies": {
12
+ "next": "^16.0.0",
13
+ "react": "^19.0.0",
14
+ "react-dom": "^19.0.0"
15
+ },
16
+ "devDependencies": {
17
+ "@types/node": "^20.0.0",
18
+ "@types/react": "^19.0.0",
19
+ "@types/react-dom": "^19.0.0",
20
+ "autoprefixer": "^10.4.0",
21
+ "postcss": "^8.4.0",
22
+ "tailwindcss": "^3.4.0",
23
+ "typescript": "^5.0.0"
24
+ }
25
+ }
26
+ `,u=`/** @type {import('next').NextConfig} */
27
+ const nextConfig = {
28
+ reactStrictMode: true,
29
+ images: { unoptimized: true },
30
+ }
31
+
32
+ module.exports = nextConfig
33
+ `,f=e=>`/** @type {import('tailwindcss').Config} */
34
+ module.exports = {
35
+ content: [
36
+ "./src/pages/**/*.{js,ts,jsx,tsx,mdx}",
37
+ "./src/components/**/*.{js,ts,jsx,tsx,mdx}",
38
+ "./src/app/**/*.{js,ts,jsx,tsx,mdx}",
39
+ ],
40
+ theme: {
41
+ extend: {
42
+ colors: {
43
+ primary: "${e}",
44
+ },
45
+ },
46
+ },
47
+ plugins: [],
48
+ }
49
+ `,h=e=>`@tailwind base;
50
+ @tailwind components;
51
+ @tailwind utilities;
52
+
53
+ :root {
54
+ --primary: ${e};
55
+ --primary-dark: ${e}dd;
56
+ --foreground: #0f172a;
57
+ --background: #ffffff;
58
+ --muted: #64748b;
59
+ --border: #e2e8f0;
60
+ }
61
+
62
+ * {
63
+ box-sizing: border-box;
64
+ margin: 0;
65
+ padding: 0;
66
+ }
67
+
68
+ body {
69
+ font-family: system-ui, -apple-system, sans-serif;
70
+ color: var(--foreground);
71
+ background: var(--background);
72
+ }
73
+
74
+ a {
75
+ color: inherit;
76
+ text-decoration: none;
77
+ }
78
+ `,y=`import type { Metadata } from "next"
79
+ import "./globals.css"
80
+ import Navbar from "@/components/Navbar"
81
+ import Footer from "@/components/Footer"
82
+
83
+ export const metadata: Metadata = {
84
+ title: "{{SITE_NAME}}",
85
+ description: "{{TAGLINE}}",
86
+ }
87
+
88
+ export default function RootLayout({
89
+ children,
90
+ }: {
91
+ children: React.ReactNode
92
+ }) {
93
+ return (
94
+ <html lang="en">
95
+ <body>
96
+ <Navbar />
97
+ <main>{children}</main>
98
+ <Footer />
99
+ </body>
100
+ </html>
101
+ )
102
+ }
103
+ `,b=`"use client"
104
+ import Link from "next/link"
105
+ import { useState } from "react"
106
+ import styles from "./Navbar.module.css"
107
+
108
+ export default function Navbar() {
109
+ const [open, setOpen] = useState(false)
110
+
111
+ return (
112
+ <nav className={styles.navbar}>
113
+ <div className={styles.container}>
114
+ <Link href="/" className={styles.logo}>
115
+ {{SITE_NAME}}
116
+ </Link>
117
+ <button
118
+ className={styles.toggle}
119
+ onClick={() => setOpen(!open)}
120
+ aria-label="Toggle menu"
121
+ >
122
+ \u2630
123
+ </button>
124
+ <ul className={\`\${styles.links} \${open ? styles.open : ""}\`}>
125
+ <li><Link href="/">Home</Link></li>
126
+ <li><Link href="/about">About</Link></li>
127
+ <li><Link href="/services">Services</Link></li>
128
+ <li><Link href="/contact">Contact</Link></li>
129
+ </ul>
130
+ </div>
131
+ </nav>
132
+ )
133
+ }
134
+ `,x=`.navbar {
135
+ background: var(--primary);
136
+ color: white;
137
+ padding: 0 1rem;
138
+ position: sticky;
139
+ top: 0;
140
+ z-index: 100;
141
+ box-shadow: 0 2px 8px rgba(0,0,0,0.1);
142
+ }
143
+
144
+ .container {
145
+ max-width: 1200px;
146
+ margin: 0 auto;
147
+ display: flex;
148
+ align-items: center;
149
+ justify-content: space-between;
150
+ height: 64px;
151
+ }
152
+
153
+ .logo {
154
+ font-size: 1.25rem;
155
+ font-weight: 700;
156
+ color: white;
157
+ text-decoration: none;
158
+ }
159
+
160
+ .links {
161
+ display: flex;
162
+ list-style: none;
163
+ gap: 2rem;
164
+ }
165
+
166
+ .links a {
167
+ color: rgba(255,255,255,0.9);
168
+ text-decoration: none;
169
+ font-size: 0.95rem;
170
+ transition: color 0.2s;
171
+ }
172
+
173
+ .links a:hover {
174
+ color: white;
175
+ }
176
+
177
+ .toggle {
178
+ display: none;
179
+ background: none;
180
+ border: none;
181
+ color: white;
182
+ font-size: 1.5rem;
183
+ cursor: pointer;
184
+ }
185
+
186
+ @media (max-width: 768px) {
187
+ .toggle { display: block; }
188
+ .links {
189
+ display: none;
190
+ position: absolute;
191
+ top: 64px;
192
+ left: 0;
193
+ right: 0;
194
+ background: var(--primary);
195
+ flex-direction: column;
196
+ padding: 1rem;
197
+ gap: 1rem;
198
+ }
199
+ .links.open { display: flex; }
200
+ }
201
+ `,v=`import styles from "./Footer.module.css"
202
+
203
+ export default function Footer() {
204
+ return (
205
+ <footer className={styles.footer}>
206
+ <div className={styles.container}>
207
+ <p className={styles.brand}>{{SITE_NAME}}</p>
208
+ <p className={styles.tagline}>{{TAGLINE}}</p>
209
+ <p className={styles.copy}>\xA9 {{YEAR}} {{SITE_NAME}}. All rights reserved.</p>
210
+ </div>
211
+ </footer>
212
+ )
213
+ }
214
+ `,S=`.footer {
215
+ background: #0f172a;
216
+ color: #94a3b8;
217
+ padding: 3rem 1rem;
218
+ margin-top: auto;
219
+ }
220
+
221
+ .container {
222
+ max-width: 1200px;
223
+ margin: 0 auto;
224
+ text-align: center;
225
+ display: flex;
226
+ flex-direction: column;
227
+ gap: 0.5rem;
228
+ }
229
+
230
+ .brand {
231
+ font-size: 1.25rem;
232
+ font-weight: 700;
233
+ color: white;
234
+ }
235
+
236
+ .tagline {
237
+ font-size: 0.9rem;
238
+ color: #64748b;
239
+ }
240
+
241
+ .copy {
242
+ font-size: 0.8rem;
243
+ color: #475569;
244
+ margin-top: 1rem;
245
+ }
246
+ `,N=`import styles from "./page.module.css"
247
+ import Link from "next/link"
248
+
249
+ export default function HomePage() {
250
+ return (
251
+ <div className={styles.page}>
252
+
253
+ {/* Hero */}
254
+ <section className={styles.hero}>
255
+ <div className={styles.heroContent}>
256
+ <h1 className={styles.heroTitle}>Welcome to {{SITE_NAME}}</h1>
257
+ <p className={styles.heroSubtitle}>{{TAGLINE}}</p>
258
+ <div className={styles.heroActions}>
259
+ <Link href="/contact" className={styles.btnPrimary}>Get Started</Link>
260
+ <Link href="/about" className={styles.btnSecondary}>Learn More</Link>
261
+ </div>
262
+ </div>
263
+ </section>
264
+
265
+ {/* Features */}
266
+ <section className={styles.features}>
267
+ <div className={styles.container}>
268
+ <h2 className={styles.sectionTitle}>Why Choose Us</h2>
269
+ <div className={styles.grid}>
270
+ {[
271
+ { icon: "\u26A1", title: "Fast", desc: "Lightning fast performance on all devices" },
272
+ { icon: "\u{1F512}", title: "Secure", desc: "Enterprise-grade security built in" },
273
+ { icon: "\u{1F4F1}", title: "Responsive", desc: "Works perfectly on mobile and desktop" },
274
+ ].map(f => (
275
+ <div key={f.title} className={styles.card}>
276
+ <span className={styles.icon}>{f.icon}</span>
277
+ <h3>{f.title}</h3>
278
+ <p>{f.desc}</p>
279
+ </div>
280
+ ))}
281
+ </div>
282
+ </div>
283
+ </section>
284
+
285
+ {/* CTA */}
286
+ <section className={styles.cta}>
287
+ <div className={styles.container}>
288
+ <h2>Ready to get started?</h2>
289
+ <p>Join thousands of happy customers today.</p>
290
+ <Link href="/contact" className={styles.btnPrimary}>Contact Us</Link>
291
+ </div>
292
+ </section>
293
+
294
+ </div>
295
+ )
296
+ }
297
+ `,w=`.page { min-height: 100vh; }
298
+
299
+ .hero {
300
+ background: linear-gradient(135deg, var(--primary) 0%, var(--primary-dark) 100%);
301
+ color: white;
302
+ padding: 6rem 1rem;
303
+ text-align: center;
304
+ }
305
+
306
+ .heroContent { max-width: 700px; margin: 0 auto; }
307
+
308
+ .heroTitle {
309
+ font-size: clamp(2rem, 5vw, 3.5rem);
310
+ font-weight: 800;
311
+ line-height: 1.1;
312
+ margin-bottom: 1.5rem;
313
+ }
314
+
315
+ .heroSubtitle {
316
+ font-size: 1.25rem;
317
+ opacity: 0.9;
318
+ margin-bottom: 2.5rem;
319
+ line-height: 1.6;
320
+ }
321
+
322
+ .heroActions { display: flex; gap: 1rem; justify-content: center; flex-wrap: wrap; }
323
+
324
+ .btnPrimary {
325
+ background: white;
326
+ color: var(--primary);
327
+ padding: 0.875rem 2rem;
328
+ border-radius: 8px;
329
+ font-weight: 700;
330
+ font-size: 1rem;
331
+ transition: transform 0.2s;
332
+ display: inline-block;
333
+ }
334
+
335
+ .btnPrimary:hover { transform: translateY(-2px); }
336
+
337
+ .btnSecondary {
338
+ background: rgba(255,255,255,0.15);
339
+ color: white;
340
+ padding: 0.875rem 2rem;
341
+ border-radius: 8px;
342
+ font-weight: 600;
343
+ font-size: 1rem;
344
+ border: 1px solid rgba(255,255,255,0.3);
345
+ transition: background 0.2s;
346
+ display: inline-block;
347
+ }
348
+
349
+ .btnSecondary:hover { background: rgba(255,255,255,0.25); }
350
+
351
+ .features { padding: 5rem 1rem; background: #f8fafc; }
352
+
353
+ .container { max-width: 1200px; margin: 0 auto; }
354
+
355
+ .sectionTitle {
356
+ text-align: center;
357
+ font-size: 2rem;
358
+ font-weight: 700;
359
+ margin-bottom: 3rem;
360
+ color: #0f172a;
361
+ }
362
+
363
+ .grid {
364
+ display: grid;
365
+ grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
366
+ gap: 2rem;
367
+ }
368
+
369
+ .card {
370
+ background: white;
371
+ padding: 2rem;
372
+ border-radius: 12px;
373
+ box-shadow: 0 1px 4px rgba(0,0,0,0.06);
374
+ text-align: center;
375
+ }
376
+
377
+ .icon { font-size: 2.5rem; display: block; margin-bottom: 1rem; }
378
+ .card h3 { font-size: 1.1rem; font-weight: 700; margin-bottom: 0.5rem; }
379
+ .card p { color: #64748b; font-size: 0.9rem; line-height: 1.6; }
380
+
381
+ .cta {
382
+ background: var(--primary);
383
+ color: white;
384
+ padding: 5rem 1rem;
385
+ text-align: center;
386
+ }
387
+
388
+ .cta h2 { font-size: 2rem; font-weight: 800; margin-bottom: 0.75rem; }
389
+ .cta p { font-size: 1.1rem; opacity: 0.85; margin-bottom: 2rem; }
390
+ `,k=`import styles from "./page.module.css"
391
+
392
+ export default function AboutPage() {
393
+ return (
394
+ <div className={styles.page}>
395
+ <section className={styles.hero}>
396
+ <h1>About {{SITE_NAME}}</h1>
397
+ <p>{{TAGLINE}}</p>
398
+ </section>
399
+ <section className={styles.content}>
400
+ <div className={styles.container}>
401
+ <div className={styles.grid}>
402
+ <div>
403
+ <h2>Our Story</h2>
404
+ <p>We started with a simple mission \u2014 to provide the best experience for our customers. Built on trust, quality, and dedication, {{SITE_NAME}} has grown to serve thousands of happy customers.</p>
405
+ <p>Our team of experts is committed to delivering excellence in everything we do. We believe in building long-term relationships with our clients.</p>
406
+ </div>
407
+ <div>
408
+ <h2>Our Values</h2>
409
+ <ul className={styles.list}>
410
+ <li>\u2705 Customer first approach</li>
411
+ <li>\u2705 Quality in everything</li>
412
+ <li>\u2705 Transparent communication</li>
413
+ <li>\u2705 Continuous improvement</li>
414
+ <li>\u2705 Community focus</li>
415
+ </ul>
416
+ </div>
417
+ </div>
418
+ <div className={styles.stats}>
419
+ {[
420
+ { number: "1000+", label: "Happy Customers" },
421
+ { number: "5+", label: "Years Experience" },
422
+ { number: "50+", label: "Team Members" },
423
+ { number: "99%", label: "Satisfaction Rate" },
424
+ ].map(s => (
425
+ <div key={s.label} className={styles.stat}>
426
+ <span className={styles.number}>{s.number}</span>
427
+ <span className={styles.label}>{s.label}</span>
428
+ </div>
429
+ ))}
430
+ </div>
431
+ </div>
432
+ </section>
433
+ </div>
434
+ )
435
+ }
436
+ `,T=`.page { min-height: 100vh; }
437
+
438
+ .hero {
439
+ background: var(--primary);
440
+ color: white;
441
+ padding: 5rem 1rem;
442
+ text-align: center;
443
+ }
444
+
445
+ .hero h1 { font-size: 2.5rem; font-weight: 800; margin-bottom: 1rem; }
446
+ .hero p { font-size: 1.1rem; opacity: 0.85; }
447
+
448
+ .content { padding: 4rem 1rem; }
449
+
450
+ .container { max-width: 1100px; margin: 0 auto; }
451
+
452
+ .grid {
453
+ display: grid;
454
+ grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
455
+ gap: 3rem;
456
+ margin-bottom: 4rem;
457
+ }
458
+
459
+ .grid h2 { font-size: 1.5rem; font-weight: 700; margin-bottom: 1rem; color: var(--primary); }
460
+ .grid p { color: #475569; line-height: 1.7; margin-bottom: 1rem; }
461
+
462
+ .list { list-style: none; display: flex; flex-direction: column; gap: 0.75rem; }
463
+ .list li { color: #475569; font-size: 0.95rem; }
464
+
465
+ .stats {
466
+ display: grid;
467
+ grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
468
+ gap: 1.5rem;
469
+ background: #f8fafc;
470
+ padding: 2.5rem;
471
+ border-radius: 16px;
472
+ }
473
+
474
+ .stat { text-align: center; }
475
+
476
+ .number {
477
+ display: block;
478
+ font-size: 2rem;
479
+ font-weight: 800;
480
+ color: var(--primary);
481
+ }
482
+
483
+ .label { font-size: 0.85rem; color: #64748b; }
484
+ `,E=`"use client"
485
+ import { useState } from "react"
486
+ import styles from "./page.module.css"
487
+
488
+ export default function ContactPage() {
489
+ const [sent, setSent] = useState(false)
490
+ const [form, setForm] = useState({ name: "", email: "", message: "" })
491
+
492
+ const handleSubmit = (e: React.FormEvent) => {
493
+ e.preventDefault()
494
+ setSent(true)
495
+ }
496
+
497
+ return (
498
+ <div className={styles.page}>
499
+ <section className={styles.hero}>
500
+ <h1>Contact Us</h1>
501
+ <p>We would love to hear from you. Get in touch with our team.</p>
502
+ </section>
503
+ <section className={styles.content}>
504
+ <div className={styles.container}>
505
+ <div className={styles.grid}>
506
+ <div className={styles.info}>
507
+ <h2>Get in Touch</h2>
508
+ <div className={styles.detail}>
509
+ <span>\u{1F4CD}</span>
510
+ <div>
511
+ <strong>Address</strong>
512
+ <p>123 Business Street, City, State 400001</p>
513
+ </div>
514
+ </div>
515
+ <div className={styles.detail}>
516
+ <span>\u{1F4DE}</span>
517
+ <div>
518
+ <strong>Phone</strong>
519
+ <p>+91 98765 43210</p>
520
+ </div>
521
+ </div>
522
+ <div className={styles.detail}>
523
+ <span>\u2709\uFE0F</span>
524
+ <div>
525
+ <strong>Email</strong>
526
+ <p>hello@{{SITE_NAME_LOWER}}.com</p>
527
+ </div>
528
+ </div>
529
+ </div>
530
+ <div className={styles.formWrap}>
531
+ {sent ? (
532
+ <div className={styles.success}>
533
+ \u2705 Message sent! We will get back to you soon.
534
+ </div>
535
+ ) : (
536
+ <form onSubmit={handleSubmit} className={styles.form}>
537
+ <div className={styles.field}>
538
+ <label htmlFor="name">Full Name</label>
539
+ <input
540
+ id="name" type="text" required
541
+ value={form.name}
542
+ onChange={e => setForm({ ...form, name: e.target.value })}
543
+ placeholder="Your name"
544
+ />
545
+ </div>
546
+ <div className={styles.field}>
547
+ <label htmlFor="email">Email Address</label>
548
+ <input
549
+ id="email" type="email" required
550
+ value={form.email}
551
+ onChange={e => setForm({ ...form, email: e.target.value })}
552
+ placeholder="your@email.com"
553
+ />
554
+ </div>
555
+ <div className={styles.field}>
556
+ <label htmlFor="message">Message</label>
557
+ <textarea
558
+ id="message" required rows={5}
559
+ value={form.message}
560
+ onChange={e => setForm({ ...form, message: e.target.value })}
561
+ placeholder="How can we help you?"
562
+ />
563
+ </div>
564
+ <button type="submit" className={styles.btn}>Send Message</button>
565
+ </form>
566
+ )}
567
+ </div>
568
+ </div>
569
+ </div>
570
+ </section>
571
+ </div>
572
+ )
573
+ }
574
+ `,C=`.page { min-height: 100vh; }
575
+
576
+ .hero {
577
+ background: var(--primary);
578
+ color: white;
579
+ padding: 5rem 1rem;
580
+ text-align: center;
581
+ }
582
+
583
+ .hero h1 { font-size: 2.5rem; font-weight: 800; margin-bottom: 1rem; }
584
+ .hero p { font-size: 1.1rem; opacity: 0.85; }
585
+
586
+ .content { padding: 4rem 1rem; }
587
+ .container { max-width: 1100px; margin: 0 auto; }
588
+
589
+ .grid {
590
+ display: grid;
591
+ grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
592
+ gap: 3rem;
593
+ }
594
+
595
+ .info h2 { font-size: 1.5rem; font-weight: 700; margin-bottom: 2rem; color: var(--primary); }
596
+
597
+ .detail {
598
+ display: flex;
599
+ gap: 1rem;
600
+ margin-bottom: 1.5rem;
601
+ align-items: flex-start;
602
+ }
603
+
604
+ .detail span { font-size: 1.5rem; }
605
+ .detail strong { display: block; font-weight: 600; margin-bottom: 0.25rem; }
606
+ .detail p { color: #64748b; font-size: 0.9rem; }
607
+
608
+ .form { display: flex; flex-direction: column; gap: 1.25rem; }
609
+
610
+ .field { display: flex; flex-direction: column; gap: 0.4rem; }
611
+
612
+ .field label { font-size: 0.875rem; font-weight: 600; color: #374151; }
613
+
614
+ .field input,
615
+ .field textarea {
616
+ padding: 0.75rem 1rem;
617
+ border: 1px solid #e2e8f0;
618
+ border-radius: 8px;
619
+ font-size: 0.95rem;
620
+ color: #0f172a;
621
+ font-family: inherit;
622
+ transition: border-color 0.2s;
623
+ outline: none;
624
+ }
625
+
626
+ .field input:focus,
627
+ .field textarea:focus { border-color: var(--primary); }
628
+
629
+ .btn {
630
+ background: var(--primary);
631
+ color: white;
632
+ padding: 0.875rem 2rem;
633
+ border: none;
634
+ border-radius: 8px;
635
+ font-size: 1rem;
636
+ font-weight: 600;
637
+ cursor: pointer;
638
+ transition: opacity 0.2s;
639
+ }
640
+
641
+ .btn:hover { opacity: 0.9; }
642
+
643
+ .success {
644
+ padding: 2rem;
645
+ background: #f0fdf4;
646
+ border: 1px solid #86efac;
647
+ border-radius: 12px;
648
+ color: #166534;
649
+ font-size: 1.1rem;
650
+ text-align: center;
651
+ }
652
+ `,A=`import styles from "./page.module.css"
653
+
654
+ const SERVICES = [
655
+ { icon: "\u{1F680}", title: "Service One", desc: "Comprehensive solution designed to meet your business needs efficiently and effectively." },
656
+ { icon: "\u{1F4A1}", title: "Service Two", desc: "Innovative approaches that help your business grow and stay ahead of the competition." },
657
+ { icon: "\u{1F527}", title: "Service Three", desc: "Expert support and maintenance to ensure smooth operations at all times." },
658
+ { icon: "\u{1F4CA}", title: "Service Four", desc: "Data-driven insights and analytics to help you make better business decisions." },
659
+ { icon: "\u{1F91D}", title: "Service Five", desc: "Partnership programs designed to create mutual value and long-term success." },
660
+ { icon: "\u{1F310}", title: "Service Six", desc: "Global reach with local expertise to serve customers worldwide." },
661
+ ]
662
+
663
+ export default function ServicesPage() {
664
+ return (
665
+ <div className={styles.page}>
666
+ <section className={styles.hero}>
667
+ <h1>Our Services</h1>
668
+ <p>Everything you need to succeed \u2014 all in one place</p>
669
+ </section>
670
+ <section className={styles.content}>
671
+ <div className={styles.container}>
672
+ <div className={styles.grid}>
673
+ {SERVICES.map(s => (
674
+ <div key={s.title} className={styles.card}>
675
+ <span className={styles.icon}>{s.icon}</span>
676
+ <h3>{s.title}</h3>
677
+ <p>{s.desc}</p>
678
+ </div>
679
+ ))}
680
+ </div>
681
+ </div>
682
+ </section>
683
+ </div>
684
+ )
685
+ }
686
+ `,_=`.page { min-height: 100vh; }
687
+
688
+ .hero {
689
+ background: var(--primary);
690
+ color: white;
691
+ padding: 5rem 1rem;
692
+ text-align: center;
693
+ }
694
+
695
+ .hero h1 { font-size: 2.5rem; font-weight: 800; margin-bottom: 1rem; }
696
+ .hero p { font-size: 1.1rem; opacity: 0.85; }
697
+
698
+ .content { padding: 4rem 1rem; background: #f8fafc; }
699
+ .container { max-width: 1100px; margin: 0 auto; }
700
+
701
+ .grid {
702
+ display: grid;
703
+ grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
704
+ gap: 1.5rem;
705
+ }
706
+
707
+ .card {
708
+ background: white;
709
+ padding: 2rem;
710
+ border-radius: 12px;
711
+ box-shadow: 0 1px 4px rgba(0,0,0,0.06);
712
+ transition: transform 0.2s, box-shadow 0.2s;
713
+ }
714
+
715
+ .card:hover {
716
+ transform: translateY(-4px);
717
+ box-shadow: 0 8px 24px rgba(0,0,0,0.1);
718
+ }
719
+
720
+ .icon { font-size: 2rem; display: block; margin-bottom: 1rem; }
721
+
722
+ .card h3 {
723
+ font-size: 1.1rem;
724
+ font-weight: 700;
725
+ margin-bottom: 0.5rem;
726
+ color: #0f172a;
727
+ }
728
+
729
+ .card p { color: #64748b; font-size: 0.9rem; line-height: 1.6; }
730
+ `,L=`import styles from "./page.module.css"
731
+ import Link from "next/link"
732
+
733
+ const PLANS = [
734
+ {
735
+ name: "Starter",
736
+ price: "\u20B9999",
737
+ period: "/month",
738
+ features: ["5 Users", "10GB Storage", "Email Support", "Basic Analytics"],
739
+ cta: "Get Started",
740
+ highlighted: false,
741
+ },
742
+ {
743
+ name: "Professional",
744
+ price: "\u20B92,999",
745
+ period: "/month",
746
+ features: ["25 Users", "50GB Storage", "Priority Support", "Advanced Analytics", "API Access"],
747
+ cta: "Start Free Trial",
748
+ highlighted: true,
749
+ },
750
+ {
751
+ name: "Enterprise",
752
+ price: "Custom",
753
+ period: "",
754
+ features: ["Unlimited Users", "Unlimited Storage", "24/7 Support", "Custom Analytics", "Dedicated Manager"],
755
+ cta: "Contact Sales",
756
+ highlighted: false,
757
+ },
758
+ ]
759
+
760
+ export default function PricingPage() {
761
+ return (
762
+ <div className={styles.page}>
763
+ <section className={styles.hero}>
764
+ <h1>Simple Pricing</h1>
765
+ <p>No hidden fees. Cancel anytime.</p>
766
+ </section>
767
+ <section className={styles.content}>
768
+ <div className={styles.container}>
769
+ <div className={styles.grid}>
770
+ {PLANS.map(plan => (
771
+ <div
772
+ key={plan.name}
773
+ className={\`\${styles.card} \${plan.highlighted ? styles.highlighted : ""}\`}
774
+ >
775
+ {plan.highlighted && <span className={styles.badge}>Most Popular</span>}
776
+ <h3>{plan.name}</h3>
777
+ <div className={styles.price}>
778
+ <span className={styles.amount}>{plan.price}</span>
779
+ <span className={styles.period}>{plan.period}</span>
780
+ </div>
781
+ <ul className={styles.features}>
782
+ {plan.features.map(f => <li key={f}>\u2705 {f}</li>)}
783
+ </ul>
784
+ <Link href="/contact" className={styles.btn}>{plan.cta}</Link>
785
+ </div>
786
+ ))}
787
+ </div>
788
+ </div>
789
+ </section>
790
+ </div>
791
+ )
792
+ }
793
+ `,O=`.page { min-height: 100vh; }
794
+
795
+ .hero {
796
+ background: var(--primary);
797
+ color: white;
798
+ padding: 5rem 1rem;
799
+ text-align: center;
800
+ }
801
+
802
+ .hero h1 { font-size: 2.5rem; font-weight: 800; margin-bottom: 1rem; }
803
+ .hero p { font-size: 1.1rem; opacity: 0.85; }
804
+
805
+ .content { padding: 4rem 1rem; background: #f8fafc; }
806
+ .container { max-width: 1100px; margin: 0 auto; }
807
+
808
+ .grid {
809
+ display: grid;
810
+ grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
811
+ gap: 1.5rem;
812
+ align-items: start;
813
+ }
814
+
815
+ .card {
816
+ background: white;
817
+ padding: 2rem;
818
+ border-radius: 16px;
819
+ box-shadow: 0 1px 4px rgba(0,0,0,0.06);
820
+ position: relative;
821
+ border: 2px solid transparent;
822
+ }
823
+
824
+ .highlighted {
825
+ border-color: var(--primary);
826
+ transform: scale(1.03);
827
+ box-shadow: 0 8px 32px rgba(0,0,0,0.12);
828
+ }
829
+
830
+ .badge {
831
+ position: absolute;
832
+ top: -12px;
833
+ left: 50%;
834
+ transform: translateX(-50%);
835
+ background: var(--primary);
836
+ color: white;
837
+ padding: 2px 16px;
838
+ border-radius: 99px;
839
+ font-size: 0.75rem;
840
+ font-weight: 700;
841
+ white-space: nowrap;
842
+ }
843
+
844
+ .card h3 { font-size: 1.1rem; font-weight: 700; margin-bottom: 1rem; color: #0f172a; }
845
+
846
+ .price { display: flex; align-items: baseline; gap: 0.25rem; margin-bottom: 1.5rem; }
847
+
848
+ .amount { font-size: 2rem; font-weight: 800; color: var(--primary); }
849
+ .period { font-size: 0.875rem; color: #64748b; }
850
+
851
+ .features { list-style: none; display: flex; flex-direction: column; gap: 0.6rem; margin-bottom: 2rem; }
852
+ .features li { font-size: 0.9rem; color: #475569; }
853
+
854
+ .btn {
855
+ display: block;
856
+ text-align: center;
857
+ background: var(--primary);
858
+ color: white;
859
+ padding: 0.75rem;
860
+ border-radius: 8px;
861
+ font-weight: 600;
862
+ font-size: 0.95rem;
863
+ transition: opacity 0.2s;
864
+ }
865
+
866
+ .btn:hover { opacity: 0.9; }
867
+ `,z=`"use client"
868
+ import { useState } from "react"
869
+ import styles from "./page.module.css"
870
+
871
+ export default function AuthPage() {
872
+ const [mode, setMode] = useState<"login" | "register">("login")
873
+ const [form, setForm] = useState({ name: "", email: "", password: "" })
874
+
875
+ const handleSubmit = (e: React.FormEvent) => {
876
+ e.preventDefault()
877
+ alert(mode === "login" ? "Login successful!" : "Account created!")
878
+ }
879
+
880
+ return (
881
+ <div className={styles.page}>
882
+ <div className={styles.card}>
883
+ <h1 className={styles.title}>{{SITE_NAME}}</h1>
884
+ <div className={styles.tabs}>
885
+ <button
886
+ className={\`\${styles.tab} \${mode === "login" ? styles.active : ""}\`}
887
+ onClick={() => setMode("login")}
888
+ >
889
+ Login
890
+ </button>
891
+ <button
892
+ className={\`\${styles.tab} \${mode === "register" ? styles.active : ""}\`}
893
+ onClick={() => setMode("register")}
894
+ >
895
+ Register
896
+ </button>
897
+ </div>
898
+ <form onSubmit={handleSubmit} className={styles.form}>
899
+ {mode === "register" && (
900
+ <div className={styles.field}>
901
+ <label>Full Name</label>
902
+ <input
903
+ type="text" required placeholder="Your name"
904
+ value={form.name}
905
+ onChange={e => setForm({ ...form, name: e.target.value })}
906
+ />
907
+ </div>
908
+ )}
909
+ <div className={styles.field}>
910
+ <label>Email</label>
911
+ <input
912
+ type="email" required placeholder="your@email.com"
913
+ value={form.email}
914
+ onChange={e => setForm({ ...form, email: e.target.value })}
915
+ />
916
+ </div>
917
+ <div className={styles.field}>
918
+ <label>Password</label>
919
+ <input
920
+ type="password" required placeholder="\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022"
921
+ value={form.password}
922
+ onChange={e => setForm({ ...form, password: e.target.value })}
923
+ />
924
+ </div>
925
+ <button type="submit" className={styles.btn}>
926
+ {mode === "login" ? "Sign In" : "Create Account"}
927
+ </button>
928
+ </form>
929
+ </div>
930
+ </div>
931
+ )
932
+ }
933
+ `,R=`.page {
934
+ min-height: 100vh;
935
+ display: flex;
936
+ align-items: center;
937
+ justify-content: center;
938
+ background: #f8fafc;
939
+ padding: 2rem;
940
+ }
941
+
942
+ .card {
943
+ background: white;
944
+ padding: 2.5rem;
945
+ border-radius: 16px;
946
+ box-shadow: 0 4px 24px rgba(0,0,0,0.08);
947
+ width: 100%;
948
+ max-width: 420px;
949
+ }
950
+
951
+ .title {
952
+ text-align: center;
953
+ font-size: 1.5rem;
954
+ font-weight: 800;
955
+ color: var(--primary);
956
+ margin-bottom: 1.5rem;
957
+ }
958
+
959
+ .tabs {
960
+ display: flex;
961
+ border-bottom: 2px solid #e2e8f0;
962
+ margin-bottom: 1.5rem;
963
+ }
964
+
965
+ .tab {
966
+ flex: 1;
967
+ padding: 0.75rem;
968
+ background: none;
969
+ border: none;
970
+ font-size: 0.95rem;
971
+ font-weight: 500;
972
+ color: #64748b;
973
+ cursor: pointer;
974
+ border-bottom: 2px solid transparent;
975
+ margin-bottom: -2px;
976
+ transition: all 0.2s;
977
+ }
978
+
979
+ .tab.active {
980
+ color: var(--primary);
981
+ border-bottom-color: var(--primary);
982
+ font-weight: 700;
983
+ }
984
+
985
+ .form { display: flex; flex-direction: column; gap: 1rem; }
986
+
987
+ .field { display: flex; flex-direction: column; gap: 0.4rem; }
988
+ .field label { font-size: 0.85rem; font-weight: 600; color: #374151; }
989
+
990
+ .field input {
991
+ padding: 0.75rem 1rem;
992
+ border: 1px solid #e2e8f0;
993
+ border-radius: 8px;
994
+ font-size: 0.95rem;
995
+ outline: none;
996
+ transition: border-color 0.2s;
997
+ }
998
+
999
+ .field input:focus { border-color: var(--primary); }
1000
+
1001
+ .btn {
1002
+ background: var(--primary);
1003
+ color: white;
1004
+ padding: 0.875rem;
1005
+ border: none;
1006
+ border-radius: 8px;
1007
+ font-size: 1rem;
1008
+ font-weight: 700;
1009
+ cursor: pointer;
1010
+ margin-top: 0.5rem;
1011
+ transition: opacity 0.2s;
1012
+ }
1013
+
1014
+ .btn:hover { opacity: 0.9; }
1015
+ `,I=`import Link from "next/link"
1016
+
1017
+ export default function NotFound() {
1018
+ return (
1019
+ <div style={{ minHeight: "100vh", display: "flex", alignItems: "center", justifyContent: "center", textAlign: "center", padding: "2rem" }}>
1020
+ <div>
1021
+ <h1 style={{ fontSize: "6rem", fontWeight: 800, color: "var(--primary)", lineHeight: 1 }}>404</h1>
1022
+ <h2 style={{ fontSize: "1.5rem", fontWeight: 700, margin: "1rem 0 0.5rem" }}>Page Not Found</h2>
1023
+ <p style={{ color: "#64748b", marginBottom: "2rem" }}>The page you are looking for does not exist.</p>
1024
+ <Link href="/" style={{ background: "var(--primary)", color: "white", padding: "0.75rem 2rem", borderRadius: "8px", fontWeight: 600 }}>
1025
+ Go Home
1026
+ </Link>
1027
+ </div>
1028
+ </div>
1029
+ )
1030
+ }
1031
+ `,M=`{
1032
+ "compilerOptions": {
1033
+ "target": "es5",
1034
+ "lib": ["dom", "dom.iterable", "esnext"],
1035
+ "allowJs": true,
1036
+ "skipLibCheck": true,
1037
+ "strict": true,
1038
+ "noEmit": true,
1039
+ "esModuleInterop": true,
1040
+ "module": "esnext",
1041
+ "moduleResolution": "bundler",
1042
+ "resolveJsonModule": true,
1043
+ "isolatedModules": true,
1044
+ "jsx": "preserve",
1045
+ "incremental": true,
1046
+ "plugins": [{ "name": "next" }],
1047
+ "paths": { "@/*": ["./src/*"] }
1048
+ },
1049
+ "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"],
1050
+ "exclude": ["node_modules"]
1051
+ }
1052
+ `,F=e=>`# ${e}
1053
+
1054
+ Generated by **yuktai Vibe Coder** \u2014 open source AI plugin for Next.js.
1055
+
1056
+ ## Getting Started
1057
+
1058
+ \`\`\`bash
1059
+ npm install
1060
+ npm run dev
1061
+ \`\`\`
1062
+
1063
+ Open [http://localhost:3000](http://localhost:3000)
1064
+
1065
+ ## Tech Stack
1066
+
1067
+ - **Next.js 16** \u2014 React framework
1068
+ - **Tailwind CSS** \u2014 Utility-first styling
1069
+ - **CSS Modules** \u2014 Scoped component styles
1070
+ - **TypeScript** \u2014 Type safety
1071
+
1072
+ ## Pages
1073
+
1074
+ All pages are in \`src/app/\` directory.
1075
+ Edit any page to customise content.
1076
+
1077
+ ---
1078
+
1079
+ *Built with yuktai \u2014 aksharatantra.vercel.app*
1080
+ `;function G(e,r){return{hotel:`Experience luxury and comfort at ${e}`,ecommerce:`Shop the best products at ${e}`,restaurant:`Delicious food crafted with love at ${e}`,portfolio:`Creative work and professional services by ${e}`,blog:`Insights, stories, and ideas from ${e}`,saas:`Powerful tools to grow your business \u2014 ${e}`,government:`Official services and information \u2014 ${e}`,healthcare:`Quality healthcare you can trust \u2014 ${e}`,education:`Learn, grow, and succeed with ${e}`,realestate:`Find your perfect property with ${e}`,landing:`The smarter way to get things done \u2014 ${e}`,generic:`Welcome to ${e} \u2014 your trusted partner`}[r]||`Welcome to ${e}`}async function W(e){let r=(await import("jszip")).default,t=new r,i=l[e.theme]||l.blue,c=G(e.siteName,e.websiteType),a=new Date().getFullYear().toString(),m={SITE_NAME:e.siteName,THEME_COLOR:i,TAGLINE:c,YEAR:a},o=n=>p(n,m).replace(/\{\{SITE_NAME_LOWER\}\}/g,e.siteName.toLowerCase().replace(/\s+/g,""));t.file("package.json",g(e.siteName)),t.file("next.config.js",u),t.file("tailwind.config.js",f(i)),t.file("tsconfig.json",M),t.file("README.md",F(e.siteName)),t.file("postcss.config.js","module.exports = { plugins: { tailwindcss: {}, autoprefixer: {} } }"),t.file(".gitignore",`node_modules
1081
+ .next
1082
+ .env.local
1083
+ .DS_Store`),t.file("src/app/globals.css",h(i)),t.file("src/app/layout.tsx",o(y)),t.file("src/app/not-found.tsx",I),t.file("src/components/Navbar.tsx",o(b)),t.file("src/components/Navbar.module.css",x),t.file("src/components/Footer.tsx",o(v)),t.file("src/components/Footer.module.css",S);for(let n of e.pages)switch(n){case"home":t.file("src/app/page.tsx",o(N)),t.file("src/app/page.module.css",w);break;case"about":t.file("src/app/about/page.tsx",o(k)),t.file("src/app/about/page.module.css",T);break;case"contact":t.file("src/app/contact/page.tsx",o(E)),t.file("src/app/contact/page.module.css",C);break;case"services":t.file("src/app/services/page.tsx",o(A)),t.file("src/app/services/page.module.css",_);break;case"pricing":t.file("src/app/pricing/page.tsx",o(L)),t.file("src/app/pricing/page.module.css",O);break;case"auth":t.file("src/app/auth/page.tsx",o(z)),t.file("src/app/auth/page.module.css",R);break;default:t.file(`src/app/${n}/page.tsx`,U(n,e.siteName,i,m,o));break}let P=await t.generateAsync({type:"blob"}),d=URL.createObjectURL(P),s=document.createElement("a");s.href=d,s.download=`${e.siteName.toLowerCase().replace(/\s+/g,"-")}-nextjs.zip`,document.body.appendChild(s),s.click(),document.body.removeChild(s),URL.revokeObjectURL(d)}function U(e,r,t,i,c){let a=e.charAt(0).toUpperCase()+e.slice(1);return`import styles from "./page.module.css"
1084
+
1085
+ export default function ${a}Page() {
1086
+ return (
1087
+ <div style={{ minHeight: "100vh" }}>
1088
+ <section style={{
1089
+ background: "${t}",
1090
+ color: "white",
1091
+ padding: "5rem 1rem",
1092
+ textAlign: "center"
1093
+ }}>
1094
+ <h1 style={{ fontSize: "2.5rem", fontWeight: 800, marginBottom: "1rem" }}>
1095
+ ${a}
1096
+ </h1>
1097
+ <p style={{ fontSize: "1.1rem", opacity: 0.85 }}>
1098
+ ${r} \u2014 ${a} page
1099
+ </p>
1100
+ </section>
1101
+ <section style={{ padding: "4rem 1rem", maxWidth: "1100px", margin: "0 auto" }}>
1102
+ <p style={{ color: "#64748b", fontSize: "1rem", textAlign: "center" }}>
1103
+ This is the ${a} page. Edit this file to add your content.
1104
+ </p>
1105
+ </section>
1106
+ </div>
1107
+ )
1108
+ }
1109
+ `}export{W as generateZip};