create-frootkit 1.2.12 → 1.2.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. package/package.json +1 -1
  2. package/templates/auth/package.json +2 -1
  3. package/templates/auth/src/app/dashboard/layout.tsx +8 -11
  4. package/templates/auth/src/app/dashboard/page.tsx +31 -27
  5. package/templates/auth/src/app/layout.tsx +5 -5
  6. package/templates/auth/src/app/login/page.tsx +11 -4
  7. package/templates/auth/src/app/page.tsx +278 -120
  8. package/templates/auth/src/app/signup/page.tsx +12 -6
  9. package/templates/auth/src/components/AuthForm.tsx +27 -34
  10. package/templates/auth/src/components/DashboardNav.tsx +41 -61
  11. package/templates/auth/src/components/MetricCard.tsx +12 -22
  12. package/templates/auth/src/components/Navbar.tsx +18 -21
  13. package/templates/auth/src/styles.css +157 -27
  14. package/templates/blog/package.json +2 -1
  15. package/templates/blog/src/app/blog/[slug]/page.tsx +85 -46
  16. package/templates/blog/src/app/layout.tsx +5 -5
  17. package/templates/blog/src/app/page.tsx +39 -26
  18. package/templates/blog/src/components/Footer.tsx +11 -9
  19. package/templates/blog/src/components/Navbar.tsx +21 -26
  20. package/templates/blog/src/components/Newsletter.tsx +11 -33
  21. package/templates/blog/src/components/PostCard.tsx +43 -76
  22. package/templates/blog/src/styles.css +113 -25
  23. package/templates/ecommerce/package.json +2 -1
  24. package/templates/ecommerce/src/app/cart/page.tsx +12 -4
  25. package/templates/ecommerce/src/app/layout.tsx +5 -5
  26. package/templates/ecommerce/src/app/page.tsx +92 -37
  27. package/templates/ecommerce/src/app/products/[id]/page.tsx +39 -31
  28. package/templates/ecommerce/src/components/CartDrawer.tsx +113 -45
  29. package/templates/ecommerce/src/components/Footer.tsx +11 -9
  30. package/templates/ecommerce/src/components/Navbar.tsx +32 -34
  31. package/templates/ecommerce/src/components/ProductCard.tsx +27 -38
  32. package/templates/ecommerce/src/styles.css +155 -36
  33. package/templates/empty/package.json +2 -1
  34. package/templates/starter/package.json +2 -1
  35. package/templates/starter/src/app/layout.tsx +5 -5
  36. package/templates/starter/src/app/page.tsx +114 -107
  37. package/templates/starter/src/components/FeatureCard.tsx +9 -15
  38. package/templates/starter/src/components/Footer.tsx +11 -9
  39. package/templates/starter/src/components/Header.tsx +15 -38
  40. package/templates/starter/src/styles.css +102 -27
@@ -1,14 +1,16 @@
1
1
  export function Footer() {
2
2
  return (
3
- <footer class="border-t border-white/[0.08] bg-[#08090a] py-8 text-xs text-zinc-500">
4
- <div class="max-w-6xl mx-auto px-6 flex flex-col sm:flex-row items-center justify-between gap-4">
5
- <div>
6
- FrootKit © {new Date().getFullYear()} OrbitNorth LLC. Built for high performance.
7
- </div>
8
- <div class="flex items-center gap-6">
9
- <a href="https://github.com/orbitnorth/frootkit" class="hover:text-zinc-300 transition-colors">GitHub</a>
10
- <a href="https://frootjs.org" class="hover:text-zinc-300 transition-colors">Documentation</a>
11
- <a href="/api/health" class="hover:text-zinc-300 transition-colors font-mono text-[11px]">/api/health</a>
3
+ <footer class="border-t border-[#e6ebf1] py-10 text-[14px] bg-white">
4
+ <div class="mx-auto max-w-6xl px-6 flex flex-wrap justify-between gap-4 text-xs text-[#425466]">
5
+ <span>
6
+ <b class="text-[#635bff] font-semibold text-sm">frootkit</b> · High-performance Preact fullstack web framework.
7
+ </span>
8
+ <div class="flex items-center gap-4">
9
+ <a href="https://frootjs.org" class="hover:text-[#0a2540]">Docs</a>
10
+ <span>·</span>
11
+ <a href="https://github.com/orbitnorth/frootkit" class="hover:text-[#0a2540]">GitHub</a>
12
+ <span>·</span>
13
+ <a href="/api/health" class="font-mono hover:text-[#0a2540]">/api/health</a>
12
14
  </div>
13
15
  </div>
14
16
  </footer>
@@ -1,49 +1,26 @@
1
1
  export function Header() {
2
2
  return (
3
- <header class="border-b border-white/[0.08] bg-[#08090a]/80 backdrop-blur-md sticky top-0 z-50">
4
- <div class="max-w-6xl mx-auto px-6 h-14 flex items-center justify-between">
5
- <div class="flex items-center gap-3">
6
- <a href="/" class="flex items-center gap-2.5 font-semibold text-zinc-100 text-sm tracking-tight group">
7
- <div class="w-6 h-6 rounded-md bg-indigo-500/15 border border-indigo-500/30 flex items-center justify-center text-indigo-400 group-hover:border-indigo-400/50 transition-colors shrink-0">
8
- <svg style="width: 13px; height: 13px;" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
9
- <path d="M12 2L2 7l10 5 10-5-10-5zM2 17l10 5 10-5M2 12l10 5 10-5" />
10
- </svg>
11
- </div>
12
- <span>Froot<span class="text-indigo-400">Kit</span></span>
13
- </a>
14
- <span class="px-2 py-0.5 text-[10px] font-mono text-zinc-400 rounded-md bg-white/[0.04] border border-white/[0.06]">
15
- v1.3.5
16
- </span>
3
+ <header class="absolute inset-x-0 top-0 z-30">
4
+ <nav class="mx-auto max-w-6xl px-6 flex items-center justify-between py-5 text-white">
5
+ <a href="/" class="text-[22px] font-semibold tracking-tight flex items-center gap-2">
6
+ <span>froot<span class="opacity-90">kit</span></span>
7
+ </a>
8
+
9
+ <div class="hidden items-center gap-8 text-[15px] font-medium md:flex">
10
+ <a href="#features" class="opacity-90 hover:opacity-100 transition-opacity">Features</a>
11
+ <a href="#code" class="opacity-90 hover:opacity-100 transition-opacity">Architecture</a>
12
+ <a href="/api/health" class="opacity-90 hover:opacity-100 transition-opacity font-mono text-xs">/api/health</a>
17
13
  </div>
18
14
 
19
- <nav class="flex items-center gap-5 text-xs font-medium">
15
+ <div class="flex items-center gap-4 text-[15px] font-medium">
20
16
  <a
21
17
  href="https://frootjs.org"
22
- target="_blank"
23
- rel="noreferrer"
24
- class="text-zinc-400 hover:text-zinc-200 transition-colors"
25
- >
26
- Docs
27
- </a>
28
- <a
29
- href="/api/health"
30
- class="text-zinc-400 hover:text-zinc-200 font-mono text-[11px] px-2 py-0.5 rounded bg-white/[0.03] border border-white/[0.06] transition-colors"
18
+ class="rounded-full bg-white px-4 py-1.5 text-[14px] text-[#635bff] font-medium shadow-[0_2px_5px_-1px_rgba(50,50,93,0.25),0_1px_3px_-1px_rgba(0,0,0,0.3)] hover:bg-[#f6f9fc] transition-colors"
31
19
  >
32
- /api/health
20
+ Documentation
33
21
  </a>
34
- <a
35
- href="https://github.com/orbitnorth/frootkit"
36
- target="_blank"
37
- rel="noreferrer"
38
- class="flex items-center gap-1.5 px-3 py-1.5 rounded-md bg-white/[0.05] border border-white/[0.08] text-zinc-200 hover:text-white hover:bg-white/[0.08] transition-all text-xs"
39
- >
40
- <svg style="width: 13px; height: 13px;" class="fill-current shrink-0" viewBox="0 0 24 24">
41
- <path d="M12 0C5.37 0 0 5.37 0 12c0 5.31 3.435 9.795 8.205 11.385.6.105.825-.255.825-.57 0-.285-.015-1.23-.015-2.235-3.015.555-3.795-.735-4.035-1.41-.135-.345-.72-1.41-1.23-1.695-.42-.225-1.02-.78-.015-.795.945-.015 1.62.87 1.845 1.23 1.08 1.815 2.805 1.305 3.495.99.105-.78.42-1.305.765-1.605-2.67-.3-5.46-1.335-5.46-5.925 0-1.305.465-2.385 1.23-3.225-.12-.3-.54-1.53.12-3.18 0 0 1.005-.315 3.3 1.23.96-.27 1.98-.405 3-.405s2.04.135 3 .405c2.295-1.56 3.3-1.23 3.3-1.23.66 1.65.24 2.88.12 3.18.765.84 1.23 1.905 1.23 3.225 0 4.605-2.805 5.625-5.475 5.925.435.375.81 1.095.81 2.22 0 1.605-.015 2.895-.015 3.3 0 .315.225.69.825.57A12.02 12.02 0 0024 12c0-6.63-5.37-12-12-12z" />
42
- </svg>
43
- <span>GitHub</span>
44
- </a>
45
- </nav>
46
- </div>
22
+ </div>
23
+ </nav>
47
24
  </header>
48
25
  );
49
26
  }
@@ -4,43 +4,118 @@
4
4
  --font-sans: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
5
5
  --font-mono: 'JetBrains Mono', ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
6
6
 
7
- --color-brand-primary: #6366f1;
8
- --color-brand-hover: #4f46e5;
7
+ --color-brand: #635bff;
8
+ --color-brand-hover: #5249e6;
9
+ --color-navy: #0a2540;
10
+ --color-slate: #425466;
11
+ --color-surface: #f6f9fc;
12
+ --color-hairline: #e6ebf1;
13
+ --color-cyan: #00d4ff;
14
+ --color-success: #24b47e;
15
+ --color-error: #cd3d64;
9
16
  }
10
17
 
11
18
  :root {
12
- color-scheme: dark;
13
- --bg-canvas: #08090a;
14
- --bg-surface: #0f1117;
15
- --bg-elevated: #151822;
16
- --border-subtle: rgba(255, 255, 255, 0.08);
17
- --border-strong: rgba(255, 255, 255, 0.16);
18
- --text-primary: #f4f4f5;
19
- --text-secondary: #9496a1;
20
- --text-muted: #5c6370;
21
- }
22
-
23
- html {
24
- background-color: var(--bg-canvas);
25
- color: var(--text-primary);
26
- font-family: var(--font-sans);
27
- scroll-behavior: smooth;
19
+ color-scheme: light;
20
+ --brand: #635bff;
21
+ --navy: #0a2540;
22
+ --slate: #425466;
23
+ --surface: #f6f9fc;
24
+ --hairline: #e6ebf1;
25
+ --cyan: #00d4ff;
26
+ --success: #24b47e;
27
+ --error: #cd3d64;
28
+
29
+ --shadow-card: 0 2px 5px -1px rgba(50, 50, 93, 0.25), 0 1px 3px -1px rgba(0, 0, 0, 0.3);
30
+ --shadow-pop: 0 13px 27px -5px rgba(50, 50, 93, 0.25), 0 8px 16px -8px rgba(0, 0, 0, 0.3);
31
+ }
32
+
33
+ body {
34
+ font-size: 15px;
35
+ line-height: 24px;
36
+ background-color: #ffffff;
37
+ color: #425466;
28
38
  -webkit-font-smoothing: antialiased;
29
39
  -moz-osx-font-smoothing: grayscale;
30
40
  }
31
41
 
32
- /* Strict SVG safety to prevent flex ballooning */
42
+ :focus-visible {
43
+ outline: 2px solid #635bff;
44
+ outline-offset: 2px;
45
+ }
46
+
33
47
  svg {
34
48
  flex-shrink: 0;
35
49
  max-width: 100%;
36
50
  }
37
51
 
38
- /* Accessibility: Mandatory Reduced Motion */
39
- @media (prefers-reduced-motion: reduce) {
40
- *, *::before, *::after {
41
- animation-duration: 0.01ms !important;
42
- animation-iteration-count: 1 !important;
43
- transition-duration: 0.01ms !important;
44
- scroll-behavior: auto !important;
45
- }
52
+ .btn {
53
+ display: inline-flex;
54
+ align-items: center;
55
+ justify-content: center;
56
+ gap: 0.5rem;
57
+ border-radius: 9999px;
58
+ padding: 0.625rem 1.25rem;
59
+ font-size: 15px;
60
+ font-weight: 500;
61
+ transition: all 150ms cubic-bezier(0.215, 0.61, 0.355, 1);
62
+ cursor: pointer;
63
+ }
64
+
65
+ .btn-p {
66
+ background-color: #635bff;
67
+ color: #ffffff;
68
+ box-shadow: var(--shadow-card);
69
+ }
70
+ .btn-p:hover {
71
+ background-color: #5249e6;
72
+ }
73
+
74
+ .btn-w {
75
+ background-color: #ffffff;
76
+ color: #635bff;
77
+ box-shadow: var(--shadow-card);
78
+ }
79
+ .btn-w:hover {
80
+ background-color: #f6f9fc;
81
+ }
82
+
83
+ .btn-o {
84
+ border: 1px solid #e6ebf1;
85
+ background-color: #ffffff;
86
+ color: #0a2540;
87
+ box-shadow: var(--shadow-card);
88
+ }
89
+ .btn-o:hover {
90
+ background-color: #f6f9fc;
91
+ }
92
+
93
+ .btn-gl {
94
+ border: 1px solid rgba(255, 255, 255, 0.4);
95
+ color: #ffffff;
96
+ }
97
+ .btn-gl:hover {
98
+ background-color: rgba(255, 255, 255, 0.1);
99
+ }
100
+
101
+ .bd {
102
+ display: inline-flex;
103
+ align-items: center;
104
+ border-radius: 9999px;
105
+ padding: 0.125rem 0.625rem;
106
+ font-size: 13px;
107
+ font-weight: 500;
108
+ }
109
+
110
+ .card {
111
+ border-radius: 8px;
112
+ border: 1px solid #e6ebf1;
113
+ background-color: #ffffff;
114
+ padding: 1.25rem;
115
+ box-shadow: var(--shadow-card);
116
+ }
117
+
118
+ .hero {
119
+ background: linear-gradient(160deg, #635bff 0%, #7a73ff 38%, #00d4ff 100%);
120
+ clip-path: polygon(0 0, 100% 0, 100% 88%, 0 100%);
46
121
  }