@digilogiclabs/create-saas-app 1.1.1 → 1.3.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 (224) hide show
  1. package/CHANGELOG.md +7 -7
  2. package/README.md +5 -5
  3. package/bin/index.js +36 -36
  4. package/dist/.tsbuildinfo +1 -1
  5. package/dist/index.js +64 -20
  6. package/dist/index.js.map +1 -1
  7. package/dist/templates/mobile/base/template/.env.example +15 -15
  8. package/dist/templates/mobile/base/template/app/checkout.tsx +20 -20
  9. package/dist/templates/web/base/template/src/app/checkout/page.tsx +28 -28
  10. package/dist/templates/web/base/template/src/app/page.tsx +1 -1
  11. package/dist/templates/web/ui-auth/template/next.config.js +12 -0
  12. package/dist/templates/web/ui-auth/template/package.json +40 -0
  13. package/dist/templates/web/ui-auth/template/postcss.config.js +7 -0
  14. package/dist/templates/web/ui-auth/template/src/app/auth/callback/route.ts +12 -0
  15. package/{src/templates/web/web-ui-package → dist/templates/web/ui-auth}/template/src/app/checkout/page.tsx +25 -28
  16. package/dist/templates/web/ui-auth/template/src/app/globals.css +42 -0
  17. package/dist/templates/web/ui-auth/template/src/app/layout.tsx +29 -0
  18. package/dist/templates/web/ui-auth/template/src/app/login/page.tsx +109 -0
  19. package/dist/templates/web/ui-auth/template/src/app/page.tsx +129 -0
  20. package/dist/templates/web/ui-auth/template/src/app/signup/page.tsx +128 -0
  21. package/dist/templates/web/ui-auth/template/src/components/providers/app-providers.tsx +25 -0
  22. package/{src/templates/web/web-ui-package → dist/templates/web/ui-auth}/template/src/components/shared/header.tsx +17 -8
  23. package/dist/templates/web/ui-auth/template/src/components/ui/badge.tsx +36 -0
  24. package/dist/templates/web/ui-auth/template/src/lib/utils.ts +7 -0
  25. package/dist/templates/web/ui-auth/template/tailwind.config.js +77 -0
  26. package/dist/templates/web/ui-auth/template/tsconfig.json +33 -0
  27. package/dist/templates/web/ui-auth-payments/template/README.md +165 -0
  28. package/dist/templates/web/ui-auth-payments/template/next.config.js +12 -0
  29. package/dist/templates/web/ui-auth-payments/template/package.json +42 -0
  30. package/dist/templates/web/ui-auth-payments/template/postcss.config.js +7 -0
  31. package/dist/templates/web/ui-auth-payments/template/src/app/auth/callback/route.ts +12 -0
  32. package/dist/templates/web/ui-auth-payments/template/src/app/billing/page.tsx +211 -0
  33. package/dist/templates/web/ui-auth-payments/template/src/app/checkout/page.tsx +142 -0
  34. package/dist/templates/web/ui-auth-payments/template/src/app/globals.css +42 -0
  35. package/dist/templates/web/ui-auth-payments/template/src/app/layout.tsx +29 -0
  36. package/dist/templates/web/ui-auth-payments/template/src/app/login/page.tsx +109 -0
  37. package/dist/templates/web/ui-auth-payments/template/src/app/page.tsx +143 -0
  38. package/dist/templates/web/ui-auth-payments/template/src/app/signup/page.tsx +128 -0
  39. package/dist/templates/web/ui-auth-payments/template/src/components/providers/app-providers.tsx +28 -0
  40. package/dist/templates/web/ui-auth-payments/template/src/components/shared/header.tsx +60 -0
  41. package/dist/templates/web/ui-auth-payments/template/src/components/ui/badge.tsx +36 -0
  42. package/dist/templates/web/ui-auth-payments/template/src/lib/utils.ts +7 -0
  43. package/dist/templates/web/ui-auth-payments/template/tailwind.config.js +77 -0
  44. package/dist/templates/web/ui-auth-payments/template/tsconfig.json +33 -0
  45. package/dist/templates/web/ui-auth-payments-audio/template/README.md +187 -0
  46. package/{src/templates/web/web-ui-package → dist/templates/web/ui-auth-payments-audio}/template/next.config.js +0 -3
  47. package/dist/templates/web/ui-auth-payments-audio/template/package.json +42 -0
  48. package/dist/templates/web/ui-auth-payments-audio/template/src/app/auth/callback/route.ts +12 -0
  49. package/dist/templates/web/ui-auth-payments-audio/template/src/app/billing/page.tsx +211 -0
  50. package/dist/templates/web/ui-auth-payments-audio/template/src/app/checkout/page.tsx +142 -0
  51. package/dist/templates/web/ui-auth-payments-audio/template/src/app/login/page.tsx +109 -0
  52. package/dist/templates/web/ui-auth-payments-audio/template/src/app/page.tsx +181 -0
  53. package/dist/templates/web/ui-auth-payments-audio/template/src/app/signup/page.tsx +128 -0
  54. package/dist/templates/web/ui-auth-payments-audio/template/src/components/providers/app-providers.tsx +28 -0
  55. package/dist/templates/web/ui-auth-payments-audio/template/src/components/shared/header.tsx +60 -0
  56. package/{src/templates/web/web-ui-package → dist/templates/web/ui-auth-payments-audio}/template/tailwind.config.js +1 -1
  57. package/dist/templates/web/ui-auth-payments-video/template/README.md +190 -0
  58. package/dist/templates/web/{web-ui-package → ui-auth-payments-video}/template/next.config.js +0 -3
  59. package/dist/templates/web/ui-auth-payments-video/template/package.json +42 -0
  60. package/dist/templates/web/ui-auth-payments-video/template/src/app/auth/callback/route.ts +12 -0
  61. package/dist/templates/web/ui-auth-payments-video/template/src/app/billing/page.tsx +211 -0
  62. package/dist/templates/web/ui-auth-payments-video/template/src/app/checkout/page.tsx +142 -0
  63. package/dist/templates/web/ui-auth-payments-video/template/src/app/login/page.tsx +109 -0
  64. package/dist/templates/web/ui-auth-payments-video/template/src/app/page.tsx +187 -0
  65. package/dist/templates/web/ui-auth-payments-video/template/src/app/signup/page.tsx +128 -0
  66. package/dist/templates/web/ui-auth-payments-video/template/src/components/providers/app-providers.tsx +28 -0
  67. package/dist/templates/web/ui-auth-payments-video/template/src/components/shared/header.tsx +60 -0
  68. package/dist/templates/web/{web-ui-package → ui-auth-payments-video}/template/tailwind.config.js +1 -1
  69. package/dist/templates/web/ui-only/template/next.config.js +12 -0
  70. package/dist/templates/web/{web-ui-package → ui-only}/template/package.json +3 -3
  71. package/dist/templates/web/ui-only/template/postcss.config.js +7 -0
  72. package/dist/templates/web/ui-only/template/src/app/auth/callback/route.ts +12 -0
  73. package/dist/templates/web/{web-ui-package → ui-only}/template/src/app/checkout/page.tsx +25 -28
  74. package/dist/templates/web/ui-only/template/src/app/globals.css +42 -0
  75. package/dist/templates/web/ui-only/template/src/app/layout.tsx +29 -0
  76. package/dist/templates/web/ui-only/template/src/app/login/page.tsx +63 -0
  77. package/dist/templates/web/ui-only/template/src/app/signup/page.tsx +79 -0
  78. package/dist/templates/web/ui-only/template/src/components/providers/app-providers.tsx +22 -0
  79. package/dist/templates/web/{web-ui-package → ui-only}/template/src/components/shared/header.tsx +17 -8
  80. package/dist/templates/web/ui-only/template/src/components/ui/badge.tsx +36 -0
  81. package/dist/templates/web/ui-only/template/src/lib/utils.ts +7 -0
  82. package/dist/templates/web/ui-only/template/tailwind.config.js +77 -0
  83. package/dist/templates/web/ui-only/template/tsconfig.json +33 -0
  84. package/dist/templates/web/ui-package-test/template/package.json +2 -2
  85. package/package.json +2 -2
  86. package/src/templates/mobile/base/template/.env.example +15 -15
  87. package/src/templates/mobile/base/template/app/checkout.tsx +20 -20
  88. package/src/templates/web/base/template/src/app/checkout/page.tsx +28 -28
  89. package/src/templates/web/base/template/src/app/page.tsx +1 -1
  90. package/src/templates/web/ui-auth/template/README.md +68 -0
  91. package/src/templates/web/ui-auth/template/next.config.js +12 -0
  92. package/src/templates/web/ui-auth/template/package.json +40 -0
  93. package/src/templates/web/ui-auth/template/postcss.config.js +7 -0
  94. package/src/templates/web/ui-auth/template/src/app/auth/callback/route.ts +12 -0
  95. package/src/templates/web/ui-auth/template/src/app/checkout/page.tsx +25 -0
  96. package/src/templates/web/ui-auth/template/src/app/globals.css +42 -0
  97. package/src/templates/web/ui-auth/template/src/app/layout.tsx +29 -0
  98. package/src/templates/web/ui-auth/template/src/app/login/page.tsx +109 -0
  99. package/src/templates/web/ui-auth/template/src/app/page.tsx +129 -0
  100. package/src/templates/web/ui-auth/template/src/app/signup/page.tsx +128 -0
  101. package/src/templates/web/ui-auth/template/src/components/providers/app-providers.tsx +25 -0
  102. package/src/templates/web/ui-auth/template/src/components/shared/header.tsx +51 -0
  103. package/src/templates/web/ui-auth/template/src/components/ui/badge.tsx +36 -0
  104. package/src/templates/web/ui-auth/template/src/lib/utils.ts +7 -0
  105. package/src/templates/web/ui-auth/template/tailwind.config.js +77 -0
  106. package/src/templates/web/ui-auth/template/tsconfig.json +33 -0
  107. package/src/templates/web/ui-auth-payments/template/README.md +165 -0
  108. package/src/templates/web/ui-auth-payments/template/next.config.js +12 -0
  109. package/src/templates/web/ui-auth-payments/template/package.json +42 -0
  110. package/src/templates/web/ui-auth-payments/template/postcss.config.js +7 -0
  111. package/src/templates/web/ui-auth-payments/template/src/app/auth/callback/route.ts +12 -0
  112. package/src/templates/web/ui-auth-payments/template/src/app/billing/page.tsx +211 -0
  113. package/src/templates/web/ui-auth-payments/template/src/app/checkout/page.tsx +142 -0
  114. package/src/templates/web/ui-auth-payments/template/src/app/globals.css +42 -0
  115. package/src/templates/web/ui-auth-payments/template/src/app/layout.tsx +29 -0
  116. package/src/templates/web/ui-auth-payments/template/src/app/login/page.tsx +109 -0
  117. package/src/templates/web/ui-auth-payments/template/src/app/page.tsx +143 -0
  118. package/src/templates/web/ui-auth-payments/template/src/app/signup/page.tsx +128 -0
  119. package/src/templates/web/ui-auth-payments/template/src/components/providers/app-providers.tsx +28 -0
  120. package/src/templates/web/ui-auth-payments/template/src/components/shared/header.tsx +60 -0
  121. package/src/templates/web/ui-auth-payments/template/src/components/ui/badge.tsx +36 -0
  122. package/src/templates/web/ui-auth-payments/template/src/lib/utils.ts +7 -0
  123. package/src/templates/web/ui-auth-payments/template/tailwind.config.js +77 -0
  124. package/src/templates/web/ui-auth-payments/template/tsconfig.json +33 -0
  125. package/src/templates/web/ui-auth-payments-audio/template/README.md +187 -0
  126. package/src/templates/web/ui-auth-payments-audio/template/next.config.js +12 -0
  127. package/src/templates/web/ui-auth-payments-audio/template/package.json +42 -0
  128. package/src/templates/web/ui-auth-payments-audio/template/postcss.config.js +7 -0
  129. package/src/templates/web/ui-auth-payments-audio/template/src/app/auth/callback/route.ts +12 -0
  130. package/src/templates/web/ui-auth-payments-audio/template/src/app/billing/page.tsx +211 -0
  131. package/src/templates/web/ui-auth-payments-audio/template/src/app/checkout/page.tsx +142 -0
  132. package/src/templates/web/ui-auth-payments-audio/template/src/app/globals.css +42 -0
  133. package/src/templates/web/ui-auth-payments-audio/template/src/app/layout.tsx +29 -0
  134. package/src/templates/web/ui-auth-payments-audio/template/src/app/login/page.tsx +109 -0
  135. package/src/templates/web/ui-auth-payments-audio/template/src/app/page.tsx +181 -0
  136. package/src/templates/web/ui-auth-payments-audio/template/src/app/signup/page.tsx +128 -0
  137. package/src/templates/web/ui-auth-payments-audio/template/src/components/providers/app-providers.tsx +28 -0
  138. package/src/templates/web/ui-auth-payments-audio/template/src/components/shared/header.tsx +60 -0
  139. package/src/templates/web/ui-auth-payments-audio/template/src/components/ui/badge.tsx +36 -0
  140. package/src/templates/web/ui-auth-payments-audio/template/src/lib/utils.ts +7 -0
  141. package/src/templates/web/ui-auth-payments-audio/template/tailwind.config.js +77 -0
  142. package/src/templates/web/ui-auth-payments-audio/template/tsconfig.json +33 -0
  143. package/src/templates/web/ui-auth-payments-video/template/README.md +190 -0
  144. package/src/templates/web/ui-auth-payments-video/template/next.config.js +12 -0
  145. package/src/templates/web/ui-auth-payments-video/template/package.json +42 -0
  146. package/src/templates/web/ui-auth-payments-video/template/postcss.config.js +7 -0
  147. package/src/templates/web/ui-auth-payments-video/template/src/app/auth/callback/route.ts +12 -0
  148. package/src/templates/web/ui-auth-payments-video/template/src/app/billing/page.tsx +211 -0
  149. package/src/templates/web/ui-auth-payments-video/template/src/app/checkout/page.tsx +142 -0
  150. package/src/templates/web/ui-auth-payments-video/template/src/app/globals.css +42 -0
  151. package/src/templates/web/ui-auth-payments-video/template/src/app/layout.tsx +29 -0
  152. package/src/templates/web/ui-auth-payments-video/template/src/app/login/page.tsx +109 -0
  153. package/src/templates/web/ui-auth-payments-video/template/src/app/page.tsx +187 -0
  154. package/src/templates/web/ui-auth-payments-video/template/src/app/signup/page.tsx +128 -0
  155. package/src/templates/web/ui-auth-payments-video/template/src/components/providers/app-providers.tsx +28 -0
  156. package/src/templates/web/ui-auth-payments-video/template/src/components/shared/header.tsx +60 -0
  157. package/src/templates/web/ui-auth-payments-video/template/src/components/ui/badge.tsx +36 -0
  158. package/src/templates/web/ui-auth-payments-video/template/src/lib/utils.ts +7 -0
  159. package/src/templates/web/ui-auth-payments-video/template/tailwind.config.js +77 -0
  160. package/src/templates/web/ui-auth-payments-video/template/tsconfig.json +33 -0
  161. package/src/templates/web/ui-only/template/.env.example +15 -0
  162. package/src/templates/web/ui-only/template/README.md +68 -0
  163. package/src/templates/web/ui-only/template/next.config.js +12 -0
  164. package/src/templates/web/{web-ui-package → ui-only}/template/package.json +3 -3
  165. package/src/templates/web/ui-only/template/postcss.config.js +7 -0
  166. package/src/templates/web/ui-only/template/src/app/auth/callback/route.ts +12 -0
  167. package/src/templates/web/ui-only/template/src/app/checkout/page.tsx +25 -0
  168. package/src/templates/web/ui-only/template/src/app/globals.css +42 -0
  169. package/src/templates/web/ui-only/template/src/app/layout.tsx +29 -0
  170. package/src/templates/web/ui-only/template/src/app/login/page.tsx +63 -0
  171. package/src/templates/web/ui-only/template/src/app/signup/page.tsx +79 -0
  172. package/src/templates/web/ui-only/template/src/components/providers/app-providers.tsx +22 -0
  173. package/src/templates/web/ui-only/template/src/components/shared/header.tsx +51 -0
  174. package/src/templates/web/ui-only/template/src/components/ui/badge.tsx +36 -0
  175. package/src/templates/web/ui-only/template/src/lib/utils.ts +7 -0
  176. package/src/templates/web/ui-only/template/tailwind.config.js +77 -0
  177. package/src/templates/web/ui-only/template/tsconfig.json +33 -0
  178. package/src/templates/web/ui-only/template.backup/.env.example +15 -0
  179. package/{dist/mobile/base/template → src/templates/web/ui-only/template.backup.20250817}/.env.example +15 -15
  180. package/src/templates/web/ui-package-test/template/package.json +2 -2
  181. package/dist/templates/web/web-ui-package/template/src/app/auth/callback/route.ts +0 -18
  182. package/dist/templates/web/web-ui-package/template/src/app/login/page.tsx +0 -39
  183. package/dist/templates/web/web-ui-package/template/src/app/signup/page.tsx +0 -39
  184. package/dist/templates/web/web-ui-package/template/src/components/providers/app-providers.tsx +0 -29
  185. package/src/templates/web/web-ui-package/template/.eslintrc.js +0 -8
  186. package/src/templates/web/web-ui-package/template/src/app/auth/callback/route.ts +0 -18
  187. package/src/templates/web/web-ui-package/template/src/app/login/page.tsx +0 -39
  188. package/src/templates/web/web-ui-package/template/src/app/signup/page.tsx +0 -39
  189. package/src/templates/web/web-ui-package/template/src/components/providers/app-providers.tsx +0 -29
  190. /package/dist/{web/base → templates/web/ui-auth}/template/.env.example +0 -0
  191. /package/dist/templates/web/{web-ui-package → ui-auth}/template/.eslintrc.js +0 -0
  192. /package/dist/templates/web/{web-ui-package → ui-auth}/template/README.md +0 -0
  193. /package/dist/{web/base → templates/web/ui-auth}/template.backup/.env.example +0 -0
  194. /package/dist/{web/base → templates/web/ui-auth}/template.backup.20250817/.env.example +0 -0
  195. /package/dist/templates/web/{web-ui-package → ui-auth-payments}/template/.env.example +0 -0
  196. /package/dist/templates/web/{web-ui-package/template.backup.20250817 → ui-auth-payments-audio/template}/.env.example +0 -0
  197. /package/dist/templates/web/{web-ui-package → ui-auth-payments-audio}/template/postcss.config.js +0 -0
  198. /package/dist/templates/web/{web-ui-package → ui-auth-payments-audio}/template/src/app/globals.css +0 -0
  199. /package/dist/templates/web/{web-ui-package → ui-auth-payments-audio}/template/src/app/layout.tsx +0 -0
  200. /package/dist/templates/web/{web-ui-package → ui-auth-payments-audio}/template/src/components/ui/badge.tsx +0 -0
  201. /package/dist/templates/web/{web-ui-package → ui-auth-payments-audio}/template/src/lib/utils.ts +0 -0
  202. /package/dist/templates/web/{web-ui-package → ui-auth-payments-audio}/template/tsconfig.json +0 -0
  203. /package/dist/templates/web/{web-ui-package/template.backup → ui-auth-payments-video/template}/.env.example +0 -0
  204. /package/{src/templates/web/web-ui-package → dist/templates/web/ui-auth-payments-video}/template/postcss.config.js +0 -0
  205. /package/{src/templates/web/web-ui-package → dist/templates/web/ui-auth-payments-video}/template/src/app/globals.css +0 -0
  206. /package/{src/templates/web/web-ui-package → dist/templates/web/ui-auth-payments-video}/template/src/app/layout.tsx +0 -0
  207. /package/{src/templates/web/web-ui-package → dist/templates/web/ui-auth-payments-video}/template/src/components/ui/badge.tsx +0 -0
  208. /package/{src/templates/web/web-ui-package → dist/templates/web/ui-auth-payments-video}/template/src/lib/utils.ts +0 -0
  209. /package/{src/templates/web/web-ui-package → dist/templates/web/ui-auth-payments-video}/template/tsconfig.json +0 -0
  210. /package/dist/{web/ui-package-test → templates/web/ui-only}/template/.env.example +0 -0
  211. /package/dist/{web/base → templates/web/ui-only}/template/.eslintrc.js +0 -0
  212. /package/{src/templates/web/web-ui-package → dist/templates/web/ui-only}/template/README.md +0 -0
  213. /package/dist/templates/web/{web-ui-package → ui-only}/template/src/app/page.tsx +0 -0
  214. /package/dist/{web/ui-package-test → templates/web/ui-only}/template.backup/.env.example +0 -0
  215. /package/dist/{web/ui-package-test → templates/web/ui-only}/template.backup.20250817/.env.example +0 -0
  216. /package/src/templates/web/{web-ui-package → ui-auth}/template/.env.example +0 -0
  217. /package/{dist/web/ui-package-test → src/templates/web/ui-auth}/template/.eslintrc.js +0 -0
  218. /package/src/templates/web/{web-ui-package → ui-auth}/template.backup/.env.example +0 -0
  219. /package/src/templates/web/{web-ui-package → ui-auth}/template.backup.20250817/.env.example +0 -0
  220. /package/{dist/web/web-ui-package → src/templates/web/ui-auth-payments}/template/.env.example +0 -0
  221. /package/{dist/web/web-ui-package/template.backup.20250817 → src/templates/web/ui-auth-payments-audio/template}/.env.example +0 -0
  222. /package/{dist/web/web-ui-package/template.backup → src/templates/web/ui-auth-payments-video/template}/.env.example +0 -0
  223. /package/{dist/web/web-ui-package → src/templates/web/ui-only}/template/.eslintrc.js +0 -0
  224. /package/src/templates/web/{web-ui-package → ui-only}/template/src/app/page.tsx +0 -0
@@ -0,0 +1,128 @@
1
+ 'use client';
2
+
3
+ import React, { useState } from 'react';
4
+ import { Button, Card, Input, Label } from '@digilogiclabs/saas-factory-ui';
5
+ import { useAuth } from '@digilogiclabs/saas-factory-auth';
6
+ import { useRouter } from 'next/navigation';
7
+
8
+ export default function SignupPage() {
9
+ const [email, setEmail] = useState('');
10
+ const [password, setPassword] = useState('');
11
+ const [confirmPassword, setConfirmPassword] = useState('');
12
+ const { signUp, signInWithOAuth, loading, error, user } = useAuth();
13
+ const router = useRouter();
14
+
15
+ // Redirect if already logged in
16
+ React.useEffect(() => {
17
+ if (user) {
18
+ router.push('/');
19
+ }
20
+ }, [user, router]);
21
+
22
+ const handleSignup = async (e: React.FormEvent) => {
23
+ e.preventDefault();
24
+
25
+ if (password !== confirmPassword) {
26
+ alert('Passwords do not match');
27
+ return;
28
+ }
29
+
30
+ try {
31
+ await signUp(email, password);
32
+ router.push('/');
33
+ } catch (err) {
34
+ console.error('Signup error:', err);
35
+ }
36
+ };
37
+
38
+ const handleGoogleSignup = async () => {
39
+ try {
40
+ await signInWithOAuth('google', window.location.origin);
41
+ } catch (err) {
42
+ console.error('Google signup error:', err);
43
+ }
44
+ };
45
+
46
+ if (loading) {
47
+ return (
48
+ <div className="flex items-center justify-center min-h-screen bg-gray-100">
49
+ <div>Loading...</div>
50
+ </div>
51
+ );
52
+ }
53
+
54
+ return (
55
+ <div className="flex items-center justify-center min-h-screen bg-gray-100">
56
+ <Card className="w-full max-w-md p-8">
57
+ <h1 className="text-2xl font-bold text-center mb-6">Sign Up</h1>
58
+
59
+ {error && (
60
+ <div className="mb-4 p-3 bg-red-100 border border-red-400 text-red-700 rounded">
61
+ {error.message}
62
+ </div>
63
+ )}
64
+
65
+ <form onSubmit={handleSignup} className="space-y-4">
66
+ <div>
67
+ <Label htmlFor="email">Email</Label>
68
+ <Input
69
+ id="email"
70
+ type="email"
71
+ value={email}
72
+ onChange={(e) => setEmail(e.target.value)}
73
+ placeholder="Enter your email"
74
+ required
75
+ disabled={loading}
76
+ />
77
+ </div>
78
+ <div>
79
+ <Label htmlFor="password">Password</Label>
80
+ <Input
81
+ id="password"
82
+ type="password"
83
+ value={password}
84
+ onChange={(e) => setPassword(e.target.value)}
85
+ placeholder="Enter your password"
86
+ required
87
+ disabled={loading}
88
+ />
89
+ </div>
90
+ <div>
91
+ <Label htmlFor="confirmPassword">Confirm Password</Label>
92
+ <Input
93
+ id="confirmPassword"
94
+ type="password"
95
+ value={confirmPassword}
96
+ onChange={(e) => setConfirmPassword(e.target.value)}
97
+ placeholder="Confirm your password"
98
+ required
99
+ disabled={loading}
100
+ />
101
+ </div>
102
+ <Button type="submit" className="w-full" disabled={loading}>
103
+ {loading ? 'Signing Up...' : 'Sign Up'}
104
+ </Button>
105
+ <Button
106
+ type="button"
107
+ variant="outline"
108
+ className="w-full"
109
+ onClick={handleGoogleSignup}
110
+ disabled={loading}
111
+ >
112
+ Sign up with Google
113
+ </Button>
114
+ </form>
115
+
116
+ <div className="mt-4 text-center">
117
+ <p className="text-sm text-gray-600">
118
+ Already have an account?{' '}
119
+ <a href="/login" className="text-blue-600 hover:underline">
120
+ Sign in
121
+ </a>
122
+ </p>
123
+ </div>
124
+ </Card>
125
+ </div>
126
+ );
127
+ }
128
+
@@ -0,0 +1,28 @@
1
+ 'use client'
2
+
3
+ import React from 'react'
4
+ import { ThemeProvider } from 'next-themes'
5
+ import { AuthProvider } from '@digilogiclabs/saas-factory-auth'
6
+ import { PaymentsProvider } from '@digilogiclabs/saas-factory-payments'
7
+
8
+ interface AppProvidersProps {
9
+ children: React.ReactNode
10
+ }
11
+
12
+ export function AppProviders({ children }: AppProvidersProps) {
13
+ return (
14
+ <ThemeProvider
15
+ attribute="class"
16
+ defaultTheme="system"
17
+ enableSystem
18
+ disableTransitionOnChange
19
+ >
20
+ <AuthProvider>
21
+ <PaymentsProvider>
22
+ {children}
23
+ </PaymentsProvider>
24
+ </AuthProvider>
25
+ </ThemeProvider>
26
+ )
27
+ }
28
+
@@ -0,0 +1,60 @@
1
+ 'use client';
2
+
3
+ import React from 'react';
4
+ import Link from 'next/link';
5
+ import { LogOut, CreditCard } from 'lucide-react';
6
+ import { useAuth } from '@digilogiclabs/saas-factory-auth';
7
+
8
+ export function Header() {
9
+ const { user, signOut } = useAuth();
10
+
11
+ const handleSignOut = async () => {
12
+ try {
13
+ await signOut();
14
+ } catch (error) {
15
+ console.error('Sign out error:', error);
16
+ }
17
+ };
18
+
19
+ return (
20
+ <header className="bg-white dark:bg-gray-800 shadow-md">
21
+ <div className="container mx-auto px-4 py-4 flex justify-between items-center">
22
+ <Link href="/" className="text-2xl font-bold text-gray-900 dark:text-white">
23
+ {{titleCaseName}}
24
+ </Link>
25
+ <nav className="flex items-center gap-4">
26
+ {user ? (
27
+ <>
28
+ <Link href="/dashboard" className="text-gray-600 dark:text-gray-300 hover:text-gray-900 dark:hover:text-white">
29
+ Dashboard
30
+ </Link>
31
+ <Link href="/billing" className="flex items-center gap-2 text-gray-600 dark:text-gray-300 hover:text-gray-900 dark:hover:text-white">
32
+ <CreditCard className="h-4 w-4" />
33
+ Billing
34
+ </Link>
35
+ <button
36
+ onClick={handleSignOut}
37
+ className="p-2 text-gray-600 dark:text-gray-300 hover:text-gray-900 dark:hover:text-white"
38
+ >
39
+ <LogOut className="h-5 w-5" />
40
+ </button>
41
+ </>
42
+ ) : (
43
+ <>
44
+ <Link href="/login" className="text-gray-600 dark:text-gray-300 hover:text-gray-900 dark:hover:text-white">
45
+ Login
46
+ </Link>
47
+ <Link
48
+ href="/signup"
49
+ className="px-4 py-2 bg-blue-600 text-white rounded hover:bg-blue-700"
50
+ >
51
+ Sign Up
52
+ </Link>
53
+ </>
54
+ )}
55
+ </nav>
56
+ </div>
57
+ </header>
58
+ );
59
+ }
60
+
@@ -0,0 +1,36 @@
1
+ import * as React from "react"
2
+ import { cva, type VariantProps } from "class-variance-authority"
3
+ import { cn } from "@/lib/utils"
4
+
5
+ const badgeVariants = cva(
6
+ "inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2",
7
+ {
8
+ variants: {
9
+ variant: {
10
+ default:
11
+ "border-transparent bg-primary text-primary-foreground hover:bg-primary/80",
12
+ secondary:
13
+ "border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80",
14
+ destructive:
15
+ "border-transparent bg-destructive text-destructive-foreground hover:bg-destructive/80",
16
+ outline: "text-foreground",
17
+ },
18
+ },
19
+ defaultVariants: {
20
+ variant: "default",
21
+ },
22
+ }
23
+ )
24
+
25
+ export interface BadgeProps
26
+ extends React.HTMLAttributes<HTMLDivElement>,
27
+ VariantProps<typeof badgeVariants> {}
28
+
29
+ function Badge({ className, variant, ...props }: BadgeProps) {
30
+ return (
31
+ <div className={cn(badgeVariants({ variant }), className)} {...props} />
32
+ )
33
+ }
34
+
35
+ export { Badge, badgeVariants }
36
+
@@ -0,0 +1,7 @@
1
+ import { type ClassValue, clsx } from "clsx"
2
+ import { twMerge } from "tailwind-merge"
3
+
4
+ export function cn(...inputs: ClassValue[]) {
5
+ return twMerge(clsx(inputs))
6
+ }
7
+
@@ -0,0 +1,77 @@
1
+ /** @type {import('tailwindcss').Config} */
2
+ module.exports = {
3
+ darkMode: ["class"],
4
+ content: [
5
+ './pages/**/*.{ts,tsx}',
6
+ './components/**/*.{ts,tsx}',
7
+ './app/**/*.{ts,tsx}',
8
+ './src/**/*.{ts,tsx}',
9
+ '../../node_modules/@digilogiclabs/saas-factory-ui/dist/**/*.{js,ts,jsx,tsx}',
10
+ ],
11
+ theme: {
12
+ container: {
13
+ center: true,
14
+ padding: "2rem",
15
+ screens: {
16
+ "2xl": "1400px",
17
+ },
18
+ },
19
+ extend: {
20
+ colors: {
21
+ border: "hsl(var(--border))",
22
+ input: "hsl(var(--input))",
23
+ ring: "hsl(var(--ring))",
24
+ background: "hsl(var(--background))",
25
+ foreground: "hsl(var(--foreground))",
26
+ primary: {
27
+ DEFAULT: "hsl(var(--primary))",
28
+ foreground: "hsl(var(--primary-foreground))",
29
+ },
30
+ secondary: {
31
+ DEFAULT: "hsl(var(--secondary))",
32
+ foreground: "hsl(var(--secondary-foreground))",
33
+ },
34
+ destructive: {
35
+ DEFAULT: "hsl(var(--destructive))",
36
+ foreground: "hsl(var(--destructive-foreground))",
37
+ },
38
+ muted: {
39
+ DEFAULT: "hsl(var(--muted))",
40
+ foreground: "hsl(var(--muted-foreground))",
41
+ },
42
+ accent: {
43
+ DEFAULT: "hsl(var(--accent))",
44
+ foreground: "hsl(var(--accent-foreground))",
45
+ },
46
+ popover: {
47
+ DEFAULT: "hsl(var(--popover))",
48
+ foreground: "hsl(var(--popover-foreground))",
49
+ },
50
+ card: {
51
+ DEFAULT: "hsl(var(--card))",
52
+ foreground: "hsl(var(--card-foreground))",
53
+ },
54
+ },
55
+ borderRadius: {
56
+ lg: "var(--radius)",
57
+ md: "calc(var(--radius) - 2px)",
58
+ sm: "calc(var(--radius) - 4px)",
59
+ },
60
+ keyframes: {
61
+ "accordion-down": {
62
+ from: { height: 0 },
63
+ to: { height: "var(--radix-accordion-content-height)" },
64
+ },
65
+ "accordion-up": {
66
+ from: { height: "var(--radix-accordion-content-height)" },
67
+ to: { height: 0 },
68
+ },
69
+ },
70
+ animation: {
71
+ "accordion-down": "accordion-down 0.2s ease-out",
72
+ "accordion-up": "accordion-up 0.2s ease-out",
73
+ },
74
+ },
75
+ },
76
+ plugins: [],
77
+ }
@@ -0,0 +1,33 @@
1
+ {
2
+ "compilerOptions": {
3
+ "target": "es5",
4
+ "lib": ["dom", "dom.iterable", "es6"],
5
+ "allowJs": true,
6
+ "skipLibCheck": true,
7
+ "strict": true,
8
+ "noEmit": true,
9
+ "esModuleInterop": true,
10
+ "module": "esnext",
11
+ "moduleResolution": "bundler",
12
+ "resolveJsonModule": true,
13
+ "isolatedModules": true,
14
+ "jsx": "preserve",
15
+ "incremental": true,
16
+ "plugins": [
17
+ {
18
+ "name": "next"
19
+ }
20
+ ],
21
+ "baseUrl": ".",
22
+ "paths": {
23
+ "@/*": ["./src/*"],
24
+ "@/components/*": ["./src/components/*"],
25
+ "@/lib/*": ["./src/lib/*"],
26
+ "@/hooks/*": ["./src/hooks/*"],
27
+ "@/types/*": ["./src/types/*"]
28
+ }
29
+ },
30
+ "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"],
31
+ "exclude": ["node_modules"]
32
+ }
33
+
@@ -0,0 +1,187 @@
1
+ # {{titleCaseName}}
2
+
3
+ {{description}}
4
+
5
+ This is a Next.js 15 project created with the **Audio Player App** template from `@digilogiclabs/create-saas-app`. It includes:
6
+
7
+ - 🎵 **Audio Player** - Advanced audio streaming capabilities
8
+ - 🎨 **UI Components** - @digilogiclabs/saas-factory-ui v0.10.0 with audio player
9
+ - 🔐 **Authentication** - @digilogiclabs/saas-factory-auth v0.4.4
10
+ - 💳 **Payments** - @digilogiclabs/saas-factory-payments v0.3.0
11
+ - ⚡ **Next.js 15** - Latest React framework
12
+ - 🎯 **TypeScript** - Full type safety
13
+ - 🎨 **Tailwind CSS** - Utility-first styling
14
+ - 🌙 **Dark Mode** - Built-in theme support
15
+
16
+ ## Features
17
+
18
+ ### Audio Player
19
+ - Full-featured audio player with playlist support
20
+ - Play/pause, skip, shuffle, repeat controls
21
+ - Volume control and mute functionality
22
+ - Progress bar with seeking capability
23
+ - Track information display with cover art
24
+ - Cross-platform support (Web + React Native)
25
+
26
+ ### Authentication
27
+ - User registration and login
28
+ - Protected routes
29
+ - Session management
30
+ - Sign out functionality
31
+
32
+ ### Payments Integration
33
+ - Subscription plans display
34
+ - Payment form with Stripe integration
35
+ - Billing history
36
+ - Payment method management
37
+ - Subscription management
38
+
39
+ ### UI Components
40
+ - Modern, accessible components including AudioPlayer
41
+ - Dark/light theme support
42
+ - Responsive design
43
+ - TypeScript definitions
44
+
45
+ ## Getting Started
46
+
47
+ ### Prerequisites
48
+ - Node.js 18+
49
+ - npm, yarn, or pnpm
50
+
51
+ ### Installation
52
+
53
+ 1. Install dependencies:
54
+ ```bash
55
+ npm install
56
+ # or
57
+ yarn install
58
+ # or
59
+ pnpm install
60
+ ```
61
+
62
+ 2. Set up environment variables:
63
+ ```bash
64
+ cp .env.example .env.local
65
+ ```
66
+
67
+ Edit `.env.local` with your configuration:
68
+ ```env
69
+ # Authentication (choose one)
70
+ NEXT_PUBLIC_FIREBASE_API_KEY=your_firebase_api_key
71
+ NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN=your_project.firebaseapp.com
72
+ NEXT_PUBLIC_FIREBASE_PROJECT_ID=your_project_id
73
+
74
+ # OR
75
+
76
+ NEXT_PUBLIC_SUPABASE_URL=your_supabase_url
77
+ NEXT_PUBLIC_SUPABASE_ANON_KEY=your_supabase_anon_key
78
+
79
+ # Payments
80
+ NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY=your_stripe_publishable_key
81
+ STRIPE_SECRET_KEY=your_stripe_secret_key
82
+ ```
83
+
84
+ 3. Run the development server:
85
+ ```bash
86
+ npm run dev
87
+ # or
88
+ yarn dev
89
+ # or
90
+ pnpm dev
91
+ ```
92
+
93
+ Open [http://localhost:3000](http://localhost:3000) with your browser to see the result.
94
+
95
+ ## Available Pages
96
+
97
+ - `/` - Home page with feature showcase
98
+ - `/login` - User authentication
99
+ - `/signup` - User registration
100
+ - `/checkout` - Subscription plans and payment
101
+ - `/billing` - Subscription and billing management
102
+
103
+ ## Package Integration
104
+
105
+ ### UI Package (@digilogiclabs/saas-factory-ui)
106
+ ```tsx
107
+ import { Button, Card, AudioPlayer } from '@digilogiclabs/saas-factory-ui'
108
+
109
+ <Button variant="primary">Click me</Button>
110
+ <Card>Content here</Card>
111
+ <AudioPlayer
112
+ tracks={[
113
+ {
114
+ id: '1',
115
+ title: 'Song Title',
116
+ artist: 'Artist Name',
117
+ album: 'Album Name',
118
+ duration: 180,
119
+ src: '/path/to/audio.mp3',
120
+ coverArt: '/path/to/cover.jpg'
121
+ }
122
+ ]}
123
+ />
124
+ ```
125
+
126
+ ### Auth Package (@digilogiclabs/saas-factory-auth)
127
+ ```tsx
128
+ import { useAuth } from '@digilogiclabs/saas-factory-auth'
129
+
130
+ const { user, signIn, signOut, loading } = useAuth()
131
+ ```
132
+
133
+ ### Payments Package (@digilogiclabs/saas-factory-payments)
134
+ ```tsx
135
+ import {
136
+ PaymentForm,
137
+ SubscriptionPlans,
138
+ SubscriptionManager
139
+ } from '@digilogiclabs/saas-factory-payments'
140
+
141
+ <SubscriptionPlans onPlanSelect={handlePlanSelect} />
142
+ <PaymentForm onSuccess={handleSuccess} onError={handleError} />
143
+ <SubscriptionManager onSubscriptionChange={handleChange} />
144
+ ```
145
+
146
+ ## Project Structure
147
+
148
+ ```
149
+ src/
150
+ ├── app/ # Next.js 15 app directory
151
+ │ ├── billing/ # Billing and subscription management
152
+ │ ├── checkout/ # Payment and subscription selection
153
+ │ ├── login/ # Authentication pages
154
+ │ ├── signup/
155
+ │ └── layout.tsx # Root layout with providers
156
+ ├── components/
157
+ │ ├── providers/ # App-wide providers (Auth, Payments, Theme)
158
+ │ ├── shared/ # Shared components (Header, etc.)
159
+ │ └── ui/ # UI components
160
+ └── lib/ # Utilities and configurations
161
+ ```
162
+
163
+ ## Deployment
164
+
165
+ ### Vercel (Recommended)
166
+ 1. Push your code to GitHub
167
+ 2. Connect your repository to Vercel
168
+ 3. Add environment variables in Vercel dashboard
169
+ 4. Deploy
170
+
171
+ ### Other Platforms
172
+ This is a standard Next.js application and can be deployed to any platform that supports Node.js.
173
+
174
+ ## Learn More
175
+
176
+ - [Next.js Documentation](https://nextjs.org/docs)
177
+ - [Digi Logic Labs Documentation](https://docs.digilogiclabs.com)
178
+ - [SaaS Factory UI Components](https://ui.digilogiclabs.com)
179
+ - [SaaS Factory Auth Guide](https://auth.digilogiclabs.com)
180
+ - [SaaS Factory Payments Guide](https://payments.digilogiclabs.com)
181
+
182
+ ## Support
183
+
184
+ - 📚 [Documentation](https://docs.digilogiclabs.com)
185
+ - 💬 [Discord Community](https://discord.gg/digilogiclabs)
186
+ - 🐛 [Report Issues](https://github.com/DigiLogicLabs/create-saas-app/issues)
187
+
@@ -1,8 +1,5 @@
1
1
  /** @type {import('next').NextConfig} */
2
2
  const nextConfig = {
3
- experimental: {
4
- appDir: true,
5
- },
6
3
  images: {
7
4
  domains: ['localhost'],
8
5
  },
@@ -0,0 +1,42 @@
1
+ {
2
+ "name": "{{packageName}}",
3
+ "version": "0.1.0",
4
+ "description": "{{description}} - Audio Player App (with UI Package v0.11.1 + Auth v1.0.0 + Payments)",
5
+ "private": true,
6
+ "scripts": {
7
+ "dev": "next dev",
8
+ "build": "next build",
9
+ "start": "next start",
10
+ "lint": "next lint",
11
+ "type-check": "tsc --noEmit"
12
+ },
13
+ "dependencies": {
14
+ "next": "^15.0.0",
15
+ "react": "^19.0.0",
16
+ "react-dom": "^19.0.0",
17
+ "@digilogiclabs/saas-factory-ui": "^0.11.1",
18
+ "@digilogiclabs/saas-factory-auth": "^1.0.0",
19
+ "@digilogiclabs/saas-factory-payments": "^1.0.0",
20
+ "stripe": "^14.0.0",
21
+ "tailwindcss": "^3.3.0",
22
+ "autoprefixer": "^10.4.16",
23
+ "postcss": "^8.4.31",
24
+ "clsx": "^2.0.0",
25
+ "class-variance-authority": "^0.7.0",
26
+ "tailwind-merge": "^2.0.0",
27
+ "next-themes": "^0.2.1",
28
+ "lucide-react": "^0.542.0"
29
+ },
30
+ "devDependencies": {
31
+ "typescript": "^5.0.0",
32
+ "@types/node": "^20.0.0",
33
+ "@types/react": "^19.0.0",
34
+ "@types/react-dom": "^19.0.0",
35
+ "eslint": "^8.0.0",
36
+ "eslint-config-next": "^15.0.0",
37
+ "prettier": "^3.0.0"
38
+ },
39
+ "engines": {
40
+ "node": ">=18.0.0"
41
+ }
42
+ }
@@ -0,0 +1,12 @@
1
+ import { NextResponse } from 'next/server';
2
+ import type { NextRequest } from 'next/server';
3
+
4
+ export async function GET(request: NextRequest) {
5
+ const requestUrl = new URL(request.url);
6
+
7
+ // Placeholder auth callback - requires @digilogiclabs/saas-factory-auth package
8
+ console.log('Auth callback triggered - requires auth package for full functionality');
9
+
10
+ // URL to redirect to after sign in process completes
11
+ return NextResponse.redirect(requestUrl.origin);
12
+ }