@kuckit/landing-module 3.0.3 → 3.0.5

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.
@@ -1,10 +1,129 @@
1
1
  import { defineKuckitClientModule } from "@kuckit/sdk-react";
2
2
  import { useEffect, useState } from "react";
3
- import { jsx, jsxs } from "react/jsx-runtime";
3
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
4
4
  import { GlareCard } from "@kuckit/polar-payments-module/client";
5
5
  import { Check, Zap } from "lucide-react";
6
6
 
7
+ //#region src/client/components/terminal-animation.tsx
8
+ function TerminalAnimation({ commands, className = "", minHeight = "min-h-[280px]" }) {
9
+ const [activeCommand, setActiveCommand] = useState(0);
10
+ const [displayedLines, setDisplayedLines] = useState([]);
11
+ const [isTyping, setIsTyping] = useState(true);
12
+ const [typedInput, setTypedInput] = useState("");
13
+ useEffect(() => {
14
+ const command = commands[activeCommand];
15
+ if (!command) return;
16
+ let inputIndex = 0;
17
+ let outputIndex = 0;
18
+ let outputInterval = null;
19
+ setDisplayedLines([]);
20
+ setTypedInput("");
21
+ setIsTyping(true);
22
+ const inputInterval = setInterval(() => {
23
+ if (inputIndex <= command.input.length) {
24
+ setTypedInput(command.input.slice(0, inputIndex));
25
+ inputIndex++;
26
+ } else {
27
+ clearInterval(inputInterval);
28
+ setIsTyping(false);
29
+ outputInterval = setInterval(() => {
30
+ if (outputIndex < command.output.length) {
31
+ const line = command.output[outputIndex];
32
+ if (line !== void 0) setDisplayedLines((prev) => [...prev, line]);
33
+ outputIndex++;
34
+ } else {
35
+ if (outputInterval) clearInterval(outputInterval);
36
+ setTimeout(() => {
37
+ setActiveCommand((prev) => (prev + 1) % commands.length);
38
+ }, 3e3);
39
+ }
40
+ }, 100);
41
+ }
42
+ }, 50);
43
+ return () => {
44
+ clearInterval(inputInterval);
45
+ if (outputInterval) clearInterval(outputInterval);
46
+ };
47
+ }, [activeCommand, commands]);
48
+ return /* @__PURE__ */ jsxs("div", {
49
+ className,
50
+ children: [/* @__PURE__ */ jsxs("div", {
51
+ className: "border border-border bg-background",
52
+ children: [/* @__PURE__ */ jsxs("div", {
53
+ className: "flex items-center justify-between px-4 py-3 border-b border-border bg-card",
54
+ children: [
55
+ /* @__PURE__ */ jsxs("div", {
56
+ className: "flex items-center gap-2",
57
+ children: [
58
+ /* @__PURE__ */ jsx("div", { className: "w-3 h-3 rounded-full bg-[hsl(var(--status-error)/0.8)]" }),
59
+ /* @__PURE__ */ jsx("div", { className: "w-3 h-3 rounded-full bg-[hsl(var(--status-warning)/0.8)]" }),
60
+ /* @__PURE__ */ jsx("div", { className: "w-3 h-3 rounded-full bg-[hsl(var(--status-success)/0.8)]" })
61
+ ]
62
+ }),
63
+ /* @__PURE__ */ jsx("span", {
64
+ className: "text-xs text-muted-foreground font-mono",
65
+ children: "terminal"
66
+ }),
67
+ /* @__PURE__ */ jsx("div", { className: "w-16" })
68
+ ]
69
+ }), /* @__PURE__ */ jsxs("div", {
70
+ className: `p-6 font-mono text-sm ${minHeight}`,
71
+ children: [/* @__PURE__ */ jsxs("div", {
72
+ className: "flex items-center gap-2 mb-4",
73
+ children: [
74
+ /* @__PURE__ */ jsx("span", {
75
+ className: "text-primary",
76
+ children: "$"
77
+ }),
78
+ /* @__PURE__ */ jsx("span", {
79
+ className: "text-foreground",
80
+ children: typedInput
81
+ }),
82
+ isTyping && /* @__PURE__ */ jsx("span", { className: "w-2 h-5 bg-primary animate-pulse" })
83
+ ]
84
+ }), /* @__PURE__ */ jsx("div", {
85
+ className: "space-y-0.5",
86
+ children: displayedLines.map((line, index) => /* @__PURE__ */ jsx("div", {
87
+ className: `${line?.startsWith("✓") ? "text-[hsl(var(--status-success))]" : line?.includes("!") ? "text-foreground" : "text-muted-foreground"}`,
88
+ children: line || "\xA0"
89
+ }, index))
90
+ })]
91
+ })]
92
+ }), /* @__PURE__ */ jsx("div", {
93
+ className: "flex justify-center gap-2 mt-6",
94
+ children: commands.map((_, index) => /* @__PURE__ */ jsx("button", {
95
+ onClick: () => setActiveCommand(index),
96
+ className: `h-1.5 transition-all ${index === activeCommand ? "bg-primary w-8" : "bg-muted hover:bg-muted-foreground/30 w-1.5"}`
97
+ }, index))
98
+ })]
99
+ });
100
+ }
101
+
102
+ //#endregion
7
103
  //#region src/client/components/hero.tsx
104
+ const heroCommands = [{
105
+ input: "bunx create-kuckit-app my-saas",
106
+ output: [
107
+ "Creating new Kuckit project...",
108
+ "",
109
+ "✓ Cloned template",
110
+ "✓ Installed dependencies",
111
+ "✓ Set up database",
112
+ "",
113
+ "Run: cd my-saas && bun run dev"
114
+ ]
115
+ }, {
116
+ input: "kuckit add @kuckit/payments-module",
117
+ output: [
118
+ "Installing @kuckit/payments-module...",
119
+ "",
120
+ "✓ Package installed",
121
+ "✓ Server module wired",
122
+ "✓ Client routes added",
123
+ "",
124
+ "Stripe + Polar ready!"
125
+ ]
126
+ }];
8
127
  function Hero() {
9
128
  const [copied, setCopied] = useState(false);
10
129
  const copyCommand = () => {
@@ -14,1306 +133,823 @@ function Hero() {
14
133
  };
15
134
  return /* @__PURE__ */ jsxs("section", {
16
135
  className: "relative min-h-screen",
17
- children: [
18
- /* @__PURE__ */ jsx("nav", {
19
- className: "relative z-20 border-b border-border",
20
- children: /* @__PURE__ */ jsxs("div", {
21
- className: "max-w-7xl mx-auto flex items-center justify-between h-16 px-8",
22
- children: [
23
- /* @__PURE__ */ jsxs("div", {
24
- className: "flex items-center gap-3",
25
- children: [/* @__PURE__ */ jsxs("svg", {
26
- className: "w-8 h-8",
27
- viewBox: "0 0 512 512",
28
- fill: "none",
29
- xmlns: "http://www.w3.org/2000/svg",
30
- children: [
31
- /* @__PURE__ */ jsx("polygon", {
32
- points: "256,64 384,144 384,304 256,224",
33
- fill: "#3D3A39"
34
- }),
35
- /* @__PURE__ */ jsx("polygon", {
36
- points: "256,64 128,144 128,304 256,224",
37
- fill: "#5C5855"
38
- }),
39
- /* @__PURE__ */ jsx("polygon", {
40
- points: "128,144 256,224 384,144 256,64",
41
- fill: "#A49D9A"
42
- }),
43
- /* @__PURE__ */ jsx("polygon", {
44
- points: "256,224 352,280 352,392 256,336",
45
- fill: "#D15010"
46
- }),
47
- /* @__PURE__ */ jsx("polygon", {
48
- points: "256,224 160,280 160,392 256,336",
49
- fill: "#EE6018"
50
- }),
51
- /* @__PURE__ */ jsx("polygon", {
52
- points: "160,280 256,336 352,280 256,224",
53
- fill: "#EF6F2E"
54
- })
55
- ]
56
- }), /* @__PURE__ */ jsx("span", {
57
- className: "text-foreground font-medium tracking-tight",
58
- children: "Kuckit"
59
- })]
60
- }),
61
- /* @__PURE__ */ jsxs("div", {
62
- className: "hidden md:flex items-center gap-8",
136
+ children: [/* @__PURE__ */ jsx("nav", {
137
+ className: "relative z-20 border-b border-border",
138
+ children: /* @__PURE__ */ jsxs("div", {
139
+ className: "max-w-7xl mx-auto flex items-center justify-between h-16 px-8",
140
+ children: [
141
+ /* @__PURE__ */ jsxs("div", {
142
+ className: "flex items-center gap-3",
143
+ children: [/* @__PURE__ */ jsxs("svg", {
144
+ className: "w-8 h-8",
145
+ viewBox: "0 0 512 512",
146
+ fill: "none",
147
+ xmlns: "http://www.w3.org/2000/svg",
63
148
  children: [
64
- /* @__PURE__ */ jsx("a", {
65
- href: "/docs",
66
- className: "text-sm text-muted-foreground hover:text-foreground transition-colors",
67
- children: "Docs"
149
+ /* @__PURE__ */ jsx("polygon", {
150
+ points: "256,64 384,144 384,304 256,224",
151
+ fill: "#3D3A39"
68
152
  }),
69
- /* @__PURE__ */ jsx("a", {
70
- href: "#modules",
71
- className: "text-sm text-muted-foreground hover:text-foreground transition-colors",
72
- children: "Modules"
153
+ /* @__PURE__ */ jsx("polygon", {
154
+ points: "256,64 128,144 128,304 256,224",
155
+ fill: "#5C5855"
73
156
  }),
74
- /* @__PURE__ */ jsx("a", {
75
- href: "#pricing",
76
- className: "text-sm text-muted-foreground hover:text-foreground transition-colors",
77
- children: "Pricing"
157
+ /* @__PURE__ */ jsx("polygon", {
158
+ points: "128,144 256,224 384,144 256,64",
159
+ fill: "#A49D9A"
160
+ }),
161
+ /* @__PURE__ */ jsx("polygon", {
162
+ points: "256,224 352,280 352,392 256,336",
163
+ fill: "#D15010"
164
+ }),
165
+ /* @__PURE__ */ jsx("polygon", {
166
+ points: "256,224 160,280 160,392 256,336",
167
+ fill: "#EE6018"
168
+ }),
169
+ /* @__PURE__ */ jsx("polygon", {
170
+ points: "160,280 256,336 352,280 256,224",
171
+ fill: "#EF6F2E"
78
172
  })
79
173
  ]
80
- }),
81
- /* @__PURE__ */ jsxs("div", {
82
- className: "flex items-center gap-3",
83
- children: [/* @__PURE__ */ jsx("a", {
84
- href: "/login",
85
- className: "text-sm text-muted-foreground hover:text-foreground transition-colors px-4 py-2",
86
- children: "Sign in"
87
- }), /* @__PURE__ */ jsx("a", {
88
- href: "/docs/getting-started",
89
- className: "text-sm bg-primary text-primary-foreground px-4 py-2 hover:bg-primary/90 transition-colors",
90
- children: "Get Started"
91
- })]
92
- })
93
- ]
94
- })
95
- }),
96
- /* @__PURE__ */ jsx("div", {
97
- className: "relative z-10 max-w-7xl mx-auto px-8 pt-24 pb-32",
98
- children: /* @__PURE__ */ jsxs("div", {
99
- className: "grid lg:grid-cols-12 gap-16 items-start",
100
- children: [/* @__PURE__ */ jsxs("div", {
101
- className: "lg:col-span-7",
174
+ }), /* @__PURE__ */ jsx("span", {
175
+ className: "text-foreground font-medium tracking-tight",
176
+ children: "Kuckit"
177
+ })]
178
+ }),
179
+ /* @__PURE__ */ jsxs("div", {
180
+ className: "hidden md:flex items-center gap-8",
102
181
  children: [
103
- /* @__PURE__ */ jsxs("div", {
104
- className: "flex items-center gap-4 mb-8",
105
- children: [/* @__PURE__ */ jsx("div", { className: "h-px w-12 bg-primary" }), /* @__PURE__ */ jsx("span", {
106
- className: "text-xs text-primary tracking-[0.25em] uppercase font-medium",
107
- children: "Vibe coding ain't fun when you're stuck"
108
- })]
109
- }),
110
- /* @__PURE__ */ jsxs("h1", {
111
- className: "mb-8",
112
- children: [/* @__PURE__ */ jsx("span", {
113
- className: "block text-4xl md:text-5xl lg:text-6xl font-light text-foreground tracking-[-0.03em] leading-[1.1]",
114
- children: "You don't need more prompts."
115
- }), /* @__PURE__ */ jsx("span", {
116
- className: "block text-4xl md:text-5xl lg:text-6xl font-light text-primary tracking-[-0.03em] leading-[1.1] mt-2",
117
- children: "You need a foundation."
118
- })]
119
- }),
120
- /* @__PURE__ */ jsx("p", {
121
- className: "text-lg md:text-xl text-muted-foreground max-w-xl leading-relaxed mb-12",
122
- children: "Vibe coding builds fast. We build right. Ship in hours."
182
+ /* @__PURE__ */ jsx("a", {
183
+ href: "/docs",
184
+ className: "text-sm text-muted-foreground hover:text-foreground transition-colors",
185
+ children: "Docs"
123
186
  }),
124
- /* @__PURE__ */ jsx("div", {
125
- className: "flex flex-col sm:flex-row items-start gap-4 mb-16",
126
- children: /* @__PURE__ */ jsxs("a", {
127
- href: "/docs/getting-started",
128
- className: "group inline-flex items-center gap-3 px-6 py-4 bg-primary text-primary-foreground font-medium hover:bg-primary/90 transition-all",
129
- children: [/* @__PURE__ */ jsx("span", { children: "Get Unstuck" }), /* @__PURE__ */ jsx("svg", {
130
- className: "w-4 h-4 group-hover:translate-x-1 transition-transform",
131
- fill: "none",
132
- stroke: "currentColor",
133
- viewBox: "0 0 24 24",
134
- children: /* @__PURE__ */ jsx("path", {
135
- strokeLinecap: "round",
136
- strokeLinejoin: "round",
137
- strokeWidth: 2,
138
- d: "M17 8l4 4m0 0l-4 4m4-4H3"
139
- })
140
- })]
141
- })
187
+ /* @__PURE__ */ jsx("a", {
188
+ href: "/modules",
189
+ className: "text-sm text-muted-foreground hover:text-foreground transition-colors",
190
+ children: "Modules"
142
191
  }),
143
- /* @__PURE__ */ jsxs("div", {
144
- className: "inline-block",
145
- children: [/* @__PURE__ */ jsx("div", {
146
- className: "text-xs text-muted-foreground tracking-[0.15em] uppercase mb-3",
147
- children: "Quick Start"
148
- }), /* @__PURE__ */ jsxs("button", {
149
- onClick: copyCommand,
150
- className: "group flex items-center gap-4 px-5 py-4 bg-card border border-border hover:border-primary/50 transition-colors font-mono text-sm",
151
- children: [
152
- /* @__PURE__ */ jsx("span", {
153
- className: "text-primary",
154
- children: "$"
155
- }),
156
- /* @__PURE__ */ jsx("code", {
157
- className: "text-foreground",
158
- children: "bunx create-kuckit-app my-app"
159
- }),
160
- /* @__PURE__ */ jsx("span", {
161
- className: "text-muted-foreground group-hover:text-primary transition-colors ml-4",
162
- children: copied ? /* @__PURE__ */ jsx("svg", {
163
- className: "w-4 h-4",
164
- fill: "none",
165
- stroke: "currentColor",
166
- viewBox: "0 0 24 24",
167
- children: /* @__PURE__ */ jsx("path", {
168
- strokeLinecap: "round",
169
- strokeLinejoin: "round",
170
- strokeWidth: 2,
171
- d: "M5 13l4 4L19 7"
172
- })
173
- }) : /* @__PURE__ */ jsx("svg", {
174
- className: "w-4 h-4",
175
- fill: "none",
176
- stroke: "currentColor",
177
- viewBox: "0 0 24 24",
178
- children: /* @__PURE__ */ jsx("path", {
179
- strokeLinecap: "round",
180
- strokeLinejoin: "round",
181
- strokeWidth: 2,
182
- d: "M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z"
183
- })
184
- })
185
- })
186
- ]
187
- })]
192
+ /* @__PURE__ */ jsx("a", {
193
+ href: "#pricing",
194
+ className: "text-sm text-muted-foreground hover:text-foreground transition-colors",
195
+ children: "Pricing"
188
196
  })
189
197
  ]
190
- }), /* @__PURE__ */ jsx("div", {
191
- className: "lg:col-span-5 relative",
192
- children: /* @__PURE__ */ jsx("div", {
193
- className: "sticky top-24",
194
- children: /* @__PURE__ */ jsxs("div", {
195
- className: "relative",
198
+ }),
199
+ /* @__PURE__ */ jsxs("div", {
200
+ className: "flex items-center gap-3",
201
+ children: [/* @__PURE__ */ jsx("a", {
202
+ href: "/login",
203
+ className: "text-sm text-muted-foreground hover:text-foreground transition-colors px-4 py-2",
204
+ children: "Sign in"
205
+ }), /* @__PURE__ */ jsx("a", {
206
+ href: "/docs/getting-started",
207
+ className: "text-sm bg-primary text-primary-foreground px-4 py-2 hover:bg-primary/90 transition-colors",
208
+ children: "Get Started"
209
+ })]
210
+ })
211
+ ]
212
+ })
213
+ }), /* @__PURE__ */ jsx("div", {
214
+ className: "relative z-10 max-w-7xl mx-auto px-8 pt-24 pb-32",
215
+ children: /* @__PURE__ */ jsxs("div", {
216
+ className: "grid lg:grid-cols-12 gap-12 lg:gap-16 items-center",
217
+ children: [/* @__PURE__ */ jsxs("div", {
218
+ className: "lg:col-span-7",
219
+ children: [
220
+ /* @__PURE__ */ jsxs("div", {
221
+ className: "flex items-center gap-4 mb-8",
222
+ children: [/* @__PURE__ */ jsx("div", { className: "h-px w-12 bg-primary" }), /* @__PURE__ */ jsx("span", {
223
+ className: "text-xs text-primary tracking-[0.25em] uppercase font-medium",
224
+ children: "Vibe coding ain't fun when you're stuck"
225
+ })]
226
+ }),
227
+ /* @__PURE__ */ jsxs("h1", {
228
+ className: "mb-8",
229
+ children: [/* @__PURE__ */ jsx("span", {
230
+ className: "block text-4xl md:text-5xl lg:text-6xl font-light text-foreground tracking-[-0.03em] leading-[1.1]",
231
+ children: "You don't need more prompts."
232
+ }), /* @__PURE__ */ jsx("span", {
233
+ className: "block text-4xl md:text-5xl lg:text-6xl font-light text-primary tracking-[-0.03em] leading-[1.1] mt-2",
234
+ children: "You need a foundation."
235
+ })]
236
+ }),
237
+ /* @__PURE__ */ jsx("p", {
238
+ className: "text-lg md:text-xl text-muted-foreground max-w-xl leading-relaxed mb-12",
239
+ children: "Vibe coding builds fast. We build right. Ship in hours."
240
+ }),
241
+ /* @__PURE__ */ jsx("div", {
242
+ className: "flex flex-col sm:flex-row items-start gap-4 mb-16",
243
+ children: /* @__PURE__ */ jsxs("a", {
244
+ href: "/docs/getting-started",
245
+ className: "group inline-flex items-center gap-3 px-6 py-4 bg-primary text-primary-foreground font-medium hover:bg-primary/90 transition-all",
246
+ children: [/* @__PURE__ */ jsx("span", { children: "Get Unstuck" }), /* @__PURE__ */ jsx("svg", {
247
+ className: "w-4 h-4 group-hover:translate-x-1 transition-transform",
248
+ fill: "none",
249
+ stroke: "currentColor",
250
+ viewBox: "0 0 24 24",
251
+ children: /* @__PURE__ */ jsx("path", {
252
+ strokeLinecap: "round",
253
+ strokeLinejoin: "round",
254
+ strokeWidth: 2,
255
+ d: "M17 8l4 4m0 0l-4 4m4-4H3"
256
+ })
257
+ })]
258
+ })
259
+ }),
260
+ /* @__PURE__ */ jsxs("div", {
261
+ className: "inline-block",
262
+ children: [/* @__PURE__ */ jsx("div", {
263
+ className: "text-xs text-muted-foreground tracking-[0.15em] uppercase mb-3",
264
+ children: "Quick Start"
265
+ }), /* @__PURE__ */ jsxs("button", {
266
+ onClick: copyCommand,
267
+ className: "group flex items-center gap-4 px-5 py-4 bg-card border border-border hover:border-primary/50 transition-colors font-mono text-sm",
196
268
  children: [
197
- /* @__PURE__ */ jsx("div", { className: "absolute -top-3 -left-3 w-6 h-6 border-l-2 border-t-2 border-primary/50" }),
198
- /* @__PURE__ */ jsx("div", { className: "absolute -top-3 -right-3 w-6 h-6 border-r-2 border-t-2 border-primary/50" }),
199
- /* @__PURE__ */ jsx("div", { className: "absolute -bottom-3 -left-3 w-6 h-6 border-l-2 border-b-2 border-primary/50" }),
200
- /* @__PURE__ */ jsx("div", { className: "absolute -bottom-3 -right-3 w-6 h-6 border-r-2 border-b-2 border-primary/50" }),
201
- /* @__PURE__ */ jsxs("div", {
202
- className: "border border-border bg-card/50 backdrop-blur-sm p-8",
203
- children: [
204
- /* @__PURE__ */ jsxs("div", {
205
- className: "text-xs text-muted-foreground tracking-[0.2em] uppercase mb-6 flex items-center gap-3",
206
- children: [/* @__PURE__ */ jsx("span", { className: "w-2 h-2 bg-primary" }), "Available Modules"]
207
- }),
208
- /* @__PURE__ */ jsx("div", {
209
- className: "grid grid-cols-2 gap-3",
210
- children: [
211
- {
212
- name: "Payments",
213
- status: "stable",
214
- desc: "Subscriptions & checkout"
215
- },
216
- {
217
- name: "Users",
218
- status: "stable",
219
- desc: "Accounts & profiles"
220
- },
221
- {
222
- name: "Docs",
223
- status: "stable",
224
- desc: "Beautiful documentation"
225
- },
226
- {
227
- name: "AI Chat",
228
- status: "stable",
229
- desc: "LLM integration"
230
- },
231
- {
232
- name: "CLI Auth",
233
- status: "stable",
234
- desc: "Device login flow"
235
- },
236
- {
237
- name: "More...",
238
- status: "soon",
239
- desc: "Coming soon"
240
- }
241
- ].map((mod) => /* @__PURE__ */ jsxs("div", {
242
- className: "group p-4 border border-border hover:border-primary/50 bg-background hover:bg-card transition-all cursor-pointer",
243
- children: [/* @__PURE__ */ jsxs("div", {
244
- className: "flex items-start justify-between mb-2",
245
- children: [/* @__PURE__ */ jsx("code", {
246
- className: "text-foreground text-sm font-medium",
247
- children: mod.name
248
- }), /* @__PURE__ */ jsx("span", {
249
- className: `text-[10px] tracking-wider uppercase px-1.5 py-0.5 ${mod.status === "new" ? "bg-primary/20 text-primary" : mod.status === "beta" ? "bg-muted text-muted-foreground" : "bg-[hsl(var(--status-success)/0.15)] text-[hsl(var(--status-success))]"}`,
250
- children: mod.status
251
- })]
252
- }), /* @__PURE__ */ jsx("div", {
253
- className: "text-xs text-muted-foreground",
254
- children: mod.desc
255
- })]
256
- }, mod.name))
257
- }),
258
- /* @__PURE__ */ jsxs("div", {
259
- className: "mt-6 pt-6 border-t border-border flex items-center justify-between",
260
- children: [/* @__PURE__ */ jsx("span", {
261
- className: "text-xs text-muted-foreground",
262
- children: "5 modules ready to use"
263
- }), /* @__PURE__ */ jsx("a", {
264
- href: "/docs",
265
- className: "text-xs text-primary hover:underline",
266
- children: "View all →"
267
- })]
269
+ /* @__PURE__ */ jsx("span", {
270
+ className: "text-primary",
271
+ children: "$"
272
+ }),
273
+ /* @__PURE__ */ jsx("code", {
274
+ className: "text-foreground",
275
+ children: "bunx create-kuckit-app my-app"
276
+ }),
277
+ /* @__PURE__ */ jsx("span", {
278
+ className: "text-muted-foreground group-hover:text-primary transition-colors ml-4",
279
+ children: copied ? /* @__PURE__ */ jsx("svg", {
280
+ className: "w-4 h-4",
281
+ fill: "none",
282
+ stroke: "currentColor",
283
+ viewBox: "0 0 24 24",
284
+ children: /* @__PURE__ */ jsx("path", {
285
+ strokeLinecap: "round",
286
+ strokeLinejoin: "round",
287
+ strokeWidth: 2,
288
+ d: "M5 13l4 4L19 7"
268
289
  })
269
- ]
290
+ }) : /* @__PURE__ */ jsx("svg", {
291
+ className: "w-4 h-4",
292
+ fill: "none",
293
+ stroke: "currentColor",
294
+ viewBox: "0 0 24 24",
295
+ children: /* @__PURE__ */ jsx("path", {
296
+ strokeLinecap: "round",
297
+ strokeLinejoin: "round",
298
+ strokeWidth: 2,
299
+ d: "M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z"
300
+ })
301
+ })
270
302
  })
271
303
  ]
272
- })
304
+ })]
273
305
  })
274
- })]
275
- })
276
- }),
277
- /* @__PURE__ */ jsx("div", {
278
- className: "relative z-10 border-t border-border",
279
- children: /* @__PURE__ */ jsx("div", {
280
- className: "max-w-7xl mx-auto",
281
- children: /* @__PURE__ */ jsx("div", {
282
- className: "grid grid-cols-2 md:grid-cols-4",
306
+ ]
307
+ }), /* @__PURE__ */ jsx("div", {
308
+ className: "lg:col-span-5 relative",
309
+ children: /* @__PURE__ */ jsxs("div", {
310
+ className: "relative",
283
311
  children: [
284
- {
285
- value: "100%",
286
- label: "TypeScript"
287
- },
288
- {
289
- value: "<5min",
290
- label: "To first module"
291
- },
292
- {
293
- value: "50+",
294
- label: "Components included"
295
- },
296
- {
297
- value: "MIT",
298
- label: "Licensed"
299
- }
300
- ].map((stat, i) => /* @__PURE__ */ jsxs("div", {
301
- className: `p-8 ${i < 3 ? "border-r border-border" : ""} ${i < 2 ? "border-b md:border-b-0 border-border" : ""}`,
302
- children: [/* @__PURE__ */ jsx("div", {
303
- className: "text-3xl md:text-4xl font-light text-foreground tracking-tight mb-1",
304
- children: stat.value
305
- }), /* @__PURE__ */ jsx("div", {
306
- className: "text-xs text-muted-foreground tracking-[0.15em] uppercase",
307
- children: stat.label
308
- })]
309
- }, stat.label))
312
+ /* @__PURE__ */ jsx("div", { className: "absolute -inset-4 bg-primary/5 blur-2xl rounded-lg" }),
313
+ /* @__PURE__ */ jsx("div", { className: "absolute -top-4 -left-4 w-8 h-8 border-l-2 border-t-2 border-primary/60" }),
314
+ /* @__PURE__ */ jsx("div", { className: "absolute -top-4 -right-4 w-8 h-8 border-r-2 border-t-2 border-primary/60" }),
315
+ /* @__PURE__ */ jsx("div", { className: "absolute -bottom-4 -left-4 w-8 h-8 border-l-2 border-b-2 border-primary/60" }),
316
+ /* @__PURE__ */ jsx("div", { className: "absolute -bottom-4 -right-4 w-8 h-8 border-r-2 border-b-2 border-primary/60" }),
317
+ /* @__PURE__ */ jsxs("div", {
318
+ className: "absolute -top-8 left-0 flex items-center gap-2",
319
+ children: [/* @__PURE__ */ jsx("div", { className: "w-2 h-2 bg-primary" }), /* @__PURE__ */ jsx("span", {
320
+ className: "text-[10px] text-muted-foreground tracking-[0.2em] uppercase",
321
+ children: "Live Demo"
322
+ })]
323
+ }),
324
+ /* @__PURE__ */ jsx(TerminalAnimation, {
325
+ commands: heroCommands,
326
+ minHeight: "min-h-[320px]"
327
+ })
328
+ ]
310
329
  })
311
- })
330
+ })]
312
331
  })
313
- ]
332
+ })]
314
333
  });
315
334
  }
316
335
 
317
336
  //#endregion
318
- //#region src/client/components/value-props.tsx
319
- function ValueProps() {
320
- return /* @__PURE__ */ jsxs("section", {
321
- className: "relative border-t border-border",
322
- children: [/* @__PURE__ */ jsxs("div", {
323
- className: "max-w-7xl mx-auto px-8 py-16 border-b border-border",
324
- children: [/* @__PURE__ */ jsxs("div", {
325
- className: "flex items-center gap-4 mb-4",
326
- children: [/* @__PURE__ */ jsx("div", { className: "h-px w-12 bg-primary" }), /* @__PURE__ */ jsx("span", {
327
- className: "text-xs text-primary tracking-[0.25em] uppercase font-medium",
328
- children: "Why you're stuck"
329
- })]
330
- }), /* @__PURE__ */ jsx("h2", {
331
- className: "text-4xl md:text-5xl font-light text-foreground tracking-[-0.03em]",
332
- children: "The vibe coding trap"
337
+ //#region src/client/components/features.tsx
338
+ const AI_FEATURES = [
339
+ {
340
+ title: "Context Engineering",
341
+ tag: "Hot"
342
+ },
343
+ { title: "Skills Your AI Can Use" },
344
+ {
345
+ title: "Curated MCP Tools",
346
+ tag: "New"
347
+ },
348
+ { title: "Multi-Agent Workflows" }
349
+ ];
350
+ function ScanLines() {
351
+ return /* @__PURE__ */ jsx("div", {
352
+ className: "absolute inset-0 pointer-events-none overflow-hidden opacity-[0.03]",
353
+ children: /* @__PURE__ */ jsx("div", {
354
+ className: "absolute inset-0",
355
+ style: {
356
+ backgroundImage: "repeating-linear-gradient(0deg, transparent, transparent 2px, currentColor 2px, currentColor 3px)",
357
+ backgroundSize: "100% 4px"
358
+ }
359
+ })
360
+ });
361
+ }
362
+ function GridPattern() {
363
+ return /* @__PURE__ */ jsx("div", {
364
+ className: "absolute inset-0 pointer-events-none opacity-[0.04]",
365
+ children: /* @__PURE__ */ jsxs("svg", {
366
+ className: "w-full h-full",
367
+ xmlns: "http://www.w3.org/2000/svg",
368
+ children: [/* @__PURE__ */ jsx("defs", { children: /* @__PURE__ */ jsx("pattern", {
369
+ id: "grid",
370
+ width: "20",
371
+ height: "20",
372
+ patternUnits: "userSpaceOnUse",
373
+ children: /* @__PURE__ */ jsx("path", {
374
+ d: "M 20 0 L 0 0 0 20",
375
+ fill: "none",
376
+ stroke: "currentColor",
377
+ strokeWidth: "0.5"
378
+ })
379
+ }) }), /* @__PURE__ */ jsx("rect", {
380
+ width: "100%",
381
+ height: "100%",
382
+ fill: "url(#grid)"
333
383
  })]
334
- }), /* @__PURE__ */ jsx("div", {
335
- className: "max-w-7xl mx-auto",
336
- children: /* @__PURE__ */ jsx("div", {
337
- className: "grid md:grid-cols-3",
384
+ })
385
+ });
386
+ }
387
+ function CornerMarkers({ glow = false }) {
388
+ const baseClass = "absolute w-5 h-5 border-primary";
389
+ const glowClass = glow ? "shadow-[0_0_10px_rgba(209,80,16,0.5)]" : "";
390
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
391
+ /* @__PURE__ */ jsx("div", { className: `${baseClass} ${glowClass} -top-px -left-px border-l-2 border-t-2` }),
392
+ /* @__PURE__ */ jsx("div", { className: `${baseClass} ${glowClass} -top-px -right-px border-r-2 border-t-2` }),
393
+ /* @__PURE__ */ jsx("div", { className: `${baseClass} ${glowClass} -bottom-px -left-px border-l-2 border-b-2` }),
394
+ /* @__PURE__ */ jsx("div", { className: `${baseClass} ${glowClass} -bottom-px -right-px border-r-2 border-b-2` })
395
+ ] });
396
+ }
397
+ function DiagonalAccent() {
398
+ return /* @__PURE__ */ jsx("div", {
399
+ className: "absolute top-0 right-0 w-32 h-32 pointer-events-none",
400
+ style: { background: "linear-gradient(135deg, hsl(var(--primary) / 0.15) 0%, transparent 50%)" }
401
+ });
402
+ }
403
+ function CardA() {
404
+ return /* @__PURE__ */ jsxs("div", {
405
+ className: "group relative bg-gradient-to-br from-card via-card to-primary/5 border border-border overflow-hidden transform-gpu md:col-span-2 md:row-span-2 transition-all duration-500 hover:border-primary/60 hover:shadow-[0_0_40px_rgba(209,80,16,0.15)]",
406
+ children: [
407
+ /* @__PURE__ */ jsx(CornerMarkers, { glow: true }),
408
+ /* @__PURE__ */ jsx(GridPattern, {}),
409
+ /* @__PURE__ */ jsx(DiagonalAccent, {}),
410
+ /* @__PURE__ */ jsx("div", { className: "absolute -top-20 -right-20 w-64 h-64 bg-primary/20 rounded-full blur-[80px] group-hover:scale-150 transition-transform duration-700" }),
411
+ /* @__PURE__ */ jsx("div", {
412
+ className: "absolute bottom-0 left-0 right-0 h-24 opacity-20 group-hover:opacity-40 transition-opacity",
413
+ children: /* @__PURE__ */ jsxs("svg", {
414
+ className: "w-full h-full",
415
+ viewBox: "0 0 400 100",
416
+ preserveAspectRatio: "none",
417
+ children: [/* @__PURE__ */ jsx("path", {
418
+ d: "M0,80 Q50,60 100,70 T200,50 T300,65 T400,45 L400,100 L0,100 Z",
419
+ fill: "url(#waveGradient)"
420
+ }), /* @__PURE__ */ jsx("defs", { children: /* @__PURE__ */ jsxs("linearGradient", {
421
+ id: "waveGradient",
422
+ x1: "0%",
423
+ y1: "0%",
424
+ x2: "0%",
425
+ y2: "100%",
426
+ children: [/* @__PURE__ */ jsx("stop", {
427
+ offset: "0%",
428
+ stopColor: "hsl(var(--primary))",
429
+ stopOpacity: "0.4"
430
+ }), /* @__PURE__ */ jsx("stop", {
431
+ offset: "100%",
432
+ stopColor: "hsl(var(--primary))",
433
+ stopOpacity: "0"
434
+ })]
435
+ }) })]
436
+ })
437
+ }),
438
+ /* @__PURE__ */ jsxs("div", {
439
+ className: "absolute inset-0 flex flex-col justify-center p-8 md:p-12",
440
+ children: [/* @__PURE__ */ jsxs("div", {
441
+ className: "transition-transform duration-500 ease-out group-hover:-translate-y-6",
442
+ children: [
443
+ /* @__PURE__ */ jsxs("div", {
444
+ className: "flex items-center gap-3 mb-6",
445
+ children: [/* @__PURE__ */ jsx("div", { className: "w-2 h-2 bg-primary animate-pulse shadow-[0_0_8px_rgba(209,80,16,0.8)]" }), /* @__PURE__ */ jsx("span", {
446
+ className: "text-[10px] text-primary tracking-[0.3em] uppercase font-medium",
447
+ children: "Production Ready"
448
+ })]
449
+ }),
450
+ /* @__PURE__ */ jsxs("h3", {
451
+ className: "text-3xl md:text-4xl lg:text-5xl font-light tracking-[-0.04em] text-foreground mb-6 leading-[1.1]",
452
+ children: [
453
+ "Ship faster.",
454
+ /* @__PURE__ */ jsx("br", {}),
455
+ /* @__PURE__ */ jsx("span", {
456
+ className: "text-primary",
457
+ children: "Build right."
458
+ })
459
+ ]
460
+ }),
461
+ /* @__PURE__ */ jsx("div", {
462
+ className: "flex flex-wrap gap-3",
463
+ children: [
464
+ "Production-ready",
465
+ "Pre-built features",
466
+ "AI-native"
467
+ ].map((pill, i) => /* @__PURE__ */ jsx("span", {
468
+ className: "px-4 py-2 text-xs border border-primary/40 text-foreground/80 bg-primary/5 backdrop-blur-sm tracking-wide transition-all duration-300 hover:bg-primary/20 hover:border-primary",
469
+ style: { animationDelay: `${i * 100}ms` },
470
+ children: pill
471
+ }, pill))
472
+ })
473
+ ]
474
+ }), /* @__PURE__ */ jsx("div", {
475
+ className: "absolute bottom-8 md:bottom-12 left-8 md:left-12 opacity-0 group-hover:opacity-100 translate-y-6 group-hover:translate-y-0 transition-all duration-500 delay-100",
476
+ children: /* @__PURE__ */ jsxs("a", {
477
+ href: "/docs/getting-started",
478
+ className: "inline-flex items-center gap-3 text-sm text-primary font-medium tracking-wide group/cta",
479
+ children: [/* @__PURE__ */ jsxs("span", {
480
+ className: "relative",
481
+ children: ["Get Started", /* @__PURE__ */ jsx("span", { className: "absolute bottom-0 left-0 w-0 h-px bg-primary group-hover/cta:w-full transition-all duration-300" })]
482
+ }), /* @__PURE__ */ jsx("svg", {
483
+ className: "w-4 h-4 group-hover/cta:translate-x-1 transition-transform",
484
+ fill: "none",
485
+ viewBox: "0 0 24 24",
486
+ stroke: "currentColor",
487
+ strokeWidth: 2,
488
+ children: /* @__PURE__ */ jsx("path", {
489
+ strokeLinecap: "round",
490
+ strokeLinejoin: "round",
491
+ d: "M17 8l4 4m0 0l-4 4m4-4H3"
492
+ })
493
+ })]
494
+ })
495
+ })]
496
+ })
497
+ ]
498
+ });
499
+ }
500
+ function CardB({ className = "" }) {
501
+ return /* @__PURE__ */ jsxs("div", {
502
+ className: `group relative bg-card border border-border overflow-hidden transform-gpu transition-all duration-500 hover:border-primary/60 hover:shadow-[0_0_30px_rgba(209,80,16,0.1)] ${className}`,
503
+ children: [
504
+ /* @__PURE__ */ jsx(CornerMarkers, {}),
505
+ /* @__PURE__ */ jsx(ScanLines, {}),
506
+ /* @__PURE__ */ jsxs("div", {
507
+ className: "absolute top-6 right-6 w-16 h-16",
338
508
  children: [
339
- {
340
- title: "The Problem",
341
- tag: "01",
342
- items: [
343
- {
344
- label: "Stuck in AI loops",
345
- desc: "The more you prompt, the more it breaks"
346
- },
347
- {
348
- label: "Code you can't understand",
349
- desc: "10,000 lines nobody can debug"
350
- },
351
- {
352
- label: "Works locally, won't deploy",
353
- desc: "The last 20% takes 80% of the time"
354
- }
355
- ]
356
- },
357
- {
358
- title: "The Foundation",
359
- tag: "02",
360
- featured: true,
361
- items: [
362
- {
363
- label: "Production-ready structure",
364
- desc: "Architecture that actually scales"
365
- },
366
- {
367
- label: "Pre-built features that work",
368
- desc: "Auth, payments, dashboards—done"
369
- },
370
- {
371
- label: "Code you can grow with",
372
- desc: "Not spaghetti you're scared to touch"
373
- }
374
- ]
375
- },
376
- {
377
- title: "The Outcome",
378
- tag: "03",
379
- items: [
509
+ /* @__PURE__ */ jsx("div", {
510
+ className: "absolute inset-0 border border-primary/30 rounded-full animate-ping",
511
+ style: { animationDuration: "3s" }
512
+ }),
513
+ /* @__PURE__ */ jsx("div", {
514
+ className: "absolute inset-2 border border-primary/50 rounded-full animate-ping",
515
+ style: {
516
+ animationDuration: "3s",
517
+ animationDelay: "0.5s"
518
+ }
519
+ }),
520
+ /* @__PURE__ */ jsx("div", {
521
+ className: "absolute inset-4 bg-primary/20 rounded-full flex items-center justify-center",
522
+ children: /* @__PURE__ */ jsx("div", { className: "w-2 h-2 bg-primary rounded-full shadow-[0_0_10px_rgba(209,80,16,0.8)]" })
523
+ })
524
+ ]
525
+ }),
526
+ /* @__PURE__ */ jsxs("div", {
527
+ className: "absolute inset-0 flex flex-col p-6",
528
+ children: [
529
+ /* @__PURE__ */ jsxs("div", {
530
+ className: "flex items-center gap-2 mb-6",
531
+ children: [/* @__PURE__ */ jsx("span", {
532
+ className: "text-[10px] text-muted-foreground tracking-[0.2em] uppercase",
533
+ children: "AI Enhancement"
534
+ }), /* @__PURE__ */ jsx("span", {
535
+ className: "px-1.5 py-0.5 text-[8px] bg-[hsl(var(--status-success))] text-white tracking-wider uppercase",
536
+ children: "Active"
537
+ })]
538
+ }),
539
+ /* @__PURE__ */ jsxs("div", {
540
+ className: "flex-1 flex flex-col justify-center",
541
+ children: [/* @__PURE__ */ jsxs("div", {
542
+ className: "relative",
543
+ children: [/* @__PURE__ */ jsxs("span", {
544
+ className: "text-6xl md:text-7xl font-extralight text-foreground tracking-tighter",
545
+ children: ["10", /* @__PURE__ */ jsx("span", {
546
+ className: "text-primary",
547
+ children: "x"
548
+ })]
549
+ }), /* @__PURE__ */ jsx("div", { className: "absolute -inset-4 bg-primary/10 blur-2xl -z-10" })]
550
+ }), /* @__PURE__ */ jsx("span", {
551
+ className: "text-sm text-muted-foreground mt-2 tracking-wide",
552
+ children: "Faster AI responses"
553
+ })]
554
+ }),
555
+ /* @__PURE__ */ jsx("div", {
556
+ className: "space-y-2 mt-4",
557
+ children: [
380
558
  {
381
- label: "Ship in hours",
382
- desc: "Not weeks of debugging"
559
+ label: "Smart Context",
560
+ value: "100%"
383
561
  },
384
562
  {
385
- label: "Launch with confidence",
386
- desc: "Real software, not a fragile prototype"
563
+ label: "Auto-Complete",
564
+ value: "95%"
387
565
  },
388
566
  {
389
- label: "Focus on your idea",
390
- desc: "Not fighting your codebase"
567
+ label: "Team of AIs",
568
+ value: ""
391
569
  }
392
- ]
393
- }
394
- ].map((col, colIndex) => /* @__PURE__ */ jsxs("div", {
395
- className: `relative border-b md:border-b-0 ${colIndex < 2 ? "md:border-r" : ""} border-border`,
396
- children: [col.featured && /* @__PURE__ */ jsx("div", { className: "absolute top-0 left-0 right-0 h-[2px] bg-primary" }), /* @__PURE__ */ jsxs("div", {
397
- className: "p-8 md:p-10",
398
- children: [/* @__PURE__ */ jsxs("div", {
399
- className: "flex items-start justify-between mb-10",
400
- children: [/* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("span", {
401
- className: "text-xs text-muted-foreground tracking-[0.2em] uppercase block mb-2",
402
- children: col.tag
403
- }), /* @__PURE__ */ jsx("h3", {
404
- className: "text-xl font-medium text-foreground tracking-tight",
405
- children: col.title
406
- })] }), col.featured && /* @__PURE__ */ jsx("span", {
407
- className: "px-2 py-1 text-[10px] tracking-[0.15em] uppercase bg-primary/10 text-primary border border-primary/20",
408
- children: "Popular"
570
+ ].map((cap, i) => /* @__PURE__ */ jsxs("div", {
571
+ className: "group/bar relative overflow-hidden",
572
+ children: [/* @__PURE__ */ jsxs("div", {
573
+ className: "flex items-center justify-between text-xs mb-1",
574
+ children: [/* @__PURE__ */ jsx("span", {
575
+ className: "text-muted-foreground",
576
+ children: cap.label
577
+ }), /* @__PURE__ */ jsx("span", {
578
+ className: "text-primary font-mono",
579
+ children: cap.value
580
+ })]
581
+ }), /* @__PURE__ */ jsx("div", {
582
+ className: "h-1 bg-border rounded-full overflow-hidden",
583
+ children: /* @__PURE__ */ jsx("div", {
584
+ className: "h-full bg-gradient-to-r from-primary/50 to-primary rounded-full transition-all duration-700 group-hover:from-primary group-hover:to-primary",
585
+ style: {
586
+ width: cap.value === "" ? "100%" : cap.value,
587
+ transitionDelay: `${i * 100}ms`
588
+ }
589
+ })
409
590
  })]
410
- }), /* @__PURE__ */ jsx("div", {
411
- className: "space-y-8",
412
- children: col.items.map((item, i) => /* @__PURE__ */ jsx("div", {
413
- className: "group",
414
- children: /* @__PURE__ */ jsxs("div", {
415
- className: "flex items-start gap-4",
416
- children: [/* @__PURE__ */ jsx("div", {
417
- className: `w-6 h-6 flex items-center justify-center border ${col.featured ? "border-primary/50 text-primary" : "border-border text-muted-foreground"} text-xs font-mono`,
418
- children: i + 1
419
- }), /* @__PURE__ */ jsxs("div", {
420
- className: "flex-1",
421
- children: [/* @__PURE__ */ jsx("div", {
422
- className: "text-foreground font-medium mb-1 group-hover:text-primary transition-colors",
423
- children: item.label
424
- }), /* @__PURE__ */ jsx("div", {
425
- className: "text-muted-foreground text-sm",
426
- children: item.desc
427
- })]
428
- })]
591
+ }, cap.label))
592
+ })
593
+ ]
594
+ })
595
+ ]
596
+ });
597
+ }
598
+ function CardC({ className = "" }) {
599
+ return /* @__PURE__ */ jsxs("div", {
600
+ className: `group relative bg-card border border-border overflow-hidden transform-gpu transition-all duration-500 hover:border-primary/60 ${className}`,
601
+ children: [
602
+ /* @__PURE__ */ jsx(CornerMarkers, {}),
603
+ /* @__PURE__ */ jsx("div", {
604
+ className: "absolute inset-0 opacity-0 group-hover:opacity-100 transition-opacity duration-500",
605
+ style: { background: "linear-gradient(135deg, transparent 49.5%, hsl(var(--primary) / 0.1) 49.5%, hsl(var(--primary) / 0.1) 50.5%, transparent 50.5%)" }
606
+ }),
607
+ /* @__PURE__ */ jsxs("div", {
608
+ className: "absolute inset-0 flex flex-col justify-center p-6",
609
+ children: [/* @__PURE__ */ jsx("div", {
610
+ className: "text-[10px] text-muted-foreground tracking-[0.2em] uppercase mb-4",
611
+ children: "Transformation"
612
+ }), /* @__PURE__ */ jsx("div", {
613
+ className: "space-y-4",
614
+ children: [
615
+ {
616
+ problem: "Stuck in loops",
617
+ outcome: "Ship in hours",
618
+ icon: "○"
619
+ },
620
+ {
621
+ problem: "Can't debug",
622
+ outcome: "Code you own",
623
+ icon: "△"
624
+ },
625
+ {
626
+ problem: "Won't deploy",
627
+ outcome: "Launch confident",
628
+ icon: "□"
629
+ }
630
+ ].map((t, i) => /* @__PURE__ */ jsxs("div", {
631
+ className: "group/row relative flex items-center gap-3 transition-all duration-300",
632
+ style: { transitionDelay: `${i * 50}ms` },
633
+ children: [/* @__PURE__ */ jsx("span", {
634
+ className: "w-6 h-6 flex items-center justify-center border border-border text-muted-foreground text-xs group-hover/row:border-primary group-hover/row:text-primary transition-colors",
635
+ children: t.icon
636
+ }), /* @__PURE__ */ jsxs("div", {
637
+ className: "flex-1 flex items-center gap-2 text-sm",
638
+ children: [
639
+ /* @__PURE__ */ jsx("span", {
640
+ className: "text-muted-foreground/60 line-through decoration-primary/50 group-hover:text-muted-foreground/40 transition-colors",
641
+ children: t.problem
642
+ }),
643
+ /* @__PURE__ */ jsx("svg", {
644
+ className: "w-4 h-4 text-primary shrink-0 group-hover:translate-x-1 transition-transform",
645
+ viewBox: "0 0 24 24",
646
+ fill: "none",
647
+ stroke: "currentColor",
648
+ strokeWidth: 2,
649
+ children: /* @__PURE__ */ jsx("path", {
650
+ strokeLinecap: "round",
651
+ strokeLinejoin: "round",
652
+ d: "M13 7l5 5m0 0l-5 5m5-5H6"
653
+ })
654
+ }),
655
+ /* @__PURE__ */ jsx("span", {
656
+ className: "text-foreground font-medium group-hover:text-primary transition-colors",
657
+ children: t.outcome
429
658
  })
430
- }, item.label))
659
+ ]
431
660
  })]
432
- })]
433
- }, col.title))
661
+ }, t.problem))
662
+ })]
434
663
  })
435
- })]
664
+ ]
436
665
  });
437
666
  }
438
-
439
- //#endregion
440
- //#region src/client/components/ai-superpowers.tsx
441
- function AiSuperpowers() {
442
- const features = [
443
- {
444
- num: "01",
445
- title: "Context Engineering Built-In",
446
- desc: "Your AI already knows your codebase. AGENTS.md files in every folder teach Cursor, Claude, and Copilot exactly how your app works.",
447
- tag: "Hot"
448
- },
449
- {
450
- num: "02",
451
- title: "Skills Your AI Can Use",
452
- desc: "Pre-built skills for common tasks. Your AI assistant loads them automatically and just knows what to do.",
453
- tag: null
454
- },
455
- {
456
- num: "03",
457
- title: "Curated MCP Tools",
458
- desc: "Hand-picked Model Context Protocol tools, configured for maximum impact. Web search, code editing, UI components—all pre-tuned to work together.",
459
- tag: "New"
460
- },
461
- {
462
- num: "04",
463
- title: "Multi-Agent Workflows",
464
- desc: "Run multiple AI agents on different parts of your app. They coordinate automatically without stepping on each other.",
465
- tag: null
466
- }
467
- ];
468
- return /* @__PURE__ */ jsxs("section", {
469
- className: "relative border-t border-border",
470
- children: [/* @__PURE__ */ jsxs("div", {
471
- className: "max-w-7xl mx-auto px-8 py-16 border-b border-border",
472
- children: [
473
- /* @__PURE__ */ jsxs("div", {
474
- className: "flex items-center gap-4 mb-4",
475
- children: [/* @__PURE__ */ jsx("div", { className: "h-px w-12 bg-primary" }), /* @__PURE__ */ jsx("span", {
476
- className: "text-xs text-primary tracking-[0.25em] uppercase font-medium",
477
- children: "AI-Native Framework"
478
- })]
479
- }),
480
- /* @__PURE__ */ jsx("h2", {
481
- className: "text-4xl md:text-5xl font-light text-foreground tracking-[-0.03em] mb-4",
482
- children: "Your AI Gets Superpowers"
483
- }),
484
- /* @__PURE__ */ jsxs("p", {
485
- className: "text-lg text-muted-foreground max-w-2xl",
486
- children: [
487
- "Cursor, Claude, Copilot—they all work better with Kuckit.",
488
- " ",
489
- /* @__PURE__ */ jsx("span", {
490
- className: "text-foreground",
491
- children: "Because we built the framework for AI-first development."
492
- })
493
- ]
494
- })
495
- ]
496
- }), /* @__PURE__ */ jsx("div", {
497
- className: "max-w-7xl mx-auto",
498
- children: /* @__PURE__ */ jsxs("div", {
499
- className: "grid lg:grid-cols-12",
667
+ function FeaturePill({ title, tag }) {
668
+ return /* @__PURE__ */ jsxs("div", {
669
+ className: "shrink-0 px-5 py-3 bg-gradient-to-r from-card to-primary/5 border border-border flex items-center gap-3 group-hover:border-primary/40 transition-colors",
670
+ children: [
671
+ /* @__PURE__ */ jsx("div", { className: "w-1.5 h-1.5 bg-primary rounded-full" }),
672
+ /* @__PURE__ */ jsx("span", {
673
+ className: "text-sm font-medium whitespace-nowrap text-foreground",
674
+ children: title
675
+ }),
676
+ tag && /* @__PURE__ */ jsx("span", {
677
+ className: `text-[9px] px-2 py-0.5 tracking-wider uppercase font-medium ${tag === "Hot" ? "bg-primary text-white" : "bg-[hsl(var(--status-info))] text-white"}`,
678
+ children: tag
679
+ })
680
+ ]
681
+ });
682
+ }
683
+ function CardD() {
684
+ return /* @__PURE__ */ jsxs("div", {
685
+ className: "group relative bg-card border border-border overflow-hidden transform-gpu md:col-span-2 transition-all duration-500 hover:border-primary/60",
686
+ children: [
687
+ /* @__PURE__ */ jsx(CornerMarkers, {}),
688
+ /* @__PURE__ */ jsx("div", { className: "absolute left-0 top-0 bottom-0 w-16 bg-gradient-to-r from-card to-transparent z-10 pointer-events-none" }),
689
+ /* @__PURE__ */ jsx("div", { className: "absolute right-0 top-0 bottom-0 w-16 bg-gradient-to-l from-card to-transparent z-10 pointer-events-none" }),
690
+ /* @__PURE__ */ jsxs("div", {
691
+ className: "absolute inset-0 flex flex-col justify-center",
500
692
  children: [/* @__PURE__ */ jsx("div", {
501
- className: "lg:col-span-7 border-b lg:border-b-0 lg:border-r border-border",
502
- children: features.map((feature, index) => /* @__PURE__ */ jsx("div", {
503
- className: `p-8 ${index < features.length - 1 ? "border-b border-border" : ""}`,
504
- children: /* @__PURE__ */ jsxs("div", {
505
- className: "flex items-start gap-6",
506
- children: [/* @__PURE__ */ jsx("div", {
507
- className: "w-12 h-12 flex items-center justify-center border border-primary/30 bg-primary/5 text-primary font-mono text-sm shrink-0",
508
- children: feature.num
509
- }), /* @__PURE__ */ jsxs("div", {
510
- className: "flex-1 pt-1",
511
- children: [/* @__PURE__ */ jsxs("div", {
512
- className: "flex items-center gap-3 mb-2",
513
- children: [/* @__PURE__ */ jsx("h3", {
514
- className: "text-lg font-medium text-foreground tracking-tight",
515
- children: feature.title
516
- }), feature.tag && /* @__PURE__ */ jsx("span", {
517
- className: "px-2 py-0.5 text-[10px] tracking-[0.1em] uppercase bg-primary/10 text-primary border border-primary/20",
518
- children: feature.tag
519
- })]
520
- }), /* @__PURE__ */ jsx("p", {
521
- className: "text-muted-foreground text-sm leading-relaxed",
522
- children: feature.desc
523
- })]
524
- })]
525
- })
526
- }, feature.title))
693
+ className: "absolute top-4 left-4 z-20",
694
+ children: /* @__PURE__ */ jsx("span", {
695
+ className: "text-[10px] text-muted-foreground tracking-[0.2em] uppercase",
696
+ children: "AI Superpowers"
697
+ })
527
698
  }), /* @__PURE__ */ jsx("div", {
528
- className: "lg:col-span-5 p-8 lg:p-12 bg-card",
699
+ className: "flex overflow-hidden py-4",
529
700
  children: /* @__PURE__ */ jsxs("div", {
530
- className: "h-full flex flex-col",
531
- children: [
532
- /* @__PURE__ */ jsxs("div", {
533
- className: "flex items-center gap-3 mb-8",
534
- children: [/* @__PURE__ */ jsx("div", { className: "w-2 h-2 bg-primary animate-pulse" }), /* @__PURE__ */ jsx("span", {
535
- className: "text-xs text-muted-foreground tracking-[0.2em] uppercase",
536
- children: "AI Enhancement Active"
537
- })]
538
- }),
539
- /* @__PURE__ */ jsxs("div", {
540
- className: "mb-10",
541
- children: [/* @__PURE__ */ jsx("div", {
542
- className: "text-6xl font-light text-foreground tracking-tighter mb-2",
543
- children: "10x"
544
- }), /* @__PURE__ */ jsx("div", {
545
- className: "text-sm text-muted-foreground tracking-wide",
546
- children: "Faster AI responses with context"
547
- })]
548
- }),
549
- /* @__PURE__ */ jsx("div", { className: "h-px bg-border mb-8" }),
550
- /* @__PURE__ */ jsxs("div", {
551
- className: "flex-1",
552
- children: [/* @__PURE__ */ jsx("div", {
553
- className: "text-xs text-muted-foreground tracking-[0.15em] uppercase mb-4",
554
- children: "What Your AI Gets"
555
- }), /* @__PURE__ */ jsx("div", {
556
- className: "space-y-4",
557
- children: [
558
- {
559
- icon: "brain",
560
- label: "Smart Context",
561
- desc: "AI understands your whole project"
562
- },
563
- {
564
- icon: "zap",
565
- label: "Auto-Complete",
566
- desc: "Better suggestions, fewer errors"
567
- },
568
- {
569
- icon: "users",
570
- label: "Team of AIs",
571
- desc: "Parallel agents, zero conflicts"
572
- }
573
- ].map((cap) => /* @__PURE__ */ jsxs("div", {
574
- className: "flex items-center gap-4 px-4 py-3 bg-primary/5 border-l-2 border-primary",
575
- children: [/* @__PURE__ */ jsxs("div", {
576
- className: "w-8 h-8 flex items-center justify-center bg-primary/10 text-primary",
577
- children: [
578
- cap.icon === "brain" && /* @__PURE__ */ jsx("svg", {
579
- className: "w-4 h-4",
580
- fill: "none",
581
- stroke: "currentColor",
582
- viewBox: "0 0 24 24",
583
- children: /* @__PURE__ */ jsx("path", {
584
- strokeLinecap: "round",
585
- strokeLinejoin: "round",
586
- strokeWidth: 2,
587
- d: "M9.663 17h4.673M12 3v1m6.364 1.636l-.707.707M21 12h-1M4 12H3m3.343-5.657l-.707-.707m2.828 9.9a5 5 0 117.072 0l-.548.547A3.374 3.374 0 0014 18.469V19a2 2 0 11-4 0v-.531c0-.895-.356-1.754-.988-2.386l-.548-.547z"
588
- })
589
- }),
590
- cap.icon === "zap" && /* @__PURE__ */ jsx("svg", {
591
- className: "w-4 h-4",
592
- fill: "none",
593
- stroke: "currentColor",
594
- viewBox: "0 0 24 24",
595
- children: /* @__PURE__ */ jsx("path", {
596
- strokeLinecap: "round",
597
- strokeLinejoin: "round",
598
- strokeWidth: 2,
599
- d: "M13 10V3L4 14h7v7l9-11h-7z"
600
- })
601
- }),
602
- cap.icon === "users" && /* @__PURE__ */ jsx("svg", {
603
- className: "w-4 h-4",
604
- fill: "none",
605
- stroke: "currentColor",
606
- viewBox: "0 0 24 24",
607
- children: /* @__PURE__ */ jsx("path", {
608
- strokeLinecap: "round",
609
- strokeLinejoin: "round",
610
- strokeWidth: 2,
611
- d: "M12 4.354a4 4 0 110 5.292M15 21H3v-1a6 6 0 0112 0v1zm0 0h6v-1a6 6 0 00-9-5.197M13 7a4 4 0 11-8 0 4 4 0 018 0z"
612
- })
613
- })
614
- ]
615
- }), /* @__PURE__ */ jsxs("div", {
616
- className: "flex-1",
617
- children: [/* @__PURE__ */ jsx("div", {
618
- className: "text-sm font-medium text-foreground",
619
- children: cap.label
620
- }), /* @__PURE__ */ jsx("div", {
621
- className: "text-xs text-muted-foreground",
622
- children: cap.desc
623
- })]
624
- })]
625
- }, cap.label))
626
- })]
627
- }),
628
- /* @__PURE__ */ jsxs("div", {
629
- className: "mt-8 pt-6 border-t border-border flex items-center justify-between",
630
- children: [/* @__PURE__ */ jsx("span", {
631
- className: "text-xs text-muted-foreground",
632
- children: "Works with any AI tool"
633
- }), /* @__PURE__ */ jsxs("div", {
634
- className: "flex items-center gap-3 text-xs text-muted-foreground",
635
- children: [
636
- /* @__PURE__ */ jsx("span", { children: "Cursor" }),
637
- /* @__PURE__ */ jsx("span", {
638
- className: "text-border",
639
- children: "•"
640
- }),
641
- /* @__PURE__ */ jsx("span", { children: "Claude" }),
642
- /* @__PURE__ */ jsx("span", {
643
- className: "text-border",
644
- children: "•"
645
- }),
646
- /* @__PURE__ */ jsx("span", { children: "Copilot" })
647
- ]
648
- })]
649
- })
650
- ]
701
+ className: "flex gap-4 px-4 animate-marquee group-hover:[animation-play-state:paused]",
702
+ children: [AI_FEATURES.map((f) => /* @__PURE__ */ jsx(FeaturePill, { ...f }, f.title)), AI_FEATURES.map((f) => /* @__PURE__ */ jsx(FeaturePill, { ...f }, `dup-${f.title}`))]
651
703
  })
652
704
  })]
653
705
  })
654
- })]
706
+ ]
655
707
  });
656
708
  }
657
-
658
- //#endregion
659
- //#region src/client/components/module-showcase.tsx
660
- function ModuleShowcase() {
661
- const modules = [
662
- {
663
- name: "Payments",
664
- package: "Subscriptions & checkout",
665
- desc: "Accept payments in minutes. Subscriptions, one-time purchases, customer portal.",
666
- status: "stable"
667
- },
709
+ function CardE() {
710
+ const layers = [
668
711
  {
669
- name: "User Accounts",
670
- package: "Profiles & settings",
671
- desc: "User registration, profiles, and account management ready to go.",
672
- status: "stable"
712
+ name: "Apps",
713
+ packages: ["web", "server"],
714
+ radius: 95
673
715
  },
674
716
  {
675
- name: "Documentation",
676
- package: "Help & guides",
677
- desc: "Beautiful docs for your users. Write in plain text, get a polished help center.",
678
- status: "stable"
717
+ name: "Infrastructure",
718
+ packages: [
719
+ "db",
720
+ "auth",
721
+ "infra"
722
+ ],
723
+ radius: 75
679
724
  },
680
725
  {
681
- name: "AI Chat",
682
- package: "Smart assistants",
683
- desc: "Add AI chat to your app. Streaming responses, conversation history included.",
684
- status: "stable"
726
+ name: "Adapters",
727
+ packages: ["api", "contracts"],
728
+ radius: 55
685
729
  },
686
730
  {
687
- name: "CLI Login",
688
- package: "Developer tools",
689
- desc: "Let users log in from command line tools with a simple device code.",
690
- status: "stable"
731
+ name: "Application",
732
+ packages: ["application"],
733
+ radius: 38
691
734
  },
692
735
  {
693
- name: "More Coming",
694
- package: "Email, storage, analytics",
695
- desc: "We're building more modules every week. Tell us what you need.",
696
- status: "soon"
736
+ name: "Domain",
737
+ packages: ["domain"],
738
+ radius: 20
697
739
  }
698
740
  ];
699
- return /* @__PURE__ */ jsxs("section", {
700
- id: "modules",
701
- className: "relative border-t border-border",
702
- children: [/* @__PURE__ */ jsxs("div", {
703
- className: "max-w-7xl mx-auto px-8 py-16 border-b border-border",
704
- children: [
705
- /* @__PURE__ */ jsxs("div", {
706
- className: "flex items-center gap-4 mb-4",
707
- children: [/* @__PURE__ */ jsx("div", { className: "h-px w-12 bg-primary" }), /* @__PURE__ */ jsx("span", {
708
- className: "text-xs text-primary tracking-[0.25em] uppercase font-medium",
709
- children: "Module Ecosystem"
710
- })]
711
- }),
712
- /* @__PURE__ */ jsx("h2", {
713
- className: "text-4xl md:text-5xl font-light text-foreground tracking-[-0.03em] mb-4",
714
- children: "Modules for Everything"
715
- }),
716
- /* @__PURE__ */ jsx("p", {
717
- className: "text-lg text-muted-foreground max-w-2xl",
718
- children: "Skip weeks of development. Install battle-tested modules and focus on what makes your product unique."
719
- })
720
- ]
721
- }), /* @__PURE__ */ jsxs("div", {
722
- className: "max-w-7xl mx-auto",
723
- children: [/* @__PURE__ */ jsx("div", {
724
- className: "grid md:grid-cols-2 lg:grid-cols-3",
725
- children: modules.map((mod, index) => {
726
- const isLastRow = index >= modules.length - (modules.length % 3 || 3);
727
- const isLastCol = (index + 1) % 3 === 0;
728
- return /* @__PURE__ */ jsxs("div", {
729
- className: `group relative p-8 transition-colors hover:bg-card ${!isLastRow ? "border-b border-border" : ""} ${!isLastCol ? "lg:border-r border-border" : ""} ${index % 2 === 0 && index < modules.length - 1 ? "md:border-r" : ""} ${index < modules.length - 2 ? "md:border-b" : ""} lg:border-b-0 ${index < modules.length - 3 ? "lg:border-b lg:border-border" : ""}`,
730
- children: [
731
- /* @__PURE__ */ jsx("div", {
732
- className: "absolute top-6 right-6",
733
- children: /* @__PURE__ */ jsx("span", {
734
- className: `px-2 py-1 text-[10px] tracking-[0.15em] uppercase ${mod.status === "stable" ? "bg-[hsl(var(--status-success)/0.1)] text-[hsl(var(--status-success))] border border-[hsl(var(--status-success)/0.2)]" : mod.status === "beta" ? "bg-primary/10 text-primary border border-primary/20" : "bg-muted text-muted-foreground border border-border"}`,
735
- children: mod.status
736
- })
737
- }),
738
- /* @__PURE__ */ jsxs("div", {
739
- className: "pr-16",
740
- children: [
741
- /* @__PURE__ */ jsx("span", {
742
- className: "text-sm text-primary block mb-3",
743
- children: mod.package
744
- }),
745
- /* @__PURE__ */ jsx("h3", {
746
- className: "text-xl font-medium text-foreground mb-2 tracking-tight group-hover:text-primary transition-colors",
747
- children: mod.name
748
- }),
749
- /* @__PURE__ */ jsx("p", {
750
- className: "text-sm text-muted-foreground",
751
- children: mod.desc
752
- })
753
- ]
754
- }),
755
- /* @__PURE__ */ jsx("div", {
756
- className: "absolute bottom-6 right-6 opacity-0 group-hover:opacity-100 transition-opacity",
757
- children: /* @__PURE__ */ jsx("svg", {
758
- className: "w-5 h-5 text-primary",
759
- fill: "none",
760
- stroke: "currentColor",
761
- viewBox: "0 0 24 24",
762
- children: /* @__PURE__ */ jsx("path", {
763
- strokeLinecap: "round",
764
- strokeLinejoin: "round",
765
- strokeWidth: 1.5,
766
- d: "M17 8l4 4m0 0l-4 4m4-4H3"
767
- })
768
- })
769
- })
770
- ]
771
- }, mod.name);
772
- })
773
- }), /* @__PURE__ */ jsx("div", {
774
- className: "border-t border-border",
775
- children: /* @__PURE__ */ jsxs("div", {
776
- className: "px-8 py-8 flex flex-col md:flex-row md:items-center justify-between gap-6",
777
- children: [/* @__PURE__ */ jsx("div", { children: /* @__PURE__ */ jsx("span", {
778
- className: "text-sm text-muted-foreground",
779
- children: "More modules coming soon. Explore the documentation to get started."
780
- }) }), /* @__PURE__ */ jsxs("a", {
781
- href: "/docs",
782
- className: "group inline-flex items-center gap-3 px-6 py-3 border border-border text-foreground hover:border-primary/50 hover:bg-card transition-all",
783
- children: [/* @__PURE__ */ jsx("span", { children: "View Documentation" }), /* @__PURE__ */ jsx("svg", {
784
- className: "w-4 h-4 group-hover:translate-x-1 transition-transform",
785
- fill: "none",
786
- stroke: "currentColor",
787
- viewBox: "0 0 24 24",
788
- children: /* @__PURE__ */ jsx("path", {
789
- strokeLinecap: "round",
790
- strokeLinejoin: "round",
791
- strokeWidth: 2,
792
- d: "M17 8l4 4m0 0l-4 4m4-4H3"
793
- })
794
- })]
795
- })]
796
- })
797
- })]
798
- })]
799
- });
800
- }
801
-
802
- //#endregion
803
- //#region src/client/components/how-it-works.tsx
804
- function HowItWorks() {
805
- const [activeTab, setActiveTab] = useState("builders");
806
- const steps = activeTab === "builders" ? [
807
- {
808
- num: "01",
809
- command: "bunx create-kuckit-app my-app",
810
- title: "Scaffold your app",
811
- desc: "Get a production-ready TypeScript app with Clean Architecture baked in."
812
- },
813
- {
814
- num: "02",
815
- command: "kuckit add @vendor/billing",
816
- title: "Install modules",
817
- desc: "One command adds both server and client code, wired and ready."
818
- },
819
- {
820
- num: "03",
821
- command: "bun run dev",
822
- title: "Ship it",
823
- desc: "Your app is ready. Maintainable, type-safe, and battle-tested."
824
- }
825
- ] : [
826
- {
827
- num: "01",
828
- command: "kuckit generate module billing",
829
- title: "Scaffold with AGENTS.md",
830
- desc: "Generated structure includes documentation for AI and human developers."
831
- },
832
- {
833
- num: "02",
834
- command: "git commit && git push",
835
- title: "Build & test",
836
- desc: "Guardrails ensure your module meets quality standards before it ships."
837
- },
838
- {
839
- num: "03",
840
- command: "kuckit publish",
841
- title: "Earn revenue",
842
- desc: "Set your price, publish to the marketplace, and start earning."
843
- }
844
- ];
845
- return /* @__PURE__ */ jsxs("section", {
846
- className: "relative border-t border-border",
741
+ return /* @__PURE__ */ jsxs("div", {
742
+ className: "group relative bg-card border border-border overflow-hidden transform-gpu md:col-span-2 transition-all duration-500 hover:border-primary/60",
847
743
  children: [
744
+ /* @__PURE__ */ jsx(CornerMarkers, {}),
745
+ /* @__PURE__ */ jsx(ScanLines, {}),
746
+ /* @__PURE__ */ jsx("div", {
747
+ className: "absolute top-4 left-4 z-20",
748
+ children: /* @__PURE__ */ jsx("span", {
749
+ className: "text-[10px] text-muted-foreground tracking-[0.2em] uppercase",
750
+ children: "Clean Architecture"
751
+ })
752
+ }),
848
753
  /* @__PURE__ */ jsxs("div", {
849
- className: "max-w-7xl mx-auto px-8 py-16 border-b border-border",
850
- children: [
851
- /* @__PURE__ */ jsxs("div", {
852
- className: "flex items-center gap-4 mb-4",
853
- children: [/* @__PURE__ */ jsx("div", { className: "h-px w-12 bg-primary" }), /* @__PURE__ */ jsx("span", {
854
- className: "text-xs text-primary tracking-[0.25em] uppercase font-medium",
855
- children: "Getting Started"
856
- })]
857
- }),
858
- /* @__PURE__ */ jsx("h2", {
859
- className: "text-4xl md:text-5xl font-light text-foreground tracking-[-0.03em] mb-4",
860
- children: "How It Works"
861
- }),
862
- /* @__PURE__ */ jsx("p", {
863
- className: "text-lg text-muted-foreground",
864
- children: "Three steps to shipping or selling."
754
+ className: "absolute top-4 right-4 z-20 flex items-center gap-2",
755
+ children: [/* @__PURE__ */ jsx("span", {
756
+ className: "text-[8px] text-muted-foreground tracking-wider uppercase",
757
+ children: "deps flow in"
758
+ }), /* @__PURE__ */ jsx("svg", {
759
+ className: "w-3 h-3 text-primary animate-pulse",
760
+ viewBox: "0 0 24 24",
761
+ fill: "none",
762
+ stroke: "currentColor",
763
+ strokeWidth: 2,
764
+ children: /* @__PURE__ */ jsx("circle", {
765
+ cx: "12",
766
+ cy: "12",
767
+ r: "3",
768
+ fill: "currentColor"
865
769
  })
866
- ]
770
+ })]
867
771
  }),
868
772
  /* @__PURE__ */ jsx("div", {
869
- className: "max-w-7xl mx-auto border-b border-border",
773
+ className: "absolute inset-0 flex items-center justify-center",
870
774
  children: /* @__PURE__ */ jsxs("div", {
871
- className: "flex",
872
- children: [/* @__PURE__ */ jsxs("button", {
873
- onClick: () => setActiveTab("builders"),
874
- className: `relative px-8 py-5 text-sm font-medium transition-colors ${activeTab === "builders" ? "text-foreground" : "text-muted-foreground hover:text-foreground"}`,
875
- children: ["For Builders", activeTab === "builders" && /* @__PURE__ */ jsx("div", { className: "absolute bottom-0 left-0 right-0 h-[2px] bg-primary" })]
876
- }), /* @__PURE__ */ jsxs("button", {
877
- onClick: () => setActiveTab("sellers"),
878
- className: `relative px-8 py-5 text-sm font-medium transition-colors ${activeTab === "sellers" ? "text-foreground" : "text-muted-foreground hover:text-foreground"}`,
879
- children: ["For Sellers", activeTab === "sellers" && /* @__PURE__ */ jsx("div", { className: "absolute bottom-0 left-0 right-0 h-[2px] bg-primary" })]
880
- })]
775
+ className: "relative w-48 h-48 md:w-56 md:h-56",
776
+ children: [
777
+ /* @__PURE__ */ jsx("div", {
778
+ className: "absolute inset-0 flex items-center justify-center",
779
+ children: [
780
+ 0,
781
+ 1,
782
+ 2
783
+ ].map((i) => /* @__PURE__ */ jsx("div", {
784
+ className: "absolute rounded-full border border-primary/20",
785
+ style: {
786
+ width: "100%",
787
+ height: "100%",
788
+ animation: `pulseIn 3s ease-in-out infinite`,
789
+ animationDelay: `${i * 1}s`
790
+ }
791
+ }, i))
792
+ }),
793
+ layers.map((layer, i) => /* @__PURE__ */ jsx("div", {
794
+ className: "absolute left-1/2 top-1/2 -translate-x-1/2 -translate-y-1/2 rounded-full border transition-all duration-300 group/layer flex items-center justify-center cursor-default",
795
+ style: {
796
+ width: `${layer.radius}%`,
797
+ height: `${layer.radius}%`,
798
+ borderColor: i === layers.length - 1 ? "hsl(var(--primary))" : `hsl(var(--primary) / ${.15 + i * .1})`,
799
+ backgroundColor: i === layers.length - 1 ? "hsl(var(--primary) / 0.15)" : `hsl(var(--primary) / ${.02 + i * .02})`
800
+ },
801
+ children: i === layers.length - 1 ? /* @__PURE__ */ jsx("span", {
802
+ className: "text-[9px] font-medium text-primary tracking-wide",
803
+ children: layer.name
804
+ }) : /* @__PURE__ */ jsx("span", {
805
+ className: "absolute text-[8px] text-muted-foreground/60 tracking-wide opacity-0 group-hover:opacity-100 transition-opacity whitespace-nowrap",
806
+ style: {
807
+ top: "2px",
808
+ left: "50%",
809
+ transform: "translateX(-50%)"
810
+ },
811
+ children: layer.name
812
+ })
813
+ }, layer.name)),
814
+ /* @__PURE__ */ jsx("div", { className: "absolute left-1/2 top-1/2 -translate-x-1/2 -translate-y-1/2 w-8 h-8 bg-primary/30 rounded-full blur-xl" })
815
+ ]
881
816
  })
882
817
  }),
883
818
  /* @__PURE__ */ jsx("div", {
884
- className: "max-w-7xl mx-auto",
885
- children: /* @__PURE__ */ jsx("div", {
886
- className: "grid lg:grid-cols-3",
887
- children: steps.map((step, index) => /* @__PURE__ */ jsxs("div", {
888
- className: `relative p-8 lg:p-10 ${index < steps.length - 1 ? "border-b lg:border-b-0 lg:border-r border-border" : ""}`,
889
- children: [
890
- /* @__PURE__ */ jsxs("div", {
891
- className: "flex items-start justify-between mb-8",
892
- children: [/* @__PURE__ */ jsx("span", {
893
- className: "text-4xl font-light text-primary tracking-tighter",
894
- children: step.num
895
- }), index < steps.length - 1 && /* @__PURE__ */ jsx("svg", {
896
- className: "w-5 h-5 text-muted-foreground hidden lg:block mt-2",
897
- fill: "none",
898
- stroke: "currentColor",
899
- viewBox: "0 0 24 24",
900
- children: /* @__PURE__ */ jsx("path", {
901
- strokeLinecap: "round",
902
- strokeLinejoin: "round",
903
- strokeWidth: 1.5,
904
- d: "M17 8l4 4m0 0l-4 4m4-4H3"
905
- })
906
- })]
907
- }),
908
- /* @__PURE__ */ jsx("h3", {
909
- className: "text-xl font-medium text-foreground mb-3 tracking-tight",
910
- children: step.title
911
- }),
912
- /* @__PURE__ */ jsx("p", {
913
- className: "text-muted-foreground text-sm mb-6 leading-relaxed",
914
- children: step.desc
915
- }),
916
- /* @__PURE__ */ jsxs("div", {
917
- className: "flex items-center gap-3 px-4 py-3 bg-background border border-border font-mono text-sm",
918
- children: [/* @__PURE__ */ jsx("span", {
919
- className: "text-primary",
920
- children: "$"
921
- }), /* @__PURE__ */ jsx("code", {
922
- className: "text-foreground/80",
923
- children: step.command
924
- })]
925
- })
926
- ]
927
- }, step.num))
928
- })
819
+ className: "absolute right-4 top-1/2 -translate-y-1/2 space-y-1 opacity-0 group-hover:opacity-100 transition-opacity duration-300",
820
+ children: layers.slice().reverse().map((layer) => /* @__PURE__ */ jsxs("div", {
821
+ className: "flex items-center gap-2",
822
+ children: [/* @__PURE__ */ jsx("div", {
823
+ className: "w-2 h-2 rounded-full",
824
+ style: { backgroundColor: "hsl(var(--primary) / 0.5)" }
825
+ }), /* @__PURE__ */ jsx("code", {
826
+ className: "text-[8px] text-muted-foreground font-mono",
827
+ children: layer.packages.join(", ")
828
+ })]
829
+ }, layer.name))
929
830
  })
930
831
  ]
931
832
  });
932
833
  }
933
-
934
- //#endregion
935
- //#region src/client/components/architecture-preview.tsx
936
- function ArchitecturePreview() {
937
- const layers = [
938
- {
939
- name: "Interface",
940
- items: ["apps/web", "apps/server"],
941
- desc: "React UI + Express API"
942
- },
943
- {
944
- name: "SDK",
945
- items: ["sdk", "sdk-react"],
946
- desc: "Module system + DI container"
947
- },
948
- {
949
- name: "Application",
950
- items: ["application", "api"],
951
- desc: "Use cases + oRPC procedures"
952
- },
953
- {
954
- name: "Domain",
955
- items: ["domain", "contracts"],
956
- desc: "Entities + Zod schemas"
957
- },
958
- {
959
- name: "Infrastructure",
960
- items: [
961
- "infrastructure",
962
- "db",
963
- "auth"
964
- ],
965
- desc: "Repositories + Drizzle ORM"
966
- }
967
- ];
968
- return /* @__PURE__ */ jsxs("section", {
969
- className: "relative border-t border-border",
970
- children: [/* @__PURE__ */ jsxs("div", {
971
- className: "max-w-7xl mx-auto px-8 py-16 border-b border-border",
972
- children: [
973
- /* @__PURE__ */ jsxs("div", {
974
- className: "flex items-center gap-4 mb-4",
975
- children: [/* @__PURE__ */ jsx("div", { className: "h-px w-12 bg-primary" }), /* @__PURE__ */ jsx("span", {
976
- className: "text-xs text-primary tracking-[0.25em] uppercase font-medium",
977
- children: "Clean Architecture"
978
- })]
979
- }),
980
- /* @__PURE__ */ jsx("h2", {
981
- className: "text-4xl md:text-5xl font-light text-foreground tracking-[-0.03em] mb-4",
982
- children: "Every Module, Same Structure"
983
- }),
984
- /* @__PURE__ */ jsx("p", {
985
- className: "text-lg text-muted-foreground max-w-2xl",
986
- children: "Clear boundaries between layers. AGENTS.md in every package ensures AI and humans build consistently."
834
+ function CardF() {
835
+ return /* @__PURE__ */ jsxs("div", {
836
+ className: "group relative bg-card border border-border overflow-hidden transform-gpu transition-all duration-500 hover:border-primary/60 hover:bg-primary/5",
837
+ children: [
838
+ /* @__PURE__ */ jsx(CornerMarkers, {}),
839
+ /* @__PURE__ */ jsx("div", {
840
+ className: "absolute inset-0 opacity-5",
841
+ children: /* @__PURE__ */ jsxs("svg", {
842
+ className: "w-full h-full",
843
+ viewBox: "0 0 100 100",
844
+ preserveAspectRatio: "none",
845
+ children: [
846
+ /* @__PURE__ */ jsx("circle", {
847
+ cx: "50",
848
+ cy: "50",
849
+ r: "40",
850
+ fill: "none",
851
+ stroke: "currentColor",
852
+ strokeWidth: "0.5"
853
+ }),
854
+ /* @__PURE__ */ jsx("circle", {
855
+ cx: "50",
856
+ cy: "50",
857
+ r: "25",
858
+ fill: "none",
859
+ stroke: "currentColor",
860
+ strokeWidth: "0.5"
861
+ }),
862
+ /* @__PURE__ */ jsx("line", {
863
+ x1: "0",
864
+ y1: "50",
865
+ x2: "100",
866
+ y2: "50",
867
+ stroke: "currentColor",
868
+ strokeWidth: "0.5"
869
+ }),
870
+ /* @__PURE__ */ jsx("line", {
871
+ x1: "50",
872
+ y1: "0",
873
+ x2: "50",
874
+ y2: "100",
875
+ stroke: "currentColor",
876
+ strokeWidth: "0.5"
877
+ })
878
+ ]
987
879
  })
988
- ]
989
- }), /* @__PURE__ */ jsx("div", {
990
- className: "max-w-7xl mx-auto",
991
- children: /* @__PURE__ */ jsxs("div", {
992
- className: "grid lg:grid-cols-12",
993
- children: [/* @__PURE__ */ jsxs("div", {
994
- className: "lg:col-span-8 border-b lg:border-b-0 lg:border-r border-border p-8 lg:p-12",
995
- children: [/* @__PURE__ */ jsx("div", {
996
- className: "space-y-1",
997
- children: layers.map((layer, index) => /* @__PURE__ */ jsxs("div", {
998
- className: "group relative",
999
- children: [/* @__PURE__ */ jsxs("div", {
1000
- className: "flex items-stretch border border-border hover:border-primary/30 transition-colors",
1001
- children: [
1002
- /* @__PURE__ */ jsxs("div", {
1003
- className: "w-40 shrink-0 p-4 bg-card border-r border-border flex flex-col justify-center",
1004
- children: [/* @__PURE__ */ jsxs("span", {
1005
- className: "text-xs text-muted-foreground tracking-[0.1em] uppercase mb-1",
1006
- children: ["Layer ", String(index + 1).padStart(2, "0")]
1007
- }), /* @__PURE__ */ jsx("span", {
1008
- className: "font-medium text-foreground",
1009
- children: layer.name
1010
- })]
1011
- }),
1012
- /* @__PURE__ */ jsx("div", {
1013
- className: "flex-1 p-4 flex items-center gap-3 flex-wrap",
1014
- children: layer.items.map((item) => /* @__PURE__ */ jsxs("div", {
1015
- className: "inline-flex items-center gap-2 px-3 py-1.5 bg-background border border-border",
1016
- children: [/* @__PURE__ */ jsx("span", { className: "w-1.5 h-1.5 bg-primary" }), /* @__PURE__ */ jsx("code", {
1017
- className: "text-sm font-mono text-foreground/80",
1018
- children: item
1019
- })]
1020
- }, item))
1021
- }),
1022
- /* @__PURE__ */ jsx("div", {
1023
- className: "hidden md:flex w-28 shrink-0 items-center justify-center border-l border-border bg-primary/5",
1024
- children: /* @__PURE__ */ jsxs("div", {
1025
- className: "flex items-center gap-1.5 text-primary",
1026
- children: [/* @__PURE__ */ jsx("svg", {
1027
- className: "w-3.5 h-3.5",
1028
- fill: "none",
1029
- stroke: "currentColor",
1030
- viewBox: "0 0 24 24",
1031
- children: /* @__PURE__ */ jsx("path", {
1032
- strokeLinecap: "round",
1033
- strokeLinejoin: "round",
1034
- strokeWidth: 2,
1035
- d: "M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z"
1036
- })
1037
- }), /* @__PURE__ */ jsx("span", {
1038
- className: "text-xs font-mono",
1039
- children: ".md"
1040
- })]
1041
- })
1042
- })
1043
- ]
1044
- }), index < layers.length - 1 && /* @__PURE__ */ jsx("div", {
1045
- className: "flex justify-center py-1",
1046
- children: /* @__PURE__ */ jsx("svg", {
1047
- className: "w-4 h-4 text-muted-foreground",
1048
- fill: "none",
1049
- stroke: "currentColor",
1050
- viewBox: "0 0 24 24",
1051
- children: /* @__PURE__ */ jsx("path", {
1052
- strokeLinecap: "round",
1053
- strokeLinejoin: "round",
1054
- strokeWidth: 1.5,
1055
- d: "M19 14l-7 7m0 0l-7-7m7 7V3"
1056
- })
1057
- })
1058
- })]
1059
- }, layer.name))
1060
- }), /* @__PURE__ */ jsxs("div", {
1061
- className: "mt-8 flex items-center gap-2 text-sm text-muted-foreground",
880
+ }),
881
+ /* @__PURE__ */ jsxs("div", {
882
+ className: "absolute inset-0 flex flex-col justify-center items-center p-6 text-center",
883
+ children: [
884
+ /* @__PURE__ */ jsxs("div", {
885
+ className: "relative mb-4 group-hover:scale-110 transition-transform duration-300",
1062
886
  children: [/* @__PURE__ */ jsx("svg", {
1063
- className: "w-4 h-4",
887
+ className: "w-10 h-10 text-primary",
1064
888
  fill: "none",
1065
- stroke: "currentColor",
1066
889
  viewBox: "0 0 24 24",
890
+ stroke: "currentColor",
891
+ strokeWidth: 1.5,
1067
892
  children: /* @__PURE__ */ jsx("path", {
1068
893
  strokeLinecap: "round",
1069
894
  strokeLinejoin: "round",
1070
- strokeWidth: 1.5,
1071
- d: "M19 14l-7 7m0 0l-7-7m7 7V3"
1072
- })
1073
- }), /* @__PURE__ */ jsx("span", { children: "Dependencies flow down only" })]
1074
- })]
1075
- }), /* @__PURE__ */ jsxs("div", {
1076
- className: "lg:col-span-4 p-8 lg:p-12 bg-card",
1077
- children: [/* @__PURE__ */ jsxs("div", {
1078
- className: "flex items-center gap-3 mb-8",
1079
- children: [/* @__PURE__ */ jsx("div", { className: "w-2 h-2 bg-primary" }), /* @__PURE__ */ jsx("span", {
1080
- className: "text-xs text-muted-foreground tracking-[0.2em] uppercase",
1081
- children: "Layer Details"
1082
- })]
1083
- }), /* @__PURE__ */ jsx("div", {
1084
- className: "space-y-6",
1085
- children: layers.map((layer, index) => /* @__PURE__ */ jsx("div", {
1086
- className: "group",
1087
- children: /* @__PURE__ */ jsxs("div", {
1088
- className: "flex items-start gap-4",
1089
- children: [/* @__PURE__ */ jsx("div", {
1090
- className: "w-6 h-6 flex items-center justify-center border border-border text-xs font-mono text-muted-foreground shrink-0",
1091
- children: index + 1
1092
- }), /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("div", {
1093
- className: "text-foreground font-medium mb-1 group-hover:text-primary transition-colors",
1094
- children: layer.name
1095
- }), /* @__PURE__ */ jsx("div", {
1096
- className: "text-muted-foreground text-sm",
1097
- children: layer.desc
1098
- })] })]
895
+ d: "M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z"
1099
896
  })
1100
- }, layer.name))
1101
- })]
1102
- })]
897
+ }), /* @__PURE__ */ jsx("div", { className: "absolute -inset-2 bg-primary/20 blur-lg -z-10 group-hover:bg-primary/30 transition-colors" })]
898
+ }),
899
+ /* @__PURE__ */ jsx("span", {
900
+ className: "text-sm font-mono text-primary tracking-wide",
901
+ children: "AGENTS.md"
902
+ }),
903
+ /* @__PURE__ */ jsx("span", {
904
+ className: "text-[10px] text-muted-foreground mt-1 tracking-wider uppercase",
905
+ children: "In every package"
906
+ })
907
+ ]
1103
908
  })
1104
- })]
909
+ ]
1105
910
  });
1106
911
  }
1107
-
1108
- //#endregion
1109
- //#region src/client/components/cli-demo.tsx
1110
- function CliDemo() {
1111
- const commands = [
1112
- {
1113
- input: "kuckit generate module billing",
1114
- output: [
1115
- "Creating module: @myapp/billing-module",
1116
- " Directory: ./packages/billing-module",
1117
- "",
1118
- "✓ Created src/server/module.ts",
1119
- "✓ Created src/client/index.ts",
1120
- "✓ Created AGENTS.md",
1121
- "✓ Created package.json",
1122
- "",
1123
- "Module created successfully!"
1124
- ]
1125
- },
1126
- {
1127
- input: "kuckit add @vendor/auth-module",
1128
- output: [
1129
- "Installing @vendor/auth-module...",
1130
- "",
1131
- "✓ Package installed",
1132
- "✓ Server module wired in modules.ts",
1133
- "✓ Client module wired in modules.client.ts",
1134
- "✓ TypeScript types available",
1135
- "",
1136
- "Module ready to use!"
1137
- ]
1138
- },
1139
- {
1140
- input: "kuckit doctor",
1141
- output: [
1142
- "Checking project setup...",
1143
- "",
1144
- "✓ kuckit.config.ts found",
1145
- "✓ All modules registered",
1146
- "✓ No circular dependencies",
1147
- "✓ AGENTS.md in all packages",
1148
- "✓ Pre-commit hooks configured",
1149
- "",
1150
- "All checks passed!"
1151
- ]
1152
- }
1153
- ];
1154
- const [activeCommand, setActiveCommand] = useState(0);
1155
- const [displayedLines, setDisplayedLines] = useState([]);
1156
- const [isTyping, setIsTyping] = useState(true);
1157
- const [typedInput, setTypedInput] = useState("");
1158
- useEffect(() => {
1159
- const command = commands[activeCommand];
1160
- if (!command) return;
1161
- let inputIndex = 0;
1162
- let outputIndex = 0;
1163
- setDisplayedLines([]);
1164
- setTypedInput("");
1165
- setIsTyping(true);
1166
- const inputInterval = setInterval(() => {
1167
- if (inputIndex <= command.input.length) {
1168
- setTypedInput(command.input.slice(0, inputIndex));
1169
- inputIndex++;
1170
- } else {
1171
- clearInterval(inputInterval);
1172
- setIsTyping(false);
1173
- const outputInterval = setInterval(() => {
1174
- if (outputIndex < command.output.length) {
1175
- const line = command.output[outputIndex];
1176
- if (line !== void 0) setDisplayedLines((prev) => [...prev, line]);
1177
- outputIndex++;
1178
- } else {
1179
- clearInterval(outputInterval);
1180
- setTimeout(() => {
1181
- setActiveCommand((prev) => (prev + 1) % commands.length);
1182
- }, 3e3);
1183
- }
1184
- }, 100);
1185
- }
1186
- }, 50);
1187
- return () => {
1188
- clearInterval(inputInterval);
1189
- };
1190
- }, [activeCommand]);
912
+ function Features() {
1191
913
  return /* @__PURE__ */ jsxs("section", {
1192
- className: "relative border-t border-border",
914
+ className: "relative border-t border-border overflow-hidden",
1193
915
  children: [/* @__PURE__ */ jsxs("div", {
1194
- className: "max-w-7xl mx-auto px-8 py-16 border-b border-border",
1195
- children: [
1196
- /* @__PURE__ */ jsxs("div", {
1197
- className: "flex items-center gap-4 mb-4",
1198
- children: [/* @__PURE__ */ jsx("div", { className: "h-px w-12 bg-primary" }), /* @__PURE__ */ jsx("span", {
1199
- className: "text-xs text-primary tracking-[0.25em] uppercase font-medium",
1200
- children: "Developer Experience"
1201
- })]
1202
- }),
1203
- /* @__PURE__ */ jsx("h2", {
1204
- className: "text-4xl md:text-5xl font-light text-foreground tracking-[-0.03em] mb-4",
1205
- children: "Powerful CLI"
1206
- }),
1207
- /* @__PURE__ */ jsx("p", {
1208
- className: "text-lg text-muted-foreground",
1209
- children: "Generate, add, search, and validate modules from the command line."
1210
- })
1211
- ]
1212
- }), /* @__PURE__ */ jsx("div", {
1213
- className: "max-w-7xl mx-auto",
1214
- children: /* @__PURE__ */ jsxs("div", {
1215
- className: "grid lg:grid-cols-12",
1216
- children: [/* @__PURE__ */ jsx("div", {
1217
- className: "lg:col-span-8 border-b lg:border-b-0 lg:border-r border-border",
1218
- children: /* @__PURE__ */ jsxs("div", {
1219
- className: "p-8 lg:p-12",
1220
- children: [/* @__PURE__ */ jsxs("div", {
1221
- className: "border border-border bg-background",
1222
- children: [/* @__PURE__ */ jsxs("div", {
1223
- className: "flex items-center justify-between px-4 py-3 border-b border-border bg-card",
1224
- children: [
1225
- /* @__PURE__ */ jsxs("div", {
1226
- className: "flex items-center gap-2",
1227
- children: [
1228
- /* @__PURE__ */ jsx("div", { className: "w-3 h-3 rounded-full bg-[hsl(var(--status-error)/0.8)]" }),
1229
- /* @__PURE__ */ jsx("div", { className: "w-3 h-3 rounded-full bg-[hsl(var(--status-warning)/0.8)]" }),
1230
- /* @__PURE__ */ jsx("div", { className: "w-3 h-3 rounded-full bg-[hsl(var(--status-success)/0.8)]" })
1231
- ]
1232
- }),
1233
- /* @__PURE__ */ jsx("span", {
1234
- className: "text-xs text-muted-foreground font-mono",
1235
- children: "terminal"
1236
- }),
1237
- /* @__PURE__ */ jsx("div", { className: "w-16" })
1238
- ]
1239
- }), /* @__PURE__ */ jsxs("div", {
1240
- className: "p-6 font-mono text-sm min-h-[320px]",
1241
- children: [/* @__PURE__ */ jsxs("div", {
1242
- className: "flex items-center gap-2 mb-4",
1243
- children: [
1244
- /* @__PURE__ */ jsx("span", {
1245
- className: "text-primary",
1246
- children: "$"
1247
- }),
1248
- /* @__PURE__ */ jsx("span", {
1249
- className: "text-foreground",
1250
- children: typedInput
1251
- }),
1252
- isTyping && /* @__PURE__ */ jsx("span", { className: "w-2 h-5 bg-primary animate-pulse" })
1253
- ]
1254
- }), /* @__PURE__ */ jsx("div", {
1255
- className: "space-y-0.5",
1256
- children: displayedLines.map((line, index) => /* @__PURE__ */ jsx("div", {
1257
- className: `${line?.startsWith("✓") ? "text-[hsl(var(--status-success))]" : line?.includes("!") ? "text-foreground" : "text-muted-foreground"}`,
1258
- children: line || "\xA0"
1259
- }, index))
1260
- })]
1261
- })]
1262
- }), /* @__PURE__ */ jsx("div", {
1263
- className: "flex justify-center gap-2 mt-6",
1264
- children: commands.map((_, index) => /* @__PURE__ */ jsx("button", {
1265
- onClick: () => setActiveCommand(index),
1266
- className: `h-1.5 transition-all ${index === activeCommand ? "bg-primary w-8" : "bg-muted hover:bg-muted-foreground/30 w-1.5"}`
1267
- }, index))
1268
- })]
1269
- })
1270
- }), /* @__PURE__ */ jsxs("div", {
1271
- className: "lg:col-span-4 p-8 lg:p-12 bg-card",
1272
- children: [/* @__PURE__ */ jsxs("div", {
1273
- className: "flex items-center gap-3 mb-8",
1274
- children: [/* @__PURE__ */ jsx("div", { className: "w-2 h-2 bg-primary" }), /* @__PURE__ */ jsx("span", {
1275
- className: "text-xs text-muted-foreground tracking-[0.2em] uppercase",
1276
- children: "Commands"
916
+ className: "absolute inset-0 pointer-events-none",
917
+ children: [/* @__PURE__ */ jsx("div", { className: "absolute top-1/4 -left-1/4 w-1/2 h-1/2 bg-primary/5 rounded-full blur-[120px]" }), /* @__PURE__ */ jsx("div", { className: "absolute bottom-1/4 -right-1/4 w-1/2 h-1/2 bg-primary/5 rounded-full blur-[120px]" })]
918
+ }), /* @__PURE__ */ jsxs("div", {
919
+ className: "relative max-w-7xl mx-auto px-8 py-20 md:py-28",
920
+ children: [/* @__PURE__ */ jsxs("div", {
921
+ className: "mb-16 md:mb-20",
922
+ children: [
923
+ /* @__PURE__ */ jsxs("div", {
924
+ className: "flex items-center gap-4 mb-6",
925
+ children: [/* @__PURE__ */ jsx("div", { className: "h-px w-16 bg-gradient-to-r from-primary to-transparent" }), /* @__PURE__ */ jsx("span", {
926
+ className: "text-[11px] text-primary tracking-[0.3em] uppercase font-medium",
927
+ children: "Features"
1277
928
  })]
1278
- }), /* @__PURE__ */ jsx("div", {
1279
- className: "space-y-4",
1280
- children: [
1281
- {
1282
- cmd: "generate",
1283
- desc: "Scaffold new modules"
1284
- },
1285
- {
1286
- cmd: "add",
1287
- desc: "Install from marketplace"
1288
- },
1289
- {
1290
- cmd: "doctor",
1291
- desc: "Validate project setup"
1292
- },
1293
- {
1294
- cmd: "deploy",
1295
- desc: "Ship to production"
1296
- },
1297
- {
1298
- cmd: "publish",
1299
- desc: "Publish to marketplace"
1300
- }
1301
- ].map((item, index) => /* @__PURE__ */ jsxs("div", {
1302
- className: "group flex items-start gap-4",
1303
- children: [/* @__PURE__ */ jsx("div", {
1304
- className: "w-6 h-6 flex items-center justify-center border border-border text-xs font-mono text-muted-foreground shrink-0",
1305
- children: index + 1
1306
- }), /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsxs("code", {
1307
- className: "text-foreground font-medium group-hover:text-primary transition-colors",
1308
- children: ["kuckit ", item.cmd]
1309
- }), /* @__PURE__ */ jsx("div", {
1310
- className: "text-muted-foreground text-sm mt-0.5",
1311
- children: item.desc
1312
- })] })]
1313
- }, item.cmd))
1314
- })]
1315
- })]
1316
- })
929
+ }),
930
+ /* @__PURE__ */ jsx("h2", {
931
+ className: "text-4xl md:text-5xl lg:text-6xl font-light text-foreground tracking-[-0.04em] mb-6",
932
+ children: "Everything You Need"
933
+ }),
934
+ /* @__PURE__ */ jsxs("p", {
935
+ className: "text-lg md:text-xl text-muted-foreground max-w-2xl leading-relaxed",
936
+ children: ["A complete foundation for building production-ready SaaS applications.", /* @__PURE__ */ jsx("span", {
937
+ className: "text-foreground",
938
+ children: " No assembly required."
939
+ })]
940
+ })
941
+ ]
942
+ }), /* @__PURE__ */ jsxs("div", {
943
+ className: "grid grid-cols-1 md:grid-cols-3 auto-rows-[14rem] gap-4 md:gap-5",
944
+ children: [
945
+ /* @__PURE__ */ jsx(CardA, {}),
946
+ /* @__PURE__ */ jsx(CardB, { className: "md:row-span-2" }),
947
+ /* @__PURE__ */ jsx(CardC, { className: "md:row-span-2" }),
948
+ /* @__PURE__ */ jsx(CardD, {}),
949
+ /* @__PURE__ */ jsx(CardE, {}),
950
+ /* @__PURE__ */ jsx(CardF, {})
951
+ ]
952
+ })]
1317
953
  })]
1318
954
  });
1319
955
  }
@@ -1590,87 +1226,6 @@ function FAQItemComponent({ item, index, isExpanded, onToggle }) {
1590
1226
  });
1591
1227
  }
1592
1228
 
1593
- //#endregion
1594
- //#region src/client/components/cta-section.tsx
1595
- function CtaSection() {
1596
- return /* @__PURE__ */ jsxs("section", {
1597
- className: "relative border-t border-border",
1598
- children: [/* @__PURE__ */ jsxs("div", {
1599
- className: "max-w-7xl mx-auto px-8 py-16 border-b border-border",
1600
- children: [/* @__PURE__ */ jsxs("div", {
1601
- className: "flex items-center gap-4 mb-4",
1602
- children: [/* @__PURE__ */ jsx("div", { className: "h-px w-12 bg-primary" }), /* @__PURE__ */ jsx("span", {
1603
- className: "text-xs text-primary tracking-[0.25em] uppercase font-medium",
1604
- children: "The loop ends here"
1605
- })]
1606
- }), /* @__PURE__ */ jsx("h2", {
1607
- className: "text-4xl md:text-5xl font-light text-foreground tracking-[-0.03em]",
1608
- children: "Ready to ship?"
1609
- })]
1610
- }), /* @__PURE__ */ jsx("div", {
1611
- className: "max-w-7xl mx-auto",
1612
- children: /* @__PURE__ */ jsx("div", {
1613
- className: "border-b border-border",
1614
- children: /* @__PURE__ */ jsxs("div", {
1615
- className: "p-8 md:p-12",
1616
- children: [
1617
- /* @__PURE__ */ jsx("p", {
1618
- className: "text-lg text-muted-foreground mb-10 max-w-lg leading-relaxed",
1619
- children: "You've built something. Now let's make it launchable. Get the foundation you need to go from stuck to shipped."
1620
- }),
1621
- /* @__PURE__ */ jsxs("div", {
1622
- className: "flex flex-col sm:flex-row items-start gap-4 mb-12",
1623
- children: [/* @__PURE__ */ jsxs("a", {
1624
- href: "/docs/getting-started",
1625
- className: "group inline-flex items-center gap-3 px-6 py-4 bg-primary text-primary-foreground font-medium hover:bg-primary/90 transition-all",
1626
- children: [/* @__PURE__ */ jsx("span", { children: "Get Unstuck" }), /* @__PURE__ */ jsx("svg", {
1627
- className: "w-4 h-4 group-hover:translate-x-1 transition-transform",
1628
- fill: "none",
1629
- stroke: "currentColor",
1630
- viewBox: "0 0 24 24",
1631
- children: /* @__PURE__ */ jsx("path", {
1632
- strokeLinecap: "round",
1633
- strokeLinejoin: "round",
1634
- strokeWidth: 2,
1635
- d: "M17 8l4 4m0 0l-4 4m4-4H3"
1636
- })
1637
- })]
1638
- }), /* @__PURE__ */ jsx("a", {
1639
- href: "/docs",
1640
- className: "inline-flex items-center gap-3 px-6 py-4 border border-border text-foreground hover:border-primary/50 hover:bg-card transition-all",
1641
- children: /* @__PURE__ */ jsx("span", { children: "See How It Works" })
1642
- })]
1643
- }),
1644
- /* @__PURE__ */ jsx("div", {
1645
- className: "grid grid-cols-3 gap-6 pt-8 border-t border-border max-w-xl",
1646
- children: [
1647
- {
1648
- value: "Hours",
1649
- label: "To launch"
1650
- },
1651
- {
1652
- value: "0",
1653
- label: "AI loops"
1654
- },
1655
- {
1656
- value: "100%",
1657
- label: "Yours to own"
1658
- }
1659
- ].map((stat) => /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("div", {
1660
- className: "text-2xl md:text-3xl font-light text-foreground tracking-tight mb-1",
1661
- children: stat.value
1662
- }), /* @__PURE__ */ jsx("div", {
1663
- className: "text-xs text-muted-foreground tracking-wide",
1664
- children: stat.label
1665
- })] }, stat.label))
1666
- })
1667
- ]
1668
- })
1669
- })
1670
- })]
1671
- });
1672
- }
1673
-
1674
1229
  //#endregion
1675
1230
  //#region src/client/components/LandingPage.tsx
1676
1231
  function LandingPage() {
@@ -1699,15 +1254,9 @@ function LandingPage() {
1699
1254
  className: "relative z-10",
1700
1255
  children: [
1701
1256
  /* @__PURE__ */ jsx(Hero, {}),
1702
- /* @__PURE__ */ jsx(ValueProps, {}),
1703
- /* @__PURE__ */ jsx(AiSuperpowers, {}),
1704
- /* @__PURE__ */ jsx(ModuleShowcase, {}),
1705
- /* @__PURE__ */ jsx(HowItWorks, {}),
1706
- /* @__PURE__ */ jsx(ArchitecturePreview, {}),
1707
- /* @__PURE__ */ jsx(CliDemo, {}),
1257
+ /* @__PURE__ */ jsx(Features, {}),
1708
1258
  /* @__PURE__ */ jsx(Pricing, {}),
1709
- /* @__PURE__ */ jsx(FAQ, {}),
1710
- /* @__PURE__ */ jsx(CtaSection, {})
1259
+ /* @__PURE__ */ jsx(FAQ, {})
1711
1260
  ]
1712
1261
  }),
1713
1262
  /* @__PURE__ */ jsx("footer", {
@@ -1876,6 +1425,329 @@ function LandingPage() {
1876
1425
  });
1877
1426
  }
1878
1427
 
1428
+ //#endregion
1429
+ //#region src/client/components/ModulesPage.tsx
1430
+ const modules = [
1431
+ {
1432
+ name: "Payments",
1433
+ slug: "payments",
1434
+ package: "@kuckit/polar-payments-module",
1435
+ desc: "Accept payments in minutes. Subscriptions, one-time purchases, customer portal.",
1436
+ status: "stable",
1437
+ features: [
1438
+ "Stripe integration",
1439
+ "Polar integration",
1440
+ "Subscription management",
1441
+ "Customer portal"
1442
+ ]
1443
+ },
1444
+ {
1445
+ name: "User Accounts",
1446
+ slug: "users",
1447
+ package: "@kuckit/users-module",
1448
+ desc: "User registration, profiles, and account management ready to go.",
1449
+ status: "stable",
1450
+ features: [
1451
+ "OAuth providers",
1452
+ "Profile management",
1453
+ "Settings UI",
1454
+ "Account deletion"
1455
+ ]
1456
+ },
1457
+ {
1458
+ name: "Documentation",
1459
+ slug: "docs",
1460
+ package: "@kuckit/docs-module",
1461
+ desc: "Beautiful docs for your users. Write in plain text, get a polished help center.",
1462
+ status: "stable",
1463
+ features: [
1464
+ "MDX support",
1465
+ "Search built-in",
1466
+ "Auto-navigation",
1467
+ "Code highlighting"
1468
+ ]
1469
+ },
1470
+ {
1471
+ name: "AI Chat",
1472
+ slug: "ai",
1473
+ package: "@kuckit/ai-module",
1474
+ desc: "Add AI chat to your app. Streaming responses, conversation history included.",
1475
+ status: "stable",
1476
+ features: [
1477
+ "OpenAI integration",
1478
+ "Streaming responses",
1479
+ "Chat history",
1480
+ "Context management"
1481
+ ]
1482
+ },
1483
+ {
1484
+ name: "CLI Login",
1485
+ slug: "cli-auth",
1486
+ package: "@kuckit/cli-auth-module",
1487
+ desc: "Let users log in from command line tools with a simple device code.",
1488
+ status: "stable",
1489
+ features: [
1490
+ "Device code flow",
1491
+ "Token management",
1492
+ "CLI SDK",
1493
+ "Secure auth"
1494
+ ]
1495
+ },
1496
+ {
1497
+ name: "More Coming",
1498
+ slug: "coming-soon",
1499
+ package: "Email, storage, analytics",
1500
+ desc: "We're building more modules every week. Tell us what you need.",
1501
+ status: "soon",
1502
+ features: [
1503
+ "Email service",
1504
+ "File storage",
1505
+ "Analytics",
1506
+ "And more..."
1507
+ ]
1508
+ }
1509
+ ];
1510
+ function ModulesPage() {
1511
+ return /* @__PURE__ */ jsxs("div", {
1512
+ className: "min-h-screen bg-background text-foreground",
1513
+ children: [
1514
+ /* @__PURE__ */ jsx("div", {
1515
+ className: "fixed inset-0 pointer-events-none",
1516
+ style: {
1517
+ backgroundImage: `
1518
+ linear-gradient(to right, hsl(var(--border) / 0.15) 1px, transparent 1px),
1519
+ linear-gradient(to bottom, hsl(var(--border) / 0.15) 1px, transparent 1px)
1520
+ `,
1521
+ backgroundSize: "60px 60px"
1522
+ }
1523
+ }),
1524
+ /* @__PURE__ */ jsx("nav", {
1525
+ className: "relative z-20 border-b border-border",
1526
+ children: /* @__PURE__ */ jsxs("div", {
1527
+ className: "max-w-7xl mx-auto flex items-center justify-between h-16 px-8",
1528
+ children: [
1529
+ /* @__PURE__ */ jsxs("a", {
1530
+ href: "/",
1531
+ className: "flex items-center gap-3",
1532
+ children: [/* @__PURE__ */ jsxs("svg", {
1533
+ className: "w-8 h-8",
1534
+ viewBox: "0 0 512 512",
1535
+ fill: "none",
1536
+ xmlns: "http://www.w3.org/2000/svg",
1537
+ children: [
1538
+ /* @__PURE__ */ jsx("polygon", {
1539
+ points: "256,64 384,144 384,304 256,224",
1540
+ fill: "#3D3A39"
1541
+ }),
1542
+ /* @__PURE__ */ jsx("polygon", {
1543
+ points: "256,64 128,144 128,304 256,224",
1544
+ fill: "#5C5855"
1545
+ }),
1546
+ /* @__PURE__ */ jsx("polygon", {
1547
+ points: "128,144 256,224 384,144 256,64",
1548
+ fill: "#A49D9A"
1549
+ }),
1550
+ /* @__PURE__ */ jsx("polygon", {
1551
+ points: "256,224 352,280 352,392 256,336",
1552
+ fill: "#D15010"
1553
+ }),
1554
+ /* @__PURE__ */ jsx("polygon", {
1555
+ points: "256,224 160,280 160,392 256,336",
1556
+ fill: "#EE6018"
1557
+ }),
1558
+ /* @__PURE__ */ jsx("polygon", {
1559
+ points: "160,280 256,336 352,280 256,224",
1560
+ fill: "#EF6F2E"
1561
+ })
1562
+ ]
1563
+ }), /* @__PURE__ */ jsx("span", {
1564
+ className: "text-foreground font-medium tracking-tight",
1565
+ children: "Kuckit"
1566
+ })]
1567
+ }),
1568
+ /* @__PURE__ */ jsxs("div", {
1569
+ className: "hidden md:flex items-center gap-8",
1570
+ children: [
1571
+ /* @__PURE__ */ jsx("a", {
1572
+ href: "/docs",
1573
+ className: "text-sm text-muted-foreground hover:text-foreground transition-colors",
1574
+ children: "Docs"
1575
+ }),
1576
+ /* @__PURE__ */ jsx("a", {
1577
+ href: "/modules",
1578
+ className: "text-sm text-foreground font-medium",
1579
+ children: "Modules"
1580
+ }),
1581
+ /* @__PURE__ */ jsx("a", {
1582
+ href: "/#pricing",
1583
+ className: "text-sm text-muted-foreground hover:text-foreground transition-colors",
1584
+ children: "Pricing"
1585
+ })
1586
+ ]
1587
+ }),
1588
+ /* @__PURE__ */ jsxs("div", {
1589
+ className: "flex items-center gap-3",
1590
+ children: [/* @__PURE__ */ jsx("a", {
1591
+ href: "/login",
1592
+ className: "text-sm text-muted-foreground hover:text-foreground transition-colors px-4 py-2",
1593
+ children: "Sign in"
1594
+ }), /* @__PURE__ */ jsx("a", {
1595
+ href: "/docs/getting-started",
1596
+ className: "text-sm bg-primary text-primary-foreground px-4 py-2 hover:bg-primary/90 transition-colors",
1597
+ children: "Get Started"
1598
+ })]
1599
+ })
1600
+ ]
1601
+ })
1602
+ }),
1603
+ /* @__PURE__ */ jsx("div", {
1604
+ className: "relative z-10 border-b border-border",
1605
+ children: /* @__PURE__ */ jsxs("div", {
1606
+ className: "max-w-7xl mx-auto px-8 py-20",
1607
+ children: [
1608
+ /* @__PURE__ */ jsxs("div", {
1609
+ className: "flex items-center gap-4 mb-6",
1610
+ children: [
1611
+ /* @__PURE__ */ jsx("a", {
1612
+ href: "/",
1613
+ className: "text-xs text-muted-foreground hover:text-foreground transition-colors",
1614
+ children: "Home"
1615
+ }),
1616
+ /* @__PURE__ */ jsx("span", {
1617
+ className: "text-muted-foreground",
1618
+ children: "/"
1619
+ }),
1620
+ /* @__PURE__ */ jsx("span", {
1621
+ className: "text-xs text-primary tracking-[0.15em] uppercase",
1622
+ children: "Modules"
1623
+ })
1624
+ ]
1625
+ }),
1626
+ /* @__PURE__ */ jsx("h1", {
1627
+ className: "text-5xl md:text-6xl font-light text-foreground tracking-[-0.03em] mb-6",
1628
+ children: "Module Ecosystem"
1629
+ }),
1630
+ /* @__PURE__ */ jsx("p", {
1631
+ className: "text-xl text-muted-foreground max-w-2xl",
1632
+ children: "Production-ready modules that integrate seamlessly. Skip weeks of development and focus on what makes your product unique."
1633
+ })
1634
+ ]
1635
+ })
1636
+ }),
1637
+ /* @__PURE__ */ jsxs("div", {
1638
+ className: "relative z-10 max-w-7xl mx-auto",
1639
+ children: [/* @__PURE__ */ jsx("div", {
1640
+ className: "grid lg:grid-cols-2",
1641
+ children: modules.map((mod, index) => /* @__PURE__ */ jsxs("div", {
1642
+ className: `group relative p-10 transition-colors hover:bg-card border-b border-border ${index % 2 === 0 ? "lg:border-r" : ""}`,
1643
+ children: [
1644
+ /* @__PURE__ */ jsx("div", {
1645
+ className: "absolute top-8 right-8",
1646
+ children: /* @__PURE__ */ jsx("span", {
1647
+ className: `px-3 py-1.5 text-[10px] tracking-[0.15em] uppercase ${mod.status === "stable" ? "bg-[hsl(var(--status-success)/0.1)] text-[hsl(var(--status-success))] border border-[hsl(var(--status-success)/0.2)]" : mod.status === "beta" ? "bg-primary/10 text-primary border border-primary/20" : "bg-muted text-muted-foreground border border-border"}`,
1648
+ children: mod.status
1649
+ })
1650
+ }),
1651
+ /* @__PURE__ */ jsxs("div", {
1652
+ className: "pr-24",
1653
+ children: [
1654
+ /* @__PURE__ */ jsx("span", {
1655
+ className: "text-sm text-primary font-mono block mb-3",
1656
+ children: mod.package
1657
+ }),
1658
+ /* @__PURE__ */ jsx("h2", {
1659
+ className: "text-2xl font-medium text-foreground mb-3 tracking-tight group-hover:text-primary transition-colors",
1660
+ children: mod.name
1661
+ }),
1662
+ /* @__PURE__ */ jsx("p", {
1663
+ className: "text-muted-foreground mb-6",
1664
+ children: mod.desc
1665
+ }),
1666
+ /* @__PURE__ */ jsx("div", {
1667
+ className: "flex flex-wrap gap-2",
1668
+ children: mod.features.map((feature) => /* @__PURE__ */ jsx("span", {
1669
+ className: "px-3 py-1 text-xs text-muted-foreground bg-muted border border-border",
1670
+ children: feature
1671
+ }, feature))
1672
+ })
1673
+ ]
1674
+ }),
1675
+ mod.status !== "soon" && /* @__PURE__ */ jsx("a", {
1676
+ href: `/docs/modules/${mod.slug}`,
1677
+ className: "absolute bottom-8 right-8 opacity-0 group-hover:opacity-100 transition-opacity",
1678
+ children: /* @__PURE__ */ jsx("svg", {
1679
+ className: "w-6 h-6 text-primary",
1680
+ fill: "none",
1681
+ stroke: "currentColor",
1682
+ viewBox: "0 0 24 24",
1683
+ children: /* @__PURE__ */ jsx("path", {
1684
+ strokeLinecap: "round",
1685
+ strokeLinejoin: "round",
1686
+ strokeWidth: 1.5,
1687
+ d: "M17 8l4 4m0 0l-4 4m4-4H3"
1688
+ })
1689
+ })
1690
+ })
1691
+ ]
1692
+ }, mod.slug))
1693
+ }), /* @__PURE__ */ jsx("div", {
1694
+ className: "border-t border-border",
1695
+ children: /* @__PURE__ */ jsxs("div", {
1696
+ className: "px-8 py-12 flex flex-col md:flex-row md:items-center justify-between gap-6",
1697
+ children: [/* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("h3", {
1698
+ className: "text-xl font-medium text-foreground mb-2",
1699
+ children: "Need a custom module?"
1700
+ }), /* @__PURE__ */ jsx("p", {
1701
+ className: "text-muted-foreground",
1702
+ children: "We can help you build it, or tell us what you need and we'll add it to our roadmap."
1703
+ })] }), /* @__PURE__ */ jsxs("div", {
1704
+ className: "flex gap-4",
1705
+ children: [/* @__PURE__ */ jsxs("a", {
1706
+ href: "/docs/module-development",
1707
+ className: "group inline-flex items-center gap-3 px-6 py-3 border border-border text-foreground hover:border-primary/50 hover:bg-card transition-all",
1708
+ children: [/* @__PURE__ */ jsx("span", { children: "Build Your Own" }), /* @__PURE__ */ jsx("svg", {
1709
+ className: "w-4 h-4 group-hover:translate-x-1 transition-transform",
1710
+ fill: "none",
1711
+ stroke: "currentColor",
1712
+ viewBox: "0 0 24 24",
1713
+ children: /* @__PURE__ */ jsx("path", {
1714
+ strokeLinecap: "round",
1715
+ strokeLinejoin: "round",
1716
+ strokeWidth: 2,
1717
+ d: "M17 8l4 4m0 0l-4 4m4-4H3"
1718
+ })
1719
+ })]
1720
+ }), /* @__PURE__ */ jsx("a", {
1721
+ href: "/discord",
1722
+ className: "group inline-flex items-center gap-3 px-6 py-3 bg-primary text-primary-foreground hover:bg-primary/90 transition-all",
1723
+ children: /* @__PURE__ */ jsx("span", { children: "Request Module" })
1724
+ })]
1725
+ })]
1726
+ })
1727
+ })]
1728
+ }),
1729
+ /* @__PURE__ */ jsx("footer", {
1730
+ className: "relative z-10 border-t border-border mt-20",
1731
+ children: /* @__PURE__ */ jsxs("div", {
1732
+ className: "max-w-7xl mx-auto px-8 py-8 flex items-center justify-between",
1733
+ children: [/* @__PURE__ */ jsxs("span", {
1734
+ className: "text-sm text-muted-foreground",
1735
+ children: [
1736
+ "© ",
1737
+ (/* @__PURE__ */ new Date()).getFullYear(),
1738
+ " Kuckit"
1739
+ ]
1740
+ }), /* @__PURE__ */ jsx("a", {
1741
+ href: "/",
1742
+ className: "text-sm text-muted-foreground hover:text-foreground transition-colors",
1743
+ children: "← Back to Home"
1744
+ })]
1745
+ })
1746
+ })
1747
+ ]
1748
+ });
1749
+ }
1750
+
1879
1751
  //#endregion
1880
1752
  //#region src/client/index.ts
1881
1753
  const kuckitClientModule = defineKuckitClientModule({
@@ -1884,6 +1756,7 @@ const kuckitClientModule = defineKuckitClientModule({
1884
1756
  version: "0.1.0",
1885
1757
  register(ctx) {
1886
1758
  ctx.registerComponent("LandingPage", LandingPage);
1759
+ ctx.registerComponent("ModulesPage", ModulesPage);
1887
1760
  ctx.addRoute({
1888
1761
  id: "landing",
1889
1762
  path: "/",
@@ -1893,9 +1766,18 @@ const kuckitClientModule = defineKuckitClientModule({
1893
1766
  requiresAuth: false
1894
1767
  }
1895
1768
  });
1769
+ ctx.addRoute({
1770
+ id: "modules",
1771
+ path: "/modules",
1772
+ component: ModulesPage,
1773
+ meta: {
1774
+ title: "Modules - Kuckit",
1775
+ requiresAuth: false
1776
+ }
1777
+ });
1896
1778
  }
1897
1779
  });
1898
1780
 
1899
1781
  //#endregion
1900
- export { LandingPage, kuckitClientModule };
1782
+ export { LandingPage, ModulesPage, kuckitClientModule };
1901
1783
  //# sourceMappingURL=index.js.map