@digilogiclabs/create-saas-app 1.10.6 → 1.12.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.
Files changed (204) hide show
  1. package/README.md +331 -350
  2. package/dist/.tsbuildinfo +1 -1
  3. package/dist/cli/commands/create.js +2 -2
  4. package/dist/cli/commands/create.js.map +1 -1
  5. package/dist/generators/template-generator.d.ts.map +1 -1
  6. package/dist/generators/template-generator.js +14 -2
  7. package/dist/generators/template-generator.js.map +1 -1
  8. package/dist/templates/web/ui-auth/template/.claude +21 -0
  9. package/dist/templates/web/ui-auth/template/context.md +105 -0
  10. package/dist/templates/web/ui-auth/template/src/app/dev-setup/page.tsx +801 -0
  11. package/dist/templates/web/ui-auth/template/src/app/setup/page.tsx +403 -0
  12. package/dist/templates/web/ui-auth-payments/template/src/app/dev-setup/page.tsx +801 -0
  13. package/dist/templates/web/ui-auth-payments/template/src/app/setup/page.tsx +507 -0
  14. package/dist/templates/web/ui-auth-payments/template/src/components/shared/header.tsx +127 -32
  15. package/dist/templates/web/ui-auth-payments-ai/template/.claude +21 -0
  16. package/dist/templates/web/ui-auth-payments-ai/template/.env.example +15 -0
  17. package/dist/templates/web/ui-auth-payments-ai/template/README.md +207 -0
  18. package/dist/templates/web/ui-auth-payments-ai/template/context.md +169 -0
  19. package/dist/templates/web/ui-auth-payments-ai/template/middleware.ts +68 -0
  20. package/dist/templates/web/ui-auth-payments-ai/template/next.config.js +12 -0
  21. package/dist/templates/web/ui-auth-payments-ai/template/package-lock.json +12241 -0
  22. package/dist/templates/web/ui-auth-payments-ai/template/package.json +55 -0
  23. package/dist/templates/web/ui-auth-payments-ai/template/postcss.config.js +7 -0
  24. package/dist/templates/web/ui-auth-payments-ai/template/src/app/ai/page.tsx +310 -0
  25. package/dist/templates/web/ui-auth-payments-ai/template/src/app/api/ai/audio/route.ts +56 -0
  26. package/dist/templates/web/ui-auth-payments-ai/template/src/app/api/ai/chat/route.ts +49 -0
  27. package/dist/templates/web/ui-auth-payments-ai/template/src/app/api/ai/text/route.ts +64 -0
  28. package/dist/templates/web/ui-auth-payments-ai/template/src/app/api/ai/video/route.ts +73 -0
  29. package/dist/templates/web/ui-auth-payments-ai/template/src/app/auth/callback/route.ts +12 -0
  30. package/dist/templates/web/ui-auth-payments-ai/template/src/app/billing/page.tsx +211 -0
  31. package/dist/templates/web/ui-auth-payments-ai/template/src/app/checkout/page.tsx +142 -0
  32. package/dist/templates/web/ui-auth-payments-ai/template/src/app/dashboard/layout.tsx +22 -0
  33. package/dist/templates/web/ui-auth-payments-ai/template/src/app/dashboard/page.tsx +183 -0
  34. package/dist/templates/web/ui-auth-payments-ai/template/src/app/dev-setup/page.tsx +801 -0
  35. package/dist/templates/web/ui-auth-payments-ai/template/src/app/error.tsx +67 -0
  36. package/dist/templates/web/ui-auth-payments-ai/template/src/app/globals.css +43 -0
  37. package/dist/templates/web/ui-auth-payments-ai/template/src/app/layout.tsx +35 -0
  38. package/dist/templates/web/ui-auth-payments-ai/template/src/app/loading.tsx +20 -0
  39. package/dist/templates/web/ui-auth-payments-ai/template/src/app/login/page.tsx +6 -0
  40. package/dist/templates/web/ui-auth-payments-ai/template/src/app/page.tsx +380 -0
  41. package/dist/templates/web/ui-auth-payments-ai/template/src/app/page.tsx.backup +391 -0
  42. package/dist/templates/web/ui-auth-payments-ai/template/src/app/page.tsx.bak +391 -0
  43. package/dist/templates/web/ui-auth-payments-ai/template/src/app/setup/page.tsx +640 -0
  44. package/dist/templates/web/ui-auth-payments-ai/template/src/app/signup/page.tsx +6 -0
  45. package/dist/templates/web/ui-auth-payments-ai/template/src/components/__tests__/example.test.tsx +49 -0
  46. package/dist/templates/web/ui-auth-payments-ai/template/src/components/client/auth-status.tsx +52 -0
  47. package/dist/templates/web/ui-auth-payments-ai/template/src/components/client/login-form.tsx +144 -0
  48. package/dist/templates/web/ui-auth-payments-ai/template/src/components/client/signup-form.tsx +185 -0
  49. package/dist/templates/web/ui-auth-payments-ai/template/src/components/providers/app-providers.tsx +36 -0
  50. package/dist/templates/web/ui-auth-payments-ai/template/src/components/providers/theme-provider.tsx +96 -0
  51. package/dist/templates/web/ui-auth-payments-ai/template/src/components/shared/footer.tsx +36 -0
  52. package/dist/templates/web/ui-auth-payments-ai/template/src/components/shared/header.tsx +246 -0
  53. package/dist/templates/web/ui-auth-payments-ai/template/src/components/ui/badge.tsx +36 -0
  54. package/dist/templates/web/ui-auth-payments-ai/template/src/components/ui/theme-toggle.tsx +34 -0
  55. package/dist/templates/web/ui-auth-payments-ai/template/src/lib/actions/auth.ts +246 -0
  56. package/dist/templates/web/ui-auth-payments-ai/template/src/lib/actions/index.ts +14 -0
  57. package/dist/templates/web/ui-auth-payments-ai/template/src/lib/auth-server.ts +177 -0
  58. package/dist/templates/web/ui-auth-payments-ai/template/src/lib/env.ts +49 -0
  59. package/dist/templates/web/ui-auth-payments-ai/template/src/lib/utils.ts +140 -0
  60. package/dist/templates/web/ui-auth-payments-ai/template/src/test/setup.ts +79 -0
  61. package/dist/templates/web/ui-auth-payments-ai/template/tailwind.config.js +77 -0
  62. package/dist/templates/web/ui-auth-payments-ai/template/tsconfig.json +33 -0
  63. package/dist/templates/web/ui-auth-payments-ai/template/tsconfig.tsbuildinfo +1 -0
  64. package/dist/templates/web/ui-auth-payments-ai/template/vitest.config.ts +17 -0
  65. package/dist/templates/web/ui-auth-payments-audio/template/src/app/page.tsx +28 -20
  66. package/dist/templates/web/ui-auth-payments-audio/template/src/app/page.tsx.backup +391 -0
  67. package/dist/templates/web/ui-auth-payments-audio/template/src/app/page.tsx.bak +391 -0
  68. package/dist/templates/web/ui-auth-payments-audio/template/src/app/setup/page.tsx +345 -0
  69. package/dist/templates/web/ui-auth-payments-audio/template/src/components/shared/header.tsx +122 -37
  70. package/dist/templates/web/ui-auth-payments-video/template/src/app/setup/page.tsx +351 -0
  71. package/dist/templates/web/ui-auth-payments-video/template/src/components/shared/header.tsx +122 -37
  72. package/package.json +1 -1
  73. package/src/templates/web/ui-auth/template/.claude +21 -0
  74. package/src/templates/web/ui-auth/template/context.md +105 -0
  75. package/src/templates/web/ui-auth/template/src/app/dev-setup/page.tsx +801 -0
  76. package/src/templates/web/ui-auth/template/src/app/setup/page.tsx +403 -0
  77. package/src/templates/web/ui-auth-payments/template/src/app/dev-setup/page.tsx +801 -0
  78. package/src/templates/web/ui-auth-payments/template/src/app/setup/page.tsx +507 -0
  79. package/src/templates/web/ui-auth-payments/template/src/components/shared/header.tsx +127 -32
  80. package/src/templates/web/ui-auth-payments-ai/template/.claude +21 -0
  81. package/src/templates/web/ui-auth-payments-ai/template/.env.example +15 -0
  82. package/src/templates/web/ui-auth-payments-ai/template/README.md +207 -0
  83. package/src/templates/web/ui-auth-payments-ai/template/context.md +169 -0
  84. package/src/templates/web/ui-auth-payments-ai/template/middleware.ts +68 -0
  85. package/src/templates/web/ui-auth-payments-ai/template/next.config.js +12 -0
  86. package/src/templates/web/ui-auth-payments-ai/template/package-lock.json +12241 -0
  87. package/src/templates/web/ui-auth-payments-ai/template/package.json +55 -0
  88. package/src/templates/web/ui-auth-payments-ai/template/postcss.config.js +7 -0
  89. package/src/templates/web/ui-auth-payments-ai/template/src/app/ai/page.tsx +310 -0
  90. package/src/templates/web/ui-auth-payments-ai/template/src/app/api/ai/audio/route.ts +56 -0
  91. package/src/templates/web/ui-auth-payments-ai/template/src/app/api/ai/chat/route.ts +49 -0
  92. package/src/templates/web/ui-auth-payments-ai/template/src/app/api/ai/text/route.ts +64 -0
  93. package/src/templates/web/ui-auth-payments-ai/template/src/app/api/ai/video/route.ts +73 -0
  94. package/src/templates/web/ui-auth-payments-ai/template/src/app/auth/callback/route.ts +12 -0
  95. package/src/templates/web/ui-auth-payments-ai/template/src/app/billing/page.tsx +211 -0
  96. package/src/templates/web/ui-auth-payments-ai/template/src/app/checkout/page.tsx +142 -0
  97. package/src/templates/web/ui-auth-payments-ai/template/src/app/dashboard/layout.tsx +22 -0
  98. package/src/templates/web/ui-auth-payments-ai/template/src/app/dashboard/page.tsx +183 -0
  99. package/src/templates/web/ui-auth-payments-ai/template/src/app/dev-setup/page.tsx +801 -0
  100. package/src/templates/web/ui-auth-payments-ai/template/src/app/error.tsx +67 -0
  101. package/src/templates/web/ui-auth-payments-ai/template/src/app/globals.css +43 -0
  102. package/src/templates/web/ui-auth-payments-ai/template/src/app/layout.tsx +35 -0
  103. package/src/templates/web/ui-auth-payments-ai/template/src/app/loading.tsx +20 -0
  104. package/src/templates/web/ui-auth-payments-ai/template/src/app/login/page.tsx +6 -0
  105. package/src/templates/web/ui-auth-payments-ai/template/src/app/page.tsx +380 -0
  106. package/src/templates/web/ui-auth-payments-ai/template/src/app/page.tsx.backup +391 -0
  107. package/src/templates/web/ui-auth-payments-ai/template/src/app/page.tsx.bak +391 -0
  108. package/src/templates/web/ui-auth-payments-ai/template/src/app/setup/page.tsx +640 -0
  109. package/src/templates/web/ui-auth-payments-ai/template/src/app/signup/page.tsx +6 -0
  110. package/src/templates/web/ui-auth-payments-ai/template/src/components/__tests__/example.test.tsx +49 -0
  111. package/src/templates/web/ui-auth-payments-ai/template/src/components/client/auth-status.tsx +52 -0
  112. package/src/templates/web/ui-auth-payments-ai/template/src/components/client/login-form.tsx +144 -0
  113. package/src/templates/web/ui-auth-payments-ai/template/src/components/client/signup-form.tsx +185 -0
  114. package/src/templates/web/ui-auth-payments-ai/template/src/components/providers/app-providers.tsx +36 -0
  115. package/src/templates/web/ui-auth-payments-ai/template/src/components/providers/theme-provider.tsx +96 -0
  116. package/src/templates/web/ui-auth-payments-ai/template/src/components/shared/footer.tsx +36 -0
  117. package/src/templates/web/ui-auth-payments-ai/template/src/components/shared/header.tsx +246 -0
  118. package/src/templates/web/ui-auth-payments-ai/template/src/components/ui/badge.tsx +36 -0
  119. package/src/templates/web/ui-auth-payments-ai/template/src/components/ui/theme-toggle.tsx +34 -0
  120. package/src/templates/web/ui-auth-payments-ai/template/src/lib/actions/auth.ts +246 -0
  121. package/src/templates/web/ui-auth-payments-ai/template/src/lib/actions/index.ts +14 -0
  122. package/src/templates/web/ui-auth-payments-ai/template/src/lib/auth-server.ts +177 -0
  123. package/src/templates/web/ui-auth-payments-ai/template/src/lib/env.ts +49 -0
  124. package/src/templates/web/ui-auth-payments-ai/template/src/lib/utils.ts +140 -0
  125. package/src/templates/web/ui-auth-payments-ai/template/src/test/setup.ts +79 -0
  126. package/src/templates/web/ui-auth-payments-ai/template/tailwind.config.js +77 -0
  127. package/src/templates/web/ui-auth-payments-ai/template/tsconfig.json +33 -0
  128. package/src/templates/web/ui-auth-payments-ai/template/tsconfig.tsbuildinfo +1 -0
  129. package/src/templates/web/ui-auth-payments-ai/template/vitest.config.ts +17 -0
  130. package/src/templates/web/ui-auth-payments-audio/template/src/app/page.tsx +28 -20
  131. package/src/templates/web/ui-auth-payments-audio/template/src/app/page.tsx.backup +391 -0
  132. package/src/templates/web/ui-auth-payments-audio/template/src/app/page.tsx.bak +391 -0
  133. package/src/templates/web/ui-auth-payments-audio/template/src/app/setup/page.tsx +345 -0
  134. package/src/templates/web/ui-auth-payments-audio/template/src/components/shared/header.tsx +122 -37
  135. package/src/templates/web/ui-auth-payments-video/template/src/app/setup/page.tsx +351 -0
  136. package/src/templates/web/ui-auth-payments-video/template/src/components/shared/header.tsx +122 -37
  137. package/dist/cli/commands/add.d.ts +0 -6
  138. package/dist/cli/commands/add.d.ts.map +0 -1
  139. package/dist/cli/commands/add.js +0 -39
  140. package/dist/cli/commands/add.js.map +0 -1
  141. package/dist/cli/commands/index.d.ts +0 -4
  142. package/dist/cli/commands/index.d.ts.map +0 -1
  143. package/dist/cli/commands/index.js +0 -20
  144. package/dist/cli/commands/index.js.map +0 -1
  145. package/dist/cli/commands/update.d.ts +0 -6
  146. package/dist/cli/commands/update.d.ts.map +0 -1
  147. package/dist/cli/commands/update.js +0 -68
  148. package/dist/cli/commands/update.js.map +0 -1
  149. package/dist/cli/index.d.ts +0 -4
  150. package/dist/cli/index.d.ts.map +0 -1
  151. package/dist/cli/index.js +0 -61
  152. package/dist/cli/index.js.map +0 -1
  153. package/dist/cli/prompts/index.d.ts +0 -2
  154. package/dist/cli/prompts/index.d.ts.map +0 -1
  155. package/dist/cli/prompts/index.js +0 -18
  156. package/dist/cli/prompts/index.js.map +0 -1
  157. package/dist/cli/prompts/project-setup.d.ts +0 -5
  158. package/dist/cli/prompts/project-setup.d.ts.map +0 -1
  159. package/dist/cli/prompts/project-setup.js +0 -251
  160. package/dist/cli/prompts/project-setup.js.map +0 -1
  161. package/dist/cli/utils/git.d.ts +0 -9
  162. package/dist/cli/utils/git.d.ts.map +0 -1
  163. package/dist/cli/utils/git.js +0 -77
  164. package/dist/cli/utils/git.js.map +0 -1
  165. package/dist/cli/utils/index.d.ts +0 -5
  166. package/dist/cli/utils/index.d.ts.map +0 -1
  167. package/dist/cli/utils/index.js +0 -21
  168. package/dist/cli/utils/index.js.map +0 -1
  169. package/dist/cli/utils/logger.d.ts +0 -16
  170. package/dist/cli/utils/logger.d.ts.map +0 -1
  171. package/dist/cli/utils/logger.js +0 -55
  172. package/dist/cli/utils/logger.js.map +0 -1
  173. package/dist/cli/utils/package-manager.d.ts +0 -8
  174. package/dist/cli/utils/package-manager.d.ts.map +0 -1
  175. package/dist/cli/utils/package-manager.js +0 -92
  176. package/dist/cli/utils/package-manager.js.map +0 -1
  177. package/dist/cli/utils/spinner.d.ts +0 -7
  178. package/dist/cli/utils/spinner.d.ts.map +0 -1
  179. package/dist/cli/utils/spinner.js +0 -48
  180. package/dist/cli/utils/spinner.js.map +0 -1
  181. package/dist/cli/validators/dependencies.d.ts +0 -15
  182. package/dist/cli/validators/dependencies.d.ts.map +0 -1
  183. package/dist/cli/validators/dependencies.js +0 -108
  184. package/dist/cli/validators/dependencies.js.map +0 -1
  185. package/dist/cli/validators/index.d.ts +0 -3
  186. package/dist/cli/validators/index.d.ts.map +0 -1
  187. package/dist/cli/validators/index.js +0 -19
  188. package/dist/cli/validators/index.js.map +0 -1
  189. package/dist/cli/validators/project-name.d.ts +0 -5
  190. package/dist/cli/validators/project-name.d.ts.map +0 -1
  191. package/dist/cli/validators/project-name.js +0 -151
  192. package/dist/cli/validators/project-name.js.map +0 -1
  193. package/dist/generators/file-processor.d.ts +0 -28
  194. package/dist/generators/file-processor.d.ts.map +0 -1
  195. package/dist/generators/file-processor.js +0 -224
  196. package/dist/generators/file-processor.js.map +0 -1
  197. package/dist/generators/index.d.ts +0 -4
  198. package/dist/generators/index.d.ts.map +0 -1
  199. package/dist/generators/index.js +0 -20
  200. package/dist/generators/index.js.map +0 -1
  201. package/dist/generators/package-installer.d.ts +0 -29
  202. package/dist/generators/package-installer.d.ts.map +0 -1
  203. package/dist/generators/package-installer.js +0 -167
  204. package/dist/generators/package-installer.js.map +0 -1
@@ -0,0 +1,351 @@
1
+ 'use client'
2
+
3
+ import {
4
+ Card,
5
+ Button,
6
+ PageTransition,
7
+ MobileContainer,
8
+ ResponsiveGrid,
9
+ useAnimationTokens,
10
+ useGlassmorphism
11
+ } from '@digilogiclabs/saas-factory-ui'
12
+ import {
13
+ ArrowLeft,
14
+ CheckCircle,
15
+ AlertCircle,
16
+ ExternalLink,
17
+ Copy,
18
+ Database,
19
+ CreditCard,
20
+ Shield,
21
+ Video,
22
+ Key,
23
+ Settings,
24
+ BookOpen,
25
+ Zap,
26
+ Code2,
27
+ FileText,
28
+ Monitor
29
+ } from 'lucide-react'
30
+ import Link from 'next/link'
31
+ import { useState } from 'react'
32
+
33
+ export default function SetupPage() {
34
+ const animations = useAnimationTokens()
35
+ const glass = useGlassmorphism()
36
+ const [copiedVar, setCopiedVar] = useState<string | null>(null)
37
+
38
+ const projectName = "{{projectName}}"
39
+ const templateName = "Video Platform with Payments"
40
+ const templateDescription = "UI + Authentication + Payments + Video Features"
41
+
42
+ const envVars = [
43
+ { name: "NEXT_PUBLIC_SUPABASE_URL", example: "https://your-project.supabase.co", required: true },
44
+ { name: "NEXT_PUBLIC_SUPABASE_ANON_KEY", example: "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...", required: true },
45
+ { name: "SUPABASE_SERVICE_ROLE_KEY", example: "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...", required: false },
46
+ { name: "NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY", example: "pk_test_51234567890abcdef...", required: true },
47
+ { name: "STRIPE_SECRET_KEY", example: "sk_test_51234567890abcdef...", required: true },
48
+ { name: "STRIPE_WEBHOOK_SECRET", example: "whsec_1234567890abcdef...", required: true },
49
+ { name: "REPLICATE_API_TOKEN", example: "r8_1234567890abcdef...", required: false },
50
+ { name: "OPENAI_API_KEY", example: "sk-1234567890abcdef...", required: false }
51
+ ]
52
+
53
+ const copyToClipboard = async (text: string, varName: string) => {
54
+ await navigator.clipboard.writeText(text)
55
+ setCopiedVar(varName)
56
+ setTimeout(() => setCopiedVar(null), 2000)
57
+ }
58
+
59
+ return (
60
+ <PageTransition type="slide" direction="up" duration={300}>
61
+ <main className={`min-h-screen ${glass.background.primary} relative overflow-hidden`}>
62
+ <div className={`absolute inset-0 ${glass.background.accent} opacity-30`} />
63
+ <div className="relative z-10">
64
+ <MobileContainer className="py-8">
65
+ {/* Header */}
66
+ <div className="flex items-center justify-between mb-8">
67
+ <div className="flex items-center gap-4">
68
+ <Link href="/" className={`${glass.card} ${glass.border} p-2 rounded-xl ${animations.hover.scale}`}>
69
+ <ArrowLeft className="w-5 h-5" />
70
+ </Link>
71
+ <div>
72
+ <h1 className="text-2xl font-bold">Setup Guide</h1>
73
+ <p className="text-gray-600 dark:text-gray-300">{templateName}</p>
74
+ </div>
75
+ </div>
76
+ <div className={`${glass.card} ${glass.border} px-4 py-2 rounded-xl`}>
77
+ <span className="text-sm font-medium">{projectName}</span>
78
+ </div>
79
+ </div>
80
+
81
+ {/* Template Overview */}
82
+ <div className={`${glass.card} ${glass.border} rounded-2xl p-6 mb-8`}>
83
+ <div className="flex items-center gap-4 mb-4">
84
+ <div className={`w-12 h-12 rounded-xl bg-gradient-to-r from-red-500 to-purple-500 flex items-center justify-center`}>
85
+ <Video className="w-6 h-6 text-white" />
86
+ </div>
87
+ <div>
88
+ <h2 className="text-xl font-semibold">{templateName}</h2>
89
+ <p className="text-gray-600 dark:text-gray-300">{templateDescription}</p>
90
+ </div>
91
+ </div>
92
+ <div className="grid grid-cols-2 md:grid-cols-4 gap-4 mt-6">
93
+ <div className="text-center p-3 rounded-xl bg-blue-500/10">
94
+ <Shield className="w-6 h-6 text-blue-400 mx-auto mb-2" />
95
+ <div className="text-sm font-medium">Authentication</div>
96
+ </div>
97
+ <div className="text-center p-3 rounded-xl bg-green-500/10">
98
+ <CreditCard className="w-6 h-6 text-green-400 mx-auto mb-2" />
99
+ <div className="text-sm font-medium">Payments</div>
100
+ </div>
101
+ <div className="text-center p-3 rounded-xl bg-red-500/10">
102
+ <Monitor className="w-6 h-6 text-red-400 mx-auto mb-2" />
103
+ <div className="text-sm font-medium">Video Platform</div>
104
+ </div>
105
+ <div className="text-center p-3 rounded-xl bg-orange-500/10">
106
+ <Code2 className="w-6 h-6 text-orange-400 mx-auto mb-2" />
107
+ <div className="text-sm font-medium">Modern UI</div>
108
+ </div>
109
+ </div>
110
+ </div>
111
+
112
+ {/* Quick Start */}
113
+ <div className={`${glass.card} ${glass.border} rounded-2xl p-6 mb-8`}>
114
+ <h3 className="text-lg font-semibold mb-4 flex items-center gap-2">
115
+ <Zap className="w-5 h-5 text-yellow-400" />
116
+ Quick Start
117
+ </h3>
118
+ <div className="space-y-3 text-sm">
119
+ <div className="flex items-center gap-3">
120
+ <CheckCircle className="w-5 h-5 text-green-400" />
121
+ <span>1. Set up Supabase for database and authentication</span>
122
+ </div>
123
+ <div className="flex items-center gap-3">
124
+ <CheckCircle className="w-5 h-5 text-green-400" />
125
+ <span>2. Configure Stripe for payment processing</span>
126
+ </div>
127
+ <div className="flex items-center gap-3">
128
+ <CheckCircle className="w-5 h-5 text-green-400" />
129
+ <span>3. (Optional) Add video AI providers like Replicate</span>
130
+ </div>
131
+ <div className="flex items-center gap-3">
132
+ <CheckCircle className="w-5 h-5 text-green-400" />
133
+ <span>4. Configure environment variables below</span>
134
+ </div>
135
+ <div className="flex items-center gap-3">
136
+ <CheckCircle className="w-5 h-5 text-green-400" />
137
+ <span>5. Run <code className="px-2 py-1 bg-gray-800 rounded text-green-400">npm run dev</code></span>
138
+ </div>
139
+ </div>
140
+ </div>
141
+
142
+ {/* Environment Variables */}
143
+ <div className={`${glass.card} ${glass.border} rounded-2xl p-6 mb-8`}>
144
+ <h3 className="text-lg font-semibold mb-4 flex items-center gap-2">
145
+ <Key className="w-5 h-5 text-blue-400" />
146
+ Environment Variables
147
+ </h3>
148
+ <p className="text-sm text-gray-600 dark:text-gray-300 mb-4">
149
+ Copy these to your <code className="px-2 py-1 bg-gray-800 rounded">.env.local</code> file:
150
+ </p>
151
+ <div className="bg-gray-900 rounded-xl p-4 overflow-x-auto">
152
+ <pre className="text-sm text-green-400">
153
+ {envVars.map(envVar => (
154
+ `${envVar.name}=${envVar.example}${envVar.required ? ' # Required' : ' # Optional'}`
155
+ )).join('\n')}
156
+ </pre>
157
+ <button
158
+ onClick={() => copyToClipboard(
159
+ envVars.map(envVar => `${envVar.name}=${envVar.example}`).join('\n'),
160
+ 'all-env-vars'
161
+ )}
162
+ className="mt-3 flex items-center gap-2 text-xs text-gray-400 hover:text-white transition-colors"
163
+ >
164
+ <Copy className="w-4 h-4" />
165
+ {copiedVar === 'all-env-vars' ? 'Copied!' : 'Copy all environment variables'}
166
+ </button>
167
+ </div>
168
+ </div>
169
+
170
+ {/* Services Overview */}
171
+ <div className={`${glass.card} ${glass.border} rounded-2xl p-6 mb-8`}>
172
+ <h3 className="text-lg font-semibold mb-4 flex items-center gap-2">
173
+ <Settings className="w-5 h-5 text-gray-400" />
174
+ Required Services
175
+ </h3>
176
+ <div className="space-y-4">
177
+ {/* Supabase */}
178
+ <div className="flex items-center gap-4 p-4 bg-blue-500/10 rounded-xl">
179
+ <Database className="w-8 h-8 text-blue-400" />
180
+ <div className="flex-1">
181
+ <h4 className="font-semibold">Supabase</h4>
182
+ <p className="text-sm text-gray-600 dark:text-gray-300">Database and authentication</p>
183
+ </div>
184
+ <span className="px-3 py-1 bg-red-500/20 text-red-400 rounded-full text-xs">Required</span>
185
+ <a href="https://supabase.com/dashboard" className="text-blue-400 hover:text-blue-300">
186
+ <ExternalLink className="w-4 h-4" />
187
+ </a>
188
+ </div>
189
+
190
+ {/* Stripe */}
191
+ <div className="flex items-center gap-4 p-4 bg-green-500/10 rounded-xl">
192
+ <CreditCard className="w-8 h-8 text-green-400" />
193
+ <div className="flex-1">
194
+ <h4 className="font-semibold">Stripe</h4>
195
+ <p className="text-sm text-gray-600 dark:text-gray-300">Payment processing</p>
196
+ </div>
197
+ <span className="px-3 py-1 bg-red-500/20 text-red-400 rounded-full text-xs">Required</span>
198
+ <a href="https://dashboard.stripe.com" className="text-green-400 hover:text-green-300">
199
+ <ExternalLink className="w-4 h-4" />
200
+ </a>
201
+ </div>
202
+
203
+ {/* Video Services */}
204
+ <div className="flex items-center gap-4 p-4 bg-red-500/10 rounded-xl">
205
+ <Video className="w-8 h-8 text-red-400" />
206
+ <div className="flex-1">
207
+ <h4 className="font-semibold">Video Services</h4>
208
+ <p className="text-sm text-gray-600 dark:text-gray-300">Replicate, OpenAI for video generation</p>
209
+ </div>
210
+ <span className="px-3 py-1 bg-yellow-500/20 text-yellow-400 rounded-full text-xs">Optional</span>
211
+ </div>
212
+ </div>
213
+ </div>
214
+
215
+ {/* Database Setup */}
216
+ <div className={`${glass.card} ${glass.border} rounded-2xl p-6 mb-8`}>
217
+ <h3 className="text-lg font-semibold mb-4">Database Setup</h3>
218
+ <p className="text-sm text-gray-600 dark:text-gray-300 mb-4">
219
+ Run this SQL in your Supabase SQL editor to set up the required tables:
220
+ </p>
221
+ <div className="bg-gray-900 rounded-xl p-4 overflow-x-auto">
222
+ <pre className="text-xs text-green-400">
223
+ {`-- User profiles table
224
+ CREATE TABLE profiles (
225
+ id UUID REFERENCES auth.users(id) PRIMARY KEY,
226
+ email TEXT,
227
+ full_name TEXT,
228
+ avatar_url TEXT,
229
+ stripe_customer_id TEXT,
230
+ subscription_status TEXT DEFAULT 'inactive',
231
+ created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
232
+ );
233
+
234
+ -- Video content table
235
+ CREATE TABLE video_content (
236
+ id UUID DEFAULT gen_random_uuid() PRIMARY KEY,
237
+ user_id UUID REFERENCES profiles(id),
238
+ title TEXT NOT NULL,
239
+ description TEXT,
240
+ video_url TEXT,
241
+ thumbnail_url TEXT,
242
+ duration INTEGER,
243
+ file_size BIGINT,
244
+ resolution TEXT,
245
+ status TEXT DEFAULT 'processing',
246
+ created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
247
+ );
248
+
249
+ -- Enable RLS
250
+ ALTER TABLE profiles ENABLE ROW LEVEL SECURITY;
251
+ ALTER TABLE video_content ENABLE ROW LEVEL SECURITY;
252
+
253
+ -- RLS Policies
254
+ CREATE POLICY "Users can view own profile" ON profiles FOR SELECT USING (auth.uid() = id);
255
+ CREATE POLICY "Users can update own profile" ON profiles FOR UPDATE USING (auth.uid() = id);
256
+ CREATE POLICY "Users can manage own video content" ON video_content FOR ALL USING (auth.uid() = user_id);`}
257
+ </pre>
258
+ <button
259
+ onClick={() => copyToClipboard(`-- User profiles table
260
+ CREATE TABLE profiles (
261
+ id UUID REFERENCES auth.users(id) PRIMARY KEY,
262
+ email TEXT,
263
+ full_name TEXT,
264
+ avatar_url TEXT,
265
+ stripe_customer_id TEXT,
266
+ subscription_status TEXT DEFAULT 'inactive',
267
+ created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
268
+ );
269
+
270
+ -- Video content table
271
+ CREATE TABLE video_content (
272
+ id UUID DEFAULT gen_random_uuid() PRIMARY KEY,
273
+ user_id UUID REFERENCES profiles(id),
274
+ title TEXT NOT NULL,
275
+ description TEXT,
276
+ video_url TEXT,
277
+ thumbnail_url TEXT,
278
+ duration INTEGER,
279
+ file_size BIGINT,
280
+ resolution TEXT,
281
+ status TEXT DEFAULT 'processing',
282
+ created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
283
+ );
284
+
285
+ -- Enable RLS
286
+ ALTER TABLE profiles ENABLE ROW LEVEL SECURITY;
287
+ ALTER TABLE video_content ENABLE ROW LEVEL SECURITY;
288
+
289
+ -- RLS Policies
290
+ CREATE POLICY "Users can view own profile" ON profiles FOR SELECT USING (auth.uid() = id);
291
+ CREATE POLICY "Users can update own profile" ON profiles FOR UPDATE USING (auth.uid() = id);
292
+ CREATE POLICY "Users can manage own video content" ON video_content FOR ALL USING (auth.uid() = user_id);`, 'sql-setup')}
293
+ className="mt-3 flex items-center gap-2 text-xs text-gray-400 hover:text-white transition-colors"
294
+ >
295
+ <Copy className="w-4 h-4" />
296
+ {copiedVar === 'sql-setup' ? 'Copied!' : 'Copy SQL setup'}
297
+ </button>
298
+ </div>
299
+ </div>
300
+
301
+ {/* Additional Resources */}
302
+ <div className={`${glass.card} ${glass.border} rounded-2xl p-6 mt-8`}>
303
+ <h3 className="text-lg font-semibold mb-4 flex items-center gap-2">
304
+ <BookOpen className="w-5 h-5 text-green-400" />
305
+ Additional Resources
306
+ </h3>
307
+ <div className="grid grid-cols-1 md:grid-cols-2 gap-4">
308
+ <a
309
+ href="https://docs.digilogiclabs.com"
310
+ className={`${glass.card} ${glass.border} p-4 rounded-xl ${animations.hover.scale} block`}
311
+ >
312
+ <FileText className="w-8 h-8 text-blue-400 mb-2" />
313
+ <h4 className="font-medium">Documentation</h4>
314
+ <p className="text-sm text-gray-600 dark:text-gray-300">Complete guides and API reference</p>
315
+ </a>
316
+ <a
317
+ href="https://github.com/digilogiclabs/examples"
318
+ className={`${glass.card} ${glass.border} p-4 rounded-xl ${animations.hover.scale} block`}
319
+ >
320
+ <Code2 className="w-8 h-8 text-purple-400 mb-2" />
321
+ <h4 className="font-medium">Examples</h4>
322
+ <p className="text-sm text-gray-600 dark:text-gray-300">Sample projects and code snippets</p>
323
+ </a>
324
+ </div>
325
+ </div>
326
+
327
+ {/* Support */}
328
+ <div className={`${glass.card} ${glass.border} rounded-2xl p-6 mt-8 text-center`}>
329
+ <h3 className="text-lg font-semibold mb-4">Need Help?</h3>
330
+ <p className="text-gray-600 dark:text-gray-300 mb-4">
331
+ Our community and support team are here to help you get started.
332
+ </p>
333
+ <div className="flex justify-center gap-4">
334
+ <Button variant="outline" size="sm" asChild>
335
+ <a href="https://discord.gg/digilogiclabs" target="_blank" rel="noopener noreferrer">
336
+ Join Discord
337
+ </a>
338
+ </Button>
339
+ <Button size="sm" asChild>
340
+ <a href="https://docs.digilogiclabs.com/support" target="_blank" rel="noopener noreferrer">
341
+ Get Support
342
+ </a>
343
+ </Button>
344
+ </div>
345
+ </div>
346
+ </MobileContainer>
347
+ </div>
348
+ </main>
349
+ </PageTransition>
350
+ )
351
+ }
@@ -1,8 +1,8 @@
1
1
  'use client';
2
2
 
3
- import React from 'react';
3
+ import React, { useState } from 'react';
4
4
  import Link from 'next/link';
5
- import { LogOut, CreditCard, User, Settings, Home, Video, Film, Play } from 'lucide-react';
5
+ import { LogOut, CreditCard, User, Settings, Home, Video, Film, Play, Menu, X } from 'lucide-react';
6
6
  import { useAuth } from '@digilogiclabs/saas-factory-auth';
7
7
  import {
8
8
  ResponsiveHeader,
@@ -17,27 +17,10 @@ export function Header() {
17
17
  const { user, signOut } = useAuth();
18
18
  const networkInfo = useNetworkInfo();
19
19
  const isOnline = useOfflineState();
20
+ const [mobileMenuOpen, setMobileMenuOpen] = useState(false);
20
21
 
21
22
  const projectName = "{{titleCaseName}}";
22
23
 
23
- const headerConfig = {
24
- logo: {
25
- text: projectName,
26
- href: '/',
27
- className: 'text-2xl font-bold flex items-center gap-2',
28
- icon: <Play className="w-6 h-6" />
29
- },
30
- networkStatus: {
31
- isOnline,
32
- connectionType: networkInfo?.effectiveType,
33
- showIndicator: true,
34
- customLabels: {
35
- online: 'Streaming Ready',
36
- offline: 'Offline Mode'
37
- }
38
- }
39
- };
40
-
41
24
  const handleSignOut = async () => {
42
25
  try {
43
26
  await signOut();
@@ -111,6 +94,9 @@ export function Header() {
111
94
  }
112
95
  ];
113
96
 
97
+ // Filter navigation items based on user authentication
98
+ const visibleNavItems = navigationItems.filter(item => !item.protected || user);
99
+
114
100
  return (
115
101
  <>
116
102
  {/* Network Status Banner */}
@@ -138,23 +124,122 @@ export function Header() {
138
124
  </div>
139
125
  )}
140
126
 
141
- <ResponsiveHeader
142
- logo={headerConfig.logo}
143
- navigationItems={navigationItems}
144
- actions={authActions}
145
- showThemeToggle={true}
146
- user={user}
147
- mobileBreakpoint="md"
148
- className="bg-white dark:bg-gray-800 shadow-md"
149
- hamburgerIcon={
150
- <HamburgerIcon
151
- className="w-6 h-6 text-gray-600 dark:text-gray-300"
152
- animated={true}
153
- hapticFeedback={true}
154
- />
155
- }
156
- networkStatus={headerConfig.networkStatus}
157
- />
127
+ {/* Responsive Header */}
128
+ <header className="bg-white dark:bg-gray-800 shadow-md border-b">
129
+ <div className="container mx-auto px-4">
130
+ <div className="flex justify-between items-center h-16">
131
+ {/* Logo */}
132
+ <Link href="/" className="text-2xl font-bold text-gray-900 dark:text-white flex items-center gap-2">
133
+ <Play className="w-6 h-6" />
134
+ {projectName}
135
+ </Link>
136
+
137
+ {/* Desktop Navigation */}
138
+ <nav className="hidden md:flex items-center gap-6">
139
+ {visibleNavItems.map((item) => (
140
+ <Link
141
+ key={item.href}
142
+ href={item.href}
143
+ className="flex items-center gap-2 text-gray-600 dark:text-gray-300 hover:text-gray-900 dark:hover:text-white transition-colors"
144
+ >
145
+ <item.icon className="w-4 h-4" />
146
+ {item.label}
147
+ </Link>
148
+ ))}
149
+
150
+ {/* Auth Actions */}
151
+ <div className="flex items-center gap-2 ml-4 pl-4 border-l border-gray-200 dark:border-gray-600">
152
+ <ThemeToggle />
153
+ {user ? (
154
+ <button
155
+ onClick={handleSignOut}
156
+ className="flex items-center gap-2 px-3 py-2 text-gray-600 dark:text-gray-300 hover:text-gray-900 dark:hover:text-white transition-colors"
157
+ >
158
+ <LogOut className="w-4 h-4" />
159
+ Sign Out
160
+ </button>
161
+ ) : (
162
+ <div className="flex items-center gap-2">
163
+ <Link
164
+ href="/login"
165
+ className="text-gray-600 dark:text-gray-300 hover:text-gray-900 dark:hover:text-white transition-colors"
166
+ >
167
+ Login
168
+ </Link>
169
+ <Link
170
+ href="/signup"
171
+ className="px-4 py-2 bg-blue-600 text-white rounded hover:bg-blue-700 transition-colors"
172
+ >
173
+ Sign Up
174
+ </Link>
175
+ </div>
176
+ )}
177
+ </div>
178
+ </nav>
179
+
180
+ {/* Mobile Menu Button */}
181
+ <button
182
+ onClick={() => setMobileMenuOpen(!mobileMenuOpen)}
183
+ className="md:hidden p-2 text-gray-600 dark:text-gray-300 hover:text-gray-900 dark:hover:text-white"
184
+ >
185
+ {mobileMenuOpen ? <X className="w-6 h-6" /> : <Menu className="w-6 h-6" />}
186
+ </button>
187
+ </div>
188
+
189
+ {/* Mobile Menu */}
190
+ {mobileMenuOpen && (
191
+ <div className="md:hidden border-t border-gray-200 dark:border-gray-600 py-4">
192
+ <nav className="flex flex-col space-y-3">
193
+ {visibleNavItems.map((item) => (
194
+ <Link
195
+ key={item.href}
196
+ href={item.href}
197
+ onClick={() => setMobileMenuOpen(false)}
198
+ className="flex items-center gap-3 px-3 py-2 text-gray-600 dark:text-gray-300 hover:text-gray-900 dark:hover:text-white hover:bg-gray-100 dark:hover:bg-gray-700 rounded transition-colors"
199
+ >
200
+ <item.icon className="w-4 h-4" />
201
+ {item.label}
202
+ </Link>
203
+ ))}
204
+
205
+ {/* Mobile Auth Actions */}
206
+ <div className="flex items-center gap-3 px-3 pt-3 border-t border-gray-200 dark:border-gray-600">
207
+ <ThemeToggle />
208
+ {user ? (
209
+ <button
210
+ onClick={() => {
211
+ handleSignOut();
212
+ setMobileMenuOpen(false);
213
+ }}
214
+ className="flex items-center gap-2 px-3 py-2 text-gray-600 dark:text-gray-300 hover:text-gray-900 dark:hover:text-white hover:bg-gray-100 dark:hover:bg-gray-700 rounded transition-colors"
215
+ >
216
+ <LogOut className="w-4 h-4" />
217
+ Sign Out
218
+ </button>
219
+ ) : (
220
+ <div className="flex flex-col gap-2 w-full">
221
+ <Link
222
+ href="/login"
223
+ onClick={() => setMobileMenuOpen(false)}
224
+ className="text-center py-2 text-gray-600 dark:text-gray-300 hover:text-gray-900 dark:hover:text-white hover:bg-gray-100 dark:hover:bg-gray-700 rounded transition-colors"
225
+ >
226
+ Login
227
+ </Link>
228
+ <Link
229
+ href="/signup"
230
+ onClick={() => setMobileMenuOpen(false)}
231
+ className="text-center py-2 bg-blue-600 text-white rounded hover:bg-blue-700 transition-colors"
232
+ >
233
+ Sign Up
234
+ </Link>
235
+ </div>
236
+ )}
237
+ </div>
238
+ </nav>
239
+ </div>
240
+ )}
241
+ </div>
242
+ </header>
158
243
  </>
159
244
  );
160
245
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@digilogiclabs/create-saas-app",
3
- "version": "1.10.6",
3
+ "version": "1.12.0",
4
4
  "description": "Create modern SaaS applications with Digi Logic Labs packages",
5
5
  "main": "dist/cli/index.js",
6
6
  "bin": {
@@ -0,0 +1,21 @@
1
+ {
2
+ "name": "{{projectName}}",
3
+ "description": "{{description}} - Authentication Platform built with Digi Logic Labs packages",
4
+ "include": [
5
+ "src/**/*",
6
+ "*.md",
7
+ "*.json",
8
+ "*.js",
9
+ "*.ts",
10
+ ".env.example"
11
+ ],
12
+ "exclude": [
13
+ "node_modules/**/*",
14
+ ".next/**/*",
15
+ "dist/**/*",
16
+ "build/**/*",
17
+ "*.log",
18
+ ".claude"
19
+ ],
20
+ "instructions": "You are helping develop an Authentication Platform using Next.js 15, TypeScript, and Digi Logic Labs packages.\n\n## Project Architecture\n- **Framework**: Next.js 15.3 with App Router\n- **Database**: Supabase (PostgreSQL with real-time features)\n- **Styling**: Tailwind CSS v4 with glassmorphism design system\n- **Authentication**: Supabase Auth with @digilogiclabs/saas-factory-auth\n\n## Key Packages\n- **@digilogiclabs/saas-factory-auth**: Authentication components and hooks with Supabase integration\n- **@digilogiclabs/saas-factory-ui**: Modern UI components with glassmorphism and responsive design\n\n## Development Guidelines\n1. Follow Next.js 15 best practices with Server Components by default\n2. Use TypeScript strictly - all components should be typed\n3. Implement proper error boundaries and loading states\n4. Follow the glassmorphism design system from saas-factory-ui\n5. Use Server Actions for mutations and API routes for complex logic\n6. Always check authentication state with useAuth hook\n\n## File Organization\n- Components in /src/components with feature-based folders\n- Server actions in /src/server/actions\n- API routes in /src/app/api\n- Database queries in /src/server/queries\n- Types in /src/types\n\n## Testing\n- Use Vitest for unit tests\n- Test business logic and error states\n- Mock external services (Supabase)\n\nRemember to consult the context.md file for detailed package documentation and examples."
21
+ }
@@ -0,0 +1,105 @@
1
+ # {{projectName}} - Development Context
2
+
3
+ This project is an Authentication Platform built with modern technologies and Digi Logic Labs packages.
4
+
5
+ ## Architecture Overview
6
+
7
+ ### Core Technologies
8
+ - **Next.js 15.3**: App Router, Server Components, Server Actions
9
+ - **TypeScript**: Strict typing throughout
10
+ - **Tailwind CSS v4**: Design tokens, glassmorphism system
11
+ - **Supabase**: Database, authentication, real-time features
12
+
13
+ ### Package Integration
14
+
15
+ #### @digilogiclabs/saas-factory-auth
16
+ Authentication components and hooks with Supabase integration
17
+
18
+ **Key Exports**: useAuth, AuthProvider, LoginForm, SignupForm
19
+ **Documentation**: https://docs.digilogiclabs.com/packages/auth
20
+
21
+ #### @digilogiclabs/saas-factory-ui
22
+ Modern UI components with glassmorphism and responsive design
23
+
24
+ **Key Exports**: Button, Card, MobileContainer, PageTransition, ResponsiveGrid
25
+ **Documentation**: https://docs.digilogiclabs.com/packages/ui
26
+
27
+ ## Environment Configuration
28
+
29
+ Required environment variables:
30
+ ```bash
31
+ NEXT_PUBLIC_SUPABASE_URL=your_supabase_url
32
+ NEXT_PUBLIC_SUPABASE_ANON_KEY=your_supabase_anon_key
33
+ SUPABASE_SERVICE_ROLE_KEY=your_supabase_service_key
34
+ ```
35
+
36
+ ## Database Schema
37
+
38
+ Key tables:
39
+ - **profiles**: User profile information
40
+
41
+ ## Common Patterns
42
+
43
+ ### Authentication Flow
44
+ ```typescript
45
+ import { useAuth } from '@digilogiclabs/saas-factory-auth'
46
+
47
+ export function ProtectedComponent() {
48
+ const { user, loading } = useAuth()
49
+
50
+ if (loading) return <LoadingSpinner />
51
+ if (!user) return <LoginPrompt />
52
+
53
+ return <UserContent user={user} />
54
+ }
55
+ ```
56
+
57
+ ### UI Components
58
+ ```typescript
59
+ import {
60
+ Card,
61
+ Button,
62
+ PageTransition,
63
+ useGlassmorphism
64
+ } from '@digilogiclabs/saas-factory-ui'
65
+
66
+ export function ExampleComponent() {
67
+ const glass = useGlassmorphism()
68
+
69
+ return (
70
+ <PageTransition type="fade">
71
+ <Card className={`${glass.card} ${glass.border}`}>
72
+ <Button variant="default">Action</Button>
73
+ </Card>
74
+ </PageTransition>
75
+ )
76
+ }
77
+ ```
78
+
79
+ ## Development Workflow
80
+
81
+ 1. **Setup**: Run setup guide at /setup
82
+ 2. **Development**: `npm run dev` with hot reload
83
+ 3. **Testing**: `npm run test` with Vitest
84
+ 4. **Building**: `npm run build` for production
85
+ 5. **Deployment**: See deployment guide at /dev-setup
86
+
87
+ ## Troubleshooting
88
+
89
+ ### Common Issues
90
+ - **Environment Variables**: Check .env.local file exists and variables are correct
91
+ - **Database Connection**: Verify Supabase project settings and RLS policies
92
+
93
+ ### Debug Commands
94
+ ```bash
95
+ npm run type-check # TypeScript validation
96
+ npm run lint # ESLint validation
97
+ npm run test # Run test suite
98
+ ```
99
+
100
+ ## Resources
101
+
102
+ - **Package Documentation**: https://docs.digilogiclabs.com
103
+ - **Support Discord**: https://discord.gg/digilogiclabs
104
+ - **Example Projects**: https://github.com/digilogiclabs/examples
105
+ - **Setup Guide**: /setup page in this application