@digilogiclabs/create-saas-app 2.10.0 → 2.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (416) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/README.md +153 -113
  3. package/dist/.tsbuildinfo +1 -1
  4. package/dist/cli/commands/create.d.ts.map +1 -1
  5. package/dist/cli/commands/create.js +2 -6
  6. package/dist/cli/commands/create.js.map +1 -1
  7. package/dist/cli/index.js +1 -1
  8. package/dist/cli/index.js.map +1 -1
  9. package/dist/generators/template-generator.d.ts.map +1 -1
  10. package/dist/generators/template-generator.js +15 -8
  11. package/dist/generators/template-generator.js.map +1 -1
  12. package/dist/templates/shared/admin/web/src/components/admin-nav.tsx +3 -3
  13. package/dist/templates/shared/auth/supabase/web/src/lib/auth-session.ts +36 -16
  14. package/dist/templates/shared/auth/supabase/web/src/middleware.ts +6 -0
  15. package/dist/templates/shared/cookie-consent/web/components/cookie-consent.tsx +5 -5
  16. package/dist/templates/shared/design/web/src/components/ui/button.tsx +56 -0
  17. package/dist/templates/shared/email/web/src/lib/email/client.ts +1 -1
  18. package/dist/templates/shared/error-pages/web/src/app/error.tsx +13 -11
  19. package/dist/templates/shared/error-pages/web/src/app/global-error.tsx +2 -0
  20. package/dist/templates/shared/error-pages/web/src/app/not-found.tsx +6 -6
  21. package/dist/templates/shared/legal/web/src/app/(legal)/privacy/page.tsx +4 -4
  22. package/dist/templates/shared/legal/web/src/app/(legal)/terms/page.tsx +4 -4
  23. package/dist/templates/shared/loading/web/components/skeleton.tsx +4 -4
  24. package/dist/templates/shared/mock/web/.env.local +55 -0
  25. package/dist/templates/shared/mock/web/src/components/mock-auth-provider.tsx +72 -0
  26. package/dist/templates/shared/mock/web/src/components/mock-banner.tsx +29 -0
  27. package/dist/templates/shared/mock/web/src/lib/mock.ts +147 -0
  28. package/dist/templates/shared/payments/web/src/app/api/webhooks/stripe/route.ts +10 -4
  29. package/dist/templates/shared/redis/web/src/lib/redis.ts +1 -1
  30. package/dist/templates/web/ai-platform/template/src/app/api/auth/route.ts +57 -0
  31. package/dist/templates/web/ai-platform/template/src/app/login/page.tsx +112 -0
  32. package/dist/templates/web/ai-platform/template/src/app/models/page.tsx +186 -0
  33. package/dist/templates/web/ai-platform/template/src/app/playground/page.tsx +251 -0
  34. package/dist/templates/web/ai-platform/template/src/app/settings/page.tsx +190 -0
  35. package/dist/templates/web/ai-platform/template/src/app/signup/page.tsx +133 -0
  36. package/dist/templates/web/ai-platform/template/src/lib/auth-session.ts +52 -0
  37. package/dist/templates/web/base/template/eslint.config.mjs +14 -0
  38. package/dist/templates/web/base/template/src/app/auth/callback/route.ts +1 -1
  39. package/dist/templates/web/base/template/src/app/checkout/page.tsx +76 -103
  40. package/dist/templates/web/base/template/src/app/dashboard/page.tsx +145 -329
  41. package/dist/templates/web/base/template/src/app/layout.tsx +40 -38
  42. package/dist/templates/web/base/template/src/app/login/page.tsx +116 -66
  43. package/dist/templates/web/base/template/src/app/page.tsx +97 -193
  44. package/dist/templates/web/base/template/src/app/settings/page.tsx +154 -0
  45. package/dist/templates/web/base/template/src/app/signup/page.tsx +117 -66
  46. package/dist/templates/web/base/template/src/components/providers/app-providers.tsx +8 -3
  47. package/dist/templates/web/base/template/src/components/shared/header.tsx +229 -63
  48. package/dist/templates/web/iot-dashboard/template/src/app/alerts/page.tsx +157 -0
  49. package/dist/templates/web/iot-dashboard/template/src/app/api/auth/route.ts +57 -0
  50. package/dist/templates/web/iot-dashboard/template/src/app/devices/[id]/page.tsx +204 -0
  51. package/dist/templates/web/iot-dashboard/template/src/app/devices/new/page.tsx +139 -0
  52. package/dist/templates/web/iot-dashboard/template/src/app/devices/page.tsx +171 -0
  53. package/dist/templates/web/iot-dashboard/template/src/app/login/page.tsx +112 -0
  54. package/dist/templates/web/iot-dashboard/template/src/app/settings/page.tsx +186 -0
  55. package/dist/templates/web/iot-dashboard/template/src/app/signup/page.tsx +133 -0
  56. package/dist/templates/web/iot-dashboard/template/src/lib/auth-session.ts +52 -0
  57. package/dist/templates/web/marketplace/template/src/app/api/auth/route.ts +57 -0
  58. package/dist/templates/web/marketplace/template/src/app/login/page.tsx +112 -0
  59. package/dist/templates/web/marketplace/template/src/app/orders/page.tsx +160 -0
  60. package/dist/templates/web/marketplace/template/src/app/products/[id]/page.tsx +218 -0
  61. package/dist/templates/web/marketplace/template/src/app/settings/page.tsx +150 -0
  62. package/dist/templates/web/marketplace/template/src/app/signup/page.tsx +133 -0
  63. package/dist/templates/web/marketplace/template/src/lib/auth-session.ts +52 -0
  64. package/dist/templates/web/micro-saas/template/src/app/api/auth/route.ts +57 -0
  65. package/dist/templates/web/micro-saas/template/src/app/login/page.tsx +14 -3
  66. package/dist/templates/web/micro-saas/template/src/app/signup/page.tsx +15 -4
  67. package/dist/templates/web/micro-saas/template/src/lib/auth-session.ts +52 -0
  68. package/dist/templates/web/ui-auth/template/eslint.config.mjs +14 -0
  69. package/dist/templates/web/ui-auth/template/src/app/checkout/page.tsx +3 -3
  70. package/dist/templates/web/ui-auth/template/src/app/dev-setup/page.tsx +81 -91
  71. package/dist/templates/web/ui-auth/template/src/app/layout.tsx +38 -36
  72. package/dist/templates/web/ui-auth/template/src/app/login/page.tsx +22 -45
  73. package/dist/templates/web/ui-auth/template/src/app/page.tsx +106 -306
  74. package/dist/templates/web/ui-auth/template/src/app/setup/page.tsx +387 -402
  75. package/dist/templates/web/ui-auth/template/src/app/signup/page.tsx +24 -47
  76. package/dist/templates/web/ui-auth/template/src/components/providers/app-providers.tsx +8 -3
  77. package/dist/templates/web/ui-auth/template/src/components/shared/header.tsx +229 -94
  78. package/dist/templates/web/ui-auth-ai/template/src/app/layout.tsx +38 -45
  79. package/dist/templates/web/ui-auth-ai/template/src/app/login/page.tsx +86 -0
  80. package/dist/templates/web/ui-auth-ai/template/src/app/page.tsx +107 -193
  81. package/dist/templates/web/ui-auth-ai/template/src/app/signup/page.tsx +105 -0
  82. package/dist/templates/web/ui-auth-ai/template/src/components/ai/audio-generator.tsx +144 -140
  83. package/dist/templates/web/ui-auth-ai/template/src/components/ai/video-generator.tsx +156 -157
  84. package/dist/templates/web/ui-auth-ai/template/src/components/auth/login-form.tsx +7 -3
  85. package/dist/templates/web/ui-auth-ai/template/src/components/providers/app-providers.tsx +25 -0
  86. package/dist/templates/web/ui-auth-ai/template/src/components/shared/footer.tsx +36 -0
  87. package/dist/templates/web/ui-auth-ai/template/src/components/shared/header.tsx +228 -0
  88. package/dist/templates/web/ui-auth-ai/template/src/components/ui/button.tsx +5 -5
  89. package/dist/templates/web/ui-auth-ai/template/src/components/ui/input.tsx +1 -1
  90. package/dist/templates/web/ui-auth-ai/template/src/components/ui/select.tsx +1 -1
  91. package/dist/templates/web/ui-auth-ai/template/src/components/ui/textarea.tsx +1 -1
  92. package/dist/templates/web/ui-auth-ai/template/src/components/ui/theme-toggle.tsx +34 -0
  93. package/dist/templates/web/ui-auth-ai/template/src/lib/supabase.ts +6 -4
  94. package/dist/templates/web/ui-auth-ai/template/src/providers/auth-provider.tsx +7 -5
  95. package/dist/templates/web/ui-auth-payments/template/src/app/billing/page.tsx +63 -192
  96. package/dist/templates/web/ui-auth-payments/template/src/app/checkout/page.tsx +104 -296
  97. package/dist/templates/web/ui-auth-payments/template/src/app/dashboard/page.tsx +27 -27
  98. package/dist/templates/web/ui-auth-payments/template/src/app/dev-setup/page.tsx +70 -81
  99. package/dist/templates/web/ui-auth-payments/template/src/app/layout.tsx +38 -36
  100. package/dist/templates/web/ui-auth-payments/template/src/app/login/loading.tsx +9 -9
  101. package/dist/templates/web/ui-auth-payments/template/src/app/login/page.tsx +4 -104
  102. package/dist/templates/web/ui-auth-payments/template/src/app/page.tsx +69 -337
  103. package/dist/templates/web/ui-auth-payments/template/src/app/setup/page.tsx +55 -68
  104. package/dist/templates/web/ui-auth-payments/template/src/app/signup/loading.tsx +13 -13
  105. package/dist/templates/web/ui-auth-payments/template/src/app/signup/page.tsx +4 -123
  106. package/dist/templates/web/ui-auth-payments/template/src/components/client/auth-status.tsx +37 -52
  107. package/dist/templates/web/ui-auth-payments/template/src/components/client/login-form.tsx +49 -103
  108. package/dist/templates/web/ui-auth-payments/template/src/components/client/newsletter-signup.tsx +4 -4
  109. package/dist/templates/web/ui-auth-payments/template/src/components/client/signup-form.tsx +60 -140
  110. package/dist/templates/web/ui-auth-payments/template/src/components/providers/app-providers.tsx +25 -28
  111. package/dist/templates/web/ui-auth-payments/template/src/components/shared/header.tsx +229 -230
  112. package/dist/templates/web/ui-auth-payments/template/src/lib/actions/auth.ts +245 -245
  113. package/dist/templates/web/ui-auth-payments/template/src/lib/actions/index.ts +339 -339
  114. package/dist/templates/web/ui-auth-payments-ai/template/src/app/ai/page.tsx +305 -309
  115. package/dist/templates/web/ui-auth-payments-ai/template/src/app/billing/page.tsx +62 -312
  116. package/dist/templates/web/ui-auth-payments-ai/template/src/app/checkout/page.tsx +109 -125
  117. package/dist/templates/web/ui-auth-payments-ai/template/src/app/dashboard/page.tsx +27 -27
  118. package/dist/templates/web/ui-auth-payments-ai/template/src/app/dev-setup/page.tsx +68 -83
  119. package/dist/templates/web/ui-auth-payments-ai/template/src/app/layout.tsx +40 -38
  120. package/dist/templates/web/ui-auth-payments-ai/template/src/app/onboarding/page.tsx +20 -20
  121. package/dist/templates/web/ui-auth-payments-ai/template/src/app/page.tsx +140 -394
  122. package/dist/templates/web/ui-auth-payments-ai/template/src/app/settings/page.tsx +28 -27
  123. package/dist/templates/web/ui-auth-payments-ai/template/src/app/setup/page.tsx +51 -66
  124. package/dist/templates/web/ui-auth-payments-ai/template/src/components/client/auth-status.tsx +37 -52
  125. package/dist/templates/web/ui-auth-payments-ai/template/src/components/client/login-form.tsx +50 -79
  126. package/dist/templates/web/ui-auth-payments-ai/template/src/components/client/signup-form.tsx +58 -111
  127. package/dist/templates/web/ui-auth-payments-ai/template/src/components/providers/app-providers.tsx +8 -3
  128. package/dist/templates/web/ui-auth-payments-ai/template/src/components/shared/header.tsx +229 -252
  129. package/dist/templates/web/ui-auth-payments-ai/template/src/lib/actions/auth.ts +245 -245
  130. package/dist/templates/web/ui-auth-payments-audio/template/src/app/billing/page.tsx +63 -192
  131. package/dist/templates/web/ui-auth-payments-audio/template/src/app/checkout/page.tsx +109 -125
  132. package/dist/templates/web/ui-auth-payments-audio/template/src/app/dashboard/page.tsx +27 -27
  133. package/dist/templates/web/ui-auth-payments-audio/template/src/app/layout.tsx +40 -38
  134. package/dist/templates/web/ui-auth-payments-audio/template/src/app/page.tsx +122 -385
  135. package/dist/templates/web/ui-auth-payments-audio/template/src/app/setup/page.tsx +340 -344
  136. package/dist/templates/web/ui-auth-payments-audio/template/src/components/client/auth-status.tsx +37 -52
  137. package/dist/templates/web/ui-auth-payments-audio/template/src/components/client/login-form.tsx +49 -103
  138. package/dist/templates/web/ui-auth-payments-audio/template/src/components/client/signup-form.tsx +60 -140
  139. package/dist/templates/web/ui-auth-payments-audio/template/src/components/providers/app-providers.tsx +8 -3
  140. package/dist/templates/web/ui-auth-payments-audio/template/src/components/shared/header.tsx +229 -252
  141. package/dist/templates/web/ui-auth-payments-audio/template/src/lib/actions/auth.ts +3 -3
  142. package/dist/templates/web/ui-auth-payments-video/template/src/app/billing/page.tsx +63 -192
  143. package/dist/templates/web/ui-auth-payments-video/template/src/app/checkout/page.tsx +109 -125
  144. package/dist/templates/web/ui-auth-payments-video/template/src/app/layout.tsx +38 -36
  145. package/dist/templates/web/ui-auth-payments-video/template/src/app/login/page.tsx +9 -109
  146. package/dist/templates/web/ui-auth-payments-video/template/src/app/page.tsx +132 -392
  147. package/dist/templates/web/ui-auth-payments-video/template/src/app/setup/page.tsx +346 -350
  148. package/dist/templates/web/ui-auth-payments-video/template/src/app/signup/page.tsx +9 -128
  149. package/dist/templates/web/ui-auth-payments-video/template/src/components/client/login-form.tsx +90 -0
  150. package/dist/templates/web/ui-auth-payments-video/template/src/components/client/signup-form.tsx +105 -0
  151. package/dist/templates/web/ui-auth-payments-video/template/src/components/providers/app-providers.tsx +8 -3
  152. package/dist/templates/web/ui-auth-payments-video/template/src/components/shared/header.tsx +229 -246
  153. package/dist/templates/web/ui-only/template/eslint.config.mjs +14 -0
  154. package/dist/templates/web/ui-only/template/src/app/checkout/page.tsx +2 -2
  155. package/dist/templates/web/ui-only/template/src/app/login/page.tsx +69 -63
  156. package/dist/templates/web/ui-only/template/src/app/page.tsx +69 -91
  157. package/dist/templates/web/ui-only/template/src/app/signup/page.tsx +94 -79
  158. package/dist/templates/web/ui-only/template/src/components/providers/app-providers.tsx +1 -6
  159. package/dist/templates/web/ui-only/template/src/components/shared/header.tsx +90 -53
  160. package/dist/templates/web/ui-package-test/template/package.json +19 -23
  161. package/dist/templates/web/ui-package-test/template/postcss.config.mjs +8 -0
  162. package/dist/templates/web/ui-package-test/template/src/app/globals.css +88 -0
  163. package/dist/templates/web/ui-package-test/template/src/app/layout.tsx +27 -0
  164. package/dist/templates/web/ui-package-test/template/src/app/page.tsx +46 -106
  165. package/package.json +1 -1
  166. package/src/templates/shared/admin/web/src/components/admin-nav.tsx +3 -3
  167. package/src/templates/shared/auth/supabase/web/src/lib/auth-session.ts +36 -16
  168. package/src/templates/shared/auth/supabase/web/src/middleware.ts +6 -0
  169. package/src/templates/shared/cookie-consent/web/components/cookie-consent.tsx +5 -5
  170. package/src/templates/shared/design/web/src/components/ui/button.tsx +56 -0
  171. package/src/templates/shared/email/web/src/lib/email/client.ts +1 -1
  172. package/src/templates/shared/error-pages/web/src/app/error.tsx +13 -11
  173. package/src/templates/shared/error-pages/web/src/app/global-error.tsx +2 -0
  174. package/src/templates/shared/error-pages/web/src/app/not-found.tsx +6 -6
  175. package/src/templates/shared/legal/web/src/app/(legal)/privacy/page.tsx +4 -4
  176. package/src/templates/shared/legal/web/src/app/(legal)/terms/page.tsx +4 -4
  177. package/src/templates/shared/loading/web/components/skeleton.tsx +4 -4
  178. package/src/templates/shared/mock/web/.env.local +55 -0
  179. package/src/templates/shared/mock/web/src/components/mock-auth-provider.tsx +72 -0
  180. package/src/templates/shared/mock/web/src/components/mock-banner.tsx +29 -0
  181. package/src/templates/shared/mock/web/src/lib/mock.ts +147 -0
  182. package/src/templates/shared/payments/web/src/app/api/webhooks/stripe/route.ts +10 -4
  183. package/src/templates/shared/redis/web/src/lib/redis.ts +1 -1
  184. package/src/templates/web/ai-platform/template/src/app/api/auth/route.ts +57 -0
  185. package/src/templates/web/ai-platform/template/src/app/login/page.tsx +112 -0
  186. package/src/templates/web/ai-platform/template/src/app/models/page.tsx +186 -0
  187. package/src/templates/web/ai-platform/template/src/app/playground/page.tsx +251 -0
  188. package/src/templates/web/ai-platform/template/src/app/settings/page.tsx +190 -0
  189. package/src/templates/web/ai-platform/template/src/app/signup/page.tsx +133 -0
  190. package/src/templates/web/ai-platform/template/src/lib/auth-session.ts +52 -0
  191. package/src/templates/web/base/template/eslint.config.mjs +14 -0
  192. package/src/templates/web/base/template/src/app/auth/callback/route.ts +1 -1
  193. package/src/templates/web/base/template/src/app/checkout/page.tsx +76 -103
  194. package/src/templates/web/base/template/src/app/dashboard/page.tsx +145 -329
  195. package/src/templates/web/base/template/src/app/layout.tsx +40 -38
  196. package/src/templates/web/base/template/src/app/login/page.tsx +116 -66
  197. package/src/templates/web/base/template/src/app/page.tsx +97 -193
  198. package/src/templates/web/base/template/src/app/settings/page.tsx +154 -0
  199. package/src/templates/web/base/template/src/app/signup/page.tsx +117 -66
  200. package/src/templates/web/base/template/src/components/providers/app-providers.tsx +8 -3
  201. package/src/templates/web/base/template/src/components/shared/header.tsx +229 -63
  202. package/src/templates/web/iot-dashboard/template/src/app/alerts/page.tsx +157 -0
  203. package/src/templates/web/iot-dashboard/template/src/app/api/auth/route.ts +57 -0
  204. package/src/templates/web/iot-dashboard/template/src/app/devices/[id]/page.tsx +204 -0
  205. package/src/templates/web/iot-dashboard/template/src/app/devices/new/page.tsx +139 -0
  206. package/src/templates/web/iot-dashboard/template/src/app/devices/page.tsx +171 -0
  207. package/src/templates/web/iot-dashboard/template/src/app/login/page.tsx +112 -0
  208. package/src/templates/web/iot-dashboard/template/src/app/settings/page.tsx +186 -0
  209. package/src/templates/web/iot-dashboard/template/src/app/signup/page.tsx +133 -0
  210. package/src/templates/web/iot-dashboard/template/src/lib/auth-session.ts +52 -0
  211. package/src/templates/web/marketplace/template/src/app/api/auth/route.ts +57 -0
  212. package/src/templates/web/marketplace/template/src/app/login/page.tsx +112 -0
  213. package/src/templates/web/marketplace/template/src/app/orders/page.tsx +160 -0
  214. package/src/templates/web/marketplace/template/src/app/products/[id]/page.tsx +218 -0
  215. package/src/templates/web/marketplace/template/src/app/settings/page.tsx +150 -0
  216. package/src/templates/web/marketplace/template/src/app/signup/page.tsx +133 -0
  217. package/src/templates/web/marketplace/template/src/lib/auth-session.ts +52 -0
  218. package/src/templates/web/micro-saas/template/src/app/api/auth/route.ts +57 -0
  219. package/src/templates/web/micro-saas/template/src/app/login/page.tsx +14 -3
  220. package/src/templates/web/micro-saas/template/src/app/signup/page.tsx +15 -4
  221. package/src/templates/web/micro-saas/template/src/lib/auth-session.ts +52 -0
  222. package/src/templates/web/ui-auth/template/eslint.config.mjs +14 -0
  223. package/src/templates/web/ui-auth/template/src/app/checkout/page.tsx +3 -3
  224. package/src/templates/web/ui-auth/template/src/app/dev-setup/page.tsx +81 -91
  225. package/src/templates/web/ui-auth/template/src/app/layout.tsx +38 -36
  226. package/src/templates/web/ui-auth/template/src/app/login/page.tsx +22 -45
  227. package/src/templates/web/ui-auth/template/src/app/page.tsx +106 -306
  228. package/src/templates/web/ui-auth/template/src/app/setup/page.tsx +387 -402
  229. package/src/templates/web/ui-auth/template/src/app/signup/page.tsx +24 -47
  230. package/src/templates/web/ui-auth/template/src/components/providers/app-providers.tsx +8 -3
  231. package/src/templates/web/ui-auth/template/src/components/shared/header.tsx +229 -94
  232. package/src/templates/web/ui-auth-ai/template/src/app/layout.tsx +38 -45
  233. package/src/templates/web/ui-auth-ai/template/src/app/login/page.tsx +86 -0
  234. package/src/templates/web/ui-auth-ai/template/src/app/page.tsx +107 -193
  235. package/src/templates/web/ui-auth-ai/template/src/app/signup/page.tsx +105 -0
  236. package/src/templates/web/ui-auth-ai/template/src/components/ai/audio-generator.tsx +144 -140
  237. package/src/templates/web/ui-auth-ai/template/src/components/ai/video-generator.tsx +156 -157
  238. package/src/templates/web/ui-auth-ai/template/src/components/auth/login-form.tsx +7 -3
  239. package/src/templates/web/ui-auth-ai/template/src/components/providers/app-providers.tsx +25 -0
  240. package/src/templates/web/ui-auth-ai/template/src/components/shared/footer.tsx +36 -0
  241. package/src/templates/web/ui-auth-ai/template/src/components/shared/header.tsx +228 -0
  242. package/src/templates/web/ui-auth-ai/template/src/components/ui/button.tsx +5 -5
  243. package/src/templates/web/ui-auth-ai/template/src/components/ui/input.tsx +1 -1
  244. package/src/templates/web/ui-auth-ai/template/src/components/ui/select.tsx +1 -1
  245. package/src/templates/web/ui-auth-ai/template/src/components/ui/textarea.tsx +1 -1
  246. package/src/templates/web/ui-auth-ai/template/src/components/ui/theme-toggle.tsx +34 -0
  247. package/src/templates/web/ui-auth-ai/template/src/lib/supabase.ts +6 -4
  248. package/src/templates/web/ui-auth-ai/template/src/providers/auth-provider.tsx +7 -5
  249. package/src/templates/web/ui-auth-payments/template/src/app/billing/page.tsx +63 -192
  250. package/src/templates/web/ui-auth-payments/template/src/app/checkout/page.tsx +104 -296
  251. package/src/templates/web/ui-auth-payments/template/src/app/dashboard/page.tsx +27 -27
  252. package/src/templates/web/ui-auth-payments/template/src/app/dev-setup/page.tsx +70 -81
  253. package/src/templates/web/ui-auth-payments/template/src/app/layout.tsx +38 -36
  254. package/src/templates/web/ui-auth-payments/template/src/app/login/loading.tsx +9 -9
  255. package/src/templates/web/ui-auth-payments/template/src/app/login/page.tsx +4 -104
  256. package/src/templates/web/ui-auth-payments/template/src/app/page.tsx +69 -337
  257. package/src/templates/web/ui-auth-payments/template/src/app/setup/page.tsx +55 -68
  258. package/src/templates/web/ui-auth-payments/template/src/app/signup/loading.tsx +13 -13
  259. package/src/templates/web/ui-auth-payments/template/src/app/signup/page.tsx +4 -123
  260. package/src/templates/web/ui-auth-payments/template/src/components/client/auth-status.tsx +37 -52
  261. package/src/templates/web/ui-auth-payments/template/src/components/client/login-form.tsx +49 -103
  262. package/src/templates/web/ui-auth-payments/template/src/components/client/newsletter-signup.tsx +4 -4
  263. package/src/templates/web/ui-auth-payments/template/src/components/client/signup-form.tsx +60 -140
  264. package/src/templates/web/ui-auth-payments/template/src/components/providers/app-providers.tsx +25 -28
  265. package/src/templates/web/ui-auth-payments/template/src/components/shared/header.tsx +229 -230
  266. package/src/templates/web/ui-auth-payments/template/src/lib/actions/auth.ts +245 -245
  267. package/src/templates/web/ui-auth-payments/template/src/lib/actions/index.ts +339 -339
  268. package/src/templates/web/ui-auth-payments-ai/template/src/app/ai/page.tsx +305 -309
  269. package/src/templates/web/ui-auth-payments-ai/template/src/app/billing/page.tsx +62 -312
  270. package/src/templates/web/ui-auth-payments-ai/template/src/app/checkout/page.tsx +109 -125
  271. package/src/templates/web/ui-auth-payments-ai/template/src/app/dashboard/page.tsx +27 -27
  272. package/src/templates/web/ui-auth-payments-ai/template/src/app/dev-setup/page.tsx +68 -83
  273. package/src/templates/web/ui-auth-payments-ai/template/src/app/layout.tsx +40 -38
  274. package/src/templates/web/ui-auth-payments-ai/template/src/app/onboarding/page.tsx +20 -20
  275. package/src/templates/web/ui-auth-payments-ai/template/src/app/page.tsx +140 -394
  276. package/src/templates/web/ui-auth-payments-ai/template/src/app/settings/page.tsx +28 -27
  277. package/src/templates/web/ui-auth-payments-ai/template/src/app/setup/page.tsx +51 -66
  278. package/src/templates/web/ui-auth-payments-ai/template/src/components/client/auth-status.tsx +37 -52
  279. package/src/templates/web/ui-auth-payments-ai/template/src/components/client/login-form.tsx +50 -79
  280. package/src/templates/web/ui-auth-payments-ai/template/src/components/client/signup-form.tsx +58 -111
  281. package/src/templates/web/ui-auth-payments-ai/template/src/components/providers/app-providers.tsx +8 -3
  282. package/src/templates/web/ui-auth-payments-ai/template/src/components/shared/header.tsx +229 -252
  283. package/src/templates/web/ui-auth-payments-ai/template/src/lib/actions/auth.ts +245 -245
  284. package/src/templates/web/ui-auth-payments-audio/template/src/app/billing/page.tsx +63 -192
  285. package/src/templates/web/ui-auth-payments-audio/template/src/app/checkout/page.tsx +109 -125
  286. package/src/templates/web/ui-auth-payments-audio/template/src/app/dashboard/page.tsx +27 -27
  287. package/src/templates/web/ui-auth-payments-audio/template/src/app/layout.tsx +40 -38
  288. package/src/templates/web/ui-auth-payments-audio/template/src/app/page.tsx +122 -385
  289. package/src/templates/web/ui-auth-payments-audio/template/src/app/setup/page.tsx +340 -344
  290. package/src/templates/web/ui-auth-payments-audio/template/src/components/client/auth-status.tsx +37 -52
  291. package/src/templates/web/ui-auth-payments-audio/template/src/components/client/login-form.tsx +49 -103
  292. package/src/templates/web/ui-auth-payments-audio/template/src/components/client/signup-form.tsx +60 -140
  293. package/src/templates/web/ui-auth-payments-audio/template/src/components/providers/app-providers.tsx +8 -3
  294. package/src/templates/web/ui-auth-payments-audio/template/src/components/shared/header.tsx +229 -252
  295. package/src/templates/web/ui-auth-payments-audio/template/src/lib/actions/auth.ts +3 -3
  296. package/src/templates/web/ui-auth-payments-video/template/src/app/billing/page.tsx +63 -192
  297. package/src/templates/web/ui-auth-payments-video/template/src/app/checkout/page.tsx +109 -125
  298. package/src/templates/web/ui-auth-payments-video/template/src/app/layout.tsx +38 -36
  299. package/src/templates/web/ui-auth-payments-video/template/src/app/login/page.tsx +9 -109
  300. package/src/templates/web/ui-auth-payments-video/template/src/app/page.tsx +132 -392
  301. package/src/templates/web/ui-auth-payments-video/template/src/app/setup/page.tsx +346 -350
  302. package/src/templates/web/ui-auth-payments-video/template/src/app/signup/page.tsx +9 -128
  303. package/src/templates/web/ui-auth-payments-video/template/src/components/client/login-form.tsx +90 -0
  304. package/src/templates/web/ui-auth-payments-video/template/src/components/client/signup-form.tsx +105 -0
  305. package/src/templates/web/ui-auth-payments-video/template/src/components/providers/app-providers.tsx +8 -3
  306. package/src/templates/web/ui-auth-payments-video/template/src/components/shared/header.tsx +229 -246
  307. package/src/templates/web/ui-only/template/eslint.config.mjs +14 -0
  308. package/src/templates/web/ui-only/template/src/app/checkout/page.tsx +2 -2
  309. package/src/templates/web/ui-only/template/src/app/login/page.tsx +69 -63
  310. package/src/templates/web/ui-only/template/src/app/page.tsx +69 -91
  311. package/src/templates/web/ui-only/template/src/app/signup/page.tsx +94 -79
  312. package/src/templates/web/ui-only/template/src/components/providers/app-providers.tsx +1 -6
  313. package/src/templates/web/ui-only/template/src/components/shared/header.tsx +90 -53
  314. package/src/templates/web/ui-package-test/template/package.json +19 -23
  315. package/src/templates/web/ui-package-test/template/postcss.config.mjs +8 -0
  316. package/src/templates/web/ui-package-test/template/src/app/globals.css +88 -0
  317. package/src/templates/web/ui-package-test/template/src/app/layout.tsx +27 -0
  318. package/src/templates/web/ui-package-test/template/src/app/page.tsx +46 -106
  319. package/dist/templates/mobile/ui-auth-payments-ai-rag/template/README.md +0 -655
  320. package/dist/templates/mobile/ui-auth-payments-ai-rag/template/app/(tabs)/ai.tsx +0 -683
  321. package/dist/templates/mobile/ui-auth-payments-ai-rag/template/app/_layout.tsx +0 -124
  322. package/dist/templates/mobile/ui-auth-payments-ai-rag/template/app.json +0 -74
  323. package/dist/templates/mobile/ui-auth-payments-ai-rag/template/babel.config.js +0 -25
  324. package/dist/templates/mobile/ui-auth-payments-ai-rag/template/docs/MOBILE-SETUP.md +0 -787
  325. package/dist/templates/mobile/ui-auth-payments-ai-rag/template/eas.json +0 -25
  326. package/dist/templates/mobile/ui-auth-payments-ai-rag/template/expo-env.d.ts +0 -3
  327. package/dist/templates/mobile/ui-auth-payments-ai-rag/template/hooks/useRAGSystem.ts +0 -346
  328. package/dist/templates/mobile/ui-auth-payments-ai-rag/template/jest-setup.ts +0 -37
  329. package/dist/templates/mobile/ui-auth-payments-ai-rag/template/lib/rag/config.ts +0 -180
  330. package/dist/templates/mobile/ui-auth-payments-ai-rag/template/metro.config.js +0 -11
  331. package/dist/templates/mobile/ui-auth-payments-ai-rag/template/package.json +0 -122
  332. package/dist/templates/mobile/ui-auth-payments-ai-rag/template/scripts/setup-rag.js +0 -599
  333. package/dist/templates/mobile/ui-auth-payments-ai-rag/template/tsconfig.json +0 -32
  334. package/dist/templates/web/base/template/.eslintrc.js +0 -8
  335. package/dist/templates/web/base/template/src/components/__tests__/example.test.tsx +0 -49
  336. package/dist/templates/web/base/template/src/test/setup.ts +0 -74
  337. package/dist/templates/web/base/template/vitest.config.ts +0 -17
  338. package/dist/templates/web/ui-auth/template/.eslintrc.js +0 -8
  339. package/dist/templates/web/ui-auth/template/src/components/__tests__/example.test.tsx +0 -49
  340. package/dist/templates/web/ui-auth/template/src/test/setup.ts +0 -74
  341. package/dist/templates/web/ui-auth/template/vitest.config.ts +0 -17
  342. package/dist/templates/web/ui-auth-payments/template/src/components/__tests__/example.test.tsx +0 -49
  343. package/dist/templates/web/ui-auth-payments/template/src/test/setup.ts +0 -74
  344. package/dist/templates/web/ui-auth-payments/template/vitest.config.ts +0 -17
  345. package/dist/templates/web/ui-auth-payments-ai/template/src/components/__tests__/example.test.tsx +0 -49
  346. package/dist/templates/web/ui-auth-payments-ai/template/src/test/setup.ts +0 -74
  347. package/dist/templates/web/ui-auth-payments-ai/template/vitest.config.ts +0 -17
  348. package/dist/templates/web/ui-auth-payments-ai-rag/template/README.md +0 -434
  349. package/dist/templates/web/ui-auth-payments-ai-rag/template/components/rag/KnowledgeManager.tsx +0 -642
  350. package/dist/templates/web/ui-auth-payments-ai-rag/template/components/rag/RAGAnalytics.tsx +0 -466
  351. package/dist/templates/web/ui-auth-payments-ai-rag/template/components/rag/RAGChatInterface.tsx +0 -393
  352. package/dist/templates/web/ui-auth-payments-ai-rag/template/docs/GETTING-STARTED.md +0 -457
  353. package/dist/templates/web/ui-auth-payments-ai-rag/template/hooks/useRAGSystem.ts +0 -478
  354. package/dist/templates/web/ui-auth-payments-ai-rag/template/lib/rag/config.ts +0 -250
  355. package/dist/templates/web/ui-auth-payments-ai-rag/template/package.json +0 -73
  356. package/dist/templates/web/ui-auth-payments-ai-rag/template/scripts/setup-rag.js +0 -622
  357. package/dist/templates/web/ui-auth-payments-ai-rag/template/src/app/ai/page.tsx +0 -396
  358. package/dist/templates/web/ui-auth-payments-audio/template/src/components/__tests__/example.test.tsx +0 -49
  359. package/dist/templates/web/ui-auth-payments-audio/template/src/test/setup.ts +0 -74
  360. package/dist/templates/web/ui-auth-payments-audio/template/vitest.config.ts +0 -17
  361. package/dist/templates/web/ui-auth-payments-video/template/src/components/__tests__/example.test.tsx +0 -49
  362. package/dist/templates/web/ui-auth-payments-video/template/src/test/setup.ts +0 -74
  363. package/dist/templates/web/ui-auth-payments-video/template/vitest.config.ts +0 -17
  364. package/dist/templates/web/ui-only/template/.eslintrc.js +0 -8
  365. package/dist/templates/web/ui-only/template/src/components/__tests__/example.test.tsx +0 -49
  366. package/dist/templates/web/ui-only/template/src/test/setup.ts +0 -74
  367. package/dist/templates/web/ui-only/template/vitest.config.ts +0 -17
  368. package/src/templates/mobile/ui-auth-payments-ai-rag/template/README.md +0 -655
  369. package/src/templates/mobile/ui-auth-payments-ai-rag/template/app/(tabs)/ai.tsx +0 -683
  370. package/src/templates/mobile/ui-auth-payments-ai-rag/template/app/_layout.tsx +0 -124
  371. package/src/templates/mobile/ui-auth-payments-ai-rag/template/app.json +0 -74
  372. package/src/templates/mobile/ui-auth-payments-ai-rag/template/babel.config.js +0 -25
  373. package/src/templates/mobile/ui-auth-payments-ai-rag/template/docs/MOBILE-SETUP.md +0 -787
  374. package/src/templates/mobile/ui-auth-payments-ai-rag/template/eas.json +0 -25
  375. package/src/templates/mobile/ui-auth-payments-ai-rag/template/expo-env.d.ts +0 -3
  376. package/src/templates/mobile/ui-auth-payments-ai-rag/template/hooks/useRAGSystem.ts +0 -346
  377. package/src/templates/mobile/ui-auth-payments-ai-rag/template/jest-setup.ts +0 -37
  378. package/src/templates/mobile/ui-auth-payments-ai-rag/template/lib/rag/config.ts +0 -180
  379. package/src/templates/mobile/ui-auth-payments-ai-rag/template/metro.config.js +0 -11
  380. package/src/templates/mobile/ui-auth-payments-ai-rag/template/package.json +0 -122
  381. package/src/templates/mobile/ui-auth-payments-ai-rag/template/scripts/setup-rag.js +0 -599
  382. package/src/templates/mobile/ui-auth-payments-ai-rag/template/tsconfig.json +0 -32
  383. package/src/templates/web/base/template/.eslintrc.js +0 -8
  384. package/src/templates/web/base/template/src/components/__tests__/example.test.tsx +0 -49
  385. package/src/templates/web/base/template/src/test/setup.ts +0 -74
  386. package/src/templates/web/base/template/vitest.config.ts +0 -17
  387. package/src/templates/web/ui-auth/template/.eslintrc.js +0 -8
  388. package/src/templates/web/ui-auth/template/src/components/__tests__/example.test.tsx +0 -49
  389. package/src/templates/web/ui-auth/template/src/test/setup.ts +0 -74
  390. package/src/templates/web/ui-auth/template/vitest.config.ts +0 -17
  391. package/src/templates/web/ui-auth-payments/template/src/components/__tests__/example.test.tsx +0 -49
  392. package/src/templates/web/ui-auth-payments/template/src/test/setup.ts +0 -74
  393. package/src/templates/web/ui-auth-payments/template/vitest.config.ts +0 -17
  394. package/src/templates/web/ui-auth-payments-ai/template/src/components/__tests__/example.test.tsx +0 -49
  395. package/src/templates/web/ui-auth-payments-ai/template/src/test/setup.ts +0 -74
  396. package/src/templates/web/ui-auth-payments-ai/template/vitest.config.ts +0 -17
  397. package/src/templates/web/ui-auth-payments-ai-rag/template/README.md +0 -434
  398. package/src/templates/web/ui-auth-payments-ai-rag/template/components/rag/KnowledgeManager.tsx +0 -642
  399. package/src/templates/web/ui-auth-payments-ai-rag/template/components/rag/RAGAnalytics.tsx +0 -466
  400. package/src/templates/web/ui-auth-payments-ai-rag/template/components/rag/RAGChatInterface.tsx +0 -393
  401. package/src/templates/web/ui-auth-payments-ai-rag/template/docs/GETTING-STARTED.md +0 -457
  402. package/src/templates/web/ui-auth-payments-ai-rag/template/hooks/useRAGSystem.ts +0 -478
  403. package/src/templates/web/ui-auth-payments-ai-rag/template/lib/rag/config.ts +0 -250
  404. package/src/templates/web/ui-auth-payments-ai-rag/template/package.json +0 -73
  405. package/src/templates/web/ui-auth-payments-ai-rag/template/scripts/setup-rag.js +0 -622
  406. package/src/templates/web/ui-auth-payments-ai-rag/template/src/app/ai/page.tsx +0 -396
  407. package/src/templates/web/ui-auth-payments-audio/template/src/components/__tests__/example.test.tsx +0 -49
  408. package/src/templates/web/ui-auth-payments-audio/template/src/test/setup.ts +0 -74
  409. package/src/templates/web/ui-auth-payments-audio/template/vitest.config.ts +0 -17
  410. package/src/templates/web/ui-auth-payments-video/template/src/components/__tests__/example.test.tsx +0 -49
  411. package/src/templates/web/ui-auth-payments-video/template/src/test/setup.ts +0 -74
  412. package/src/templates/web/ui-auth-payments-video/template/vitest.config.ts +0 -17
  413. package/src/templates/web/ui-only/template/.eslintrc.js +0 -8
  414. package/src/templates/web/ui-only/template/src/components/__tests__/example.test.tsx +0 -49
  415. package/src/templates/web/ui-only/template/src/test/setup.ts +0 -74
  416. package/src/templates/web/ui-only/template/vitest.config.ts +0 -17
@@ -1,109 +1,9 @@
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/app-sdk';
6
- import { useRouter } from 'next/navigation';
7
-
8
- export default function LoginPage() {
9
- const [email, setEmail] = useState('');
10
- const [password, setPassword] = useState('');
11
- const { signIn, signInWithOAuth, loading, error, user } = useAuth();
12
- const router = useRouter();
13
-
14
- // Redirect if already logged in
15
- React.useEffect(() => {
16
- if (user) {
17
- router.push('/');
18
- }
19
- }, [user, router]);
20
-
21
- const handleLogin = async (e: React.FormEvent) => {
22
- e.preventDefault();
23
- try {
24
- await signIn(email, password);
25
- router.push('/');
26
- } catch (err) {
27
- console.error('Login error:', err);
28
- }
29
- };
30
-
31
- const handleGoogleLogin = async () => {
32
- try {
33
- await signInWithOAuth('google');
34
- } catch (err) {
35
- console.error('Google login error:', err);
36
- }
37
- };
38
-
39
- if (loading) {
40
- return (
41
- <div className="flex items-center justify-center min-h-screen bg-gray-100">
42
- <div>Loading...</div>
43
- </div>
44
- );
45
- }
46
-
47
- return (
48
- <div className="flex items-center justify-center min-h-screen bg-gray-100">
49
- <Card className="w-full max-w-md p-8">
50
- <h1 className="text-2xl font-bold text-center mb-6">Sign In</h1>
51
-
52
- {error && (
53
- <div className="mb-4 p-3 bg-red-100 border border-red-400 text-red-700 rounded">
54
- {error.message}
55
- </div>
56
- )}
57
-
58
- <form onSubmit={handleLogin} className="space-y-4">
59
- <div>
60
- <Label htmlFor="email">Email</Label>
61
- <Input
62
- id="email"
63
- type="email"
64
- value={email}
65
- onChange={(e) => setEmail(e.target.value)}
66
- placeholder="Enter your email"
67
- required
68
- disabled={loading}
69
- />
70
- </div>
71
- <div>
72
- <Label htmlFor="password">Password</Label>
73
- <Input
74
- id="password"
75
- type="password"
76
- value={password}
77
- onChange={(e) => setPassword(e.target.value)}
78
- placeholder="Enter your password"
79
- required
80
- disabled={loading}
81
- />
82
- </div>
83
- <Button type="submit" className="w-full" disabled={loading}>
84
- {loading ? 'Signing In...' : 'Sign In'}
85
- </Button>
86
- <Button
87
- type="button"
88
- variant="outline"
89
- className="w-full"
90
- onClick={handleGoogleLogin}
91
- disabled={loading}
92
- >
93
- Sign in with Google
94
- </Button>
95
- </form>
96
-
97
- <div className="mt-4 text-center">
98
- <p className="text-sm text-gray-600">
99
- Don&apos;t have an account?{' '}
100
- <a href="/signup" className="text-blue-600 hover:underline">
101
- Sign up
102
- </a>
103
- </p>
104
- </div>
105
- </Card>
106
- </div>
107
- );
108
- }
109
-
1
+ import { LoginForm } from '@/components/client/login-form'
2
+
3
+ export default function LoginPage() {
4
+ return (
5
+ <div className="flex min-h-screen items-center justify-center bg-background px-4">
6
+ <LoginForm />
7
+ </div>
8
+ )
9
+ }
@@ -1,392 +1,132 @@
1
- 'use client'
2
-
3
- import {
4
- Button,
5
- Card,
6
- VideoPlayer,
7
- PageTransition,
8
- MobileContainer,
9
- MobileHero,
10
- ResponsiveGrid,
11
- NetworkAwareContent,
12
- OfflineWrapper,
13
- SwipeableCard,
14
- PullToRefresh,
15
- ProgressiveImage,
16
- useNetworkInfo,
17
- useOfflineState
18
- } from '@digilogiclabs/saas-factory-ui'
19
- import { ArrowRight, Zap, Shield, Rocket, CheckCircle, LogOut, User, Video, Wifi, WifiOff, Play, Pause } from 'lucide-react'
20
- import { useAuth } from '@digilogiclabs/app-sdk'
21
- import Link from 'next/link'
22
- import { useState } from 'react'
23
-
24
- export default function Home() {
25
- const { user, signOut, loading } = useAuth()
26
- const networkInfo = useNetworkInfo()
27
- const isOnline = useOfflineState()
28
- const [isRefreshing, setIsRefreshing] = useState(false)
29
-
30
- const projectName = "{{titleCaseName}}"
31
- const projectDescription = "{{description}}"
32
-
33
- const gridConfig = {
34
- columns_1_2: { base: 1, md: 2 },
35
- columns_1_3: { base: 1, md: 3 },
36
- columns_1_sm2: { base: 1, sm: 2 },
37
- columns_1_sm2_md3: { base: 1, sm: 2, md: 3 },
38
- columns_1_sm2_md4: { base: 1, sm: 2, md: 4 },
39
- columns_2: { base: 2 },
40
- columns_2_md3: { base: 2, md: 3 },
41
- columns_2_2: { base: 2 },
42
- columns_2_md4: { base: 2, md: 4 }
43
- }
44
-
45
- const heroConfig = {
46
- badge: {
47
- text: "🎥 Professional Video Platform",
48
- variant: "secondary" as const,
49
- icon: <CheckCircle className="w-4 h-4" />
50
- },
51
- title: {
52
- text: `Welcome to ${projectName}`,
53
- highlight: projectName,
54
- size: "xl" as const
55
- },
56
- description: `${projectDescription}. Watch high-quality videos with adaptive streaming, gesture controls, and seamless playback on any device.`
57
- }
58
-
59
- const handleSignOut = async () => {
60
- try {
61
- await signOut()
62
- } catch (err) {
63
- console.error('Sign out error:', err)
64
- }
65
- }
66
-
67
- const handleRefresh = async () => {
68
- setIsRefreshing(true)
69
- // Simulate refresh
70
- await new Promise(resolve => setTimeout(resolve, 1500))
71
- setIsRefreshing(false)
72
- }
73
-
74
- return (
75
- <PageTransition type="slide" direction="up" duration={300}>
76
- <OfflineWrapper>
77
- <PullToRefresh
78
- onRefresh={handleRefresh}
79
- threshold={80}
80
- loadingIndicator="spinner"
81
- hapticOnTrigger={true}
82
- networkAware={true}
83
- >
84
- <main className="min-h-screen relative overflow-hidden bg-background">
85
- {/* Theme-aware gradient background for video streaming */}
86
- <div className="absolute inset-0 bg-gradient-to-br from-primary/15 via-background to-secondary/15 dark:from-primary/25 dark:via-background dark:to-secondary/25" />
87
- <div className="absolute inset-0 bg-gradient-to-tl from-accent/10 via-transparent to-secondary/10 dark:from-accent/15 dark:via-transparent dark:to-secondary/15" />
88
- <div className="absolute inset-0 bg-[radial-gradient(ellipse_at_center_top,_var(--tw-gradient-stops))] from-primary/20 via-transparent to-transparent dark:from-primary/30 dark:via-transparent dark:to-transparent" />
89
- {/* Animated video-themed particles */}
90
- <div className="absolute inset-0 opacity-20 dark:opacity-10">
91
- <div className="absolute top-1/4 right-1/4 w-72 h-72 bg-primary/60 rounded-full mix-blend-multiply filter blur-3xl animate-pulse dark:bg-primary/80"></div>
92
- <div className="absolute bottom-1/4 left-1/3 w-96 h-96 bg-secondary/60 rounded-full mix-blend-multiply filter blur-3xl animate-pulse animation-delay-2000 dark:bg-secondary/80"></div>
93
- <div className="absolute top-1/2 left-1/5 w-64 h-64 bg-accent/60 rounded-full mix-blend-multiply filter blur-3xl animate-pulse animation-delay-4000 dark:bg-accent/80"></div>
94
- </div>
95
- {/* Video player overlay effect */}
96
- <div className="absolute inset-0 bg-gradient-to-b from-transparent via-background/3 to-background/10" />
97
- <div className="relative z-10">
98
- <MobileContainer className="py-16">
99
- {/* Auth Status Bar */}
100
- <div className="flex justify-end mb-8">
101
- {loading ? (
102
- <div className="text-sm text-gray-600">Loading...</div>
103
- ) : user ? (
104
- <div className="flex items-center gap-4">
105
- <div className="flex items-center gap-2 text-sm text-gray-600 dark:text-gray-300">
106
- <User className="w-4 h-4" />
107
- Welcome, {user.email}
108
- </div>
109
- <Button variant="outline" size="sm" onClick={handleSignOut}>
110
- <LogOut className="w-4 h-4 mr-2" />
111
- Sign Out
112
- </Button>
113
- </div>
114
- ) : (
115
- <div className="flex gap-2">
116
- <Link href="/login">
117
- <Button variant="outline" size="sm">Sign In</Button>
118
- </Link>
119
- <Link href="/signup">
120
- <Button size="sm">Sign Up</Button>
121
- </Link>
122
- </div>
123
- )}
124
- </div>
125
-
126
- {/* Hero Section with Network Status */}
127
- <div className="flex flex-col sm:flex-row justify-between items-center mb-8 gap-4">
128
- <div className="flex items-center gap-2 text-sm">
129
- {isOnline ? (
130
- <div className="flex items-center gap-2 text-green-600">
131
- <Wifi className="w-4 h-4" />
132
- <span>Online</span>
133
- {networkInfo?.effectiveType && (
134
- <span className="bg-green-100 text-green-800 px-2 py-1 rounded text-xs">
135
- {networkInfo.effectiveType.toUpperCase()}
136
- </span>
137
- )}
138
- </div>
139
- ) : (
140
- <div className="flex items-center gap-2 text-red-600">
141
- <WifiOff className="w-4 h-4" />
142
- <span>Offline - Cached videos available</span>
143
- </div>
144
- )}
145
- </div>
146
- </div>
147
-
148
- <MobileHero
149
- badge={heroConfig.badge}
150
- title={heroConfig.title}
151
- description={heroConfig.description}
152
- actions={[
153
- {
154
- label: "Start Watching",
155
- href: "/checkout",
156
- icon: Play,
157
- variant: "default",
158
- size: "lg"
159
- },
160
- {
161
- label: "Learn More",
162
- variant: "outline",
163
- size: "lg"
164
- }
165
- ]}
166
- className="text-center mb-16"
167
- />
168
-
169
- {/* Video Player Showcase */}
170
- <NetworkAwareContent
171
- showOnSlow={
172
- <div className="max-w-4xl mx-auto mb-16">
173
- <Card className="p-6">
174
- <div className="text-center mb-6">
175
- <div className="mx-auto w-12 h-12 bg-red-100 dark:bg-red-900 rounded-full flex items-center justify-center mb-4">
176
- <Video className="h-6 w-6 text-red-600 dark:text-red-400" />
177
- </div>
178
- <h2 className="text-xl font-bold mb-2">Mobile Video Player</h2>
179
- <p className="text-sm text-gray-600 dark:text-gray-300">
180
- Optimized for slower connections - automatically serves lower quality
181
- </p>
182
- </div>
183
- <VideoPlayer
184
- playlist={[
185
- {
186
- id: '1',
187
- title: 'Getting Started Guide',
188
- description: 'Learn the basics in this quick tutorial',
189
- duration: 300,
190
- url: 'https://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4',
191
- thumbnail: 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzIwIiBoZWlnaHQ9IjE4MCIgdmlld0JveD0iMCAwIDMyMCAxODAiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHJlY3Qgd2lkdGg9IjMyMCIgaGVpZ2h0PSIxODAiIGZpbGw9IiM0Qjc2ODgiLz48Y2lyY2xlIGN4PSIxNjAiIGN5PSI5MCIgcj0iMzAiIGZpbGw9IndoaXRlIiBmaWxsLW9wYWNpdHk9IjAuMyIvPjxwYXRoIGQ9Ik0xNDUgNzVWMTA1TDE3NSA5MEwxNDUgNzVaIiBmaWxsPSJ3aGl0ZSIvPjwvc3ZnPg==',
192
- qualities: [
193
- { label: '360p', url: 'https://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4' }
194
- ]
195
- }
196
- ]}
197
- mobileOptimized={true}
198
- touchFriendly={true}
199
- autoQuality="low"
200
- className="max-w-lg mx-auto"
201
- />
202
- </Card>
203
- </div>
204
- }
205
- showOnOffline={
206
- <div className="max-w-4xl mx-auto mb-16">
207
- <Card className="p-6 bg-yellow-50 border-yellow-200">
208
- <div className="text-center">
209
- <WifiOff className="mx-auto w-12 h-12 text-yellow-600 mb-4" />
210
- <h2 className="text-xl font-bold mb-2">Offline Mode</h2>
211
- <p className="text-gray-600">Videos are cached for offline viewing when connection is restored.</p>
212
- </div>
213
- </Card>
214
- </div>
215
- }
216
- >
217
- <SwipeableCard
218
- leftActions={[
219
- {
220
- id: 'previous',
221
- label: 'Previous',
222
- onAction: () => console.log('Previous video'),
223
- color: 'blue',
224
- icon: ArrowRight
225
- },
226
- {
227
- id: 'quality',
228
- label: 'Quality',
229
- onAction: () => console.log('Toggle quality'),
230
- color: 'purple'
231
- }
232
- ]}
233
- rightActions={[
234
- {
235
- id: 'next',
236
- label: 'Next',
237
- onAction: () => console.log('Next video'),
238
- color: 'green',
239
- icon: ArrowRight
240
- },
241
- {
242
- id: 'fullscreen',
243
- label: 'Fullscreen',
244
- onAction: () => console.log('Toggle fullscreen'),
245
- color: 'orange'
246
- }
247
- ]}
248
- threshold={60}
249
- hapticFeedback={true}
250
- showActionLabels={true}
251
- className="max-w-4xl mx-auto mb-16"
252
- >
253
- <Card className="p-8">
254
- <div className="text-center mb-8">
255
- <div className="mx-auto w-16 h-16 bg-red-100 dark:bg-red-900 rounded-full flex items-center justify-center mb-4">
256
- <Video className="h-8 w-8 text-red-600 dark:text-red-400" />
257
- </div>
258
- <h2 className="text-3xl font-bold mb-4">Touch-Optimized Video Player</h2>
259
- <p className="text-gray-600 dark:text-gray-300 mb-2">
260
- Experience our mobile-first video player with gesture controls, adaptive quality, and offline caching
261
- </p>
262
- <p className="text-sm text-gray-500">
263
- Swipe for controls • Double tap for fullscreen • Pull to refresh playlist
264
- </p>
265
- </div>
266
- <VideoPlayer
267
- playlist={[
268
- {
269
- id: '1',
270
- title: 'Getting Started Guide',
271
- description: 'Learn the basics in this comprehensive tutorial',
272
- duration: 300,
273
- url: 'https://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4',
274
- thumbnail: 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNjQwIiBoZWlnaHQ9IjM2MCIgdmlld0JveD0iMCAwIDY0MCAzNjAiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHJlY3Qgd2lkdGg9IjY0MCIgaGVpZ2h0PSIzNjAiIGZpbGw9IiM0Qjc2ODgiLz48Y2lyY2xlIGN4PSIzMjAiIGN5PSIxODAiIHI9IjUwIiBmaWxsPSJ3aGl0ZSIgZmlsbC1vcGFjaXR5PSIwLjMiLz48cGF0aCBkPSJNMjkwIDE1MFYyMTBMMzUwIDE4MEwyOTAgMTUwWiIgZmlsbD0id2hpdGUiLz48L3N2Zz4=',
275
- qualities: [
276
- { label: '360p', url: 'https://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4' },
277
- { label: '480p', url: 'https://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4' },
278
- { label: '720p', url: 'https://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4' }
279
- ]
280
- },
281
- {
282
- id: '2',
283
- title: 'Advanced Features',
284
- description: 'Explore powerful features and customization options',
285
- duration: 240,
286
- url: 'https://commondatastorage.googleapis.com/gtv-videos-bucket/sample/ElephantsDream.mp4',
287
- thumbnail: 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNjQwIiBoZWlnaHQ9IjM2MCIgdmlld0JveD0iMCAwIDY0MCAzNjAiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHJlY3Qgd2lkdGg9IjY0MCIgaGVpZ2h0PSIzNjAiIGZpbGw9IiNFRjQ0NDQiLz48Y2lyY2xlIGN4PSIzMjAiIGN5PSIxODAiIHI9IjUwIiBmaWxsPSJ3aGl0ZSIgZmlsbC1vcGFjaXR5PSIwLjMiLz48cGF0aCBkPSJNMjkwIDE1MFYyMTBMMzUwIDE4MEwyOTAgMTUwWiIgZmlsbD0id2hpdGUiLz48L3N2Zz4=',
288
- qualities: [
289
- { label: '360p', url: 'https://commondatastorage.googleapis.com/gtv-videos-bucket/sample/ElephantsDream.mp4' },
290
- { label: '480p', url: 'https://commondatastorage.googleapis.com/gtv-videos-bucket/sample/ElephantsDream.mp4' },
291
- { label: '720p', url: 'https://commondatastorage.googleapis.com/gtv-videos-bucket/sample/ElephantsDream.mp4' }
292
- ]
293
- },
294
- {
295
- id: '3',
296
- title: 'Best Practices',
297
- description: 'Tips and tricks for getting the most out of the platform',
298
- duration: 180,
299
- url: 'https://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4',
300
- thumbnail: 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNjQwIiBoZWlnaHQ9IjM2MCIgdmlld0JveD0iMCAwIDY0MCAzNjAiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHJlY3Qgd2lkdGg9IjY0MCIgaGVpZ2h0PSIzNjAiIGZpbGw9IiMwNjkyQzUiLz48Y2lyY2xlIGN4PSIzMjAiIGN5PSIxODAiIHI9IjUwIiBmaWxsPSJ3aGl0ZSIgZmlsbC1vcGFjaXR5PSIwLjMiLz48cGF0aCBkPSJNMjkwIDE1MFYyMTBMMzUwIDE4MEwyOTAgMTUwWiIgZmlsbD0id2hpdGUiLz48L3N2Zz4=',
301
- qualities: [
302
- { label: '360p', url: 'https://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4' },
303
- { label: '720p', url: 'https://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4' }
304
- ]
305
- }
306
- ]}
307
- mobileOptimized={true}
308
- touchFriendly={true}
309
- hapticFeedback={true}
310
- gestureControls={true}
311
- networkAware={true}
312
- offlineSupport={true}
313
- autoQuality="adaptive"
314
- className="max-w-4xl mx-auto"
315
- />
316
- </Card>
317
- </SwipeableCard>
318
- </NetworkAwareContent>
319
-
320
- {/* Component Showcase */}
321
- <ResponsiveGrid columns={gridConfig.columns_1_sm2_md4} gap={6} className="mb-16">
322
- <Card className="text-center p-6">
323
- <div className="mx-auto w-12 h-12 bg-blue-100 dark:bg-blue-900 rounded-lg flex items-center justify-center mb-4">
324
- <Zap className="h-6 w-6 text-blue-600 dark:text-blue-400" />
325
- </div>
326
- <h3 className="text-lg font-semibold mb-2">Mobile Video UI</h3>
327
- <p className="text-sm text-gray-600 dark:text-gray-300">
328
- Touch-optimized Video Player with gesture controls from @digilogiclabs/saas-factory-ui v0.13.3
329
- </p>
330
- </Card>
331
-
332
- <Card className="text-center p-6">
333
- <div className="mx-auto w-12 h-12 bg-green-100 dark:bg-green-900 rounded-lg flex items-center justify-center mb-4">
334
- <Shield className="h-6 w-6 text-green-600 dark:text-green-400" />
335
- </div>
336
- <h3 className="text-lg font-semibold mb-2">Cross-Device Auth</h3>
337
- <p className="text-sm text-gray-600 dark:text-gray-300">
338
- Secure authentication across all devices with @digilogiclabs/saas-factory-auth v1.0.0
339
- </p>
340
- </Card>
341
-
342
- <Card className="text-center p-6">
343
- <div className="mx-auto w-12 h-12 bg-purple-100 dark:bg-purple-900 rounded-lg flex items-center justify-center mb-4">
344
- <Rocket className="h-6 w-6 text-purple-600 dark:text-purple-400" />
345
- </div>
346
- <h3 className="text-lg font-semibold mb-2">Performance First</h3>
347
- <p className="text-sm text-gray-600 dark:text-gray-300">
348
- Network-aware video streaming with adaptive quality and caching
349
- </p>
350
- </Card>
351
-
352
- <Card className="text-center p-6">
353
- <div className="mx-auto w-12 h-12 bg-orange-100 dark:bg-orange-900 rounded-lg flex items-center justify-center mb-4">
354
- <svg className="h-6 w-6 text-orange-600 dark:text-orange-400" fill="none" stroke="currentColor" viewBox="0 0 24 24">
355
- <path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M3 10h18M7 15h1m4 0h1m-7 4h12a3 3 0 003-3V8a3 3 0 00-3-3H6a3 3 0 00-3 3v8a3 3 0 003 3z" />
356
- </svg>
357
- </div>
358
- <h3 className="text-lg font-semibold mb-2">Mobile Payments</h3>
359
- <p className="text-sm text-gray-600 dark:text-gray-300">
360
- Touch-optimized subscription flows with @digilogiclabs/saas-factory-payments v1.0.0
361
- </p>
362
- </Card>
363
- </ResponsiveGrid>
364
-
365
- {/* Button Variants Showcase */}
366
- <Card className="max-w-4xl mx-auto p-8">
367
- <div className="text-center mb-6">
368
- <h2 className="text-2xl font-bold mb-2">Full SaaS Package Integration</h2>
369
- <p className="text-gray-600 dark:text-gray-300">
370
- Complete integration of UI, Auth, and Payments packages
371
- </p>
372
- </div>
373
- <div className="flex flex-wrap justify-center gap-4 mb-6">
374
- <Button>Default Button</Button>
375
- <Button variant="secondary">Secondary Button</Button>
376
- <Button variant="outline">Outline Button</Button>
377
- <Button disabled>Disabled Button</Button>
378
- </div>
379
- <div className="text-center">
380
- <p className="text-sm text-gray-500">
381
- All mobile-optimized components from @digilogiclabs/saas-factory-ui v0.13.3 + auth v1.0.0 + payments
382
- </p>
383
- </div>
384
- </Card>
385
- </MobileContainer>
386
- </div>
387
- </main>
388
- </PullToRefresh>
389
- </OfflineWrapper>
390
- </PageTransition>
391
- )
392
- }
1
+ import { ArrowRight, Shield, CreditCard, CheckCircle, Video, Play, Film, Upload, MonitorPlay, Tv } from 'lucide-react'
2
+
3
+ import Link from 'next/link'
4
+
5
+ const FEATURES = [
6
+ {
7
+ icon: Video,
8
+ title: 'Video Streaming',
9
+ description: 'Adaptive bitrate streaming with HLS. Built-in video player with full controls.',
10
+ color: 'text-red-600 dark:text-red-400 bg-red-100 dark:bg-red-900/30',
11
+ },
12
+ {
13
+ icon: Upload,
14
+ title: 'Upload & Transcode',
15
+ description: 'Video upload with automatic transcoding, thumbnail generation, and metadata.',
16
+ color: 'text-violet-600 dark:text-violet-400 bg-violet-100 dark:bg-violet-900/30',
17
+ },
18
+ {
19
+ icon: Shield,
20
+ title: 'Secure Auth',
21
+ description: 'Complete authentication with Supabase — login, signup, and sessions.',
22
+ color: 'text-emerald-600 dark:text-emerald-400 bg-emerald-100 dark:bg-emerald-900/30',
23
+ },
24
+ {
25
+ icon: CreditCard,
26
+ title: 'Stripe Billing',
27
+ description: 'Subscription tiers, pay-per-view, and creator monetization.',
28
+ color: 'text-blue-600 dark:text-blue-400 bg-blue-100 dark:bg-blue-900/30',
29
+ },
30
+ {
31
+ icon: MonitorPlay,
32
+ title: 'Course Platform',
33
+ description: 'Chapter-based content, progress tracking, and completion certificates.',
34
+ color: 'text-amber-600 dark:text-amber-400 bg-amber-100 dark:bg-amber-900/30',
35
+ },
36
+ {
37
+ icon: Tv,
38
+ title: 'Live Streaming',
39
+ description: 'WebRTC-ready architecture for live video broadcasts and interactive rooms.',
40
+ color: 'text-pink-600 dark:text-pink-400 bg-pink-100 dark:bg-pink-900/30',
41
+ },
42
+ ]
43
+
44
+ export default function Home() {
45
+ return (
46
+ <main className="min-h-screen bg-background">
47
+ {/* Hero */}
48
+ <section className="mx-auto max-w-5xl px-4 py-24 text-center">
49
+ <div className="inline-flex items-center rounded-full border border-border bg-muted px-3 py-1 text-sm text-muted-foreground mb-6">
50
+ <Film className="mr-1.5 h-3.5 w-3.5" />
51
+ Video SaaS Starter
52
+ </div>
53
+ <h1 className="text-4xl font-bold tracking-tight text-foreground sm:text-6xl mb-4">
54
+ Build your video{' '}
55
+ <span className="text-primary">platform</span>
56
+ </h1>
57
+ <p className="mx-auto max-w-2xl text-lg text-muted-foreground mb-8">
58
+ A production-ready starter for video streaming, course platforms, and video SaaS.
59
+ Auth, payments, transcoding, and analytics included.
60
+ </p>
61
+ <div className="flex items-center justify-center gap-4">
62
+
63
+ <Link href="/signup" className="inline-flex items-center justify-center rounded-md bg-primary px-8 py-3 text-sm font-medium text-primary-foreground hover:bg-primary/90 transition-colors">
64
+ Get Started <ArrowRight className="ml-2 h-4 w-4" />
65
+ </Link>
66
+
67
+
68
+ <Link href="/login" className="inline-flex items-center justify-center rounded-md border border-input bg-background px-8 py-3 text-sm font-medium text-foreground hover:bg-accent transition-colors">Sign In</Link>
69
+
70
+ </div>
71
+ </section>
72
+
73
+ {/* Video Player Preview */}
74
+ <section className="mx-auto max-w-3xl px-4 pb-16">
75
+ <div className="rounded-xl border border-border bg-card overflow-hidden shadow-lg">
76
+ <div className="aspect-video bg-foreground/5 relative flex items-center justify-center">
77
+ <button className="flex h-16 w-16 items-center justify-center rounded-full bg-primary/90 text-primary-foreground shadow-lg hover:bg-primary transition-colors">
78
+ <Play className="h-7 w-7 ml-1" />
79
+ </button>
80
+ <div className="absolute bottom-4 left-4 right-4">
81
+ <div className="h-1 rounded-full bg-muted overflow-hidden">
82
+ <div className="h-full w-1/3 rounded-full bg-primary" />
83
+ </div>
84
+ <div className="flex items-center justify-between mt-2 text-xs text-muted-foreground">
85
+ <span>2:15</span>
86
+ <span>6:30</span>
87
+ </div>
88
+ </div>
89
+ </div>
90
+ <div className="p-4 border-t border-border">
91
+ <h3 className="font-semibold text-card-foreground">Getting Started with Your Video Platform</h3>
92
+ <p className="text-sm text-muted-foreground mt-1">Learn how to set up and customize your video app</p>
93
+ </div>
94
+ </div>
95
+ </section>
96
+
97
+ {/* Features */}
98
+ <section className="mx-auto max-w-5xl px-4 pb-24">
99
+ <div className="text-center mb-12">
100
+ <h2 className="text-3xl font-bold text-foreground mb-2">Everything for Video</h2>
101
+ <p className="text-muted-foreground">Build any video platform — courses, streaming, VOD, or live broadcasts.</p>
102
+ </div>
103
+ <div className="grid gap-6 md:grid-cols-2 lg:grid-cols-3">
104
+ {FEATURES.map((feature) => (
105
+ <div key={feature.title} className="rounded-xl border border-border bg-card p-6">
106
+ <div className={`mb-4 flex h-10 w-10 items-center justify-center rounded-lg ${feature.color}`}>
107
+ <feature.icon className="h-5 w-5" />
108
+ </div>
109
+ <h3 className="text-lg font-semibold text-card-foreground mb-2">{feature.title}</h3>
110
+ <p className="text-sm text-muted-foreground">{feature.description}</p>
111
+ </div>
112
+ ))}
113
+ </div>
114
+ </section>
115
+
116
+ {/* CTA */}
117
+ <section className="mx-auto max-w-5xl px-4 pb-24">
118
+ <div className="rounded-xl border border-primary/20 bg-primary/5 p-8 md:p-12 text-center">
119
+ <h2 className="text-2xl font-bold text-foreground mb-2">Ready to build your video platform?</h2>
120
+ <p className="text-muted-foreground mb-6 max-w-lg mx-auto">
121
+ Everything you need to launch — auth, payments, and video streaming pre-configured.
122
+ </p>
123
+
124
+ <Link href="/signup" className="inline-flex items-center justify-center rounded-md bg-primary px-8 py-3 text-sm font-medium text-primary-foreground hover:bg-primary/90 transition-colors">
125
+ Start Building <ArrowRight className="ml-2 h-4 w-4" />
126
+ </Link>
127
+
128
+ </div>
129
+ </section>
130
+ </main>
131
+ )
132
+ }