@digilogiclabs/create-saas-app 1.1.2 → 1.4.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 (222) hide show
  1. package/CHANGELOG.md +7 -7
  2. package/README.md +46 -22
  3. package/bin/index.js +36 -36
  4. package/dist/.tsbuildinfo +1 -1
  5. package/dist/index.js +59 -15
  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/ui-auth/template/next.config.js +12 -0
  11. package/dist/templates/web/ui-auth/template/package.json +40 -0
  12. package/dist/templates/web/ui-auth/template/postcss.config.js +7 -0
  13. package/dist/templates/web/ui-auth/template/src/app/auth/callback/route.ts +12 -0
  14. package/{src/templates/web/web-ui-package → dist/templates/web/ui-auth}/template/src/app/checkout/page.tsx +25 -28
  15. package/dist/templates/web/ui-auth/template/src/app/globals.css +42 -0
  16. package/dist/templates/web/ui-auth/template/src/app/layout.tsx +29 -0
  17. package/dist/templates/web/ui-auth/template/src/app/login/page.tsx +109 -0
  18. package/dist/templates/web/ui-auth/template/src/app/page.tsx +129 -0
  19. package/dist/templates/web/ui-auth/template/src/app/signup/page.tsx +128 -0
  20. package/dist/templates/web/ui-auth/template/src/components/providers/app-providers.tsx +25 -0
  21. package/{src/templates/web/web-ui-package → dist/templates/web/ui-auth}/template/src/components/shared/header.tsx +17 -8
  22. package/dist/templates/web/ui-auth/template/src/components/ui/badge.tsx +36 -0
  23. package/dist/templates/web/ui-auth/template/src/lib/utils.ts +7 -0
  24. package/dist/templates/web/ui-auth/template/tailwind.config.js +77 -0
  25. package/dist/templates/web/ui-auth/template/tsconfig.json +33 -0
  26. package/dist/templates/web/ui-auth-payments/template/README.md +165 -0
  27. package/dist/templates/web/ui-auth-payments/template/next.config.js +12 -0
  28. package/dist/templates/web/ui-auth-payments/template/package.json +42 -0
  29. package/dist/templates/web/ui-auth-payments/template/postcss.config.js +7 -0
  30. package/dist/templates/web/ui-auth-payments/template/src/app/auth/callback/route.ts +12 -0
  31. package/dist/templates/web/ui-auth-payments/template/src/app/billing/page.tsx +211 -0
  32. package/dist/templates/web/ui-auth-payments/template/src/app/checkout/page.tsx +142 -0
  33. package/dist/templates/web/ui-auth-payments/template/src/app/globals.css +42 -0
  34. package/dist/templates/web/ui-auth-payments/template/src/app/layout.tsx +29 -0
  35. package/dist/templates/web/ui-auth-payments/template/src/app/login/page.tsx +109 -0
  36. package/dist/templates/web/ui-auth-payments/template/src/app/page.tsx +143 -0
  37. package/dist/templates/web/ui-auth-payments/template/src/app/signup/page.tsx +128 -0
  38. package/dist/templates/web/ui-auth-payments/template/src/components/providers/app-providers.tsx +28 -0
  39. package/dist/templates/web/ui-auth-payments/template/src/components/shared/header.tsx +60 -0
  40. package/dist/templates/web/ui-auth-payments/template/src/components/ui/badge.tsx +36 -0
  41. package/dist/templates/web/ui-auth-payments/template/src/lib/utils.ts +7 -0
  42. package/dist/templates/web/ui-auth-payments/template/tailwind.config.js +77 -0
  43. package/dist/templates/web/ui-auth-payments/template/tsconfig.json +33 -0
  44. package/dist/templates/web/ui-auth-payments-audio/template/README.md +187 -0
  45. package/{src/templates/web/web-ui-package → dist/templates/web/ui-auth-payments-audio}/template/next.config.js +0 -3
  46. package/dist/templates/web/ui-auth-payments-audio/template/package.json +42 -0
  47. package/dist/templates/web/ui-auth-payments-audio/template/src/app/auth/callback/route.ts +12 -0
  48. package/dist/templates/web/ui-auth-payments-audio/template/src/app/billing/page.tsx +211 -0
  49. package/dist/templates/web/ui-auth-payments-audio/template/src/app/checkout/page.tsx +142 -0
  50. package/dist/templates/web/ui-auth-payments-audio/template/src/app/login/page.tsx +109 -0
  51. package/dist/templates/web/ui-auth-payments-audio/template/src/app/page.tsx +181 -0
  52. package/dist/templates/web/ui-auth-payments-audio/template/src/app/signup/page.tsx +128 -0
  53. package/dist/templates/web/ui-auth-payments-audio/template/src/components/providers/app-providers.tsx +28 -0
  54. package/dist/templates/web/ui-auth-payments-audio/template/src/components/shared/header.tsx +60 -0
  55. package/{src/templates/web/web-ui-package → dist/templates/web/ui-auth-payments-audio}/template/tailwind.config.js +1 -1
  56. package/dist/templates/web/ui-auth-payments-video/template/README.md +190 -0
  57. package/dist/templates/web/{web-ui-package → ui-auth-payments-video}/template/next.config.js +0 -3
  58. package/dist/templates/web/ui-auth-payments-video/template/package.json +42 -0
  59. package/dist/templates/web/ui-auth-payments-video/template/src/app/auth/callback/route.ts +12 -0
  60. package/dist/templates/web/ui-auth-payments-video/template/src/app/billing/page.tsx +211 -0
  61. package/dist/templates/web/ui-auth-payments-video/template/src/app/checkout/page.tsx +142 -0
  62. package/dist/templates/web/ui-auth-payments-video/template/src/app/login/page.tsx +109 -0
  63. package/dist/templates/web/ui-auth-payments-video/template/src/app/page.tsx +187 -0
  64. package/dist/templates/web/ui-auth-payments-video/template/src/app/signup/page.tsx +128 -0
  65. package/dist/templates/web/ui-auth-payments-video/template/src/components/providers/app-providers.tsx +28 -0
  66. package/dist/templates/web/ui-auth-payments-video/template/src/components/shared/header.tsx +60 -0
  67. package/dist/templates/web/{web-ui-package → ui-auth-payments-video}/template/tailwind.config.js +1 -1
  68. package/dist/templates/web/ui-only/template/next.config.js +12 -0
  69. package/dist/templates/web/{web-ui-package → ui-only}/template/package.json +3 -3
  70. package/dist/templates/web/ui-only/template/postcss.config.js +7 -0
  71. package/dist/templates/web/ui-only/template/src/app/auth/callback/route.ts +12 -0
  72. package/dist/templates/web/{web-ui-package → ui-only}/template/src/app/checkout/page.tsx +25 -28
  73. package/dist/templates/web/ui-only/template/src/app/globals.css +42 -0
  74. package/dist/templates/web/ui-only/template/src/app/layout.tsx +29 -0
  75. package/dist/templates/web/ui-only/template/src/app/login/page.tsx +63 -0
  76. package/dist/templates/web/ui-only/template/src/app/signup/page.tsx +79 -0
  77. package/dist/templates/web/ui-only/template/src/components/providers/app-providers.tsx +22 -0
  78. package/dist/templates/web/{web-ui-package → ui-only}/template/src/components/shared/header.tsx +17 -8
  79. package/dist/templates/web/ui-only/template/src/components/ui/badge.tsx +36 -0
  80. package/dist/templates/web/ui-only/template/src/lib/utils.ts +7 -0
  81. package/dist/templates/web/ui-only/template/tailwind.config.js +77 -0
  82. package/dist/templates/web/ui-only/template/tsconfig.json +33 -0
  83. package/dist/templates/web/ui-package-test/template/package.json +2 -2
  84. package/package.json +1 -1
  85. package/src/templates/mobile/base/template/.env.example +15 -15
  86. package/src/templates/mobile/base/template/app/checkout.tsx +20 -20
  87. package/src/templates/web/base/template/src/app/checkout/page.tsx +28 -28
  88. package/src/templates/web/ui-auth/template/README.md +68 -0
  89. package/src/templates/web/ui-auth/template/next.config.js +12 -0
  90. package/src/templates/web/ui-auth/template/package.json +40 -0
  91. package/src/templates/web/ui-auth/template/postcss.config.js +7 -0
  92. package/src/templates/web/ui-auth/template/src/app/auth/callback/route.ts +12 -0
  93. package/src/templates/web/ui-auth/template/src/app/checkout/page.tsx +25 -0
  94. package/src/templates/web/ui-auth/template/src/app/globals.css +42 -0
  95. package/src/templates/web/ui-auth/template/src/app/layout.tsx +29 -0
  96. package/src/templates/web/ui-auth/template/src/app/login/page.tsx +109 -0
  97. package/src/templates/web/ui-auth/template/src/app/page.tsx +129 -0
  98. package/src/templates/web/ui-auth/template/src/app/signup/page.tsx +128 -0
  99. package/src/templates/web/ui-auth/template/src/components/providers/app-providers.tsx +25 -0
  100. package/src/templates/web/ui-auth/template/src/components/shared/header.tsx +51 -0
  101. package/src/templates/web/ui-auth/template/src/components/ui/badge.tsx +36 -0
  102. package/src/templates/web/ui-auth/template/src/lib/utils.ts +7 -0
  103. package/src/templates/web/ui-auth/template/tailwind.config.js +77 -0
  104. package/src/templates/web/ui-auth/template/tsconfig.json +33 -0
  105. package/src/templates/web/ui-auth-payments/template/README.md +165 -0
  106. package/src/templates/web/ui-auth-payments/template/next.config.js +12 -0
  107. package/src/templates/web/ui-auth-payments/template/package.json +42 -0
  108. package/src/templates/web/ui-auth-payments/template/postcss.config.js +7 -0
  109. package/src/templates/web/ui-auth-payments/template/src/app/auth/callback/route.ts +12 -0
  110. package/src/templates/web/ui-auth-payments/template/src/app/billing/page.tsx +211 -0
  111. package/src/templates/web/ui-auth-payments/template/src/app/checkout/page.tsx +142 -0
  112. package/src/templates/web/ui-auth-payments/template/src/app/globals.css +42 -0
  113. package/src/templates/web/ui-auth-payments/template/src/app/layout.tsx +29 -0
  114. package/src/templates/web/ui-auth-payments/template/src/app/login/page.tsx +109 -0
  115. package/src/templates/web/ui-auth-payments/template/src/app/page.tsx +143 -0
  116. package/src/templates/web/ui-auth-payments/template/src/app/signup/page.tsx +128 -0
  117. package/src/templates/web/ui-auth-payments/template/src/components/providers/app-providers.tsx +28 -0
  118. package/src/templates/web/ui-auth-payments/template/src/components/shared/header.tsx +60 -0
  119. package/src/templates/web/ui-auth-payments/template/src/components/ui/badge.tsx +36 -0
  120. package/src/templates/web/ui-auth-payments/template/src/lib/utils.ts +7 -0
  121. package/src/templates/web/ui-auth-payments/template/tailwind.config.js +77 -0
  122. package/src/templates/web/ui-auth-payments/template/tsconfig.json +33 -0
  123. package/src/templates/web/ui-auth-payments-audio/template/README.md +187 -0
  124. package/src/templates/web/ui-auth-payments-audio/template/next.config.js +12 -0
  125. package/src/templates/web/ui-auth-payments-audio/template/package.json +42 -0
  126. package/src/templates/web/ui-auth-payments-audio/template/postcss.config.js +7 -0
  127. package/src/templates/web/ui-auth-payments-audio/template/src/app/auth/callback/route.ts +12 -0
  128. package/src/templates/web/ui-auth-payments-audio/template/src/app/billing/page.tsx +211 -0
  129. package/src/templates/web/ui-auth-payments-audio/template/src/app/checkout/page.tsx +142 -0
  130. package/src/templates/web/ui-auth-payments-audio/template/src/app/globals.css +42 -0
  131. package/src/templates/web/ui-auth-payments-audio/template/src/app/layout.tsx +29 -0
  132. package/src/templates/web/ui-auth-payments-audio/template/src/app/login/page.tsx +109 -0
  133. package/src/templates/web/ui-auth-payments-audio/template/src/app/page.tsx +181 -0
  134. package/src/templates/web/ui-auth-payments-audio/template/src/app/signup/page.tsx +128 -0
  135. package/src/templates/web/ui-auth-payments-audio/template/src/components/providers/app-providers.tsx +28 -0
  136. package/src/templates/web/ui-auth-payments-audio/template/src/components/shared/header.tsx +60 -0
  137. package/src/templates/web/ui-auth-payments-audio/template/src/components/ui/badge.tsx +36 -0
  138. package/src/templates/web/ui-auth-payments-audio/template/src/lib/utils.ts +7 -0
  139. package/src/templates/web/ui-auth-payments-audio/template/tailwind.config.js +77 -0
  140. package/src/templates/web/ui-auth-payments-audio/template/tsconfig.json +33 -0
  141. package/src/templates/web/ui-auth-payments-video/template/README.md +190 -0
  142. package/src/templates/web/ui-auth-payments-video/template/next.config.js +12 -0
  143. package/src/templates/web/ui-auth-payments-video/template/package.json +42 -0
  144. package/src/templates/web/ui-auth-payments-video/template/postcss.config.js +7 -0
  145. package/src/templates/web/ui-auth-payments-video/template/src/app/auth/callback/route.ts +12 -0
  146. package/src/templates/web/ui-auth-payments-video/template/src/app/billing/page.tsx +211 -0
  147. package/src/templates/web/ui-auth-payments-video/template/src/app/checkout/page.tsx +142 -0
  148. package/src/templates/web/ui-auth-payments-video/template/src/app/globals.css +42 -0
  149. package/src/templates/web/ui-auth-payments-video/template/src/app/layout.tsx +29 -0
  150. package/src/templates/web/ui-auth-payments-video/template/src/app/login/page.tsx +109 -0
  151. package/src/templates/web/ui-auth-payments-video/template/src/app/page.tsx +187 -0
  152. package/src/templates/web/ui-auth-payments-video/template/src/app/signup/page.tsx +128 -0
  153. package/src/templates/web/ui-auth-payments-video/template/src/components/providers/app-providers.tsx +28 -0
  154. package/src/templates/web/ui-auth-payments-video/template/src/components/shared/header.tsx +60 -0
  155. package/src/templates/web/ui-auth-payments-video/template/src/components/ui/badge.tsx +36 -0
  156. package/src/templates/web/ui-auth-payments-video/template/src/lib/utils.ts +7 -0
  157. package/src/templates/web/ui-auth-payments-video/template/tailwind.config.js +77 -0
  158. package/src/templates/web/ui-auth-payments-video/template/tsconfig.json +33 -0
  159. package/src/templates/web/ui-only/template/.env.example +15 -0
  160. package/src/templates/web/ui-only/template/README.md +68 -0
  161. package/src/templates/web/ui-only/template/next.config.js +12 -0
  162. package/src/templates/web/{web-ui-package → ui-only}/template/package.json +3 -3
  163. package/src/templates/web/ui-only/template/postcss.config.js +7 -0
  164. package/src/templates/web/ui-only/template/src/app/auth/callback/route.ts +12 -0
  165. package/src/templates/web/ui-only/template/src/app/checkout/page.tsx +25 -0
  166. package/src/templates/web/ui-only/template/src/app/globals.css +42 -0
  167. package/src/templates/web/ui-only/template/src/app/layout.tsx +29 -0
  168. package/src/templates/web/ui-only/template/src/app/login/page.tsx +63 -0
  169. package/src/templates/web/ui-only/template/src/app/signup/page.tsx +79 -0
  170. package/src/templates/web/ui-only/template/src/components/providers/app-providers.tsx +22 -0
  171. package/src/templates/web/ui-only/template/src/components/shared/header.tsx +51 -0
  172. package/src/templates/web/ui-only/template/src/components/ui/badge.tsx +36 -0
  173. package/src/templates/web/ui-only/template/src/lib/utils.ts +7 -0
  174. package/src/templates/web/ui-only/template/tailwind.config.js +77 -0
  175. package/src/templates/web/ui-only/template/tsconfig.json +33 -0
  176. package/src/templates/web/ui-only/template.backup/.env.example +15 -0
  177. package/{dist/mobile/base/template → src/templates/web/ui-only/template.backup.20250817}/.env.example +15 -15
  178. package/src/templates/web/ui-package-test/template/package.json +2 -2
  179. package/dist/templates/web/web-ui-package/template/src/app/auth/callback/route.ts +0 -18
  180. package/dist/templates/web/web-ui-package/template/src/app/login/page.tsx +0 -39
  181. package/dist/templates/web/web-ui-package/template/src/app/signup/page.tsx +0 -39
  182. package/dist/templates/web/web-ui-package/template/src/components/providers/app-providers.tsx +0 -29
  183. package/src/templates/web/web-ui-package/template/.eslintrc.js +0 -8
  184. package/src/templates/web/web-ui-package/template/src/app/auth/callback/route.ts +0 -18
  185. package/src/templates/web/web-ui-package/template/src/app/login/page.tsx +0 -39
  186. package/src/templates/web/web-ui-package/template/src/app/signup/page.tsx +0 -39
  187. package/src/templates/web/web-ui-package/template/src/components/providers/app-providers.tsx +0 -29
  188. /package/dist/{web/base → templates/web/ui-auth}/template/.env.example +0 -0
  189. /package/dist/templates/web/{web-ui-package → ui-auth}/template/.eslintrc.js +0 -0
  190. /package/dist/templates/web/{web-ui-package → ui-auth}/template/README.md +0 -0
  191. /package/dist/{web/base → templates/web/ui-auth}/template.backup/.env.example +0 -0
  192. /package/dist/{web/base → templates/web/ui-auth}/template.backup.20250817/.env.example +0 -0
  193. /package/dist/templates/web/{web-ui-package → ui-auth-payments}/template/.env.example +0 -0
  194. /package/dist/templates/web/{web-ui-package/template.backup.20250817 → ui-auth-payments-audio/template}/.env.example +0 -0
  195. /package/dist/templates/web/{web-ui-package → ui-auth-payments-audio}/template/postcss.config.js +0 -0
  196. /package/dist/templates/web/{web-ui-package → ui-auth-payments-audio}/template/src/app/globals.css +0 -0
  197. /package/dist/templates/web/{web-ui-package → ui-auth-payments-audio}/template/src/app/layout.tsx +0 -0
  198. /package/dist/templates/web/{web-ui-package → ui-auth-payments-audio}/template/src/components/ui/badge.tsx +0 -0
  199. /package/dist/templates/web/{web-ui-package → ui-auth-payments-audio}/template/src/lib/utils.ts +0 -0
  200. /package/dist/templates/web/{web-ui-package → ui-auth-payments-audio}/template/tsconfig.json +0 -0
  201. /package/dist/templates/web/{web-ui-package/template.backup → ui-auth-payments-video/template}/.env.example +0 -0
  202. /package/{src/templates/web/web-ui-package → dist/templates/web/ui-auth-payments-video}/template/postcss.config.js +0 -0
  203. /package/{src/templates/web/web-ui-package → dist/templates/web/ui-auth-payments-video}/template/src/app/globals.css +0 -0
  204. /package/{src/templates/web/web-ui-package → dist/templates/web/ui-auth-payments-video}/template/src/app/layout.tsx +0 -0
  205. /package/{src/templates/web/web-ui-package → dist/templates/web/ui-auth-payments-video}/template/src/components/ui/badge.tsx +0 -0
  206. /package/{src/templates/web/web-ui-package → dist/templates/web/ui-auth-payments-video}/template/src/lib/utils.ts +0 -0
  207. /package/{src/templates/web/web-ui-package → dist/templates/web/ui-auth-payments-video}/template/tsconfig.json +0 -0
  208. /package/dist/{web/ui-package-test → templates/web/ui-only}/template/.env.example +0 -0
  209. /package/dist/{web/base → templates/web/ui-only}/template/.eslintrc.js +0 -0
  210. /package/{src/templates/web/web-ui-package → dist/templates/web/ui-only}/template/README.md +0 -0
  211. /package/dist/templates/web/{web-ui-package → ui-only}/template/src/app/page.tsx +0 -0
  212. /package/dist/{web/ui-package-test → templates/web/ui-only}/template.backup/.env.example +0 -0
  213. /package/dist/{web/ui-package-test → templates/web/ui-only}/template.backup.20250817/.env.example +0 -0
  214. /package/src/templates/web/{web-ui-package → ui-auth}/template/.env.example +0 -0
  215. /package/{dist/web/ui-package-test → src/templates/web/ui-auth}/template/.eslintrc.js +0 -0
  216. /package/src/templates/web/{web-ui-package → ui-auth}/template.backup/.env.example +0 -0
  217. /package/src/templates/web/{web-ui-package → ui-auth}/template.backup.20250817/.env.example +0 -0
  218. /package/{dist/web/web-ui-package → src/templates/web/ui-auth-payments}/template/.env.example +0 -0
  219. /package/{dist/web/web-ui-package/template.backup.20250817 → src/templates/web/ui-auth-payments-audio/template}/.env.example +0 -0
  220. /package/{dist/web/web-ui-package/template.backup → src/templates/web/ui-auth-payments-video/template}/.env.example +0 -0
  221. /package/{dist/web/web-ui-package → src/templates/web/ui-only}/template/.eslintrc.js +0 -0
  222. /package/src/templates/web/{web-ui-package → ui-only}/template/src/app/page.tsx +0 -0
@@ -0,0 +1,190 @@
1
+ # {{titleCaseName}}
2
+
3
+ {{description}}
4
+
5
+ This is a Next.js 15 project created with the **Video Player App** template from `@digilogiclabs/create-saas-app`. It includes:
6
+
7
+ - 🎬 **Video Player** - Advanced video streaming capabilities
8
+ - 🎨 **UI Components** - @digilogiclabs/saas-factory-ui v0.10.0 with video 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
+ ### Video Player
19
+ - Comprehensive video player with quality selection
20
+ - Fullscreen support and playlist functionality
21
+ - Custom controls overlay with auto-hide
22
+ - Progress tracking and seeking
23
+ - Volume controls and mute
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 VideoPlayer
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, VideoPlayer } from '@digilogiclabs/saas-factory-ui'
108
+
109
+ <Button variant="primary">Click me</Button>
110
+ <Card>Content here</Card>
111
+ <VideoPlayer
112
+ videos={[
113
+ {
114
+ id: '1',
115
+ title: 'Video Title',
116
+ description: 'Video description',
117
+ duration: 300,
118
+ src: '/path/to/video.mp4',
119
+ thumbnail: '/path/to/thumbnail.jpg',
120
+ qualities: [
121
+ { label: '480p', src: '/path/to/480p.mp4' },
122
+ { label: '720p', src: '/path/to/720p.mp4' }
123
+ ]
124
+ }
125
+ ]}
126
+ />
127
+ ```
128
+
129
+ ### Auth Package (@digilogiclabs/saas-factory-auth)
130
+ ```tsx
131
+ import { useAuth } from '@digilogiclabs/saas-factory-auth'
132
+
133
+ const { user, signIn, signOut, loading } = useAuth()
134
+ ```
135
+
136
+ ### Payments Package (@digilogiclabs/saas-factory-payments)
137
+ ```tsx
138
+ import {
139
+ PaymentForm,
140
+ SubscriptionPlans,
141
+ SubscriptionManager
142
+ } from '@digilogiclabs/saas-factory-payments'
143
+
144
+ <SubscriptionPlans onPlanSelect={handlePlanSelect} />
145
+ <PaymentForm onSuccess={handleSuccess} onError={handleError} />
146
+ <SubscriptionManager onSubscriptionChange={handleChange} />
147
+ ```
148
+
149
+ ## Project Structure
150
+
151
+ ```
152
+ src/
153
+ ├── app/ # Next.js 15 app directory
154
+ │ ├── billing/ # Billing and subscription management
155
+ │ ├── checkout/ # Payment and subscription selection
156
+ │ ├── login/ # Authentication pages
157
+ │ ├── signup/
158
+ │ └── layout.tsx # Root layout with providers
159
+ ├── components/
160
+ │ ├── providers/ # App-wide providers (Auth, Payments, Theme)
161
+ │ ├── shared/ # Shared components (Header, etc.)
162
+ │ └── ui/ # UI components
163
+ └── lib/ # Utilities and configurations
164
+ ```
165
+
166
+ ## Deployment
167
+
168
+ ### Vercel (Recommended)
169
+ 1. Push your code to GitHub
170
+ 2. Connect your repository to Vercel
171
+ 3. Add environment variables in Vercel dashboard
172
+ 4. Deploy
173
+
174
+ ### Other Platforms
175
+ This is a standard Next.js application and can be deployed to any platform that supports Node.js.
176
+
177
+ ## Learn More
178
+
179
+ - [Next.js Documentation](https://nextjs.org/docs)
180
+ - [Digi Logic Labs Documentation](https://docs.digilogiclabs.com)
181
+ - [SaaS Factory UI Components](https://ui.digilogiclabs.com)
182
+ - [SaaS Factory Auth Guide](https://auth.digilogiclabs.com)
183
+ - [SaaS Factory Payments Guide](https://payments.digilogiclabs.com)
184
+
185
+ ## Support
186
+
187
+ - 📚 [Documentation](https://docs.digilogiclabs.com)
188
+ - 💬 [Discord Community](https://discord.gg/digilogiclabs)
189
+ - 🐛 [Report Issues](https://github.com/DigiLogicLabs/create-saas-app/issues)
190
+
@@ -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}} - Video 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
+ }
@@ -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
+
@@ -0,0 +1,142 @@
1
+ 'use client';
2
+
3
+ import React from 'react';
4
+ import { usePayments, formatCurrency } from '@digilogiclabs/saas-factory-payments';
5
+ import { Button, Card } from '@digilogiclabs/saas-factory-ui';
6
+
7
+ export default function CheckoutPage() {
8
+ const { loading } = usePayments();
9
+
10
+ const handlePlanSelect = (planId: string) => {
11
+ console.log('Plan selected:', planId);
12
+ // Handle plan selection - redirect to payment processing
13
+ };
14
+
15
+ const handlePayment = () => {
16
+ console.log('Processing payment...');
17
+ // Handle payment processing
18
+ };
19
+
20
+ // Example pricing plans - in real app these would come from your backend/Stripe
21
+ const plans = [
22
+ {
23
+ id: 'basic',
24
+ name: 'Basic Plan',
25
+ price: 999, // in cents
26
+ interval: 'month',
27
+ features: ['Feature 1', 'Feature 2', 'Feature 3'],
28
+ stripePriceId: 'price_basic_monthly'
29
+ },
30
+ {
31
+ id: 'pro',
32
+ name: 'Pro Plan',
33
+ price: 1999, // in cents
34
+ interval: 'month',
35
+ features: ['All Basic features', 'Feature 4', 'Feature 5', 'Priority support'],
36
+ popular: true,
37
+ stripePriceId: 'price_pro_monthly'
38
+ },
39
+ {
40
+ id: 'enterprise',
41
+ name: 'Enterprise Plan',
42
+ price: 4999, // in cents
43
+ interval: 'month',
44
+ features: ['All Pro features', 'Custom integrations', 'Dedicated support', 'SLA guarantee'],
45
+ stripePriceId: 'price_enterprise_monthly'
46
+ }
47
+ ];
48
+
49
+ return (
50
+ <div className="min-h-screen bg-gray-100 py-8">
51
+ <div className="max-w-6xl mx-auto px-4">
52
+ <div className="text-center mb-12">
53
+ <h1 className="text-4xl font-bold text-gray-900 mb-4">Choose Your Plan</h1>
54
+ <p className="text-xl text-gray-600">Select the perfect plan for your needs</p>
55
+ </div>
56
+
57
+ {/* Subscription Plans */}
58
+ <div className="grid md:grid-cols-3 gap-6 mb-8">
59
+ {plans.map((plan) => (
60
+ <Card key={plan.id} className={`p-6 relative ${plan.popular ? 'ring-2 ring-blue-500' : ''}`}>
61
+ {plan.popular && (
62
+ <div className="absolute -top-3 left-1/2 transform -translate-x-1/2">
63
+ <span className="bg-blue-500 text-white px-3 py-1 rounded-full text-sm font-medium">
64
+ Most Popular
65
+ </span>
66
+ </div>
67
+ )}
68
+ <h3 className="text-xl font-bold mb-2">{plan.name}</h3>
69
+ <div className="text-3xl font-bold mb-4">
70
+ {formatCurrency(plan.price)}
71
+ <span className="text-sm font-normal">/{plan.interval}</span>
72
+ </div>
73
+ <ul className="mb-6 space-y-2">
74
+ {plan.features.map((feature, index) => (
75
+ <li key={index} className="flex items-center">
76
+ <span className="text-green-500 mr-2">✓</span>
77
+ {feature}
78
+ </li>
79
+ ))}
80
+ </ul>
81
+ <Button
82
+ onClick={() => handlePlanSelect(plan.id)}
83
+ disabled={loading}
84
+ className="w-full"
85
+ variant={plan.popular ? 'default' : 'outline'}
86
+ >
87
+ {loading ? 'Processing...' : 'Select Plan'}
88
+ </Button>
89
+ </Card>
90
+ ))}
91
+ </div>
92
+
93
+ {/* Payment Form */}
94
+ <Card className="p-6 max-w-md mx-auto">
95
+ <h2 className="text-2xl font-bold mb-6">Payment Details</h2>
96
+ <div className="space-y-4">
97
+ <div>
98
+ <label className="block text-sm font-medium mb-2">Card Number</label>
99
+ <input
100
+ type="text"
101
+ placeholder="1234 5678 9012 3456"
102
+ className="w-full p-3 border rounded-lg"
103
+ disabled
104
+ />
105
+ </div>
106
+ <div className="grid grid-cols-2 gap-4">
107
+ <div>
108
+ <label className="block text-sm font-medium mb-2">Expiry Date</label>
109
+ <input
110
+ type="text"
111
+ placeholder="MM/YY"
112
+ className="w-full p-3 border rounded-lg"
113
+ disabled
114
+ />
115
+ </div>
116
+ <div>
117
+ <label className="block text-sm font-medium mb-2">CVC</label>
118
+ <input
119
+ type="text"
120
+ placeholder="123"
121
+ className="w-full p-3 border rounded-lg"
122
+ disabled
123
+ />
124
+ </div>
125
+ </div>
126
+ <Button
127
+ onClick={handlePayment}
128
+ disabled={loading}
129
+ className="w-full"
130
+ >
131
+ {loading ? 'Processing...' : 'Complete Payment'}
132
+ </Button>
133
+ <p className="text-sm text-gray-600 text-center">
134
+ This is a demo. Payment processing requires Stripe integration.
135
+ </p>
136
+ </div>
137
+ </Card>
138
+ </div>
139
+ </div>
140
+ );
141
+ }
142
+