kofi-stack-template-generator 2.1.28 → 2.1.36

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.
Files changed (44) hide show
  1. package/.turbo/turbo-build.log +6 -6
  2. package/.turbo/turbo-typecheck.log +1 -1
  3. package/dist/index.js +1023 -4
  4. package/package.json +1 -1
  5. package/src/generator.ts +57 -0
  6. package/src/templates.generated.ts +40 -6
  7. package/templates/admin/next.config.ts.hbs +7 -0
  8. package/templates/admin/package.json.hbs +38 -0
  9. package/templates/admin/postcss.config.mjs.hbs +7 -0
  10. package/templates/admin/src/app/analytics/page.tsx.hbs +39 -0
  11. package/templates/admin/src/app/globals.css.hbs +2 -0
  12. package/templates/admin/src/app/layout.tsx.hbs +33 -0
  13. package/templates/admin/src/app/page.tsx.hbs +47 -0
  14. package/templates/admin/src/app/settings/page.tsx.hbs +74 -0
  15. package/templates/admin/src/app/users/page.tsx.hbs +16 -0
  16. package/templates/admin/src/components/admin-sidebar.tsx.hbs +51 -0
  17. package/templates/admin/src/components/stats-cards.tsx.hbs +28 -0
  18. package/templates/admin/src/components/user-table.tsx.hbs +65 -0
  19. package/templates/admin/tsconfig.json.hbs +15 -0
  20. package/templates/design-system/next.config.ts.hbs +7 -0
  21. package/templates/design-system/package.json.hbs +35 -0
  22. package/templates/design-system/postcss.config.mjs.hbs +7 -0
  23. package/templates/design-system/src/app/blocks/page.tsx.hbs +140 -0
  24. package/templates/design-system/src/app/colors/page.tsx.hbs +34 -0
  25. package/templates/design-system/src/app/components/page.tsx.hbs +110 -0
  26. package/templates/design-system/src/app/globals.css.hbs +2 -0
  27. package/templates/design-system/src/app/layout.tsx.hbs +46 -0
  28. package/templates/design-system/src/app/page.tsx.hbs +65 -0
  29. package/templates/design-system/src/app/typography/page.tsx.hbs +112 -0
  30. package/templates/design-system/src/components/color-palette.tsx.hbs +117 -0
  31. package/templates/design-system/tsconfig.json.hbs +13 -0
  32. package/templates/marketing/nextjs/package.json.hbs +1 -1
  33. package/templates/marketing/payload/package.json.hbs +1 -1
  34. package/templates/mobile/app.json.hbs +39 -0
  35. package/templates/mobile/babel.config.js.hbs +6 -0
  36. package/templates/mobile/package.json.hbs +30 -0
  37. package/templates/mobile/src/app/(tabs)/_layout.tsx.hbs +27 -0
  38. package/templates/mobile/src/app/(tabs)/index.tsx.hbs +28 -0
  39. package/templates/mobile/src/app/(tabs)/profile.tsx.hbs +44 -0
  40. package/templates/mobile/src/app/_layout.tsx.hbs +13 -0
  41. package/templates/mobile/src/app/index.tsx.hbs +5 -0
  42. package/templates/mobile/tsconfig.json.hbs +10 -0
  43. package/templates/monorepo/package.json.hbs +4 -1
  44. package/templates/web/package.json.hbs +1 -1
@@ -0,0 +1,74 @@
1
+ import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@repo/ui/components/card'
2
+ import { Button } from '@repo/ui/components/button'
3
+ import { Input } from '@repo/ui/components/input'
4
+ import { Label } from '@repo/ui/components/label'
5
+
6
+ export default function SettingsPage() {
7
+ return (
8
+ <div className="space-y-8">
9
+ <div>
10
+ <h1 className="text-3xl font-bold tracking-tight">Settings</h1>
11
+ <p className="text-muted-foreground">
12
+ Configure application settings and preferences.
13
+ </p>
14
+ </div>
15
+
16
+ <div className="grid gap-6">
17
+ <Card>
18
+ <CardHeader>
19
+ <CardTitle>General Settings</CardTitle>
20
+ <CardDescription>Basic application configuration</CardDescription>
21
+ </CardHeader>
22
+ <CardContent className="space-y-4">
23
+ <div className="space-y-2">
24
+ <Label htmlFor="app-name">Application Name</Label>
25
+ <Input id="app-name" defaultValue="{{projectName}}" />
26
+ </div>
27
+ <div className="space-y-2">
28
+ <Label htmlFor="support-email">Support Email</Label>
29
+ <Input id="support-email" type="email" placeholder="support@example.com" />
30
+ </div>
31
+ <Button>Save Changes</Button>
32
+ </CardContent>
33
+ </Card>
34
+
35
+ <Card>
36
+ <CardHeader>
37
+ <CardTitle>Security</CardTitle>
38
+ <CardDescription>Security and authentication settings</CardDescription>
39
+ </CardHeader>
40
+ <CardContent className="space-y-4">
41
+ <div className="flex items-center justify-between">
42
+ <div>
43
+ <p className="font-medium">Two-Factor Authentication</p>
44
+ <p className="text-sm text-muted-foreground">
45
+ Require 2FA for all admin users
46
+ </p>
47
+ </div>
48
+ <Button variant="outline">Configure</Button>
49
+ </div>
50
+ <div className="flex items-center justify-between">
51
+ <div>
52
+ <p className="font-medium">Session Timeout</p>
53
+ <p className="text-sm text-muted-foreground">
54
+ Auto logout after inactivity
55
+ </p>
56
+ </div>
57
+ <Button variant="outline">Configure</Button>
58
+ </div>
59
+ </CardContent>
60
+ </Card>
61
+
62
+ <Card className="border-destructive">
63
+ <CardHeader>
64
+ <CardTitle className="text-destructive">Danger Zone</CardTitle>
65
+ <CardDescription>Irreversible actions</CardDescription>
66
+ </CardHeader>
67
+ <CardContent>
68
+ <Button variant="destructive">Delete All Data</Button>
69
+ </CardContent>
70
+ </Card>
71
+ </div>
72
+ </div>
73
+ )
74
+ }
@@ -0,0 +1,16 @@
1
+ import { UserTable } from '@/components/user-table'
2
+
3
+ export default function UsersPage() {
4
+ return (
5
+ <div className="space-y-8">
6
+ <div>
7
+ <h1 className="text-3xl font-bold tracking-tight">Users</h1>
8
+ <p className="text-muted-foreground">
9
+ Manage users, roles, and permissions.
10
+ </p>
11
+ </div>
12
+
13
+ <UserTable />
14
+ </div>
15
+ )
16
+ }
@@ -0,0 +1,51 @@
1
+ 'use client'
2
+
3
+ import { cn } from '@repo/ui/lib/utils'
4
+ import Link from 'next/link'
5
+ import { usePathname } from 'next/navigation'
6
+
7
+ const navigation = [
8
+ { name: 'Dashboard', href: '/' },
9
+ { name: 'Users', href: '/users' },
10
+ { name: 'Analytics', href: '/analytics' },
11
+ { name: 'Settings', href: '/settings' },
12
+ ]
13
+
14
+ export function AdminSidebar() {
15
+ const pathname = usePathname()
16
+
17
+ return (
18
+ <div className="flex h-screen w-64 flex-col border-r bg-card">
19
+ <div className="flex h-14 items-center border-b px-6">
20
+ <Link href="/" className="flex items-center gap-2 font-semibold">
21
+ <span>{{projectName}} Admin</span>
22
+ </Link>
23
+ </div>
24
+ <nav className="flex-1 space-y-1 p-4">
25
+ {navigation.map((item) => (
26
+ <Link
27
+ key={item.name}
28
+ href={item.href}
29
+ className={cn(
30
+ 'flex items-center rounded-md px-3 py-2 text-sm font-medium transition-colors',
31
+ pathname === item.href
32
+ ? 'bg-primary text-primary-foreground'
33
+ : 'text-muted-foreground hover:bg-muted hover:text-foreground'
34
+ )}
35
+ >
36
+ {item.name}
37
+ </Link>
38
+ ))}
39
+ </nav>
40
+ <div className="border-t p-4">
41
+ <Link
42
+ href="http://localhost:3001"
43
+ target="_blank"
44
+ className="flex items-center rounded-md px-3 py-2 text-sm font-medium text-muted-foreground hover:bg-muted hover:text-foreground"
45
+ >
46
+ Back to App
47
+ </Link>
48
+ </div>
49
+ </div>
50
+ )
51
+ }
@@ -0,0 +1,28 @@
1
+ import { Card, CardContent, CardHeader, CardTitle } from '@repo/ui/components/card'
2
+
3
+ const stats = [
4
+ { name: 'Total Users', value: '0', change: '+0%' },
5
+ { name: 'Active Sessions', value: '0', change: '+0%' },
6
+ { name: 'Total Revenue', value: '$0', change: '+0%' },
7
+ { name: 'Conversion Rate', value: '0%', change: '+0%' },
8
+ ]
9
+
10
+ export function StatsCards() {
11
+ return (
12
+ <div className="grid gap-4 md:grid-cols-2 lg:grid-cols-4">
13
+ {stats.map((stat) => (
14
+ <Card key={stat.name}>
15
+ <CardHeader className="flex flex-row items-center justify-between space-y-0 pb-2">
16
+ <CardTitle className="text-sm font-medium">{stat.name}</CardTitle>
17
+ </CardHeader>
18
+ <CardContent>
19
+ <div className="text-2xl font-bold">{stat.value}</div>
20
+ <p className="text-xs text-muted-foreground">
21
+ {stat.change} from last month
22
+ </p>
23
+ </CardContent>
24
+ </Card>
25
+ ))}
26
+ </div>
27
+ )
28
+ }
@@ -0,0 +1,65 @@
1
+ 'use client'
2
+
3
+ import { Button } from '@repo/ui/components/button'
4
+ import { Card, CardContent, CardHeader, CardTitle } from '@repo/ui/components/card'
5
+
6
+ // Placeholder user data
7
+ const users = [
8
+ { id: '1', name: 'John Doe', email: 'john@example.com', role: 'admin', status: 'active' },
9
+ { id: '2', name: 'Jane Smith', email: 'jane@example.com', role: 'user', status: 'active' },
10
+ { id: '3', name: 'Bob Johnson', email: 'bob@example.com', role: 'user', status: 'inactive' },
11
+ ]
12
+
13
+ export function UserTable() {
14
+ return (
15
+ <Card>
16
+ <CardHeader className="flex flex-row items-center justify-between">
17
+ <CardTitle>All Users</CardTitle>
18
+ <Button size="sm">Add User</Button>
19
+ </CardHeader>
20
+ <CardContent>
21
+ <div className="relative overflow-x-auto">
22
+ <table className="w-full text-sm text-left">
23
+ <thead className="text-xs text-muted-foreground uppercase bg-muted/50">
24
+ <tr>
25
+ <th className="px-6 py-3">Name</th>
26
+ <th className="px-6 py-3">Email</th>
27
+ <th className="px-6 py-3">Role</th>
28
+ <th className="px-6 py-3">Status</th>
29
+ <th className="px-6 py-3">Actions</th>
30
+ </tr>
31
+ </thead>
32
+ <tbody>
33
+ {users.map((user) => (
34
+ <tr key={user.id} className="border-b">
35
+ <td className="px-6 py-4 font-medium">{user.name}</td>
36
+ <td className="px-6 py-4">{user.email}</td>
37
+ <td className="px-6 py-4">
38
+ <span className="capitalize">{user.role}</span>
39
+ </td>
40
+ <td className="px-6 py-4">
41
+ <span
42
+ className={`px-2 py-1 rounded-full text-xs ${
43
+ user.status === 'active'
44
+ ? 'bg-green-100 text-green-800 dark:bg-green-900 dark:text-green-200'
45
+ : 'bg-gray-100 text-gray-800 dark:bg-gray-800 dark:text-gray-200'
46
+ }`}
47
+ >
48
+ {user.status}
49
+ </span>
50
+ </td>
51
+ <td className="px-6 py-4">
52
+ <div className="flex gap-2">
53
+ <Button variant="ghost" size="sm">Edit</Button>
54
+ <Button variant="ghost" size="sm" className="text-destructive">Ban</Button>
55
+ </div>
56
+ </td>
57
+ </tr>
58
+ ))}
59
+ </tbody>
60
+ </table>
61
+ </div>
62
+ </CardContent>
63
+ </Card>
64
+ )
65
+ }
@@ -0,0 +1,15 @@
1
+ {
2
+ "extends": "@repo/config-typescript/nextjs.json",
3
+ "compilerOptions": {
4
+ "baseUrl": ".",
5
+ "paths": {
6
+ "@/*": ["./src/*"],
7
+ "@repo/ui": ["../../packages/ui/src"],
8
+ "@repo/ui/*": ["../../packages/ui/src/*"],
9
+ "@repo/backend": ["../../packages/backend"],
10
+ "@repo/backend/*": ["../../packages/backend/*"]
11
+ }
12
+ },
13
+ "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"],
14
+ "exclude": ["node_modules"]
15
+ }
@@ -0,0 +1,7 @@
1
+ import type { NextConfig } from 'next'
2
+
3
+ const nextConfig: NextConfig = {
4
+ transpilePackages: ['@repo/ui'],
5
+ }
6
+
7
+ export default nextConfig
@@ -0,0 +1,35 @@
1
+ {
2
+ "name": "@repo/design-system",
3
+ "version": "0.1.0",
4
+ "private": true,
5
+ "type": "module",
6
+ "scripts": {
7
+ "dev": "next dev --turbopack --port 3002",
8
+ "build": "next build",
9
+ "start": "next start",
10
+ "lint": "biome check .",
11
+ "lint:fix": "biome check --write .",
12
+ "typecheck": "tsc --noEmit"
13
+ },
14
+ "dependencies": {
15
+ "@repo/ui": "workspace:*",
16
+ "next": "^16.0.0",
17
+ "react": "^19.0.0",
18
+ "react-dom": "^19.0.0",
19
+ "next-themes": "^0.4.6",
20
+ {{#if (eq shadcn.iconLibrary "hugeicons")}} "@hugeicons/react": "^0.3.0"
21
+ {{/if}}{{#if (eq shadcn.iconLibrary "lucide")}} "lucide-react": "^0.469.0"
22
+ {{/if}}{{#if (eq shadcn.iconLibrary "tabler")}} "@tabler/icons-react": "^3.31.0"
23
+ {{/if}}{{#if (eq shadcn.iconLibrary "phosphor")}} "@phosphor-icons/react": "^2.1.7"
24
+ {{/if}} },
25
+ "devDependencies": {
26
+ "@repo/config-typescript": "workspace:*",
27
+ "@types/node": "^20.0.0",
28
+ "@types/react": "^19.0.0",
29
+ "@types/react-dom": "^19.0.0",
30
+ "tailwindcss": "^4.0.0",
31
+ "@tailwindcss/postcss": "^4.0.0",
32
+ "postcss": "^8.4.0",
33
+ "typescript": "^5.0.0"
34
+ }
35
+ }
@@ -0,0 +1,7 @@
1
+ const config = {
2
+ plugins: {
3
+ '@tailwindcss/postcss': {},
4
+ },
5
+ }
6
+
7
+ export default config
@@ -0,0 +1,140 @@
1
+ import { Button } from '@repo/ui/components/button'
2
+ import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@repo/ui/components/card'
3
+
4
+ export default function BlocksPage() {
5
+ return (
6
+ <div className="container mx-auto max-w-6xl px-6 py-10 space-y-16">
7
+ <div className="space-y-4">
8
+ <h1 className="text-4xl font-bold tracking-tight">Blocks</h1>
9
+ <p className="text-xl text-muted-foreground">
10
+ Pre-built marketing and application blocks.
11
+ </p>
12
+ </div>
13
+
14
+ {/* Hero Block */}
15
+ <section className="space-y-4">
16
+ <h2 className="text-2xl font-semibold border-b pb-2">Hero Section</h2>
17
+ <div className="rounded-lg border bg-gradient-to-b from-background to-muted p-12 text-center">
18
+ <h1 className="text-4xl font-bold tracking-tight sm:text-5xl md:text-6xl">
19
+ Build something amazing
20
+ </h1>
21
+ <p className="mt-6 text-lg text-muted-foreground max-w-2xl mx-auto">
22
+ Start your next project with our powerful starter kit. Built with
23
+ the latest technologies and best practices.
24
+ </p>
25
+ <div className="mt-8 flex justify-center gap-4">
26
+ <Button size="lg">Get Started</Button>
27
+ <Button size="lg" variant="outline">Learn More</Button>
28
+ </div>
29
+ </div>
30
+ </section>
31
+
32
+ {/* Features Block */}
33
+ <section className="space-y-4">
34
+ <h2 className="text-2xl font-semibold border-b pb-2">Features Grid</h2>
35
+ <div className="grid gap-6 md:grid-cols-2 lg:grid-cols-3">
36
+ <Card>
37
+ <CardHeader>
38
+ <CardTitle>Fast Development</CardTitle>
39
+ <CardDescription>
40
+ Get started quickly with pre-built components and templates.
41
+ </CardDescription>
42
+ </CardHeader>
43
+ </Card>
44
+ <Card>
45
+ <CardHeader>
46
+ <CardTitle>Type Safe</CardTitle>
47
+ <CardDescription>
48
+ Full TypeScript support with strict type checking enabled.
49
+ </CardDescription>
50
+ </CardHeader>
51
+ </Card>
52
+ <Card>
53
+ <CardHeader>
54
+ <CardTitle>Modern Stack</CardTitle>
55
+ <CardDescription>
56
+ Built with Next.js 16, React 19, and Tailwind CSS v4.
57
+ </CardDescription>
58
+ </CardHeader>
59
+ </Card>
60
+ </div>
61
+ </section>
62
+
63
+ {/* CTA Block */}
64
+ <section className="space-y-4">
65
+ <h2 className="text-2xl font-semibold border-b pb-2">Call to Action</h2>
66
+ <div className="rounded-lg border bg-primary p-12 text-center text-primary-foreground">
67
+ <h2 className="text-3xl font-bold">Ready to get started?</h2>
68
+ <p className="mt-4 text-lg opacity-90">
69
+ Join thousands of developers building with our platform.
70
+ </p>
71
+ <div className="mt-8">
72
+ <Button size="lg" variant="secondary">
73
+ Start Free Trial
74
+ </Button>
75
+ </div>
76
+ </div>
77
+ </section>
78
+
79
+ {/* Pricing Block */}
80
+ <section className="space-y-4">
81
+ <h2 className="text-2xl font-semibold border-b pb-2">Pricing Cards</h2>
82
+ <div className="grid gap-6 md:grid-cols-3">
83
+ <Card>
84
+ <CardHeader>
85
+ <CardTitle>Starter</CardTitle>
86
+ <CardDescription>For individuals and small projects</CardDescription>
87
+ <div className="mt-4">
88
+ <span className="text-4xl font-bold">$0</span>
89
+ <span className="text-muted-foreground">/month</span>
90
+ </div>
91
+ </CardHeader>
92
+ <CardContent>
93
+ <ul className="space-y-2 text-sm">
94
+ <li>Up to 3 projects</li>
95
+ <li>Basic analytics</li>
96
+ <li>Community support</li>
97
+ </ul>
98
+ <Button className="mt-6 w-full" variant="outline">Get Started</Button>
99
+ </CardContent>
100
+ </Card>
101
+ <Card className="border-primary">
102
+ <CardHeader>
103
+ <CardTitle>Pro</CardTitle>
104
+ <CardDescription>For growing teams</CardDescription>
105
+ <div className="mt-4">
106
+ <span className="text-4xl font-bold">$29</span>
107
+ <span className="text-muted-foreground">/month</span>
108
+ </div>
109
+ </CardHeader>
110
+ <CardContent>
111
+ <ul className="space-y-2 text-sm">
112
+ <li>Unlimited projects</li>
113
+ <li>Advanced analytics</li>
114
+ <li>Priority support</li>
115
+ </ul>
116
+ <Button className="mt-6 w-full">Subscribe</Button>
117
+ </CardContent>
118
+ </Card>
119
+ <Card>
120
+ <CardHeader>
121
+ <CardTitle>Enterprise</CardTitle>
122
+ <CardDescription>For large organizations</CardDescription>
123
+ <div className="mt-4">
124
+ <span className="text-4xl font-bold">Custom</span>
125
+ </div>
126
+ </CardHeader>
127
+ <CardContent>
128
+ <ul className="space-y-2 text-sm">
129
+ <li>Custom limits</li>
130
+ <li>Dedicated support</li>
131
+ <li>SLA guarantee</li>
132
+ </ul>
133
+ <Button className="mt-6 w-full" variant="outline">Contact Sales</Button>
134
+ </CardContent>
135
+ </Card>
136
+ </div>
137
+ </section>
138
+ </div>
139
+ )
140
+ }
@@ -0,0 +1,34 @@
1
+ import { ColorPalette } from '@/components/color-palette'
2
+
3
+ export default function ColorsPage() {
4
+ return (
5
+ <div className="container mx-auto max-w-6xl px-6 py-10 space-y-8">
6
+ <div className="space-y-4">
7
+ <h1 className="text-4xl font-bold tracking-tight">Color Palette</h1>
8
+ <p className="text-xl text-muted-foreground">
9
+ The color system for {{projectName}}. Click any swatch to copy the Tailwind class.
10
+ </p>
11
+ </div>
12
+
13
+ <div className="rounded-lg border bg-card p-6">
14
+ <h2 className="text-lg font-semibold mb-4">Usage</h2>
15
+ <p className="text-muted-foreground mb-4">
16
+ Colors are defined as CSS variables and mapped to Tailwind utility classes.
17
+ Use semantic color names for consistency across themes.
18
+ </p>
19
+ <div className="grid gap-4 md:grid-cols-2">
20
+ <div className="rounded-md bg-muted p-4">
21
+ <p className="text-sm font-mono text-muted-foreground mb-2">Background</p>
22
+ <code className="text-sm">className=&quot;bg-primary text-primary-foreground&quot;</code>
23
+ </div>
24
+ <div className="rounded-md bg-muted p-4">
25
+ <p className="text-sm font-mono text-muted-foreground mb-2">Text</p>
26
+ <code className="text-sm">className=&quot;text-muted-foreground&quot;</code>
27
+ </div>
28
+ </div>
29
+ </div>
30
+
31
+ <ColorPalette />
32
+ </div>
33
+ )
34
+ }
@@ -0,0 +1,110 @@
1
+ import { Button } from '@repo/ui/components/button'
2
+ import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from '@repo/ui/components/card'
3
+ import { Input } from '@repo/ui/components/input'
4
+ import { Label } from '@repo/ui/components/label'
5
+ import { Badge } from '@repo/ui/components/badge'
6
+ import { Separator } from '@repo/ui/components/separator'
7
+
8
+ export default function ComponentsPage() {
9
+ return (
10
+ <div className="container mx-auto max-w-6xl px-6 py-10 space-y-12">
11
+ <div className="space-y-4">
12
+ <h1 className="text-4xl font-bold tracking-tight">Components</h1>
13
+ <p className="text-xl text-muted-foreground">
14
+ UI components from the shared @repo/ui package.
15
+ </p>
16
+ </div>
17
+
18
+ <section className="space-y-6">
19
+ <h2 className="text-2xl font-semibold border-b pb-2">Buttons</h2>
20
+ <div className="flex flex-wrap gap-4">
21
+ <Button>Default</Button>
22
+ <Button variant="secondary">Secondary</Button>
23
+ <Button variant="destructive">Destructive</Button>
24
+ <Button variant="outline">Outline</Button>
25
+ <Button variant="ghost">Ghost</Button>
26
+ <Button variant="link">Link</Button>
27
+ </div>
28
+ <div className="flex flex-wrap gap-4">
29
+ <Button size="sm">Small</Button>
30
+ <Button size="default">Default</Button>
31
+ <Button size="lg">Large</Button>
32
+ </div>
33
+ </section>
34
+
35
+ <Separator />
36
+
37
+ <section className="space-y-6">
38
+ <h2 className="text-2xl font-semibold border-b pb-2">Cards</h2>
39
+ <div className="grid gap-6 md:grid-cols-2 lg:grid-cols-3">
40
+ <Card>
41
+ <CardHeader>
42
+ <CardTitle>Card Title</CardTitle>
43
+ <CardDescription>Card description goes here.</CardDescription>
44
+ </CardHeader>
45
+ <CardContent>
46
+ <p>Card content with some example text.</p>
47
+ </CardContent>
48
+ <CardFooter>
49
+ <Button size="sm">Action</Button>
50
+ </CardFooter>
51
+ </Card>
52
+
53
+ <Card>
54
+ <CardHeader>
55
+ <CardTitle>Another Card</CardTitle>
56
+ <CardDescription>Different content example.</CardDescription>
57
+ </CardHeader>
58
+ <CardContent>
59
+ <p>More card content here.</p>
60
+ </CardContent>
61
+ </Card>
62
+
63
+ <Card>
64
+ <CardHeader>
65
+ <CardTitle>Third Card</CardTitle>
66
+ <CardDescription>Yet another card example.</CardDescription>
67
+ </CardHeader>
68
+ <CardContent>
69
+ <p>Additional content for this card.</p>
70
+ </CardContent>
71
+ </Card>
72
+ </div>
73
+ </section>
74
+
75
+ <Separator />
76
+
77
+ <section className="space-y-6">
78
+ <h2 className="text-2xl font-semibold border-b pb-2">Form Elements</h2>
79
+ <div className="grid gap-6 md:grid-cols-2">
80
+ <div className="space-y-4">
81
+ <div className="space-y-2">
82
+ <Label htmlFor="email">Email</Label>
83
+ <Input id="email" type="email" placeholder="Enter your email" />
84
+ </div>
85
+ <div className="space-y-2">
86
+ <Label htmlFor="password">Password</Label>
87
+ <Input id="password" type="password" placeholder="Enter password" />
88
+ </div>
89
+ <div className="space-y-2">
90
+ <Label htmlFor="disabled">Disabled Input</Label>
91
+ <Input id="disabled" disabled placeholder="Disabled input" />
92
+ </div>
93
+ </div>
94
+ </div>
95
+ </section>
96
+
97
+ <Separator />
98
+
99
+ <section className="space-y-6">
100
+ <h2 className="text-2xl font-semibold border-b pb-2">Badges</h2>
101
+ <div className="flex flex-wrap gap-4">
102
+ <Badge>Default</Badge>
103
+ <Badge variant="secondary">Secondary</Badge>
104
+ <Badge variant="destructive">Destructive</Badge>
105
+ <Badge variant="outline">Outline</Badge>
106
+ </div>
107
+ </section>
108
+ </div>
109
+ )
110
+ }
@@ -0,0 +1,2 @@
1
+ @import "tailwindcss";
2
+ @import "@repo/ui/styles.css";
@@ -0,0 +1,46 @@
1
+ import type { Metadata } from 'next'
2
+ import { ThemeProvider } from 'next-themes'
3
+ import './globals.css'
4
+
5
+ export const metadata: Metadata = {
6
+ title: '{{projectName}} Design System',
7
+ description: 'Design system documentation and component showcase',
8
+ }
9
+
10
+ export default function RootLayout({
11
+ children,
12
+ }: {
13
+ children: React.ReactNode
14
+ }) {
15
+ return (
16
+ <html lang="en" suppressHydrationWarning>
17
+ <body className="min-h-screen bg-background font-sans antialiased">
18
+ <ThemeProvider
19
+ attribute="class"
20
+ defaultTheme="system"
21
+ enableSystem
22
+ disableTransitionOnChange
23
+ >
24
+ <div className="relative flex min-h-screen flex-col">
25
+ <header className="sticky top-0 z-50 w-full border-b bg-background/95 backdrop-blur supports-[backdrop-filter]:bg-background/60">
26
+ <div className="container flex h-14 items-center">
27
+ <div className="mr-4 flex">
28
+ <a href="/" className="mr-6 flex items-center space-x-2">
29
+ <span className="font-bold">{{projectName}} Design System</span>
30
+ </a>
31
+ <nav className="flex items-center space-x-6 text-sm font-medium">
32
+ <a href="/colors" className="transition-colors hover:text-foreground/80 text-foreground/60">Colors</a>
33
+ <a href="/typography" className="transition-colors hover:text-foreground/80 text-foreground/60">Typography</a>
34
+ <a href="/components" className="transition-colors hover:text-foreground/80 text-foreground/60">Components</a>
35
+ <a href="/blocks" className="transition-colors hover:text-foreground/80 text-foreground/60">Blocks</a>
36
+ </nav>
37
+ </div>
38
+ </div>
39
+ </header>
40
+ <main className="flex-1">{children}</main>
41
+ </div>
42
+ </ThemeProvider>
43
+ </body>
44
+ </html>
45
+ )
46
+ }