@digilogiclabs/create-saas-app 1.1.2 → 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 (221) hide show
  1. package/CHANGELOG.md +7 -7
  2. package/bin/index.js +36 -36
  3. package/dist/.tsbuildinfo +1 -1
  4. package/dist/index.js +56 -12
  5. package/dist/index.js.map +1 -1
  6. package/dist/templates/mobile/base/template/.env.example +15 -15
  7. package/dist/templates/mobile/base/template/app/checkout.tsx +20 -20
  8. package/dist/templates/web/base/template/src/app/checkout/page.tsx +28 -28
  9. package/dist/templates/web/ui-auth/template/next.config.js +12 -0
  10. package/dist/templates/web/ui-auth/template/package.json +40 -0
  11. package/dist/templates/web/ui-auth/template/postcss.config.js +7 -0
  12. package/dist/templates/web/ui-auth/template/src/app/auth/callback/route.ts +12 -0
  13. package/{src/templates/web/web-ui-package → dist/templates/web/ui-auth}/template/src/app/checkout/page.tsx +25 -28
  14. package/dist/templates/web/ui-auth/template/src/app/globals.css +42 -0
  15. package/dist/templates/web/ui-auth/template/src/app/layout.tsx +29 -0
  16. package/dist/templates/web/ui-auth/template/src/app/login/page.tsx +109 -0
  17. package/dist/templates/web/ui-auth/template/src/app/page.tsx +129 -0
  18. package/dist/templates/web/ui-auth/template/src/app/signup/page.tsx +128 -0
  19. package/dist/templates/web/ui-auth/template/src/components/providers/app-providers.tsx +25 -0
  20. package/{src/templates/web/web-ui-package → dist/templates/web/ui-auth}/template/src/components/shared/header.tsx +17 -8
  21. package/dist/templates/web/ui-auth/template/src/components/ui/badge.tsx +36 -0
  22. package/dist/templates/web/ui-auth/template/src/lib/utils.ts +7 -0
  23. package/dist/templates/web/ui-auth/template/tailwind.config.js +77 -0
  24. package/dist/templates/web/ui-auth/template/tsconfig.json +33 -0
  25. package/dist/templates/web/ui-auth-payments/template/README.md +165 -0
  26. package/dist/templates/web/ui-auth-payments/template/next.config.js +12 -0
  27. package/dist/templates/web/ui-auth-payments/template/package.json +42 -0
  28. package/dist/templates/web/ui-auth-payments/template/postcss.config.js +7 -0
  29. package/dist/templates/web/ui-auth-payments/template/src/app/auth/callback/route.ts +12 -0
  30. package/dist/templates/web/ui-auth-payments/template/src/app/billing/page.tsx +211 -0
  31. package/dist/templates/web/ui-auth-payments/template/src/app/checkout/page.tsx +142 -0
  32. package/dist/templates/web/ui-auth-payments/template/src/app/globals.css +42 -0
  33. package/dist/templates/web/ui-auth-payments/template/src/app/layout.tsx +29 -0
  34. package/dist/templates/web/ui-auth-payments/template/src/app/login/page.tsx +109 -0
  35. package/dist/templates/web/ui-auth-payments/template/src/app/page.tsx +143 -0
  36. package/dist/templates/web/ui-auth-payments/template/src/app/signup/page.tsx +128 -0
  37. package/dist/templates/web/ui-auth-payments/template/src/components/providers/app-providers.tsx +28 -0
  38. package/dist/templates/web/ui-auth-payments/template/src/components/shared/header.tsx +60 -0
  39. package/dist/templates/web/ui-auth-payments/template/src/components/ui/badge.tsx +36 -0
  40. package/dist/templates/web/ui-auth-payments/template/src/lib/utils.ts +7 -0
  41. package/dist/templates/web/ui-auth-payments/template/tailwind.config.js +77 -0
  42. package/dist/templates/web/ui-auth-payments/template/tsconfig.json +33 -0
  43. package/dist/templates/web/ui-auth-payments-audio/template/README.md +187 -0
  44. package/{src/templates/web/web-ui-package → dist/templates/web/ui-auth-payments-audio}/template/next.config.js +0 -3
  45. package/dist/templates/web/ui-auth-payments-audio/template/package.json +42 -0
  46. package/dist/templates/web/ui-auth-payments-audio/template/src/app/auth/callback/route.ts +12 -0
  47. package/dist/templates/web/ui-auth-payments-audio/template/src/app/billing/page.tsx +211 -0
  48. package/dist/templates/web/ui-auth-payments-audio/template/src/app/checkout/page.tsx +142 -0
  49. package/dist/templates/web/ui-auth-payments-audio/template/src/app/login/page.tsx +109 -0
  50. package/dist/templates/web/ui-auth-payments-audio/template/src/app/page.tsx +181 -0
  51. package/dist/templates/web/ui-auth-payments-audio/template/src/app/signup/page.tsx +128 -0
  52. package/dist/templates/web/ui-auth-payments-audio/template/src/components/providers/app-providers.tsx +28 -0
  53. package/dist/templates/web/ui-auth-payments-audio/template/src/components/shared/header.tsx +60 -0
  54. package/{src/templates/web/web-ui-package → dist/templates/web/ui-auth-payments-audio}/template/tailwind.config.js +1 -1
  55. package/dist/templates/web/ui-auth-payments-video/template/README.md +190 -0
  56. package/dist/templates/web/{web-ui-package → ui-auth-payments-video}/template/next.config.js +0 -3
  57. package/dist/templates/web/ui-auth-payments-video/template/package.json +42 -0
  58. package/dist/templates/web/ui-auth-payments-video/template/src/app/auth/callback/route.ts +12 -0
  59. package/dist/templates/web/ui-auth-payments-video/template/src/app/billing/page.tsx +211 -0
  60. package/dist/templates/web/ui-auth-payments-video/template/src/app/checkout/page.tsx +142 -0
  61. package/dist/templates/web/ui-auth-payments-video/template/src/app/login/page.tsx +109 -0
  62. package/dist/templates/web/ui-auth-payments-video/template/src/app/page.tsx +187 -0
  63. package/dist/templates/web/ui-auth-payments-video/template/src/app/signup/page.tsx +128 -0
  64. package/dist/templates/web/ui-auth-payments-video/template/src/components/providers/app-providers.tsx +28 -0
  65. package/dist/templates/web/ui-auth-payments-video/template/src/components/shared/header.tsx +60 -0
  66. package/dist/templates/web/{web-ui-package → ui-auth-payments-video}/template/tailwind.config.js +1 -1
  67. package/dist/templates/web/ui-only/template/next.config.js +12 -0
  68. package/dist/templates/web/{web-ui-package → ui-only}/template/package.json +3 -3
  69. package/dist/templates/web/ui-only/template/postcss.config.js +7 -0
  70. package/dist/templates/web/ui-only/template/src/app/auth/callback/route.ts +12 -0
  71. package/dist/templates/web/{web-ui-package → ui-only}/template/src/app/checkout/page.tsx +25 -28
  72. package/dist/templates/web/ui-only/template/src/app/globals.css +42 -0
  73. package/dist/templates/web/ui-only/template/src/app/layout.tsx +29 -0
  74. package/dist/templates/web/ui-only/template/src/app/login/page.tsx +63 -0
  75. package/dist/templates/web/ui-only/template/src/app/signup/page.tsx +79 -0
  76. package/dist/templates/web/ui-only/template/src/components/providers/app-providers.tsx +22 -0
  77. package/dist/templates/web/{web-ui-package → ui-only}/template/src/components/shared/header.tsx +17 -8
  78. package/dist/templates/web/ui-only/template/src/components/ui/badge.tsx +36 -0
  79. package/dist/templates/web/ui-only/template/src/lib/utils.ts +7 -0
  80. package/dist/templates/web/ui-only/template/tailwind.config.js +77 -0
  81. package/dist/templates/web/ui-only/template/tsconfig.json +33 -0
  82. package/dist/templates/web/ui-package-test/template/package.json +2 -2
  83. package/package.json +1 -1
  84. package/src/templates/mobile/base/template/.env.example +15 -15
  85. package/src/templates/mobile/base/template/app/checkout.tsx +20 -20
  86. package/src/templates/web/base/template/src/app/checkout/page.tsx +28 -28
  87. package/src/templates/web/ui-auth/template/README.md +68 -0
  88. package/src/templates/web/ui-auth/template/next.config.js +12 -0
  89. package/src/templates/web/ui-auth/template/package.json +40 -0
  90. package/src/templates/web/ui-auth/template/postcss.config.js +7 -0
  91. package/src/templates/web/ui-auth/template/src/app/auth/callback/route.ts +12 -0
  92. package/src/templates/web/ui-auth/template/src/app/checkout/page.tsx +25 -0
  93. package/src/templates/web/ui-auth/template/src/app/globals.css +42 -0
  94. package/src/templates/web/ui-auth/template/src/app/layout.tsx +29 -0
  95. package/src/templates/web/ui-auth/template/src/app/login/page.tsx +109 -0
  96. package/src/templates/web/ui-auth/template/src/app/page.tsx +129 -0
  97. package/src/templates/web/ui-auth/template/src/app/signup/page.tsx +128 -0
  98. package/src/templates/web/ui-auth/template/src/components/providers/app-providers.tsx +25 -0
  99. package/src/templates/web/ui-auth/template/src/components/shared/header.tsx +51 -0
  100. package/src/templates/web/ui-auth/template/src/components/ui/badge.tsx +36 -0
  101. package/src/templates/web/ui-auth/template/src/lib/utils.ts +7 -0
  102. package/src/templates/web/ui-auth/template/tailwind.config.js +77 -0
  103. package/src/templates/web/ui-auth/template/tsconfig.json +33 -0
  104. package/src/templates/web/ui-auth-payments/template/README.md +165 -0
  105. package/src/templates/web/ui-auth-payments/template/next.config.js +12 -0
  106. package/src/templates/web/ui-auth-payments/template/package.json +42 -0
  107. package/src/templates/web/ui-auth-payments/template/postcss.config.js +7 -0
  108. package/src/templates/web/ui-auth-payments/template/src/app/auth/callback/route.ts +12 -0
  109. package/src/templates/web/ui-auth-payments/template/src/app/billing/page.tsx +211 -0
  110. package/src/templates/web/ui-auth-payments/template/src/app/checkout/page.tsx +142 -0
  111. package/src/templates/web/ui-auth-payments/template/src/app/globals.css +42 -0
  112. package/src/templates/web/ui-auth-payments/template/src/app/layout.tsx +29 -0
  113. package/src/templates/web/ui-auth-payments/template/src/app/login/page.tsx +109 -0
  114. package/src/templates/web/ui-auth-payments/template/src/app/page.tsx +143 -0
  115. package/src/templates/web/ui-auth-payments/template/src/app/signup/page.tsx +128 -0
  116. package/src/templates/web/ui-auth-payments/template/src/components/providers/app-providers.tsx +28 -0
  117. package/src/templates/web/ui-auth-payments/template/src/components/shared/header.tsx +60 -0
  118. package/src/templates/web/ui-auth-payments/template/src/components/ui/badge.tsx +36 -0
  119. package/src/templates/web/ui-auth-payments/template/src/lib/utils.ts +7 -0
  120. package/src/templates/web/ui-auth-payments/template/tailwind.config.js +77 -0
  121. package/src/templates/web/ui-auth-payments/template/tsconfig.json +33 -0
  122. package/src/templates/web/ui-auth-payments-audio/template/README.md +187 -0
  123. package/src/templates/web/ui-auth-payments-audio/template/next.config.js +12 -0
  124. package/src/templates/web/ui-auth-payments-audio/template/package.json +42 -0
  125. package/src/templates/web/ui-auth-payments-audio/template/postcss.config.js +7 -0
  126. package/src/templates/web/ui-auth-payments-audio/template/src/app/auth/callback/route.ts +12 -0
  127. package/src/templates/web/ui-auth-payments-audio/template/src/app/billing/page.tsx +211 -0
  128. package/src/templates/web/ui-auth-payments-audio/template/src/app/checkout/page.tsx +142 -0
  129. package/src/templates/web/ui-auth-payments-audio/template/src/app/globals.css +42 -0
  130. package/src/templates/web/ui-auth-payments-audio/template/src/app/layout.tsx +29 -0
  131. package/src/templates/web/ui-auth-payments-audio/template/src/app/login/page.tsx +109 -0
  132. package/src/templates/web/ui-auth-payments-audio/template/src/app/page.tsx +181 -0
  133. package/src/templates/web/ui-auth-payments-audio/template/src/app/signup/page.tsx +128 -0
  134. package/src/templates/web/ui-auth-payments-audio/template/src/components/providers/app-providers.tsx +28 -0
  135. package/src/templates/web/ui-auth-payments-audio/template/src/components/shared/header.tsx +60 -0
  136. package/src/templates/web/ui-auth-payments-audio/template/src/components/ui/badge.tsx +36 -0
  137. package/src/templates/web/ui-auth-payments-audio/template/src/lib/utils.ts +7 -0
  138. package/src/templates/web/ui-auth-payments-audio/template/tailwind.config.js +77 -0
  139. package/src/templates/web/ui-auth-payments-audio/template/tsconfig.json +33 -0
  140. package/src/templates/web/ui-auth-payments-video/template/README.md +190 -0
  141. package/src/templates/web/ui-auth-payments-video/template/next.config.js +12 -0
  142. package/src/templates/web/ui-auth-payments-video/template/package.json +42 -0
  143. package/src/templates/web/ui-auth-payments-video/template/postcss.config.js +7 -0
  144. package/src/templates/web/ui-auth-payments-video/template/src/app/auth/callback/route.ts +12 -0
  145. package/src/templates/web/ui-auth-payments-video/template/src/app/billing/page.tsx +211 -0
  146. package/src/templates/web/ui-auth-payments-video/template/src/app/checkout/page.tsx +142 -0
  147. package/src/templates/web/ui-auth-payments-video/template/src/app/globals.css +42 -0
  148. package/src/templates/web/ui-auth-payments-video/template/src/app/layout.tsx +29 -0
  149. package/src/templates/web/ui-auth-payments-video/template/src/app/login/page.tsx +109 -0
  150. package/src/templates/web/ui-auth-payments-video/template/src/app/page.tsx +187 -0
  151. package/src/templates/web/ui-auth-payments-video/template/src/app/signup/page.tsx +128 -0
  152. package/src/templates/web/ui-auth-payments-video/template/src/components/providers/app-providers.tsx +28 -0
  153. package/src/templates/web/ui-auth-payments-video/template/src/components/shared/header.tsx +60 -0
  154. package/src/templates/web/ui-auth-payments-video/template/src/components/ui/badge.tsx +36 -0
  155. package/src/templates/web/ui-auth-payments-video/template/src/lib/utils.ts +7 -0
  156. package/src/templates/web/ui-auth-payments-video/template/tailwind.config.js +77 -0
  157. package/src/templates/web/ui-auth-payments-video/template/tsconfig.json +33 -0
  158. package/src/templates/web/ui-only/template/.env.example +15 -0
  159. package/src/templates/web/ui-only/template/README.md +68 -0
  160. package/src/templates/web/ui-only/template/next.config.js +12 -0
  161. package/src/templates/web/{web-ui-package → ui-only}/template/package.json +3 -3
  162. package/src/templates/web/ui-only/template/postcss.config.js +7 -0
  163. package/src/templates/web/ui-only/template/src/app/auth/callback/route.ts +12 -0
  164. package/src/templates/web/ui-only/template/src/app/checkout/page.tsx +25 -0
  165. package/src/templates/web/ui-only/template/src/app/globals.css +42 -0
  166. package/src/templates/web/ui-only/template/src/app/layout.tsx +29 -0
  167. package/src/templates/web/ui-only/template/src/app/login/page.tsx +63 -0
  168. package/src/templates/web/ui-only/template/src/app/signup/page.tsx +79 -0
  169. package/src/templates/web/ui-only/template/src/components/providers/app-providers.tsx +22 -0
  170. package/src/templates/web/ui-only/template/src/components/shared/header.tsx +51 -0
  171. package/src/templates/web/ui-only/template/src/components/ui/badge.tsx +36 -0
  172. package/src/templates/web/ui-only/template/src/lib/utils.ts +7 -0
  173. package/src/templates/web/ui-only/template/tailwind.config.js +77 -0
  174. package/src/templates/web/ui-only/template/tsconfig.json +33 -0
  175. package/src/templates/web/ui-only/template.backup/.env.example +15 -0
  176. package/{dist/mobile/base/template → src/templates/web/ui-only/template.backup.20250817}/.env.example +15 -15
  177. package/src/templates/web/ui-package-test/template/package.json +2 -2
  178. package/dist/templates/web/web-ui-package/template/src/app/auth/callback/route.ts +0 -18
  179. package/dist/templates/web/web-ui-package/template/src/app/login/page.tsx +0 -39
  180. package/dist/templates/web/web-ui-package/template/src/app/signup/page.tsx +0 -39
  181. package/dist/templates/web/web-ui-package/template/src/components/providers/app-providers.tsx +0 -29
  182. package/src/templates/web/web-ui-package/template/.eslintrc.js +0 -8
  183. package/src/templates/web/web-ui-package/template/src/app/auth/callback/route.ts +0 -18
  184. package/src/templates/web/web-ui-package/template/src/app/login/page.tsx +0 -39
  185. package/src/templates/web/web-ui-package/template/src/app/signup/page.tsx +0 -39
  186. package/src/templates/web/web-ui-package/template/src/components/providers/app-providers.tsx +0 -29
  187. /package/dist/{web/base → templates/web/ui-auth}/template/.env.example +0 -0
  188. /package/dist/templates/web/{web-ui-package → ui-auth}/template/.eslintrc.js +0 -0
  189. /package/dist/templates/web/{web-ui-package → ui-auth}/template/README.md +0 -0
  190. /package/dist/{web/base → templates/web/ui-auth}/template.backup/.env.example +0 -0
  191. /package/dist/{web/base → templates/web/ui-auth}/template.backup.20250817/.env.example +0 -0
  192. /package/dist/templates/web/{web-ui-package → ui-auth-payments}/template/.env.example +0 -0
  193. /package/dist/templates/web/{web-ui-package/template.backup.20250817 → ui-auth-payments-audio/template}/.env.example +0 -0
  194. /package/dist/templates/web/{web-ui-package → ui-auth-payments-audio}/template/postcss.config.js +0 -0
  195. /package/dist/templates/web/{web-ui-package → ui-auth-payments-audio}/template/src/app/globals.css +0 -0
  196. /package/dist/templates/web/{web-ui-package → ui-auth-payments-audio}/template/src/app/layout.tsx +0 -0
  197. /package/dist/templates/web/{web-ui-package → ui-auth-payments-audio}/template/src/components/ui/badge.tsx +0 -0
  198. /package/dist/templates/web/{web-ui-package → ui-auth-payments-audio}/template/src/lib/utils.ts +0 -0
  199. /package/dist/templates/web/{web-ui-package → ui-auth-payments-audio}/template/tsconfig.json +0 -0
  200. /package/dist/templates/web/{web-ui-package/template.backup → ui-auth-payments-video/template}/.env.example +0 -0
  201. /package/{src/templates/web/web-ui-package → dist/templates/web/ui-auth-payments-video}/template/postcss.config.js +0 -0
  202. /package/{src/templates/web/web-ui-package → dist/templates/web/ui-auth-payments-video}/template/src/app/globals.css +0 -0
  203. /package/{src/templates/web/web-ui-package → dist/templates/web/ui-auth-payments-video}/template/src/app/layout.tsx +0 -0
  204. /package/{src/templates/web/web-ui-package → dist/templates/web/ui-auth-payments-video}/template/src/components/ui/badge.tsx +0 -0
  205. /package/{src/templates/web/web-ui-package → dist/templates/web/ui-auth-payments-video}/template/src/lib/utils.ts +0 -0
  206. /package/{src/templates/web/web-ui-package → dist/templates/web/ui-auth-payments-video}/template/tsconfig.json +0 -0
  207. /package/dist/{web/ui-package-test → templates/web/ui-only}/template/.env.example +0 -0
  208. /package/dist/{web/base → templates/web/ui-only}/template/.eslintrc.js +0 -0
  209. /package/{src/templates/web/web-ui-package → dist/templates/web/ui-only}/template/README.md +0 -0
  210. /package/dist/templates/web/{web-ui-package → ui-only}/template/src/app/page.tsx +0 -0
  211. /package/dist/{web/ui-package-test → templates/web/ui-only}/template.backup/.env.example +0 -0
  212. /package/dist/{web/ui-package-test → templates/web/ui-only}/template.backup.20250817/.env.example +0 -0
  213. /package/src/templates/web/{web-ui-package → ui-auth}/template/.env.example +0 -0
  214. /package/{dist/web/ui-package-test → src/templates/web/ui-auth}/template/.eslintrc.js +0 -0
  215. /package/src/templates/web/{web-ui-package → ui-auth}/template.backup/.env.example +0 -0
  216. /package/src/templates/web/{web-ui-package → ui-auth}/template.backup.20250817/.env.example +0 -0
  217. /package/{dist/web/web-ui-package → src/templates/web/ui-auth-payments}/template/.env.example +0 -0
  218. /package/{dist/web/web-ui-package/template.backup.20250817 → src/templates/web/ui-auth-payments-audio/template}/.env.example +0 -0
  219. /package/{dist/web/web-ui-package/template.backup → src/templates/web/ui-auth-payments-video/template}/.env.example +0 -0
  220. /package/{dist/web/web-ui-package → src/templates/web/ui-only}/template/.eslintrc.js +0 -0
  221. /package/src/templates/web/{web-ui-package → ui-only}/template/src/app/page.tsx +0 -0
@@ -2,12 +2,14 @@
2
2
 
3
3
  import React from 'react';
4
4
  import Link from 'next/link';
5
- import { useAuth } from '@digilogiclabs/saas-factory-auth';
6
- import { Button } from '@/components/ui/button';
7
5
  import { LogOut } from 'lucide-react';
8
6
 
9
7
  export function Header() {
10
- const { user, signOut } = useAuth();
8
+ const user = null; // Placeholder for auth state
9
+
10
+ const handleSignOut = () => {
11
+ alert('Sign out functionality requires @digilogiclabs/saas-factory-auth package');
12
+ };
11
13
 
12
14
  return (
13
15
  <header className="bg-white dark:bg-gray-800 shadow-md">
@@ -21,18 +23,24 @@ export function Header() {
21
23
  <Link href="/dashboard" className="text-gray-600 dark:text-gray-300 hover:text-gray-900 dark:hover:text-white">
22
24
  Dashboard
23
25
  </Link>
24
- <Button variant="ghost" size="icon" onClick={signOut}>
26
+ <button
27
+ onClick={handleSignOut}
28
+ className="p-2 text-gray-600 dark:text-gray-300 hover:text-gray-900 dark:hover:text-white"
29
+ >
25
30
  <LogOut className="h-5 w-5" />
26
- </Button>
31
+ </button>
27
32
  </>
28
33
  ) : (
29
34
  <>
30
35
  <Link href="/login" className="text-gray-600 dark:text-gray-300 hover:text-gray-900 dark:hover:text-white">
31
36
  Login
32
37
  </Link>
33
- <Button asChild>
34
- <Link href="/signup">Sign Up</Link>
35
- </Button>
38
+ <Link
39
+ href="/signup"
40
+ className="px-4 py-2 bg-blue-600 text-white rounded hover:bg-blue-700"
41
+ >
42
+ Sign Up
43
+ </Link>
36
44
  </>
37
45
  )}
38
46
  </nav>
@@ -40,3 +48,4 @@ export function Header() {
40
48
  </header>
41
49
  );
42
50
  }
51
+
@@ -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,165 @@
1
+ # {{titleCaseName}}
2
+
3
+ {{description}}
4
+
5
+ This is a Next.js 15 project created with the **UI + Auth + Payments** template from `@digilogiclabs/create-saas-app`. It includes:
6
+
7
+ - 🎨 **UI Components** - @digilogiclabs/saas-factory-ui v0.7.3
8
+ - 🔐 **Authentication** - @digilogiclabs/saas-factory-auth v0.4.4
9
+ - 💳 **Payments** - @digilogiclabs/saas-factory-payments v0.3.0
10
+ - ⚡ **Next.js 15** - Latest React framework
11
+ - 🎯 **TypeScript** - Full type safety
12
+ - 🎨 **Tailwind CSS** - Utility-first styling
13
+ - 🌙 **Dark Mode** - Built-in theme support
14
+
15
+ ## Features
16
+
17
+ ### Authentication
18
+ - User registration and login
19
+ - Protected routes
20
+ - Session management
21
+ - Sign out functionality
22
+
23
+ ### Payments Integration
24
+ - Subscription plans display
25
+ - Payment form with Stripe integration
26
+ - Billing history
27
+ - Payment method management
28
+ - Subscription management
29
+
30
+ ### UI Components
31
+ - Modern, accessible components
32
+ - Dark/light theme support
33
+ - Responsive design
34
+ - TypeScript definitions
35
+
36
+ ## Getting Started
37
+
38
+ ### Prerequisites
39
+ - Node.js 18+
40
+ - npm, yarn, or pnpm
41
+
42
+ ### Installation
43
+
44
+ 1. Install dependencies:
45
+ ```bash
46
+ npm install
47
+ # or
48
+ yarn install
49
+ # or
50
+ pnpm install
51
+ ```
52
+
53
+ 2. Set up environment variables:
54
+ ```bash
55
+ cp .env.example .env.local
56
+ ```
57
+
58
+ Edit `.env.local` with your configuration:
59
+ ```env
60
+ # Authentication (choose one)
61
+ NEXT_PUBLIC_FIREBASE_API_KEY=your_firebase_api_key
62
+ NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN=your_project.firebaseapp.com
63
+ NEXT_PUBLIC_FIREBASE_PROJECT_ID=your_project_id
64
+
65
+ # OR
66
+
67
+ NEXT_PUBLIC_SUPABASE_URL=your_supabase_url
68
+ NEXT_PUBLIC_SUPABASE_ANON_KEY=your_supabase_anon_key
69
+
70
+ # Payments
71
+ NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY=your_stripe_publishable_key
72
+ STRIPE_SECRET_KEY=your_stripe_secret_key
73
+ ```
74
+
75
+ 3. Run the development server:
76
+ ```bash
77
+ npm run dev
78
+ # or
79
+ yarn dev
80
+ # or
81
+ pnpm dev
82
+ ```
83
+
84
+ Open [http://localhost:3000](http://localhost:3000) with your browser to see the result.
85
+
86
+ ## Available Pages
87
+
88
+ - `/` - Home page with feature showcase
89
+ - `/login` - User authentication
90
+ - `/signup` - User registration
91
+ - `/checkout` - Subscription plans and payment
92
+ - `/billing` - Subscription and billing management
93
+
94
+ ## Package Integration
95
+
96
+ ### UI Package (@digilogiclabs/saas-factory-ui)
97
+ ```tsx
98
+ import { Button, Card } from '@digilogiclabs/saas-factory-ui'
99
+
100
+ <Button variant="primary">Click me</Button>
101
+ <Card>Content here</Card>
102
+ ```
103
+
104
+ ### Auth Package (@digilogiclabs/saas-factory-auth)
105
+ ```tsx
106
+ import { useAuth } from '@digilogiclabs/saas-factory-auth'
107
+
108
+ const { user, signIn, signOut, loading } = useAuth()
109
+ ```
110
+
111
+ ### Payments Package (@digilogiclabs/saas-factory-payments)
112
+ ```tsx
113
+ import {
114
+ PaymentForm,
115
+ SubscriptionPlans,
116
+ SubscriptionManager
117
+ } from '@digilogiclabs/saas-factory-payments'
118
+
119
+ <SubscriptionPlans onPlanSelect={handlePlanSelect} />
120
+ <PaymentForm onSuccess={handleSuccess} onError={handleError} />
121
+ <SubscriptionManager onSubscriptionChange={handleChange} />
122
+ ```
123
+
124
+ ## Project Structure
125
+
126
+ ```
127
+ src/
128
+ ├── app/ # Next.js 15 app directory
129
+ │ ├── billing/ # Billing and subscription management
130
+ │ ├── checkout/ # Payment and subscription selection
131
+ │ ├── login/ # Authentication pages
132
+ │ ├── signup/
133
+ │ └── layout.tsx # Root layout with providers
134
+ ├── components/
135
+ │ ├── providers/ # App-wide providers (Auth, Payments, Theme)
136
+ │ ├── shared/ # Shared components (Header, etc.)
137
+ │ └── ui/ # UI components
138
+ └── lib/ # Utilities and configurations
139
+ ```
140
+
141
+ ## Deployment
142
+
143
+ ### Vercel (Recommended)
144
+ 1. Push your code to GitHub
145
+ 2. Connect your repository to Vercel
146
+ 3. Add environment variables in Vercel dashboard
147
+ 4. Deploy
148
+
149
+ ### Other Platforms
150
+ This is a standard Next.js application and can be deployed to any platform that supports Node.js.
151
+
152
+ ## Learn More
153
+
154
+ - [Next.js Documentation](https://nextjs.org/docs)
155
+ - [Digi Logic Labs Documentation](https://docs.digilogiclabs.com)
156
+ - [SaaS Factory UI Components](https://ui.digilogiclabs.com)
157
+ - [SaaS Factory Auth Guide](https://auth.digilogiclabs.com)
158
+ - [SaaS Factory Payments Guide](https://payments.digilogiclabs.com)
159
+
160
+ ## Support
161
+
162
+ - 📚 [Documentation](https://docs.digilogiclabs.com)
163
+ - 💬 [Discord Community](https://discord.gg/digilogiclabs)
164
+ - 🐛 [Report Issues](https://github.com/DigiLogicLabs/create-saas-app/issues)
165
+
@@ -0,0 +1,12 @@
1
+ /** @type {import('next').NextConfig} */
2
+ const nextConfig = {
3
+ images: {
4
+ domains: ['localhost'],
5
+ },
6
+ env: {
7
+ CUSTOM_KEY: process.env.CUSTOM_KEY,
8
+ },
9
+ }
10
+
11
+ module.exports = nextConfig
12
+
@@ -0,0 +1,42 @@
1
+ {
2
+ "name": "{{packageName}}",
3
+ "version": "0.1.0",
4
+ "description": "{{description}} (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,7 @@
1
+ module.exports = {
2
+ plugins: {
3
+ tailwindcss: {},
4
+ autoprefixer: {},
5
+ },
6
+ }
7
+
@@ -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
+ }
@@ -0,0 +1,211 @@
1
+ 'use client';
2
+
3
+ import React from 'react';
4
+ import { usePayments, formatCurrency, formatDate } from '@digilogiclabs/saas-factory-payments';
5
+ import { Button, Card } from '@digilogiclabs/saas-factory-ui';
6
+
7
+ export default function BillingPage() {
8
+ const { loading } = usePayments();
9
+
10
+ const handleSubscriptionChange = () => {
11
+ console.log('Subscription change requested');
12
+ // Handle subscription changes (upgrade, downgrade, cancel, resume)
13
+ };
14
+
15
+ const handlePaymentMethodUpdate = () => {
16
+ console.log('Payment method update requested');
17
+ // Handle payment method updates (add, edit, delete, set default)
18
+ };
19
+
20
+ const handleInvoiceDownload = (invoiceId: string) => {
21
+ console.log('Download invoice:', invoiceId);
22
+ // Handle invoice download
23
+ };
24
+
25
+ // Mock current subscription data - in real app this would come from your backend
26
+ const currentSubscription = {
27
+ plan: 'Pro Plan',
28
+ price: 1999,
29
+ interval: 'month',
30
+ status: 'active',
31
+ nextBilling: new Date(Date.now() + 15 * 24 * 60 * 60 * 1000)
32
+ };
33
+
34
+ // Mock payment methods - in real app this would come from your backend
35
+ const paymentMethods = [
36
+ {
37
+ id: 'pm_123',
38
+ type: 'card',
39
+ last4: '4242',
40
+ brand: 'visa',
41
+ expiryMonth: 12,
42
+ expiryYear: 2025,
43
+ isDefault: true
44
+ },
45
+ {
46
+ id: 'pm_456',
47
+ type: 'card',
48
+ last4: '0005',
49
+ brand: 'mastercard',
50
+ expiryMonth: 8,
51
+ expiryYear: 2026,
52
+ isDefault: false
53
+ }
54
+ ];
55
+
56
+ // Mock billing history - in real app this would come from your backend
57
+ const invoices = [
58
+ {
59
+ id: 'inv_123',
60
+ amount: 1999,
61
+ currency: 'usd',
62
+ status: 'paid',
63
+ date: new Date(Date.now() - 30 * 24 * 60 * 60 * 1000),
64
+ description: 'Pro Plan - Monthly'
65
+ },
66
+ {
67
+ id: 'inv_456',
68
+ amount: 1999,
69
+ currency: 'usd',
70
+ status: 'paid',
71
+ date: new Date(Date.now() - 60 * 24 * 60 * 60 * 1000),
72
+ description: 'Pro Plan - Monthly'
73
+ },
74
+ {
75
+ id: 'inv_789',
76
+ amount: 999,
77
+ currency: 'usd',
78
+ status: 'paid',
79
+ date: new Date(Date.now() - 90 * 24 * 60 * 60 * 1000),
80
+ description: 'Basic Plan - Monthly'
81
+ }
82
+ ];
83
+
84
+ return (
85
+ <div className="min-h-screen bg-gray-100 py-8">
86
+ <div className="max-w-7xl mx-auto px-4">
87
+ <div className="mb-8">
88
+ <h1 className="text-4xl font-bold text-gray-900 mb-2">Billing & Subscription</h1>
89
+ <p className="text-xl text-gray-600">Manage your subscription and billing information</p>
90
+ </div>
91
+
92
+ <div className="grid grid-cols-1 lg:grid-cols-2 gap-8 mb-8">
93
+ {/* Current Subscription */}
94
+ <Card className="p-6">
95
+ <h2 className="text-2xl font-bold mb-6">Current Subscription</h2>
96
+ <div className="space-y-4">
97
+ <div>
98
+ <h3 className="font-semibold">{currentSubscription.plan}</h3>
99
+ <p className="text-2xl font-bold">
100
+ {formatCurrency(currentSubscription.price)}
101
+ <span className="text-sm font-normal">/{currentSubscription.interval}</span>
102
+ </p>
103
+ </div>
104
+ <div>
105
+ <p className="text-sm text-gray-600">Status</p>
106
+ <span className="inline-block px-2 py-1 bg-green-100 text-green-800 rounded text-sm">
107
+ {currentSubscription.status}
108
+ </span>
109
+ </div>
110
+ <div>
111
+ <p className="text-sm text-gray-600">Next billing date</p>
112
+ <p>{formatDate(currentSubscription.nextBilling)}</p>
113
+ </div>
114
+ <Button
115
+ onClick={handleSubscriptionChange}
116
+ disabled={loading}
117
+ variant="outline"
118
+ className="w-full"
119
+ >
120
+ Change Plan
121
+ </Button>
122
+ </div>
123
+ </Card>
124
+
125
+ {/* Payment Methods */}
126
+ <Card className="p-6">
127
+ <h2 className="text-2xl font-bold mb-6">Payment Methods</h2>
128
+ <div className="space-y-4">
129
+ {paymentMethods.map((method) => (
130
+ <div key={method.id} className="flex items-center justify-between p-3 border rounded-lg">
131
+ <div className="flex items-center">
132
+ <div className="w-8 h-8 bg-blue-100 rounded flex items-center justify-center mr-3">
133
+ 💳
134
+ </div>
135
+ <div>
136
+ <p className="font-medium">
137
+ {method.brand.toUpperCase()} •••• {method.last4}
138
+ </p>
139
+ <p className="text-sm text-gray-600">
140
+ Expires {method.expiryMonth}/{method.expiryYear}
141
+ {method.isDefault && <span className="ml-2 text-blue-600">(Default)</span>}
142
+ </p>
143
+ </div>
144
+ </div>
145
+ <Button
146
+ onClick={handlePaymentMethodUpdate}
147
+ disabled={loading}
148
+ variant="outline"
149
+ size="sm"
150
+ >
151
+ Edit
152
+ </Button>
153
+ </div>
154
+ ))}
155
+ <Button
156
+ onClick={handlePaymentMethodUpdate}
157
+ disabled={loading}
158
+ variant="outline"
159
+ className="w-full"
160
+ >
161
+ Add Payment Method
162
+ </Button>
163
+ </div>
164
+ </Card>
165
+ </div>
166
+
167
+ {/* Billing History */}
168
+ <Card className="p-6">
169
+ <h2 className="text-2xl font-bold mb-6">Billing History</h2>
170
+ <div className="overflow-x-auto">
171
+ <table className="w-full">
172
+ <thead>
173
+ <tr className="border-b">
174
+ <th className="text-left py-2">Date</th>
175
+ <th className="text-left py-2">Description</th>
176
+ <th className="text-left py-2">Amount</th>
177
+ <th className="text-left py-2">Status</th>
178
+ <th className="text-left py-2">Actions</th>
179
+ </tr>
180
+ </thead>
181
+ <tbody>
182
+ {invoices.map((invoice) => (
183
+ <tr key={invoice.id} className="border-b">
184
+ <td className="py-3">{formatDate(invoice.date)}</td>
185
+ <td className="py-3">{invoice.description}</td>
186
+ <td className="py-3">{formatCurrency(invoice.amount)}</td>
187
+ <td className="py-3">
188
+ <span className="inline-block px-2 py-1 bg-green-100 text-green-800 rounded text-sm">
189
+ {invoice.status}
190
+ </span>
191
+ </td>
192
+ <td className="py-3">
193
+ <Button
194
+ onClick={() => handleInvoiceDownload(invoice.id)}
195
+ variant="outline"
196
+ size="sm"
197
+ >
198
+ Download
199
+ </Button>
200
+ </td>
201
+ </tr>
202
+ ))}
203
+ </tbody>
204
+ </table>
205
+ </div>
206
+ </Card>
207
+ </div>
208
+ </div>
209
+ );
210
+ }
211
+