@kuckit/landing-module 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,1548 @@
1
+ import { defineKuckitClientModule, useRpc } from "@kuckit/sdk-react";
2
+ import { useEffect, useState } from "react";
3
+ import { jsx, jsxs } from "react/jsx-runtime";
4
+ import { ChevronDown } from "lucide-react";
5
+ import { toast } from "sonner";
6
+
7
+ //#region src/client/components/hero.tsx
8
+ function Hero() {
9
+ const [copied, setCopied] = useState(false);
10
+ const copyCommand = () => {
11
+ navigator.clipboard.writeText("bunx create-kuckit-app my-app");
12
+ setCopied(true);
13
+ setTimeout(() => setCopied(false), 2e3);
14
+ };
15
+ return /* @__PURE__ */ jsxs("section", {
16
+ className: "relative min-h-[90vh] flex flex-col items-center justify-center px-6 pt-20",
17
+ children: [
18
+ /* @__PURE__ */ jsxs("div", {
19
+ className: "absolute inset-0 overflow-hidden pointer-events-none",
20
+ children: [
21
+ /* @__PURE__ */ jsx(ModuleBlock, {
22
+ className: "absolute top-[15%] left-[10%] animate-float",
23
+ label: "auth"
24
+ }),
25
+ /* @__PURE__ */ jsx(ModuleBlock, {
26
+ className: "absolute top-[25%] right-[15%] animate-float-delayed",
27
+ label: "billing"
28
+ }),
29
+ /* @__PURE__ */ jsx(ModuleBlock, {
30
+ className: "absolute bottom-[30%] left-[8%] animate-float-slow",
31
+ label: "analytics"
32
+ }),
33
+ /* @__PURE__ */ jsx(ModuleBlock, {
34
+ className: "absolute bottom-[20%] right-[10%] animate-float",
35
+ label: "email"
36
+ }),
37
+ /* @__PURE__ */ jsx(ModuleBlock, {
38
+ className: "absolute top-[40%] left-[20%] animate-float-delayed opacity-50",
39
+ label: "storage",
40
+ size: "sm"
41
+ }),
42
+ /* @__PURE__ */ jsx(ModuleBlock, {
43
+ className: "absolute bottom-[40%] right-[20%] animate-float-slow opacity-50",
44
+ label: "ai",
45
+ size: "sm"
46
+ })
47
+ ]
48
+ }),
49
+ /* @__PURE__ */ jsxs("div", {
50
+ className: "relative z-10 max-w-4xl mx-auto text-center",
51
+ children: [
52
+ /* @__PURE__ */ jsxs("div", {
53
+ className: "inline-flex items-center gap-2 px-4 py-2 rounded-full bg-white/5 border border-white/10 text-sm text-white/70 mb-8 backdrop-blur-sm",
54
+ children: [/* @__PURE__ */ jsx("span", { className: "w-2 h-2 rounded-full bg-emerald-400 animate-pulse" }), /* @__PURE__ */ jsx("span", { children: "Marketplace coming soon" })]
55
+ }),
56
+ /* @__PURE__ */ jsxs("h1", {
57
+ className: "text-5xl md:text-7xl font-bold tracking-tight mb-6",
58
+ children: [
59
+ /* @__PURE__ */ jsx("span", {
60
+ className: "block text-white",
61
+ children: "Build Modules."
62
+ }),
63
+ /* @__PURE__ */ jsx("span", {
64
+ className: "block bg-gradient-to-r from-emerald-400 via-teal-400 to-cyan-400 bg-clip-text text-transparent",
65
+ children: "Earn Revenue."
66
+ }),
67
+ /* @__PURE__ */ jsx("span", {
68
+ className: "block text-white",
69
+ children: "Ship Faster."
70
+ })
71
+ ]
72
+ }),
73
+ /* @__PURE__ */ jsx("p", {
74
+ className: "text-xl md:text-2xl text-white/60 max-w-2xl mx-auto mb-12 leading-relaxed",
75
+ children: "The TypeScript ecosystem where developers build once and sell forever, while builders ship in hours instead of months."
76
+ }),
77
+ /* @__PURE__ */ jsxs("div", {
78
+ className: "flex flex-col sm:flex-row items-center justify-center gap-4 mb-12",
79
+ children: [/* @__PURE__ */ jsxs("button", {
80
+ className: "group relative px-8 py-4 bg-gradient-to-r from-emerald-500 to-teal-500 rounded-xl font-semibold text-black transition-all hover:scale-105 hover:shadow-lg hover:shadow-emerald-500/25",
81
+ children: ["Get Started", /* @__PURE__ */ jsx("span", { className: "absolute inset-0 rounded-xl bg-gradient-to-r from-emerald-400 to-teal-400 opacity-0 group-hover:opacity-100 transition-opacity blur-xl -z-10" })]
82
+ }), /* @__PURE__ */ jsx("button", {
83
+ className: "px-8 py-4 rounded-xl font-semibold text-white border border-white/20 bg-white/5 backdrop-blur-sm hover:bg-white/10 hover:border-white/30 transition-all",
84
+ children: "Join Marketplace Waitlist"
85
+ })]
86
+ }),
87
+ /* @__PURE__ */ jsxs("div", {
88
+ onClick: copyCommand,
89
+ className: "inline-flex items-center gap-3 px-5 py-3 rounded-xl bg-black/50 border border-white/10 cursor-pointer hover:border-emerald-500/50 transition-colors group",
90
+ children: [
91
+ /* @__PURE__ */ jsx("span", {
92
+ className: "text-emerald-400 font-mono",
93
+ children: "$"
94
+ }),
95
+ /* @__PURE__ */ jsx("code", {
96
+ className: "text-white/80 font-mono text-sm",
97
+ children: "bunx create-kuckit-app my-app"
98
+ }),
99
+ /* @__PURE__ */ jsx("span", {
100
+ className: "text-white/40 group-hover:text-emerald-400 transition-colors",
101
+ children: copied ? /* @__PURE__ */ jsx("svg", {
102
+ className: "w-4 h-4",
103
+ fill: "none",
104
+ stroke: "currentColor",
105
+ viewBox: "0 0 24 24",
106
+ children: /* @__PURE__ */ jsx("path", {
107
+ strokeLinecap: "round",
108
+ strokeLinejoin: "round",
109
+ strokeWidth: 2,
110
+ d: "M5 13l4 4L19 7"
111
+ })
112
+ }) : /* @__PURE__ */ jsx("svg", {
113
+ className: "w-4 h-4",
114
+ fill: "none",
115
+ stroke: "currentColor",
116
+ viewBox: "0 0 24 24",
117
+ children: /* @__PURE__ */ jsx("path", {
118
+ strokeLinecap: "round",
119
+ strokeLinejoin: "round",
120
+ strokeWidth: 2,
121
+ 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"
122
+ })
123
+ })
124
+ })
125
+ ]
126
+ })
127
+ ]
128
+ }),
129
+ /* @__PURE__ */ jsx("div", {
130
+ className: "absolute bottom-8 left-1/2 -translate-x-1/2 animate-bounce",
131
+ children: /* @__PURE__ */ jsx("svg", {
132
+ className: "w-6 h-6 text-white/30",
133
+ fill: "none",
134
+ stroke: "currentColor",
135
+ viewBox: "0 0 24 24",
136
+ children: /* @__PURE__ */ jsx("path", {
137
+ strokeLinecap: "round",
138
+ strokeLinejoin: "round",
139
+ strokeWidth: 2,
140
+ d: "M19 14l-7 7m0 0l-7-7m7 7V3"
141
+ })
142
+ })
143
+ }),
144
+ /* @__PURE__ */ jsx("style", { children: `
145
+ @keyframes float {
146
+ 0%, 100% { transform: translateY(0px) rotate(0deg); }
147
+ 50% { transform: translateY(-20px) rotate(3deg); }
148
+ }
149
+ @keyframes float-delayed {
150
+ 0%, 100% { transform: translateY(0px) rotate(0deg); }
151
+ 50% { transform: translateY(-15px) rotate(-2deg); }
152
+ }
153
+ @keyframes float-slow {
154
+ 0%, 100% { transform: translateY(0px) rotate(0deg); }
155
+ 50% { transform: translateY(-10px) rotate(1deg); }
156
+ }
157
+ .animate-float { animation: float 6s ease-in-out infinite; }
158
+ .animate-float-delayed { animation: float-delayed 7s ease-in-out infinite; animation-delay: 1s; }
159
+ .animate-float-slow { animation: float-slow 8s ease-in-out infinite; animation-delay: 2s; }
160
+ ` })
161
+ ]
162
+ });
163
+ }
164
+ function ModuleBlock({ className = "", label, size = "md" }) {
165
+ return /* @__PURE__ */ jsx("div", {
166
+ className: `${size === "sm" ? "w-16 h-16 text-[10px]" : "w-24 h-24 text-xs"} ${className}`,
167
+ children: /* @__PURE__ */ jsx("div", {
168
+ className: "w-full h-full rounded-2xl bg-gradient-to-br from-white/10 to-white/5 border border-white/10 backdrop-blur-sm flex items-center justify-center",
169
+ children: /* @__PURE__ */ jsx("span", {
170
+ className: "font-mono text-white/50",
171
+ children: label
172
+ })
173
+ })
174
+ });
175
+ }
176
+
177
+ //#endregion
178
+ //#region src/client/components/value-props.tsx
179
+ function ValueProps() {
180
+ const columns = [
181
+ {
182
+ title: "For Builders",
183
+ icon: /* @__PURE__ */ jsx("svg", {
184
+ className: "w-6 h-6",
185
+ fill: "none",
186
+ stroke: "currentColor",
187
+ viewBox: "0 0 24 24",
188
+ children: /* @__PURE__ */ jsx("path", {
189
+ strokeLinecap: "round",
190
+ strokeLinejoin: "round",
191
+ strokeWidth: 1.5,
192
+ d: "M13 10V3L4 14h7v7l9-11h-7z"
193
+ })
194
+ }),
195
+ color: "emerald",
196
+ items: [
197
+ {
198
+ label: "Ship in hours",
199
+ desc: "Not weeks or months"
200
+ },
201
+ {
202
+ label: "One command install",
203
+ desc: "kuckit add @vendor/module"
204
+ },
205
+ {
206
+ label: "Focus on your product",
207
+ desc: "Not boilerplate"
208
+ }
209
+ ]
210
+ },
211
+ {
212
+ title: "For Sellers",
213
+ icon: /* @__PURE__ */ jsx("svg", {
214
+ className: "w-6 h-6",
215
+ fill: "none",
216
+ stroke: "currentColor",
217
+ viewBox: "0 0 24 24",
218
+ children: /* @__PURE__ */ jsx("path", {
219
+ strokeLinecap: "round",
220
+ strokeLinejoin: "round",
221
+ strokeWidth: 1.5,
222
+ d: "M12 8c-1.657 0-3 .895-3 2s1.343 2 3 2 3 .895 3 2-1.343 2-3 2m0-8c1.11 0 2.08.402 2.599 1M12 8V7m0 1v8m0 0v1m0-1c-1.11 0-2.08-.402-2.599-1M21 12a9 9 0 11-18 0 9 9 0 0118 0z"
223
+ })
224
+ }),
225
+ color: "teal",
226
+ items: [
227
+ {
228
+ label: "Build once, sell forever",
229
+ desc: "Passive revenue stream"
230
+ },
231
+ {
232
+ label: "Growing marketplace",
233
+ desc: "Reach thousands of builders"
234
+ },
235
+ {
236
+ label: "Your code, your pricing",
237
+ desc: "Set your own terms"
238
+ }
239
+ ]
240
+ },
241
+ {
242
+ title: "For Everyone",
243
+ icon: /* @__PURE__ */ jsx("svg", {
244
+ className: "w-6 h-6",
245
+ fill: "none",
246
+ stroke: "currentColor",
247
+ viewBox: "0 0 24 24",
248
+ children: /* @__PURE__ */ jsx("path", {
249
+ strokeLinecap: "round",
250
+ strokeLinejoin: "round",
251
+ strokeWidth: 1.5,
252
+ d: "M9 12l2 2 4-4m5.618-4.016A11.955 11.955 0 0112 2.944a11.955 11.955 0 01-8.618 3.04A12.02 12.02 0 003 9c0 5.591 3.824 10.29 9 11.622 5.176-1.332 9-6.03 9-11.622 0-1.042-.133-2.052-.382-3.016z"
253
+ })
254
+ }),
255
+ color: "cyan",
256
+ items: [
257
+ {
258
+ label: "Battle-tested code",
259
+ desc: "Community validated"
260
+ },
261
+ {
262
+ label: "Guardrailed quality",
263
+ desc: "Enforced standards"
264
+ },
265
+ {
266
+ label: "Type-safe modules",
267
+ desc: "End-to-end TypeScript"
268
+ }
269
+ ]
270
+ }
271
+ ];
272
+ const colorMap = {
273
+ emerald: {
274
+ bg: "bg-emerald-500/10",
275
+ border: "border-emerald-500/20",
276
+ text: "text-emerald-400",
277
+ glow: "group-hover:shadow-emerald-500/10"
278
+ },
279
+ teal: {
280
+ bg: "bg-teal-500/10",
281
+ border: "border-teal-500/20",
282
+ text: "text-teal-400",
283
+ glow: "group-hover:shadow-teal-500/10"
284
+ },
285
+ cyan: {
286
+ bg: "bg-cyan-500/10",
287
+ border: "border-cyan-500/20",
288
+ text: "text-cyan-400",
289
+ glow: "group-hover:shadow-cyan-500/10"
290
+ }
291
+ };
292
+ return /* @__PURE__ */ jsx("section", {
293
+ className: "py-24 px-6",
294
+ children: /* @__PURE__ */ jsx("div", {
295
+ className: "max-w-6xl mx-auto",
296
+ children: /* @__PURE__ */ jsx("div", {
297
+ className: "grid md:grid-cols-3 gap-6",
298
+ children: columns.map((col) => {
299
+ const colors = colorMap[col.color];
300
+ return /* @__PURE__ */ jsxs("div", {
301
+ className: `group relative rounded-2xl border ${colors.border} bg-white/[0.02] p-8 hover:bg-white/[0.04] transition-all hover:shadow-xl ${colors.glow}`,
302
+ children: [/* @__PURE__ */ jsxs("div", {
303
+ className: "flex items-center gap-3 mb-8",
304
+ children: [/* @__PURE__ */ jsx("div", {
305
+ className: `w-12 h-12 rounded-xl ${colors.bg} ${colors.text} flex items-center justify-center`,
306
+ children: col.icon
307
+ }), /* @__PURE__ */ jsx("h3", {
308
+ className: "text-xl font-semibold text-white",
309
+ children: col.title
310
+ })]
311
+ }), /* @__PURE__ */ jsx("div", {
312
+ className: "space-y-6",
313
+ children: col.items.map((item) => /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("div", {
314
+ className: "text-white font-medium mb-1",
315
+ children: item.label
316
+ }), /* @__PURE__ */ jsx("div", {
317
+ className: "text-white/50 text-sm",
318
+ children: item.desc
319
+ })] }, item.label))
320
+ })]
321
+ }, col.title);
322
+ })
323
+ })
324
+ })
325
+ });
326
+ }
327
+
328
+ //#endregion
329
+ //#region src/client/components/code-quality.tsx
330
+ function CodeQuality() {
331
+ return /* @__PURE__ */ jsxs("section", {
332
+ className: "py-24 px-6 relative overflow-hidden",
333
+ children: [/* @__PURE__ */ jsx("div", { className: "absolute inset-0 bg-gradient-to-b from-emerald-500/5 via-transparent to-transparent pointer-events-none" }), /* @__PURE__ */ jsxs("div", {
334
+ className: "max-w-6xl mx-auto relative",
335
+ children: [/* @__PURE__ */ jsxs("div", {
336
+ className: "max-w-2xl mb-16",
337
+ children: [
338
+ /* @__PURE__ */ jsxs("div", {
339
+ className: "inline-flex items-center gap-2 px-3 py-1.5 rounded-full bg-emerald-500/10 border border-emerald-500/20 text-xs text-emerald-400 font-medium mb-6",
340
+ children: [/* @__PURE__ */ jsx("svg", {
341
+ className: "w-3.5 h-3.5",
342
+ fill: "none",
343
+ stroke: "currentColor",
344
+ viewBox: "0 0 24 24",
345
+ children: /* @__PURE__ */ jsx("path", {
346
+ strokeLinecap: "round",
347
+ strokeLinejoin: "round",
348
+ strokeWidth: 2,
349
+ d: "M9 12l2 2 4-4m5.618-4.016A11.955 11.955 0 0112 2.944a11.955 11.955 0 01-8.618 3.04A12.02 12.02 0 003 9c0 5.591 3.824 10.29 9 11.622 5.176-1.332 9-6.03 9-11.622 0-1.042-.133-2.052-.382-3.016z"
350
+ })
351
+ }), "Quality Guaranteed"]
352
+ }),
353
+ /* @__PURE__ */ jsx("h2", {
354
+ className: "text-4xl md:text-5xl font-bold text-white mb-6",
355
+ children: "Code That Stays Clean"
356
+ }),
357
+ /* @__PURE__ */ jsxs("p", {
358
+ className: "text-xl text-white/60 leading-relaxed",
359
+ children: ["Codebases rot. AI generates spaghetti. Developers cut corners.", /* @__PURE__ */ jsx("span", {
360
+ className: "text-white",
361
+ children: " Kuckit enforces structure automatically."
362
+ })]
363
+ })
364
+ ]
365
+ }), /* @__PURE__ */ jsxs("div", {
366
+ className: "grid lg:grid-cols-2 gap-12 items-center",
367
+ children: [/* @__PURE__ */ jsx("div", {
368
+ className: "space-y-6",
369
+ children: [
370
+ {
371
+ icon: /* @__PURE__ */ jsx("svg", {
372
+ className: "w-5 h-5",
373
+ fill: "none",
374
+ stroke: "currentColor",
375
+ viewBox: "0 0 24 24",
376
+ children: /* @__PURE__ */ jsx("path", {
377
+ strokeLinecap: "round",
378
+ strokeLinejoin: "round",
379
+ strokeWidth: 1.5,
380
+ 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"
381
+ })
382
+ }),
383
+ title: "AGENTS.md in Every Package",
384
+ desc: "AI and humans follow the same rules. Clear instructions ensure consistent, maintainable code."
385
+ },
386
+ {
387
+ icon: /* @__PURE__ */ jsx("svg", {
388
+ className: "w-5 h-5",
389
+ fill: "none",
390
+ stroke: "currentColor",
391
+ viewBox: "0 0 24 24",
392
+ children: /* @__PURE__ */ jsx("path", {
393
+ strokeLinecap: "round",
394
+ strokeLinejoin: "round",
395
+ strokeWidth: 1.5,
396
+ d: "M12 15v2m-6 4h12a2 2 0 002-2v-6a2 2 0 00-2-2H6a2 2 0 00-2 2v6a2 2 0 002 2zm10-10V7a4 4 0 00-8 0v4h8z"
397
+ })
398
+ }),
399
+ title: "Pre-commit Hooks",
400
+ desc: "Bad code can't even be committed. Husky runs checks before every commit."
401
+ },
402
+ {
403
+ icon: /* @__PURE__ */ jsx("svg", {
404
+ className: "w-5 h-5",
405
+ fill: "none",
406
+ stroke: "currentColor",
407
+ viewBox: "0 0 24 24",
408
+ children: /* @__PURE__ */ jsx("path", {
409
+ strokeLinecap: "round",
410
+ strokeLinejoin: "round",
411
+ strokeWidth: 1.5,
412
+ d: "M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z"
413
+ })
414
+ }),
415
+ title: "CI/CD Validation",
416
+ desc: "Nothing merges without passing architecture checks. Every PR is verified."
417
+ },
418
+ {
419
+ icon: /* @__PURE__ */ jsx("svg", {
420
+ className: "w-5 h-5",
421
+ fill: "none",
422
+ stroke: "currentColor",
423
+ viewBox: "0 0 24 24",
424
+ children: /* @__PURE__ */ jsx("path", {
425
+ strokeLinecap: "round",
426
+ strokeLinejoin: "round",
427
+ strokeWidth: 1.5,
428
+ d: "M19 11H5m14 0a2 2 0 012 2v6a2 2 0 01-2 2H5a2 2 0 01-2-2v-6a2 2 0 012-2m14 0V9a2 2 0 00-2-2M5 11V9a2 2 0 012-2m0 0V5a2 2 0 012-2h6a2 2 0 012 2v2M7 7h10"
429
+ })
430
+ }),
431
+ title: "Clean Architecture Layers",
432
+ desc: "Domain, Application, Infrastructure stay separated. Always."
433
+ }
434
+ ].map((feature) => /* @__PURE__ */ jsxs("div", {
435
+ className: "group flex gap-4 p-4 rounded-xl hover:bg-white/[0.03] transition-colors",
436
+ children: [/* @__PURE__ */ jsx("div", {
437
+ className: "w-10 h-10 rounded-lg bg-emerald-500/10 border border-emerald-500/20 flex items-center justify-center text-emerald-400 shrink-0 group-hover:scale-110 transition-transform",
438
+ children: feature.icon
439
+ }), /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("h3", {
440
+ className: "text-white font-semibold mb-1",
441
+ children: feature.title
442
+ }), /* @__PURE__ */ jsx("p", {
443
+ className: "text-white/50 text-sm leading-relaxed",
444
+ children: feature.desc
445
+ })] })]
446
+ }, feature.title))
447
+ }), /* @__PURE__ */ jsx("div", {
448
+ className: "relative",
449
+ children: /* @__PURE__ */ jsxs("div", {
450
+ className: "relative aspect-square max-w-md mx-auto",
451
+ children: [/* @__PURE__ */ jsx("div", { className: "absolute inset-0 bg-gradient-to-br from-emerald-500/20 to-teal-500/20 rounded-3xl blur-2xl" }), /* @__PURE__ */ jsxs("div", {
452
+ className: "relative h-full rounded-3xl border border-white/10 bg-black/50 backdrop-blur-sm p-8 flex flex-col items-center justify-center",
453
+ children: [
454
+ /* @__PURE__ */ jsxs("div", {
455
+ className: "w-24 h-24 mb-6 relative",
456
+ children: [/* @__PURE__ */ jsx("svg", {
457
+ className: "w-full h-full text-emerald-400",
458
+ fill: "none",
459
+ stroke: "currentColor",
460
+ viewBox: "0 0 24 24",
461
+ children: /* @__PURE__ */ jsx("path", {
462
+ strokeLinecap: "round",
463
+ strokeLinejoin: "round",
464
+ strokeWidth: 1,
465
+ d: "M9 12l2 2 4-4m5.618-4.016A11.955 11.955 0 0112 2.944a11.955 11.955 0 01-8.618 3.04A12.02 12.02 0 003 9c0 5.591 3.824 10.29 9 11.622 5.176-1.332 9-6.03 9-11.622 0-1.042-.133-2.052-.382-3.016z"
466
+ })
467
+ }), /* @__PURE__ */ jsx("div", { className: "absolute inset-0 bg-emerald-400/20 rounded-full blur-xl" })]
468
+ }),
469
+ /* @__PURE__ */ jsxs("div", {
470
+ className: "text-center mb-6",
471
+ children: [/* @__PURE__ */ jsx("div", {
472
+ className: "text-3xl font-bold text-white mb-1",
473
+ children: "100%"
474
+ }), /* @__PURE__ */ jsx("div", {
475
+ className: "text-white/50 text-sm",
476
+ children: "Architecture Compliance"
477
+ })]
478
+ }),
479
+ /* @__PURE__ */ jsxs("div", {
480
+ className: "w-full space-y-2",
481
+ children: [
482
+ /* @__PURE__ */ jsxs("div", {
483
+ className: "flex items-center gap-2 px-3 py-2 rounded-lg bg-red-500/10 border border-red-500/20",
484
+ children: [/* @__PURE__ */ jsx("svg", {
485
+ className: "w-4 h-4 text-red-400",
486
+ fill: "none",
487
+ stroke: "currentColor",
488
+ viewBox: "0 0 24 24",
489
+ children: /* @__PURE__ */ jsx("path", {
490
+ strokeLinecap: "round",
491
+ strokeLinejoin: "round",
492
+ strokeWidth: 2,
493
+ d: "M6 18L18 6M6 6l12 12"
494
+ })
495
+ }), /* @__PURE__ */ jsx("span", {
496
+ className: "text-sm text-red-400/80 font-mono",
497
+ children: "Circular dependencies"
498
+ })]
499
+ }),
500
+ /* @__PURE__ */ jsxs("div", {
501
+ className: "flex items-center gap-2 px-3 py-2 rounded-lg bg-red-500/10 border border-red-500/20",
502
+ children: [/* @__PURE__ */ jsx("svg", {
503
+ className: "w-4 h-4 text-red-400",
504
+ fill: "none",
505
+ stroke: "currentColor",
506
+ viewBox: "0 0 24 24",
507
+ children: /* @__PURE__ */ jsx("path", {
508
+ strokeLinecap: "round",
509
+ strokeLinejoin: "round",
510
+ strokeWidth: 2,
511
+ d: "M6 18L18 6M6 6l12 12"
512
+ })
513
+ }), /* @__PURE__ */ jsx("span", {
514
+ className: "text-sm text-red-400/80 font-mono",
515
+ children: "Layer violations"
516
+ })]
517
+ }),
518
+ /* @__PURE__ */ jsxs("div", {
519
+ className: "flex items-center gap-2 px-3 py-2 rounded-lg bg-red-500/10 border border-red-500/20",
520
+ children: [/* @__PURE__ */ jsx("svg", {
521
+ className: "w-4 h-4 text-red-400",
522
+ fill: "none",
523
+ stroke: "currentColor",
524
+ viewBox: "0 0 24 24",
525
+ children: /* @__PURE__ */ jsx("path", {
526
+ strokeLinecap: "round",
527
+ strokeLinejoin: "round",
528
+ strokeWidth: 2,
529
+ d: "M6 18L18 6M6 6l12 12"
530
+ })
531
+ }), /* @__PURE__ */ jsx("span", {
532
+ className: "text-sm text-red-400/80 font-mono",
533
+ children: "Untyped exports"
534
+ })]
535
+ })
536
+ ]
537
+ })
538
+ ]
539
+ })]
540
+ })
541
+ })]
542
+ })]
543
+ })]
544
+ });
545
+ }
546
+
547
+ //#endregion
548
+ //#region src/client/components/module-showcase.tsx
549
+ function ModuleShowcase() {
550
+ const modules = [
551
+ {
552
+ name: "Auth",
553
+ icon: /* @__PURE__ */ jsx("svg", {
554
+ className: "w-6 h-6",
555
+ fill: "none",
556
+ stroke: "currentColor",
557
+ viewBox: "0 0 24 24",
558
+ children: /* @__PURE__ */ jsx("path", {
559
+ strokeLinecap: "round",
560
+ strokeLinejoin: "round",
561
+ strokeWidth: 1.5,
562
+ d: "M15 7a2 2 0 012 2m4 0a6 6 0 01-7.743 5.743L11 17H9v2H7v2H4a1 1 0 01-1-1v-2.586a1 1 0 01.293-.707l5.964-5.964A6 6 0 1121 9z"
563
+ })
564
+ }),
565
+ desc: "OAuth, MFA, sessions",
566
+ color: "emerald"
567
+ },
568
+ {
569
+ name: "Billing",
570
+ icon: /* @__PURE__ */ jsx("svg", {
571
+ className: "w-6 h-6",
572
+ fill: "none",
573
+ stroke: "currentColor",
574
+ viewBox: "0 0 24 24",
575
+ children: /* @__PURE__ */ jsx("path", {
576
+ strokeLinecap: "round",
577
+ strokeLinejoin: "round",
578
+ strokeWidth: 1.5,
579
+ d: "M3 10h18M7 15h1m4 0h1m-7 4h12a3 3 0 003-3V8a3 3 0 00-3-3H6a3 3 0 00-3 3v8a3 3 0 003 3z"
580
+ })
581
+ }),
582
+ desc: "Stripe, subscriptions",
583
+ color: "teal"
584
+ },
585
+ {
586
+ name: "Analytics",
587
+ icon: /* @__PURE__ */ jsx("svg", {
588
+ className: "w-6 h-6",
589
+ fill: "none",
590
+ stroke: "currentColor",
591
+ viewBox: "0 0 24 24",
592
+ children: /* @__PURE__ */ jsx("path", {
593
+ strokeLinecap: "round",
594
+ strokeLinejoin: "round",
595
+ strokeWidth: 1.5,
596
+ d: "M9 19v-6a2 2 0 00-2-2H5a2 2 0 00-2 2v6a2 2 0 002 2h2a2 2 0 002-2zm0 0V9a2 2 0 012-2h2a2 2 0 012 2v10m-6 0a2 2 0 002 2h2a2 2 0 002-2m0 0V5a2 2 0 012-2h2a2 2 0 012 2v14a2 2 0 01-2 2h-2a2 2 0 01-2-2z"
597
+ })
598
+ }),
599
+ desc: "Events, dashboards",
600
+ color: "cyan"
601
+ },
602
+ {
603
+ name: "Email",
604
+ icon: /* @__PURE__ */ jsx("svg", {
605
+ className: "w-6 h-6",
606
+ fill: "none",
607
+ stroke: "currentColor",
608
+ viewBox: "0 0 24 24",
609
+ children: /* @__PURE__ */ jsx("path", {
610
+ strokeLinecap: "round",
611
+ strokeLinejoin: "round",
612
+ strokeWidth: 1.5,
613
+ d: "M3 8l7.89 5.26a2 2 0 002.22 0L21 8M5 19h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z"
614
+ })
615
+ }),
616
+ desc: "Transactional, templates",
617
+ color: "violet"
618
+ },
619
+ {
620
+ name: "Storage",
621
+ icon: /* @__PURE__ */ jsx("svg", {
622
+ className: "w-6 h-6",
623
+ fill: "none",
624
+ stroke: "currentColor",
625
+ viewBox: "0 0 24 24",
626
+ children: /* @__PURE__ */ jsx("path", {
627
+ strokeLinecap: "round",
628
+ strokeLinejoin: "round",
629
+ strokeWidth: 1.5,
630
+ d: "M4 7v10c0 2.21 3.582 4 8 4s8-1.79 8-4V7M4 7c0 2.21 3.582 4 8 4s8-1.79 8-4M4 7c0-2.21 3.582-4 8-4s8 1.79 8 4m0 5c0 2.21-3.582 4-8 4s-8-1.79-8-4"
631
+ })
632
+ }),
633
+ desc: "S3, uploads, CDN",
634
+ color: "amber"
635
+ },
636
+ {
637
+ name: "AI",
638
+ icon: /* @__PURE__ */ jsx("svg", {
639
+ className: "w-6 h-6",
640
+ fill: "none",
641
+ stroke: "currentColor",
642
+ viewBox: "0 0 24 24",
643
+ children: /* @__PURE__ */ jsx("path", {
644
+ strokeLinecap: "round",
645
+ strokeLinejoin: "round",
646
+ strokeWidth: 1.5,
647
+ 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"
648
+ })
649
+ }),
650
+ desc: "Chat, embeddings",
651
+ color: "pink"
652
+ }
653
+ ];
654
+ const colorMap = {
655
+ emerald: {
656
+ bg: "bg-emerald-500/10",
657
+ border: "border-emerald-500/30",
658
+ text: "text-emerald-400"
659
+ },
660
+ teal: {
661
+ bg: "bg-teal-500/10",
662
+ border: "border-teal-500/30",
663
+ text: "text-teal-400"
664
+ },
665
+ cyan: {
666
+ bg: "bg-cyan-500/10",
667
+ border: "border-cyan-500/30",
668
+ text: "text-cyan-400"
669
+ },
670
+ violet: {
671
+ bg: "bg-violet-500/10",
672
+ border: "border-violet-500/30",
673
+ text: "text-violet-400"
674
+ },
675
+ amber: {
676
+ bg: "bg-amber-500/10",
677
+ border: "border-amber-500/30",
678
+ text: "text-amber-400"
679
+ },
680
+ pink: {
681
+ bg: "bg-pink-500/10",
682
+ border: "border-pink-500/30",
683
+ text: "text-pink-400"
684
+ }
685
+ };
686
+ return /* @__PURE__ */ jsx("section", {
687
+ className: "py-24 px-6",
688
+ children: /* @__PURE__ */ jsxs("div", {
689
+ className: "max-w-6xl mx-auto",
690
+ children: [
691
+ /* @__PURE__ */ jsxs("div", {
692
+ className: "text-center mb-16",
693
+ children: [/* @__PURE__ */ jsx("h2", {
694
+ className: "text-4xl md:text-5xl font-bold text-white mb-6",
695
+ children: "Modules for Everything"
696
+ }), /* @__PURE__ */ jsx("p", {
697
+ className: "text-xl text-white/60 max-w-2xl mx-auto",
698
+ children: "Skip weeks of development. Install battle-tested modules and focus on what makes your product unique."
699
+ })]
700
+ }),
701
+ /* @__PURE__ */ jsx("div", {
702
+ className: "grid grid-cols-2 md:grid-cols-3 gap-4",
703
+ children: modules.map((mod) => {
704
+ const colors = colorMap[mod.color];
705
+ return /* @__PURE__ */ jsxs("div", {
706
+ className: "group relative rounded-2xl border border-white/10 bg-white/[0.02] p-6 hover:border-white/20 hover:bg-white/[0.04] transition-all cursor-pointer",
707
+ children: [
708
+ /* @__PURE__ */ jsx("div", {
709
+ className: "absolute top-3 right-3 px-2 py-0.5 rounded text-[10px] font-medium bg-white/10 text-white/50",
710
+ children: "Soon"
711
+ }),
712
+ /* @__PURE__ */ jsx("div", {
713
+ className: `w-12 h-12 rounded-xl ${colors.bg} ${colors.text} flex items-center justify-center mb-4 group-hover:scale-110 transition-transform`,
714
+ children: mod.icon
715
+ }),
716
+ /* @__PURE__ */ jsx("h3", {
717
+ className: "text-lg font-semibold text-white mb-1",
718
+ children: mod.name
719
+ }),
720
+ /* @__PURE__ */ jsx("p", {
721
+ className: "text-sm text-white/50",
722
+ children: mod.desc
723
+ })
724
+ ]
725
+ }, mod.name);
726
+ })
727
+ }),
728
+ /* @__PURE__ */ jsx("div", {
729
+ className: "mt-12 text-center",
730
+ children: /* @__PURE__ */ jsxs("button", {
731
+ className: "inline-flex items-center gap-2 px-6 py-3 rounded-xl border border-white/20 text-white/80 hover:bg-white/5 hover:border-white/30 transition-all",
732
+ children: [/* @__PURE__ */ jsx("span", { children: "Join waitlist for marketplace access" }), /* @__PURE__ */ jsx("svg", {
733
+ className: "w-4 h-4",
734
+ fill: "none",
735
+ stroke: "currentColor",
736
+ viewBox: "0 0 24 24",
737
+ children: /* @__PURE__ */ jsx("path", {
738
+ strokeLinecap: "round",
739
+ strokeLinejoin: "round",
740
+ strokeWidth: 2,
741
+ d: "M17 8l4 4m0 0l-4 4m4-4H3"
742
+ })
743
+ })]
744
+ })
745
+ })
746
+ ]
747
+ })
748
+ });
749
+ }
750
+
751
+ //#endregion
752
+ //#region src/client/components/how-it-works.tsx
753
+ function HowItWorks() {
754
+ const [activeTab, setActiveTab] = useState("builders");
755
+ const steps = activeTab === "builders" ? [
756
+ {
757
+ step: "01",
758
+ command: "bunx create-kuckit-app my-app",
759
+ title: "Scaffold your app",
760
+ desc: "Get a production-ready TypeScript app with Clean Architecture baked in."
761
+ },
762
+ {
763
+ step: "02",
764
+ command: "kuckit add @vendor/billing",
765
+ title: "Install modules",
766
+ desc: "One command adds both server and client code, wired and ready."
767
+ },
768
+ {
769
+ step: "03",
770
+ command: "bun run dev",
771
+ title: "Ship it",
772
+ desc: "Your app is ready. Maintainable, type-safe, and battle-tested."
773
+ }
774
+ ] : [
775
+ {
776
+ step: "01",
777
+ command: "kuckit generate module billing",
778
+ title: "Scaffold with AGENTS.md",
779
+ desc: "Generated structure includes documentation for AI and human developers."
780
+ },
781
+ {
782
+ step: "02",
783
+ command: "git commit && git push",
784
+ title: "Build & test",
785
+ desc: "Guardrails ensure your module meets quality standards before it ships."
786
+ },
787
+ {
788
+ step: "03",
789
+ command: "kuckit publish",
790
+ title: "Earn revenue",
791
+ desc: "Set your price, publish to the marketplace, and start earning."
792
+ }
793
+ ];
794
+ return /* @__PURE__ */ jsxs("section", {
795
+ className: "py-24 px-6 relative",
796
+ children: [/* @__PURE__ */ jsx("div", { className: "absolute inset-0 bg-gradient-to-b from-transparent via-teal-500/5 to-transparent pointer-events-none" }), /* @__PURE__ */ jsxs("div", {
797
+ className: "max-w-5xl mx-auto relative",
798
+ children: [
799
+ /* @__PURE__ */ jsxs("div", {
800
+ className: "text-center mb-12",
801
+ children: [/* @__PURE__ */ jsx("h2", {
802
+ className: "text-4xl md:text-5xl font-bold text-white mb-6",
803
+ children: "How It Works"
804
+ }), /* @__PURE__ */ jsx("p", {
805
+ className: "text-xl text-white/60",
806
+ children: "Three steps to shipping or selling."
807
+ })]
808
+ }),
809
+ /* @__PURE__ */ jsx("div", {
810
+ className: "flex justify-center mb-12",
811
+ children: /* @__PURE__ */ jsxs("div", {
812
+ className: "inline-flex rounded-xl bg-white/5 p-1",
813
+ children: [/* @__PURE__ */ jsx("button", {
814
+ onClick: () => setActiveTab("builders"),
815
+ className: `px-6 py-2.5 rounded-lg text-sm font-medium transition-all ${activeTab === "builders" ? "bg-white/10 text-white" : "text-white/50 hover:text-white/80"}`,
816
+ children: "For Builders"
817
+ }), /* @__PURE__ */ jsx("button", {
818
+ onClick: () => setActiveTab("sellers"),
819
+ className: `px-6 py-2.5 rounded-lg text-sm font-medium transition-all ${activeTab === "sellers" ? "bg-white/10 text-white" : "text-white/50 hover:text-white/80"}`,
820
+ children: "For Sellers"
821
+ })]
822
+ })
823
+ }),
824
+ /* @__PURE__ */ jsx("div", {
825
+ className: "space-y-6",
826
+ children: steps.map((step, index) => /* @__PURE__ */ jsxs("div", {
827
+ className: "group relative flex gap-6 md:gap-10 items-start p-6 rounded-2xl hover:bg-white/[0.02] transition-colors",
828
+ children: [/* @__PURE__ */ jsxs("div", {
829
+ className: "shrink-0",
830
+ children: [/* @__PURE__ */ jsx("div", {
831
+ className: "w-14 h-14 rounded-2xl bg-gradient-to-br from-emerald-500/20 to-teal-500/20 border border-emerald-500/20 flex items-center justify-center",
832
+ children: /* @__PURE__ */ jsx("span", {
833
+ className: "text-emerald-400 font-bold text-lg",
834
+ children: step.step
835
+ })
836
+ }), index < steps.length - 1 && /* @__PURE__ */ jsx("div", { className: "w-px h-12 bg-gradient-to-b from-emerald-500/30 to-transparent mx-auto mt-4" })]
837
+ }), /* @__PURE__ */ jsxs("div", {
838
+ className: "flex-1 pt-1",
839
+ children: [
840
+ /* @__PURE__ */ jsx("h3", {
841
+ className: "text-xl font-semibold text-white mb-2",
842
+ children: step.title
843
+ }),
844
+ /* @__PURE__ */ jsx("p", {
845
+ className: "text-white/50 mb-4",
846
+ children: step.desc
847
+ }),
848
+ /* @__PURE__ */ jsxs("div", {
849
+ className: "inline-flex items-center gap-3 px-4 py-2.5 rounded-xl bg-black/50 border border-white/10 font-mono text-sm",
850
+ children: [/* @__PURE__ */ jsx("span", {
851
+ className: "text-emerald-400",
852
+ children: "$"
853
+ }), /* @__PURE__ */ jsx("span", {
854
+ className: "text-white/80",
855
+ children: step.command
856
+ })]
857
+ })
858
+ ]
859
+ })]
860
+ }, step.step))
861
+ })
862
+ ]
863
+ })]
864
+ });
865
+ }
866
+
867
+ //#endregion
868
+ //#region src/client/components/architecture-preview.tsx
869
+ function ArchitecturePreview() {
870
+ const layers = [
871
+ {
872
+ name: "Interface Layer",
873
+ items: ["apps/web", "apps/server"],
874
+ color: "emerald",
875
+ desc: "React UI + Express API"
876
+ },
877
+ {
878
+ name: "SDK Layer",
879
+ items: ["sdk", "sdk-react"],
880
+ color: "teal",
881
+ desc: "Module system + DI container"
882
+ },
883
+ {
884
+ name: "Application Layer",
885
+ items: ["application", "api"],
886
+ color: "cyan",
887
+ desc: "Use cases + oRPC procedures"
888
+ },
889
+ {
890
+ name: "Domain Layer",
891
+ items: ["domain", "contracts"],
892
+ color: "violet",
893
+ desc: "Entities + Zod schemas"
894
+ },
895
+ {
896
+ name: "Infrastructure Layer",
897
+ items: [
898
+ "infrastructure",
899
+ "db",
900
+ "auth"
901
+ ],
902
+ color: "pink",
903
+ desc: "Repositories + Drizzle ORM"
904
+ }
905
+ ];
906
+ const colorMap = {
907
+ emerald: {
908
+ bg: "bg-emerald-500/10",
909
+ border: "border-emerald-500/30",
910
+ text: "text-emerald-400",
911
+ glow: "shadow-emerald-500/20"
912
+ },
913
+ teal: {
914
+ bg: "bg-teal-500/10",
915
+ border: "border-teal-500/30",
916
+ text: "text-teal-400",
917
+ glow: "shadow-teal-500/20"
918
+ },
919
+ cyan: {
920
+ bg: "bg-cyan-500/10",
921
+ border: "border-cyan-500/30",
922
+ text: "text-cyan-400",
923
+ glow: "shadow-cyan-500/20"
924
+ },
925
+ violet: {
926
+ bg: "bg-violet-500/10",
927
+ border: "border-violet-500/30",
928
+ text: "text-violet-400",
929
+ glow: "shadow-violet-500/20"
930
+ },
931
+ pink: {
932
+ bg: "bg-pink-500/10",
933
+ border: "border-pink-500/30",
934
+ text: "text-pink-400",
935
+ glow: "shadow-pink-500/20"
936
+ }
937
+ };
938
+ return /* @__PURE__ */ jsx("section", {
939
+ className: "py-24 px-6",
940
+ children: /* @__PURE__ */ jsxs("div", {
941
+ className: "max-w-6xl mx-auto",
942
+ children: [
943
+ /* @__PURE__ */ jsxs("div", {
944
+ className: "text-center mb-16",
945
+ children: [
946
+ /* @__PURE__ */ jsxs("div", {
947
+ className: "inline-flex items-center gap-2 px-3 py-1.5 rounded-full bg-violet-500/10 border border-violet-500/20 text-xs text-violet-400 font-medium mb-6",
948
+ children: [/* @__PURE__ */ jsx("svg", {
949
+ className: "w-3.5 h-3.5",
950
+ fill: "none",
951
+ stroke: "currentColor",
952
+ viewBox: "0 0 24 24",
953
+ children: /* @__PURE__ */ jsx("path", {
954
+ strokeLinecap: "round",
955
+ strokeLinejoin: "round",
956
+ strokeWidth: 2,
957
+ d: "M19 11H5m14 0a2 2 0 012 2v6a2 2 0 01-2 2H5a2 2 0 01-2-2v-6a2 2 0 012-2m14 0V9a2 2 0 00-2-2M5 11V9a2 2 0 012-2m0 0V5a2 2 0 012-2h6a2 2 0 012 2v2M7 7h10"
958
+ })
959
+ }), "Clean Architecture"]
960
+ }),
961
+ /* @__PURE__ */ jsx("h2", {
962
+ className: "text-4xl md:text-5xl font-bold text-white mb-6",
963
+ children: "Every Module, Same Structure"
964
+ }),
965
+ /* @__PURE__ */ jsx("p", {
966
+ className: "text-xl text-white/60 max-w-2xl mx-auto",
967
+ children: "Clear boundaries between layers. AGENTS.md in every package ensures AI and humans build consistently."
968
+ })
969
+ ]
970
+ }),
971
+ /* @__PURE__ */ jsx("div", {
972
+ className: "max-w-3xl mx-auto space-y-3",
973
+ children: layers.map((layer, index) => {
974
+ const colors = colorMap[layer.color];
975
+ return /* @__PURE__ */ jsxs("div", {
976
+ className: "relative group",
977
+ children: [index < layers.length - 1 && /* @__PURE__ */ jsx("div", { className: "absolute left-1/2 -bottom-3 w-px h-3 bg-white/10" }), /* @__PURE__ */ jsx("div", {
978
+ className: `relative rounded-xl border ${colors.border} ${colors.bg} p-5 hover:shadow-lg ${colors.glow} transition-all`,
979
+ children: /* @__PURE__ */ jsxs("div", {
980
+ className: "flex flex-col md:flex-row md:items-center gap-4",
981
+ children: [
982
+ /* @__PURE__ */ jsxs("div", {
983
+ className: "md:w-48 shrink-0",
984
+ children: [/* @__PURE__ */ jsx("h3", {
985
+ className: `font-semibold ${colors.text}`,
986
+ children: layer.name
987
+ }), /* @__PURE__ */ jsx("p", {
988
+ className: "text-white/40 text-sm",
989
+ children: layer.desc
990
+ })]
991
+ }),
992
+ /* @__PURE__ */ jsx("div", {
993
+ className: "flex flex-wrap gap-2 flex-1",
994
+ children: layer.items.map((item) => /* @__PURE__ */ jsxs("div", {
995
+ className: "inline-flex items-center gap-2 px-3 py-1.5 rounded-lg bg-black/30 border border-white/10",
996
+ children: [/* @__PURE__ */ jsx("span", { className: "w-2 h-2 rounded-full bg-white/30" }), /* @__PURE__ */ jsx("span", {
997
+ className: "text-sm font-mono text-white/70",
998
+ children: item
999
+ })]
1000
+ }, item))
1001
+ }),
1002
+ /* @__PURE__ */ jsxs("div", {
1003
+ className: "shrink-0 flex items-center gap-1.5 px-2.5 py-1 rounded-md bg-emerald-500/10 border border-emerald-500/20",
1004
+ children: [/* @__PURE__ */ jsx("svg", {
1005
+ className: "w-3.5 h-3.5 text-emerald-400",
1006
+ fill: "none",
1007
+ stroke: "currentColor",
1008
+ viewBox: "0 0 24 24",
1009
+ children: /* @__PURE__ */ jsx("path", {
1010
+ strokeLinecap: "round",
1011
+ strokeLinejoin: "round",
1012
+ strokeWidth: 2,
1013
+ 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"
1014
+ })
1015
+ }), /* @__PURE__ */ jsx("span", {
1016
+ className: "text-xs font-mono text-emerald-400",
1017
+ children: "AGENTS.md"
1018
+ })]
1019
+ })
1020
+ ]
1021
+ })
1022
+ })]
1023
+ }, layer.name);
1024
+ })
1025
+ }),
1026
+ /* @__PURE__ */ jsx("div", {
1027
+ className: "mt-8 flex justify-center",
1028
+ children: /* @__PURE__ */ jsxs("div", {
1029
+ className: "flex items-center gap-2 text-sm text-white/40",
1030
+ children: [/* @__PURE__ */ jsx("svg", {
1031
+ className: "w-4 h-4",
1032
+ fill: "none",
1033
+ stroke: "currentColor",
1034
+ viewBox: "0 0 24 24",
1035
+ children: /* @__PURE__ */ jsx("path", {
1036
+ strokeLinecap: "round",
1037
+ strokeLinejoin: "round",
1038
+ strokeWidth: 2,
1039
+ d: "M19 14l-7 7m0 0l-7-7m7 7V3"
1040
+ })
1041
+ }), /* @__PURE__ */ jsx("span", { children: "Dependencies flow down only" })]
1042
+ })
1043
+ })
1044
+ ]
1045
+ })
1046
+ });
1047
+ }
1048
+
1049
+ //#endregion
1050
+ //#region src/client/components/cli-demo.tsx
1051
+ function CliDemo() {
1052
+ const commands = [
1053
+ {
1054
+ input: "kuckit generate module billing",
1055
+ output: [
1056
+ "Creating module: @myapp/billing-module",
1057
+ " Directory: ./packages/billing-module",
1058
+ "",
1059
+ "✓ Created src/server/module.ts",
1060
+ "✓ Created src/client/index.ts",
1061
+ "✓ Created AGENTS.md",
1062
+ "✓ Created package.json",
1063
+ "",
1064
+ "Module created successfully!"
1065
+ ]
1066
+ },
1067
+ {
1068
+ input: "kuckit add @vendor/auth-module",
1069
+ output: [
1070
+ "Installing @vendor/auth-module...",
1071
+ "",
1072
+ "✓ Package installed",
1073
+ "✓ Server module wired in modules.ts",
1074
+ "✓ Client module wired in modules.client.ts",
1075
+ "✓ TypeScript types available",
1076
+ "",
1077
+ "Module ready to use!"
1078
+ ]
1079
+ },
1080
+ {
1081
+ input: "kuckit doctor",
1082
+ output: [
1083
+ "Checking project setup...",
1084
+ "",
1085
+ "✓ kuckit.config.ts found",
1086
+ "✓ All modules registered",
1087
+ "✓ No circular dependencies",
1088
+ "✓ AGENTS.md in all packages",
1089
+ "✓ Pre-commit hooks configured",
1090
+ "",
1091
+ "All checks passed!"
1092
+ ]
1093
+ }
1094
+ ];
1095
+ const [activeCommand, setActiveCommand] = useState(0);
1096
+ const [displayedLines, setDisplayedLines] = useState([]);
1097
+ const [isTyping, setIsTyping] = useState(true);
1098
+ const [typedInput, setTypedInput] = useState("");
1099
+ useEffect(() => {
1100
+ const command = commands[activeCommand];
1101
+ let inputIndex = 0;
1102
+ let outputIndex = 0;
1103
+ setDisplayedLines([]);
1104
+ setTypedInput("");
1105
+ setIsTyping(true);
1106
+ const inputInterval = setInterval(() => {
1107
+ if (inputIndex <= command.input.length) {
1108
+ setTypedInput(command.input.slice(0, inputIndex));
1109
+ inputIndex++;
1110
+ } else {
1111
+ clearInterval(inputInterval);
1112
+ setIsTyping(false);
1113
+ const outputInterval = setInterval(() => {
1114
+ if (outputIndex < command.output.length) {
1115
+ setDisplayedLines((prev) => [...prev, command.output[outputIndex]]);
1116
+ outputIndex++;
1117
+ } else {
1118
+ clearInterval(outputInterval);
1119
+ setTimeout(() => {
1120
+ setActiveCommand((prev) => (prev + 1) % commands.length);
1121
+ }, 3e3);
1122
+ }
1123
+ }, 100);
1124
+ }
1125
+ }, 50);
1126
+ return () => {
1127
+ clearInterval(inputInterval);
1128
+ };
1129
+ }, [activeCommand]);
1130
+ return /* @__PURE__ */ jsxs("section", {
1131
+ className: "py-24 px-6 relative",
1132
+ children: [/* @__PURE__ */ jsx("div", { className: "absolute inset-0 bg-gradient-to-b from-transparent via-emerald-500/5 to-transparent pointer-events-none" }), /* @__PURE__ */ jsxs("div", {
1133
+ className: "max-w-4xl mx-auto relative",
1134
+ children: [
1135
+ /* @__PURE__ */ jsxs("div", {
1136
+ className: "text-center mb-12",
1137
+ children: [/* @__PURE__ */ jsx("h2", {
1138
+ className: "text-4xl md:text-5xl font-bold text-white mb-6",
1139
+ children: "Powerful CLI"
1140
+ }), /* @__PURE__ */ jsx("p", {
1141
+ className: "text-xl text-white/60",
1142
+ children: "Generate, add, search, and validate modules from the command line."
1143
+ })]
1144
+ }),
1145
+ /* @__PURE__ */ jsxs("div", {
1146
+ className: "rounded-2xl border border-white/10 bg-black/80 backdrop-blur-sm overflow-hidden shadow-2xl",
1147
+ children: [/* @__PURE__ */ jsxs("div", {
1148
+ className: "flex items-center gap-2 px-4 py-3 bg-white/5 border-b border-white/10",
1149
+ children: [/* @__PURE__ */ jsxs("div", {
1150
+ className: "flex gap-1.5",
1151
+ children: [
1152
+ /* @__PURE__ */ jsx("div", { className: "w-3 h-3 rounded-full bg-red-500/80" }),
1153
+ /* @__PURE__ */ jsx("div", { className: "w-3 h-3 rounded-full bg-yellow-500/80" }),
1154
+ /* @__PURE__ */ jsx("div", { className: "w-3 h-3 rounded-full bg-green-500/80" })
1155
+ ]
1156
+ }), /* @__PURE__ */ jsx("span", {
1157
+ className: "text-white/40 text-sm font-mono ml-2",
1158
+ children: "terminal"
1159
+ })]
1160
+ }), /* @__PURE__ */ jsxs("div", {
1161
+ className: "p-6 font-mono text-sm min-h-[320px]",
1162
+ children: [/* @__PURE__ */ jsxs("div", {
1163
+ className: "flex items-center gap-2 mb-4",
1164
+ children: [
1165
+ /* @__PURE__ */ jsx("span", {
1166
+ className: "text-emerald-400",
1167
+ children: "$"
1168
+ }),
1169
+ /* @__PURE__ */ jsx("span", {
1170
+ className: "text-white",
1171
+ children: typedInput
1172
+ }),
1173
+ isTyping && /* @__PURE__ */ jsx("span", { className: "w-2 h-5 bg-white/80 animate-pulse" })
1174
+ ]
1175
+ }), /* @__PURE__ */ jsx("div", {
1176
+ className: "space-y-0.5",
1177
+ children: displayedLines.map((line, index) => /* @__PURE__ */ jsx("div", {
1178
+ className: `${line?.startsWith("✓") ? "text-emerald-400" : line?.includes("!") ? "text-white" : "text-white/60"}`,
1179
+ children: line || "\xA0"
1180
+ }, index))
1181
+ })]
1182
+ })]
1183
+ }),
1184
+ /* @__PURE__ */ jsx("div", {
1185
+ className: "flex justify-center gap-2 mt-6",
1186
+ children: commands.map((_, index) => /* @__PURE__ */ jsx("button", {
1187
+ onClick: () => setActiveCommand(index),
1188
+ className: `w-2 h-2 rounded-full transition-all ${index === activeCommand ? "bg-emerald-400 w-6" : "bg-white/20 hover:bg-white/40"}`
1189
+ }, index))
1190
+ })
1191
+ ]
1192
+ })]
1193
+ });
1194
+ }
1195
+
1196
+ //#endregion
1197
+ //#region src/client/components/faq.tsx
1198
+ const faqItems = [
1199
+ {
1200
+ id: "seller-1",
1201
+ category: "seller",
1202
+ question: "Can I develop and sell my own Kuckit modules?",
1203
+ answer: "Yes. You can develop complete, production-ready modules extending Kuckit functionality. Set your own pricing and publish them to the Kuckit marketplace."
1204
+ },
1205
+ {
1206
+ id: "seller-2",
1207
+ category: "seller",
1208
+ question: "What pricing models are available for my module?",
1209
+ answer: "You have full control over your pricing strategy. Choose between one-time payments (pay once, own forever) or subscription models (recurring billing). Each module can use a different model."
1210
+ },
1211
+ {
1212
+ id: "seller-3",
1213
+ category: "seller",
1214
+ question: "How does the partnership program work?",
1215
+ answer: "If you want to partner with Kuckit, your module can be integrated into the core platform. As a partner, you receive revenue share benefits whenever Kuckit generates sales, giving you passive income from the platform's growth."
1216
+ },
1217
+ {
1218
+ id: "seller-4",
1219
+ category: "seller",
1220
+ question: "What are the requirements for marketplace publishing?",
1221
+ answer: "Modules must follow Kuckit's Clean Architecture patterns, include proper documentation, and pass quality checks. Review our module development guide for detailed requirements."
1222
+ },
1223
+ {
1224
+ id: "seller-5",
1225
+ category: "seller",
1226
+ question: "Can I update my module after publishing?",
1227
+ answer: "Absolutely. You can release new versions anytime. Existing customers are notified of updates, and you control version management and backwards compatibility."
1228
+ },
1229
+ {
1230
+ id: "general-1",
1231
+ category: "general",
1232
+ question: "What is Kuckit?",
1233
+ answer: "Kuckit is a full-stack, modular platform built on Clean Architecture and Dependency Injection. It provides a professional foundation for building scalable applications with a plugin-based module system."
1234
+ },
1235
+ {
1236
+ id: "general-2",
1237
+ category: "general",
1238
+ question: "What is the Kuckit business model?",
1239
+ answer: "Kuckit provides a foundation platform for building applications. Module creators can publish to the marketplace with flexible pricing (one-time or subscription), and partners can integrate modules into core for revenue sharing benefits."
1240
+ },
1241
+ {
1242
+ id: "general-3",
1243
+ category: "general",
1244
+ question: "What technology stack does Kuckit use?",
1245
+ answer: "Kuckit is built with TypeScript, React (frontend), Express (backend), Drizzle ORM, and features comprehensive tooling. The modular architecture lets you swap implementations as needed."
1246
+ }
1247
+ ];
1248
+ function FAQ() {
1249
+ const [expandedId, setExpandedId] = useState(null);
1250
+ const sellerFaqs = faqItems.filter((item) => item.category === "seller");
1251
+ const generalFaqs = faqItems.filter((item) => item.category === "general");
1252
+ return /* @__PURE__ */ jsx("section", {
1253
+ className: "relative py-20 px-6",
1254
+ children: /* @__PURE__ */ jsxs("div", {
1255
+ className: "max-w-4xl mx-auto",
1256
+ children: [
1257
+ /* @__PURE__ */ jsxs("div", {
1258
+ className: "text-center mb-16",
1259
+ children: [/* @__PURE__ */ jsx("h2", {
1260
+ className: "text-4xl md:text-5xl font-bold mb-4 bg-gradient-to-r from-emerald-400 via-teal-400 to-cyan-400 bg-clip-text text-transparent",
1261
+ children: "Frequently Asked Questions"
1262
+ }), /* @__PURE__ */ jsx("p", {
1263
+ className: "text-white/60 text-lg",
1264
+ children: "Everything you need to know about developing, selling, and partnering with Kuckit"
1265
+ })]
1266
+ }),
1267
+ /* @__PURE__ */ jsxs("div", {
1268
+ className: "mb-16",
1269
+ children: [/* @__PURE__ */ jsxs("h3", {
1270
+ className: "text-2xl font-bold text-emerald-400 mb-8 flex items-center gap-2",
1271
+ children: [/* @__PURE__ */ jsx("div", { className: "w-1 h-8 bg-gradient-to-b from-emerald-400 to-teal-500 rounded-full" }), "For Module Sellers"]
1272
+ }), /* @__PURE__ */ jsx("div", {
1273
+ className: "space-y-3",
1274
+ children: sellerFaqs.map((item) => /* @__PURE__ */ jsx(FAQItem, {
1275
+ item,
1276
+ isExpanded: expandedId === item.id,
1277
+ onToggle: () => setExpandedId(expandedId === item.id ? null : item.id)
1278
+ }, item.id))
1279
+ })]
1280
+ }),
1281
+ /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsxs("h3", {
1282
+ className: "text-2xl font-bold text-teal-400 mb-8 flex items-center gap-2",
1283
+ children: [/* @__PURE__ */ jsx("div", { className: "w-1 h-8 bg-gradient-to-b from-teal-400 to-cyan-500 rounded-full" }), "General"]
1284
+ }), /* @__PURE__ */ jsx("div", {
1285
+ className: "space-y-3",
1286
+ children: generalFaqs.map((item) => /* @__PURE__ */ jsx(FAQItem, {
1287
+ item,
1288
+ isExpanded: expandedId === item.id,
1289
+ onToggle: () => setExpandedId(expandedId === item.id ? null : item.id)
1290
+ }, item.id))
1291
+ })] })
1292
+ ]
1293
+ })
1294
+ });
1295
+ }
1296
+ function FAQItem({ item, isExpanded, onToggle }) {
1297
+ return /* @__PURE__ */ jsxs("button", {
1298
+ onClick: onToggle,
1299
+ className: "w-full text-left bg-white/5 hover:bg-white/10 border border-white/10 rounded-lg p-5 transition-all duration-200",
1300
+ children: [/* @__PURE__ */ jsxs("div", {
1301
+ className: "flex items-start justify-between gap-4",
1302
+ children: [/* @__PURE__ */ jsx("span", {
1303
+ className: "text-base md:text-lg font-semibold text-white pr-4",
1304
+ children: item.question
1305
+ }), /* @__PURE__ */ jsx(ChevronDown, {
1306
+ size: 20,
1307
+ className: `flex-shrink-0 text-emerald-400 transition-transform duration-300 ${isExpanded ? "rotate-180" : ""}`
1308
+ })]
1309
+ }), isExpanded && /* @__PURE__ */ jsx("p", {
1310
+ className: "text-white/70 mt-4 text-sm md:text-base leading-relaxed",
1311
+ children: item.answer
1312
+ })]
1313
+ });
1314
+ }
1315
+
1316
+ //#endregion
1317
+ //#region src/client/components/WaitlistForm.tsx
1318
+ function WaitlistForm({ source = "landing", className }) {
1319
+ const rpc = useRpc();
1320
+ const [email, setEmail] = useState("");
1321
+ const [state, setState] = useState("idle");
1322
+ const handleSubmit = async (e) => {
1323
+ e.preventDefault();
1324
+ setState("loading");
1325
+ try {
1326
+ const result = await rpc.waitlist.join({
1327
+ email,
1328
+ source
1329
+ });
1330
+ if (result.success) {
1331
+ toast.success(result.message);
1332
+ setEmail("");
1333
+ } else toast.error(result.message || "Something went wrong. Please try again.");
1334
+ } catch (error) {
1335
+ console.error("Waitlist submission error:", error);
1336
+ toast.error("Network error. Please try again.");
1337
+ } finally {
1338
+ setState("idle");
1339
+ }
1340
+ };
1341
+ return /* @__PURE__ */ jsxs("form", {
1342
+ onSubmit: handleSubmit,
1343
+ className: `flex flex-col sm:flex-row gap-3 ${className}`,
1344
+ children: [/* @__PURE__ */ jsx("input", {
1345
+ type: "email",
1346
+ value: email,
1347
+ onChange: (e) => setEmail(e.target.value),
1348
+ placeholder: "Enter your email",
1349
+ required: true,
1350
+ disabled: state === "loading",
1351
+ className: "flex-1 px-5 py-3 rounded-xl bg-white/5 border border-white/10 text-white placeholder:text-white/40 focus:outline-none focus:border-emerald-500/50 focus:ring-2 focus:ring-emerald-500/20 transition-all disabled:opacity-50"
1352
+ }), /* @__PURE__ */ jsx("button", {
1353
+ type: "submit",
1354
+ disabled: state === "loading",
1355
+ className: "px-6 py-3 rounded-xl bg-white/10 border border-white/20 font-medium text-white hover:bg-white/15 transition-colors shrink-0 disabled:opacity-50 disabled:cursor-not-allowed",
1356
+ children: state === "loading" ? "Joining..." : "Join Waitlist"
1357
+ })]
1358
+ });
1359
+ }
1360
+
1361
+ //#endregion
1362
+ //#region src/client/components/cta-section.tsx
1363
+ function CtaSection() {
1364
+ return /* @__PURE__ */ jsxs("section", {
1365
+ className: "py-32 px-6 relative overflow-hidden",
1366
+ children: [/* @__PURE__ */ jsx("div", {
1367
+ className: "absolute inset-0 pointer-events-none",
1368
+ children: /* @__PURE__ */ jsx("div", { className: "absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 w-[800px] h-[800px] bg-gradient-to-br from-emerald-500/20 via-teal-500/10 to-transparent rounded-full blur-3xl" })
1369
+ }), /* @__PURE__ */ jsxs("div", {
1370
+ className: "max-w-4xl mx-auto relative",
1371
+ children: [/* @__PURE__ */ jsxs("div", {
1372
+ className: "relative rounded-3xl border border-white/10 bg-white/[0.02] backdrop-blur-sm p-12 md:p-16 text-center",
1373
+ children: [
1374
+ /* @__PURE__ */ jsx("div", { className: "absolute top-0 left-0 w-24 h-24 border-l-2 border-t-2 border-emerald-500/30 rounded-tl-3xl" }),
1375
+ /* @__PURE__ */ jsx("div", { className: "absolute bottom-0 right-0 w-24 h-24 border-r-2 border-b-2 border-teal-500/30 rounded-br-3xl" }),
1376
+ /* @__PURE__ */ jsx("h2", {
1377
+ className: "text-4xl md:text-5xl font-bold text-white mb-6",
1378
+ children: "Ready to Build?"
1379
+ }),
1380
+ /* @__PURE__ */ jsx("p", {
1381
+ className: "text-xl text-white/60 mb-10 max-w-xl mx-auto",
1382
+ children: "Join thousands of developers building modular TypeScript applications."
1383
+ }),
1384
+ /* @__PURE__ */ jsxs("div", {
1385
+ className: "flex flex-col sm:flex-row items-center justify-center gap-4 mb-12",
1386
+ children: [/* @__PURE__ */ jsxs("a", {
1387
+ href: "/docs",
1388
+ className: "group relative px-8 py-4 bg-gradient-to-r from-emerald-500 to-teal-500 rounded-xl font-semibold text-black transition-all hover:scale-105 hover:shadow-lg hover:shadow-emerald-500/25",
1389
+ children: ["Read the Docs", /* @__PURE__ */ jsx("span", { className: "absolute inset-0 rounded-xl bg-gradient-to-r from-emerald-400 to-teal-400 opacity-0 group-hover:opacity-100 transition-opacity blur-xl -z-10" })]
1390
+ }), /* @__PURE__ */ jsxs("a", {
1391
+ href: "https://github.com/kuckit",
1392
+ className: "px-8 py-4 rounded-xl font-semibold text-white border border-white/20 bg-white/5 hover:bg-white/10 hover:border-white/30 transition-all flex items-center gap-2",
1393
+ children: [/* @__PURE__ */ jsx("svg", {
1394
+ className: "w-5 h-5",
1395
+ fill: "currentColor",
1396
+ viewBox: "0 0 24 24",
1397
+ children: /* @__PURE__ */ jsx("path", {
1398
+ fillRule: "evenodd",
1399
+ clipRule: "evenodd",
1400
+ d: "M12 2C6.477 2 2 6.484 2 12.017c0 4.425 2.865 8.18 6.839 9.504.5.092.682-.217.682-.483 0-.237-.008-.868-.013-1.703-2.782.605-3.369-1.343-3.369-1.343-.454-1.158-1.11-1.466-1.11-1.466-.908-.62.069-.608.069-.608 1.003.07 1.531 1.032 1.531 1.032.892 1.53 2.341 1.088 2.91.832.092-.647.35-1.088.636-1.338-2.22-.253-4.555-1.113-4.555-4.951 0-1.093.39-1.988 1.029-2.688-.103-.253-.446-1.272.098-2.65 0 0 .84-.27 2.75 1.026A9.564 9.564 0 0112 6.844c.85.004 1.705.115 2.504.337 1.909-1.296 2.747-1.027 2.747-1.027.546 1.379.202 2.398.1 2.651.64.7 1.028 1.595 1.028 2.688 0 3.848-2.339 4.695-4.566 4.943.359.309.678.92.678 1.855 0 1.338-.012 2.419-.012 2.747 0 .268.18.58.688.482A10.019 10.019 0 0022 12.017C22 6.484 17.522 2 12 2z"
1401
+ })
1402
+ }), "View on GitHub"]
1403
+ })]
1404
+ }),
1405
+ /* @__PURE__ */ jsxs("div", {
1406
+ className: "flex items-center gap-4 mb-10",
1407
+ children: [
1408
+ /* @__PURE__ */ jsx("div", { className: "flex-1 h-px bg-white/10" }),
1409
+ /* @__PURE__ */ jsx("span", {
1410
+ className: "text-white/40 text-sm",
1411
+ children: "or join the marketplace waitlist"
1412
+ }),
1413
+ /* @__PURE__ */ jsx("div", { className: "flex-1 h-px bg-white/10" })
1414
+ ]
1415
+ }),
1416
+ /* @__PURE__ */ jsx(WaitlistForm, {
1417
+ source: "cta-section",
1418
+ className: "max-w-md mx-auto"
1419
+ })
1420
+ ]
1421
+ }), /* @__PURE__ */ jsxs("div", {
1422
+ className: "grid grid-cols-3 gap-6 mt-12",
1423
+ children: [
1424
+ /* @__PURE__ */ jsxs("div", {
1425
+ className: "text-center",
1426
+ children: [/* @__PURE__ */ jsx("div", {
1427
+ className: "text-3xl md:text-4xl font-bold text-white mb-1",
1428
+ children: "100%"
1429
+ }), /* @__PURE__ */ jsx("div", {
1430
+ className: "text-white/50 text-sm",
1431
+ children: "TypeScript"
1432
+ })]
1433
+ }),
1434
+ /* @__PURE__ */ jsxs("div", {
1435
+ className: "text-center",
1436
+ children: [/* @__PURE__ */ jsx("div", {
1437
+ className: "text-3xl md:text-4xl font-bold text-white mb-1",
1438
+ children: "5 min"
1439
+ }), /* @__PURE__ */ jsx("div", {
1440
+ className: "text-white/50 text-sm",
1441
+ children: "To first module"
1442
+ })]
1443
+ }),
1444
+ /* @__PURE__ */ jsxs("div", {
1445
+ className: "text-center",
1446
+ children: [/* @__PURE__ */ jsx("div", {
1447
+ className: "text-3xl md:text-4xl font-bold text-white mb-1",
1448
+ children: "∞"
1449
+ }), /* @__PURE__ */ jsx("div", {
1450
+ className: "text-white/50 text-sm",
1451
+ children: "Modules possible"
1452
+ })]
1453
+ })
1454
+ ]
1455
+ })]
1456
+ })]
1457
+ });
1458
+ }
1459
+
1460
+ //#endregion
1461
+ //#region src/client/components/LandingPage.tsx
1462
+ function LandingPage() {
1463
+ return /* @__PURE__ */ jsxs("div", {
1464
+ className: "min-h-screen bg-[#0a0a0b] text-white overflow-x-hidden",
1465
+ children: [
1466
+ /* @__PURE__ */ jsxs("div", {
1467
+ className: "fixed inset-0 pointer-events-none",
1468
+ children: [/* @__PURE__ */ jsx("div", { className: "absolute top-0 left-1/4 w-[600px] h-[600px] bg-emerald-500/10 rounded-full blur-[120px] animate-pulse" }), /* @__PURE__ */ jsx("div", { className: "absolute bottom-1/4 right-1/4 w-[400px] h-[400px] bg-teal-500/8 rounded-full blur-[100px] animate-pulse delay-1000" })]
1469
+ }),
1470
+ /* @__PURE__ */ jsxs("div", {
1471
+ className: "relative z-10",
1472
+ children: [
1473
+ /* @__PURE__ */ jsx(Hero, {}),
1474
+ /* @__PURE__ */ jsx(ValueProps, {}),
1475
+ /* @__PURE__ */ jsx(CodeQuality, {}),
1476
+ /* @__PURE__ */ jsx(ModuleShowcase, {}),
1477
+ /* @__PURE__ */ jsx(HowItWorks, {}),
1478
+ /* @__PURE__ */ jsx(ArchitecturePreview, {}),
1479
+ /* @__PURE__ */ jsx(CliDemo, {}),
1480
+ /* @__PURE__ */ jsx(FAQ, {}),
1481
+ /* @__PURE__ */ jsx(CtaSection, {})
1482
+ ]
1483
+ }),
1484
+ /* @__PURE__ */ jsx("footer", {
1485
+ className: "relative z-10 border-t border-white/5 py-12",
1486
+ children: /* @__PURE__ */ jsxs("div", {
1487
+ className: "max-w-6xl mx-auto px-6 flex flex-col md:flex-row justify-between items-center gap-6",
1488
+ children: [/* @__PURE__ */ jsxs("div", {
1489
+ className: "flex items-center gap-3",
1490
+ children: [/* @__PURE__ */ jsx("div", {
1491
+ className: "w-8 h-8 rounded-lg bg-gradient-to-br from-emerald-400 to-teal-500 flex items-center justify-center",
1492
+ children: /* @__PURE__ */ jsx("span", {
1493
+ className: "text-black font-bold text-sm",
1494
+ children: "K"
1495
+ })
1496
+ }), /* @__PURE__ */ jsxs("span", {
1497
+ className: "text-white/60 text-sm",
1498
+ children: ["Kuckit © ", (/* @__PURE__ */ new Date()).getFullYear()]
1499
+ })]
1500
+ }), /* @__PURE__ */ jsxs("div", {
1501
+ className: "flex gap-8 text-sm text-white/40",
1502
+ children: [
1503
+ /* @__PURE__ */ jsx("a", {
1504
+ href: "/docs",
1505
+ className: "hover:text-white transition-colors",
1506
+ children: "Docs"
1507
+ }),
1508
+ /* @__PURE__ */ jsx("a", {
1509
+ href: "https://github.com/kuckit",
1510
+ className: "hover:text-white transition-colors",
1511
+ children: "GitHub"
1512
+ }),
1513
+ /* @__PURE__ */ jsx("a", {
1514
+ href: "/discord",
1515
+ className: "hover:text-white transition-colors",
1516
+ children: "Discord"
1517
+ })
1518
+ ]
1519
+ })]
1520
+ })
1521
+ })
1522
+ ]
1523
+ });
1524
+ }
1525
+
1526
+ //#endregion
1527
+ //#region src/client/index.ts
1528
+ const kuckitClientModule = defineKuckitClientModule({
1529
+ id: "kuckit.landing",
1530
+ displayName: "Landing",
1531
+ version: "0.1.0",
1532
+ register(ctx) {
1533
+ ctx.registerComponent("LandingPage", LandingPage);
1534
+ ctx.addRoute({
1535
+ id: "landing",
1536
+ path: "/",
1537
+ component: LandingPage,
1538
+ meta: {
1539
+ title: "Kuckit - Build Modules. Earn Revenue. Ship Faster.",
1540
+ requiresAuth: false
1541
+ }
1542
+ });
1543
+ }
1544
+ });
1545
+
1546
+ //#endregion
1547
+ export { LandingPage, kuckitClientModule };
1548
+ //# sourceMappingURL=index.js.map