@digilogiclabs/create-saas-app 2.11.0 → 2.12.1

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 (413) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/dist/.tsbuildinfo +1 -1
  3. package/dist/cli/index.js +1 -1
  4. package/dist/cli/index.js.map +1 -1
  5. package/dist/generators/template-generator.d.ts +0 -2
  6. package/dist/generators/template-generator.d.ts.map +1 -1
  7. package/dist/generators/template-generator.js +18 -17
  8. package/dist/generators/template-generator.js.map +1 -1
  9. package/dist/templates/mobile/base/template/App.tsx +7 -4
  10. package/dist/templates/mobile/base/template/app/checkout.tsx +5 -2
  11. package/dist/templates/mobile/ui-auth-payments/template/app/(tabs)/_layout.tsx +6 -2
  12. package/dist/templates/mobile/ui-auth-payments/template/app/(tabs)/billing.tsx +7 -3
  13. package/dist/templates/mobile/ui-auth-payments/template/app/(tabs)/index.tsx +5 -2
  14. package/dist/templates/mobile/ui-auth-payments/template/app/(tabs)/profile.tsx +7 -2
  15. package/dist/templates/mobile/ui-auth-payments/template/app/_layout.tsx +2 -4
  16. package/dist/templates/mobile/ui-auth-payments/template/app/auth/login.tsx +6 -3
  17. package/dist/templates/mobile/ui-auth-payments/template/app/auth/signup.tsx +6 -3
  18. package/dist/templates/mobile/ui-auth-payments-ai/template/app/(tabs)/_layout.tsx +6 -2
  19. package/dist/templates/mobile/ui-auth-payments-ai/template/app/(tabs)/billing.tsx +7 -3
  20. package/dist/templates/mobile/ui-auth-payments-ai/template/app/(tabs)/index.tsx +5 -2
  21. package/dist/templates/mobile/ui-auth-payments-ai/template/app/(tabs)/profile.tsx +7 -2
  22. package/dist/templates/mobile/ui-auth-payments-ai/template/app/_layout.tsx +2 -4
  23. package/dist/templates/mobile/ui-auth-payments-ai/template/app/auth/login.tsx +6 -3
  24. package/dist/templates/mobile/ui-auth-payments-ai/template/app/auth/signup.tsx +6 -3
  25. package/dist/templates/shared/admin/web/src/components/admin-nav.tsx +3 -3
  26. package/dist/templates/shared/auth/supabase/web/src/lib/auth-session.ts +36 -16
  27. package/dist/templates/shared/auth/supabase/web/src/middleware.ts +6 -0
  28. package/dist/templates/shared/config/web/next.config.mjs +0 -1
  29. package/dist/templates/shared/cookie-consent/web/components/cookie-consent.tsx +5 -5
  30. package/dist/templates/shared/design/web/src/components/ui/button.tsx +56 -0
  31. package/dist/templates/shared/email/web/src/lib/email/client.ts +1 -1
  32. package/dist/templates/shared/error-pages/web/src/app/error.tsx +13 -11
  33. package/dist/templates/shared/error-pages/web/src/app/global-error.tsx +2 -0
  34. package/dist/templates/shared/error-pages/web/src/app/not-found.tsx +6 -6
  35. package/dist/templates/shared/legal/web/src/app/(legal)/privacy/page.tsx +4 -4
  36. package/dist/templates/shared/legal/web/src/app/(legal)/terms/page.tsx +4 -4
  37. package/dist/templates/shared/loading/web/components/skeleton.tsx +4 -4
  38. package/dist/templates/shared/mock/web/.env.local +55 -0
  39. package/dist/templates/shared/mock/web/src/components/mock-auth-provider.tsx +72 -0
  40. package/dist/templates/shared/mock/web/src/components/mock-banner.tsx +29 -0
  41. package/dist/templates/shared/mock/web/src/lib/mock.ts +147 -0
  42. package/dist/templates/shared/payments/web/src/app/api/webhooks/stripe/route.ts +10 -4
  43. package/dist/templates/shared/redis/web/src/lib/redis.ts +1 -1
  44. package/dist/templates/web/ai-platform/template/package.json +0 -1
  45. package/dist/templates/web/ai-platform/template/src/app/chat/page.tsx +5 -2
  46. package/dist/templates/web/ai-platform/template/src/app/playground/page.tsx +5 -2
  47. package/dist/templates/web/ai-platform/template/src/components/providers/app-providers.tsx +2 -5
  48. package/dist/templates/web/base/template/eslint.config.mjs +14 -0
  49. package/dist/templates/web/base/template/src/app/auth/callback/route.ts +1 -1
  50. package/dist/templates/web/base/template/src/app/checkout/page.tsx +76 -103
  51. package/dist/templates/web/base/template/src/app/dashboard/page.tsx +145 -329
  52. package/dist/templates/web/base/template/src/app/layout.tsx +40 -38
  53. package/dist/templates/web/base/template/src/app/login/page.tsx +116 -66
  54. package/dist/templates/web/base/template/src/app/page.tsx +97 -193
  55. package/dist/templates/web/base/template/src/app/settings/page.tsx +154 -0
  56. package/dist/templates/web/base/template/src/app/signup/page.tsx +117 -66
  57. package/dist/templates/web/base/template/src/components/providers/app-providers.tsx +8 -3
  58. package/dist/templates/web/base/template/src/components/shared/header.tsx +229 -63
  59. package/dist/templates/web/iot-dashboard/template/package.json +0 -1
  60. package/dist/templates/web/iot-dashboard/template/src/components/providers/app-providers.tsx +2 -5
  61. package/dist/templates/web/marketplace/template/package.json +0 -1
  62. package/dist/templates/web/marketplace/template/src/components/providers/app-providers.tsx +2 -5
  63. package/dist/templates/web/micro-saas/template/package.json +0 -1
  64. package/dist/templates/web/micro-saas/template/src/components/providers/app-providers.tsx +2 -5
  65. package/dist/templates/web/ui-auth/template/eslint.config.mjs +14 -0
  66. package/dist/templates/web/ui-auth/template/src/app/checkout/page.tsx +3 -3
  67. package/dist/templates/web/ui-auth/template/src/app/dev-setup/page.tsx +81 -91
  68. package/dist/templates/web/ui-auth/template/src/app/layout.tsx +38 -36
  69. package/dist/templates/web/ui-auth/template/src/app/login/page.tsx +22 -45
  70. package/dist/templates/web/ui-auth/template/src/app/page.tsx +106 -306
  71. package/dist/templates/web/ui-auth/template/src/app/setup/page.tsx +387 -402
  72. package/dist/templates/web/ui-auth/template/src/app/signup/page.tsx +24 -47
  73. package/dist/templates/web/ui-auth/template/src/components/providers/app-providers.tsx +8 -3
  74. package/dist/templates/web/ui-auth/template/src/components/shared/header.tsx +229 -94
  75. package/dist/templates/web/ui-auth-ai/template/src/app/layout.tsx +38 -45
  76. package/dist/templates/web/ui-auth-ai/template/src/app/login/page.tsx +86 -0
  77. package/dist/templates/web/ui-auth-ai/template/src/app/page.tsx +107 -193
  78. package/dist/templates/web/ui-auth-ai/template/src/app/signup/page.tsx +105 -0
  79. package/dist/templates/web/ui-auth-ai/template/src/components/ai/audio-generator.tsx +144 -140
  80. package/dist/templates/web/ui-auth-ai/template/src/components/ai/video-generator.tsx +156 -157
  81. package/dist/templates/web/ui-auth-ai/template/src/components/auth/login-form.tsx +7 -3
  82. package/dist/templates/web/ui-auth-ai/template/src/components/providers/app-providers.tsx +25 -0
  83. package/dist/templates/web/ui-auth-ai/template/src/components/shared/footer.tsx +36 -0
  84. package/dist/templates/web/ui-auth-ai/template/src/components/shared/header.tsx +228 -0
  85. package/dist/templates/web/ui-auth-ai/template/src/components/ui/button.tsx +5 -5
  86. package/dist/templates/web/ui-auth-ai/template/src/components/ui/input.tsx +1 -1
  87. package/dist/templates/web/ui-auth-ai/template/src/components/ui/select.tsx +1 -1
  88. package/dist/templates/web/ui-auth-ai/template/src/components/ui/textarea.tsx +1 -1
  89. package/dist/templates/web/ui-auth-ai/template/src/components/ui/theme-toggle.tsx +34 -0
  90. package/dist/templates/web/ui-auth-ai/template/src/lib/supabase.ts +6 -4
  91. package/dist/templates/web/ui-auth-ai/template/src/providers/auth-provider.tsx +7 -5
  92. package/dist/templates/web/ui-auth-payments/template/src/app/billing/page.tsx +63 -192
  93. package/dist/templates/web/ui-auth-payments/template/src/app/checkout/page.tsx +104 -296
  94. package/dist/templates/web/ui-auth-payments/template/src/app/dashboard/page.tsx +27 -27
  95. package/dist/templates/web/ui-auth-payments/template/src/app/dev-setup/page.tsx +70 -81
  96. package/dist/templates/web/ui-auth-payments/template/src/app/layout.tsx +38 -36
  97. package/dist/templates/web/ui-auth-payments/template/src/app/login/loading.tsx +9 -9
  98. package/dist/templates/web/ui-auth-payments/template/src/app/login/page.tsx +4 -104
  99. package/dist/templates/web/ui-auth-payments/template/src/app/page.tsx +69 -337
  100. package/dist/templates/web/ui-auth-payments/template/src/app/setup/page.tsx +55 -68
  101. package/dist/templates/web/ui-auth-payments/template/src/app/signup/loading.tsx +13 -13
  102. package/dist/templates/web/ui-auth-payments/template/src/app/signup/page.tsx +4 -123
  103. package/dist/templates/web/ui-auth-payments/template/src/components/client/auth-status.tsx +37 -52
  104. package/dist/templates/web/ui-auth-payments/template/src/components/client/login-form.tsx +49 -103
  105. package/dist/templates/web/ui-auth-payments/template/src/components/client/newsletter-signup.tsx +4 -4
  106. package/dist/templates/web/ui-auth-payments/template/src/components/client/signup-form.tsx +60 -140
  107. package/dist/templates/web/ui-auth-payments/template/src/components/providers/app-providers.tsx +25 -28
  108. package/dist/templates/web/ui-auth-payments/template/src/components/shared/header.tsx +229 -230
  109. package/dist/templates/web/ui-auth-payments/template/src/lib/actions/auth.ts +245 -245
  110. package/dist/templates/web/ui-auth-payments/template/src/lib/actions/index.ts +339 -339
  111. package/dist/templates/web/ui-auth-payments-ai/template/src/app/ai/page.tsx +305 -309
  112. package/dist/templates/web/ui-auth-payments-ai/template/src/app/billing/page.tsx +62 -312
  113. package/dist/templates/web/ui-auth-payments-ai/template/src/app/checkout/page.tsx +109 -125
  114. package/dist/templates/web/ui-auth-payments-ai/template/src/app/dashboard/page.tsx +27 -27
  115. package/dist/templates/web/ui-auth-payments-ai/template/src/app/dev-setup/page.tsx +68 -83
  116. package/dist/templates/web/ui-auth-payments-ai/template/src/app/layout.tsx +40 -38
  117. package/dist/templates/web/ui-auth-payments-ai/template/src/app/onboarding/page.tsx +20 -20
  118. package/dist/templates/web/ui-auth-payments-ai/template/src/app/page.tsx +140 -394
  119. package/dist/templates/web/ui-auth-payments-ai/template/src/app/settings/page.tsx +28 -27
  120. package/dist/templates/web/ui-auth-payments-ai/template/src/app/setup/page.tsx +51 -66
  121. package/dist/templates/web/ui-auth-payments-ai/template/src/components/client/auth-status.tsx +37 -52
  122. package/dist/templates/web/ui-auth-payments-ai/template/src/components/client/login-form.tsx +50 -79
  123. package/dist/templates/web/ui-auth-payments-ai/template/src/components/client/signup-form.tsx +58 -111
  124. package/dist/templates/web/ui-auth-payments-ai/template/src/components/providers/app-providers.tsx +8 -3
  125. package/dist/templates/web/ui-auth-payments-ai/template/src/components/shared/header.tsx +229 -252
  126. package/dist/templates/web/ui-auth-payments-ai/template/src/lib/actions/auth.ts +245 -245
  127. package/dist/templates/web/ui-auth-payments-audio/template/src/app/billing/page.tsx +63 -192
  128. package/dist/templates/web/ui-auth-payments-audio/template/src/app/checkout/page.tsx +109 -125
  129. package/dist/templates/web/ui-auth-payments-audio/template/src/app/dashboard/page.tsx +27 -27
  130. package/dist/templates/web/ui-auth-payments-audio/template/src/app/layout.tsx +40 -38
  131. package/dist/templates/web/ui-auth-payments-audio/template/src/app/page.tsx +122 -385
  132. package/dist/templates/web/ui-auth-payments-audio/template/src/app/setup/page.tsx +340 -344
  133. package/dist/templates/web/ui-auth-payments-audio/template/src/components/client/auth-status.tsx +37 -52
  134. package/dist/templates/web/ui-auth-payments-audio/template/src/components/client/login-form.tsx +49 -103
  135. package/dist/templates/web/ui-auth-payments-audio/template/src/components/client/signup-form.tsx +60 -140
  136. package/dist/templates/web/ui-auth-payments-audio/template/src/components/providers/app-providers.tsx +8 -3
  137. package/dist/templates/web/ui-auth-payments-audio/template/src/components/shared/header.tsx +229 -252
  138. package/dist/templates/web/ui-auth-payments-audio/template/src/lib/actions/auth.ts +3 -3
  139. package/dist/templates/web/ui-auth-payments-video/template/src/app/billing/page.tsx +63 -192
  140. package/dist/templates/web/ui-auth-payments-video/template/src/app/checkout/page.tsx +109 -125
  141. package/dist/templates/web/ui-auth-payments-video/template/src/app/layout.tsx +38 -36
  142. package/dist/templates/web/ui-auth-payments-video/template/src/app/login/page.tsx +9 -109
  143. package/dist/templates/web/ui-auth-payments-video/template/src/app/page.tsx +132 -392
  144. package/dist/templates/web/ui-auth-payments-video/template/src/app/setup/page.tsx +346 -350
  145. package/dist/templates/web/ui-auth-payments-video/template/src/app/signup/page.tsx +9 -128
  146. package/dist/templates/web/ui-auth-payments-video/template/src/components/client/login-form.tsx +90 -0
  147. package/dist/templates/web/ui-auth-payments-video/template/src/components/client/signup-form.tsx +105 -0
  148. package/dist/templates/web/ui-auth-payments-video/template/src/components/providers/app-providers.tsx +8 -3
  149. package/dist/templates/web/ui-auth-payments-video/template/src/components/shared/header.tsx +229 -246
  150. package/dist/templates/web/ui-only/template/eslint.config.mjs +14 -0
  151. package/dist/templates/web/ui-only/template/src/app/checkout/page.tsx +2 -2
  152. package/dist/templates/web/ui-only/template/src/app/login/page.tsx +69 -63
  153. package/dist/templates/web/ui-only/template/src/app/page.tsx +69 -91
  154. package/dist/templates/web/ui-only/template/src/app/signup/page.tsx +94 -79
  155. package/dist/templates/web/ui-only/template/src/components/providers/app-providers.tsx +1 -6
  156. package/dist/templates/web/ui-only/template/src/components/shared/header.tsx +90 -53
  157. package/dist/templates/web/ui-package-test/template/package.json +19 -23
  158. package/dist/templates/web/ui-package-test/template/postcss.config.mjs +8 -0
  159. package/dist/templates/web/ui-package-test/template/src/app/globals.css +88 -0
  160. package/dist/templates/web/ui-package-test/template/src/app/layout.tsx +27 -0
  161. package/dist/templates/web/ui-package-test/template/src/app/page.tsx +46 -106
  162. package/package.json +1 -1
  163. package/src/templates/mobile/base/template/App.tsx +7 -4
  164. package/src/templates/mobile/base/template/app/checkout.tsx +5 -2
  165. package/src/templates/mobile/ui-auth-payments/template/app/(tabs)/_layout.tsx +6 -2
  166. package/src/templates/mobile/ui-auth-payments/template/app/(tabs)/billing.tsx +7 -3
  167. package/src/templates/mobile/ui-auth-payments/template/app/(tabs)/index.tsx +5 -2
  168. package/src/templates/mobile/ui-auth-payments/template/app/(tabs)/profile.tsx +7 -2
  169. package/src/templates/mobile/ui-auth-payments/template/app/_layout.tsx +2 -4
  170. package/src/templates/mobile/ui-auth-payments/template/app/auth/login.tsx +6 -3
  171. package/src/templates/mobile/ui-auth-payments/template/app/auth/signup.tsx +6 -3
  172. package/src/templates/mobile/ui-auth-payments-ai/template/app/(tabs)/_layout.tsx +6 -2
  173. package/src/templates/mobile/ui-auth-payments-ai/template/app/(tabs)/billing.tsx +7 -3
  174. package/src/templates/mobile/ui-auth-payments-ai/template/app/(tabs)/index.tsx +5 -2
  175. package/src/templates/mobile/ui-auth-payments-ai/template/app/(tabs)/profile.tsx +7 -2
  176. package/src/templates/mobile/ui-auth-payments-ai/template/app/_layout.tsx +2 -4
  177. package/src/templates/mobile/ui-auth-payments-ai/template/app/auth/login.tsx +6 -3
  178. package/src/templates/mobile/ui-auth-payments-ai/template/app/auth/signup.tsx +6 -3
  179. package/src/templates/shared/admin/web/src/components/admin-nav.tsx +3 -3
  180. package/src/templates/shared/auth/supabase/web/src/lib/auth-session.ts +36 -16
  181. package/src/templates/shared/auth/supabase/web/src/middleware.ts +6 -0
  182. package/src/templates/shared/config/web/next.config.mjs +0 -1
  183. package/src/templates/shared/cookie-consent/web/components/cookie-consent.tsx +5 -5
  184. package/src/templates/shared/design/web/src/components/ui/button.tsx +56 -0
  185. package/src/templates/shared/email/web/src/lib/email/client.ts +1 -1
  186. package/src/templates/shared/error-pages/web/src/app/error.tsx +13 -11
  187. package/src/templates/shared/error-pages/web/src/app/global-error.tsx +2 -0
  188. package/src/templates/shared/error-pages/web/src/app/not-found.tsx +6 -6
  189. package/src/templates/shared/legal/web/src/app/(legal)/privacy/page.tsx +4 -4
  190. package/src/templates/shared/legal/web/src/app/(legal)/terms/page.tsx +4 -4
  191. package/src/templates/shared/loading/web/components/skeleton.tsx +4 -4
  192. package/src/templates/shared/mock/web/.env.local +55 -0
  193. package/src/templates/shared/mock/web/src/components/mock-auth-provider.tsx +72 -0
  194. package/src/templates/shared/mock/web/src/components/mock-banner.tsx +29 -0
  195. package/src/templates/shared/mock/web/src/lib/mock.ts +147 -0
  196. package/src/templates/shared/payments/web/src/app/api/webhooks/stripe/route.ts +10 -4
  197. package/src/templates/shared/redis/web/src/lib/redis.ts +1 -1
  198. package/src/templates/web/ai-platform/template/package.json +0 -1
  199. package/src/templates/web/ai-platform/template/src/app/chat/page.tsx +5 -2
  200. package/src/templates/web/ai-platform/template/src/app/playground/page.tsx +5 -2
  201. package/src/templates/web/ai-platform/template/src/components/providers/app-providers.tsx +2 -5
  202. package/src/templates/web/base/template/eslint.config.mjs +14 -0
  203. package/src/templates/web/base/template/src/app/auth/callback/route.ts +1 -1
  204. package/src/templates/web/base/template/src/app/checkout/page.tsx +76 -103
  205. package/src/templates/web/base/template/src/app/dashboard/page.tsx +145 -329
  206. package/src/templates/web/base/template/src/app/layout.tsx +40 -38
  207. package/src/templates/web/base/template/src/app/login/page.tsx +116 -66
  208. package/src/templates/web/base/template/src/app/page.tsx +97 -193
  209. package/src/templates/web/base/template/src/app/settings/page.tsx +154 -0
  210. package/src/templates/web/base/template/src/app/signup/page.tsx +117 -66
  211. package/src/templates/web/base/template/src/components/providers/app-providers.tsx +8 -3
  212. package/src/templates/web/base/template/src/components/shared/header.tsx +229 -63
  213. package/src/templates/web/iot-dashboard/template/package.json +0 -1
  214. package/src/templates/web/iot-dashboard/template/src/components/providers/app-providers.tsx +2 -5
  215. package/src/templates/web/marketplace/template/package.json +0 -1
  216. package/src/templates/web/marketplace/template/src/components/providers/app-providers.tsx +2 -5
  217. package/src/templates/web/micro-saas/template/package.json +0 -1
  218. package/src/templates/web/micro-saas/template/src/components/providers/app-providers.tsx +2 -5
  219. package/src/templates/web/ui-auth/template/eslint.config.mjs +14 -0
  220. package/src/templates/web/ui-auth/template/src/app/checkout/page.tsx +3 -3
  221. package/src/templates/web/ui-auth/template/src/app/dev-setup/page.tsx +81 -91
  222. package/src/templates/web/ui-auth/template/src/app/layout.tsx +38 -36
  223. package/src/templates/web/ui-auth/template/src/app/login/page.tsx +22 -45
  224. package/src/templates/web/ui-auth/template/src/app/page.tsx +106 -306
  225. package/src/templates/web/ui-auth/template/src/app/setup/page.tsx +387 -402
  226. package/src/templates/web/ui-auth/template/src/app/signup/page.tsx +24 -47
  227. package/src/templates/web/ui-auth/template/src/components/providers/app-providers.tsx +8 -3
  228. package/src/templates/web/ui-auth/template/src/components/shared/header.tsx +229 -94
  229. package/src/templates/web/ui-auth-ai/template/src/app/layout.tsx +38 -45
  230. package/src/templates/web/ui-auth-ai/template/src/app/login/page.tsx +86 -0
  231. package/src/templates/web/ui-auth-ai/template/src/app/page.tsx +107 -193
  232. package/src/templates/web/ui-auth-ai/template/src/app/signup/page.tsx +105 -0
  233. package/src/templates/web/ui-auth-ai/template/src/components/ai/audio-generator.tsx +144 -140
  234. package/src/templates/web/ui-auth-ai/template/src/components/ai/video-generator.tsx +156 -157
  235. package/src/templates/web/ui-auth-ai/template/src/components/auth/login-form.tsx +7 -3
  236. package/src/templates/web/ui-auth-ai/template/src/components/providers/app-providers.tsx +25 -0
  237. package/src/templates/web/ui-auth-ai/template/src/components/shared/footer.tsx +36 -0
  238. package/src/templates/web/ui-auth-ai/template/src/components/shared/header.tsx +228 -0
  239. package/src/templates/web/ui-auth-ai/template/src/components/ui/button.tsx +5 -5
  240. package/src/templates/web/ui-auth-ai/template/src/components/ui/input.tsx +1 -1
  241. package/src/templates/web/ui-auth-ai/template/src/components/ui/select.tsx +1 -1
  242. package/src/templates/web/ui-auth-ai/template/src/components/ui/textarea.tsx +1 -1
  243. package/src/templates/web/ui-auth-ai/template/src/components/ui/theme-toggle.tsx +34 -0
  244. package/src/templates/web/ui-auth-ai/template/src/lib/supabase.ts +6 -4
  245. package/src/templates/web/ui-auth-ai/template/src/providers/auth-provider.tsx +7 -5
  246. package/src/templates/web/ui-auth-payments/template/src/app/billing/page.tsx +63 -192
  247. package/src/templates/web/ui-auth-payments/template/src/app/checkout/page.tsx +104 -296
  248. package/src/templates/web/ui-auth-payments/template/src/app/dashboard/page.tsx +27 -27
  249. package/src/templates/web/ui-auth-payments/template/src/app/dev-setup/page.tsx +70 -81
  250. package/src/templates/web/ui-auth-payments/template/src/app/layout.tsx +38 -36
  251. package/src/templates/web/ui-auth-payments/template/src/app/login/loading.tsx +9 -9
  252. package/src/templates/web/ui-auth-payments/template/src/app/login/page.tsx +4 -104
  253. package/src/templates/web/ui-auth-payments/template/src/app/page.tsx +69 -337
  254. package/src/templates/web/ui-auth-payments/template/src/app/setup/page.tsx +55 -68
  255. package/src/templates/web/ui-auth-payments/template/src/app/signup/loading.tsx +13 -13
  256. package/src/templates/web/ui-auth-payments/template/src/app/signup/page.tsx +4 -123
  257. package/src/templates/web/ui-auth-payments/template/src/components/client/auth-status.tsx +37 -52
  258. package/src/templates/web/ui-auth-payments/template/src/components/client/login-form.tsx +49 -103
  259. package/src/templates/web/ui-auth-payments/template/src/components/client/newsletter-signup.tsx +4 -4
  260. package/src/templates/web/ui-auth-payments/template/src/components/client/signup-form.tsx +60 -140
  261. package/src/templates/web/ui-auth-payments/template/src/components/providers/app-providers.tsx +25 -28
  262. package/src/templates/web/ui-auth-payments/template/src/components/shared/header.tsx +229 -230
  263. package/src/templates/web/ui-auth-payments/template/src/lib/actions/auth.ts +245 -245
  264. package/src/templates/web/ui-auth-payments/template/src/lib/actions/index.ts +339 -339
  265. package/src/templates/web/ui-auth-payments-ai/template/src/app/ai/page.tsx +305 -309
  266. package/src/templates/web/ui-auth-payments-ai/template/src/app/billing/page.tsx +62 -312
  267. package/src/templates/web/ui-auth-payments-ai/template/src/app/checkout/page.tsx +109 -125
  268. package/src/templates/web/ui-auth-payments-ai/template/src/app/dashboard/page.tsx +27 -27
  269. package/src/templates/web/ui-auth-payments-ai/template/src/app/dev-setup/page.tsx +68 -83
  270. package/src/templates/web/ui-auth-payments-ai/template/src/app/layout.tsx +40 -38
  271. package/src/templates/web/ui-auth-payments-ai/template/src/app/onboarding/page.tsx +20 -20
  272. package/src/templates/web/ui-auth-payments-ai/template/src/app/page.tsx +140 -394
  273. package/src/templates/web/ui-auth-payments-ai/template/src/app/settings/page.tsx +28 -27
  274. package/src/templates/web/ui-auth-payments-ai/template/src/app/setup/page.tsx +51 -66
  275. package/src/templates/web/ui-auth-payments-ai/template/src/components/client/auth-status.tsx +37 -52
  276. package/src/templates/web/ui-auth-payments-ai/template/src/components/client/login-form.tsx +50 -79
  277. package/src/templates/web/ui-auth-payments-ai/template/src/components/client/signup-form.tsx +58 -111
  278. package/src/templates/web/ui-auth-payments-ai/template/src/components/providers/app-providers.tsx +8 -3
  279. package/src/templates/web/ui-auth-payments-ai/template/src/components/shared/header.tsx +229 -252
  280. package/src/templates/web/ui-auth-payments-ai/template/src/lib/actions/auth.ts +245 -245
  281. package/src/templates/web/ui-auth-payments-audio/template/src/app/billing/page.tsx +63 -192
  282. package/src/templates/web/ui-auth-payments-audio/template/src/app/checkout/page.tsx +109 -125
  283. package/src/templates/web/ui-auth-payments-audio/template/src/app/dashboard/page.tsx +27 -27
  284. package/src/templates/web/ui-auth-payments-audio/template/src/app/layout.tsx +40 -38
  285. package/src/templates/web/ui-auth-payments-audio/template/src/app/page.tsx +122 -385
  286. package/src/templates/web/ui-auth-payments-audio/template/src/app/setup/page.tsx +340 -344
  287. package/src/templates/web/ui-auth-payments-audio/template/src/components/client/auth-status.tsx +37 -52
  288. package/src/templates/web/ui-auth-payments-audio/template/src/components/client/login-form.tsx +49 -103
  289. package/src/templates/web/ui-auth-payments-audio/template/src/components/client/signup-form.tsx +60 -140
  290. package/src/templates/web/ui-auth-payments-audio/template/src/components/providers/app-providers.tsx +8 -3
  291. package/src/templates/web/ui-auth-payments-audio/template/src/components/shared/header.tsx +229 -252
  292. package/src/templates/web/ui-auth-payments-audio/template/src/lib/actions/auth.ts +3 -3
  293. package/src/templates/web/ui-auth-payments-video/template/src/app/billing/page.tsx +63 -192
  294. package/src/templates/web/ui-auth-payments-video/template/src/app/checkout/page.tsx +109 -125
  295. package/src/templates/web/ui-auth-payments-video/template/src/app/layout.tsx +38 -36
  296. package/src/templates/web/ui-auth-payments-video/template/src/app/login/page.tsx +9 -109
  297. package/src/templates/web/ui-auth-payments-video/template/src/app/page.tsx +132 -392
  298. package/src/templates/web/ui-auth-payments-video/template/src/app/setup/page.tsx +346 -350
  299. package/src/templates/web/ui-auth-payments-video/template/src/app/signup/page.tsx +9 -128
  300. package/src/templates/web/ui-auth-payments-video/template/src/components/client/login-form.tsx +90 -0
  301. package/src/templates/web/ui-auth-payments-video/template/src/components/client/signup-form.tsx +105 -0
  302. package/src/templates/web/ui-auth-payments-video/template/src/components/providers/app-providers.tsx +8 -3
  303. package/src/templates/web/ui-auth-payments-video/template/src/components/shared/header.tsx +229 -246
  304. package/src/templates/web/ui-only/template/eslint.config.mjs +14 -0
  305. package/src/templates/web/ui-only/template/src/app/checkout/page.tsx +2 -2
  306. package/src/templates/web/ui-only/template/src/app/login/page.tsx +69 -63
  307. package/src/templates/web/ui-only/template/src/app/page.tsx +69 -91
  308. package/src/templates/web/ui-only/template/src/app/signup/page.tsx +94 -79
  309. package/src/templates/web/ui-only/template/src/components/providers/app-providers.tsx +1 -6
  310. package/src/templates/web/ui-only/template/src/components/shared/header.tsx +90 -53
  311. package/src/templates/web/ui-package-test/template/package.json +19 -23
  312. package/src/templates/web/ui-package-test/template/postcss.config.mjs +8 -0
  313. package/src/templates/web/ui-package-test/template/src/app/globals.css +88 -0
  314. package/src/templates/web/ui-package-test/template/src/app/layout.tsx +27 -0
  315. package/src/templates/web/ui-package-test/template/src/app/page.tsx +46 -106
  316. package/dist/templates/mobile/ui-auth-payments-ai-rag/template/README.md +0 -655
  317. package/dist/templates/mobile/ui-auth-payments-ai-rag/template/app/(tabs)/ai.tsx +0 -683
  318. package/dist/templates/mobile/ui-auth-payments-ai-rag/template/app/_layout.tsx +0 -124
  319. package/dist/templates/mobile/ui-auth-payments-ai-rag/template/app.json +0 -74
  320. package/dist/templates/mobile/ui-auth-payments-ai-rag/template/babel.config.js +0 -25
  321. package/dist/templates/mobile/ui-auth-payments-ai-rag/template/docs/MOBILE-SETUP.md +0 -787
  322. package/dist/templates/mobile/ui-auth-payments-ai-rag/template/eas.json +0 -25
  323. package/dist/templates/mobile/ui-auth-payments-ai-rag/template/expo-env.d.ts +0 -3
  324. package/dist/templates/mobile/ui-auth-payments-ai-rag/template/hooks/useRAGSystem.ts +0 -346
  325. package/dist/templates/mobile/ui-auth-payments-ai-rag/template/jest-setup.ts +0 -37
  326. package/dist/templates/mobile/ui-auth-payments-ai-rag/template/lib/rag/config.ts +0 -180
  327. package/dist/templates/mobile/ui-auth-payments-ai-rag/template/metro.config.js +0 -11
  328. package/dist/templates/mobile/ui-auth-payments-ai-rag/template/package.json +0 -122
  329. package/dist/templates/mobile/ui-auth-payments-ai-rag/template/scripts/setup-rag.js +0 -599
  330. package/dist/templates/mobile/ui-auth-payments-ai-rag/template/tsconfig.json +0 -32
  331. package/dist/templates/web/base/template/.eslintrc.js +0 -8
  332. package/dist/templates/web/base/template/src/components/__tests__/example.test.tsx +0 -49
  333. package/dist/templates/web/base/template/src/test/setup.ts +0 -74
  334. package/dist/templates/web/base/template/vitest.config.ts +0 -17
  335. package/dist/templates/web/ui-auth/template/.eslintrc.js +0 -8
  336. package/dist/templates/web/ui-auth/template/src/components/__tests__/example.test.tsx +0 -49
  337. package/dist/templates/web/ui-auth/template/src/test/setup.ts +0 -74
  338. package/dist/templates/web/ui-auth/template/vitest.config.ts +0 -17
  339. package/dist/templates/web/ui-auth-payments/template/src/components/__tests__/example.test.tsx +0 -49
  340. package/dist/templates/web/ui-auth-payments/template/src/test/setup.ts +0 -74
  341. package/dist/templates/web/ui-auth-payments/template/vitest.config.ts +0 -17
  342. package/dist/templates/web/ui-auth-payments-ai/template/src/components/__tests__/example.test.tsx +0 -49
  343. package/dist/templates/web/ui-auth-payments-ai/template/src/test/setup.ts +0 -74
  344. package/dist/templates/web/ui-auth-payments-ai/template/vitest.config.ts +0 -17
  345. package/dist/templates/web/ui-auth-payments-ai-rag/template/README.md +0 -434
  346. package/dist/templates/web/ui-auth-payments-ai-rag/template/components/rag/KnowledgeManager.tsx +0 -642
  347. package/dist/templates/web/ui-auth-payments-ai-rag/template/components/rag/RAGAnalytics.tsx +0 -466
  348. package/dist/templates/web/ui-auth-payments-ai-rag/template/components/rag/RAGChatInterface.tsx +0 -393
  349. package/dist/templates/web/ui-auth-payments-ai-rag/template/docs/GETTING-STARTED.md +0 -457
  350. package/dist/templates/web/ui-auth-payments-ai-rag/template/hooks/useRAGSystem.ts +0 -478
  351. package/dist/templates/web/ui-auth-payments-ai-rag/template/lib/rag/config.ts +0 -250
  352. package/dist/templates/web/ui-auth-payments-ai-rag/template/package.json +0 -73
  353. package/dist/templates/web/ui-auth-payments-ai-rag/template/scripts/setup-rag.js +0 -622
  354. package/dist/templates/web/ui-auth-payments-ai-rag/template/src/app/ai/page.tsx +0 -396
  355. package/dist/templates/web/ui-auth-payments-audio/template/src/components/__tests__/example.test.tsx +0 -49
  356. package/dist/templates/web/ui-auth-payments-audio/template/src/test/setup.ts +0 -74
  357. package/dist/templates/web/ui-auth-payments-audio/template/vitest.config.ts +0 -17
  358. package/dist/templates/web/ui-auth-payments-video/template/src/components/__tests__/example.test.tsx +0 -49
  359. package/dist/templates/web/ui-auth-payments-video/template/src/test/setup.ts +0 -74
  360. package/dist/templates/web/ui-auth-payments-video/template/vitest.config.ts +0 -17
  361. package/dist/templates/web/ui-only/template/.eslintrc.js +0 -8
  362. package/dist/templates/web/ui-only/template/src/components/__tests__/example.test.tsx +0 -49
  363. package/dist/templates/web/ui-only/template/src/test/setup.ts +0 -74
  364. package/dist/templates/web/ui-only/template/vitest.config.ts +0 -17
  365. package/src/templates/mobile/ui-auth-payments-ai-rag/template/README.md +0 -655
  366. package/src/templates/mobile/ui-auth-payments-ai-rag/template/app/(tabs)/ai.tsx +0 -683
  367. package/src/templates/mobile/ui-auth-payments-ai-rag/template/app/_layout.tsx +0 -124
  368. package/src/templates/mobile/ui-auth-payments-ai-rag/template/app.json +0 -74
  369. package/src/templates/mobile/ui-auth-payments-ai-rag/template/babel.config.js +0 -25
  370. package/src/templates/mobile/ui-auth-payments-ai-rag/template/docs/MOBILE-SETUP.md +0 -787
  371. package/src/templates/mobile/ui-auth-payments-ai-rag/template/eas.json +0 -25
  372. package/src/templates/mobile/ui-auth-payments-ai-rag/template/expo-env.d.ts +0 -3
  373. package/src/templates/mobile/ui-auth-payments-ai-rag/template/hooks/useRAGSystem.ts +0 -346
  374. package/src/templates/mobile/ui-auth-payments-ai-rag/template/jest-setup.ts +0 -37
  375. package/src/templates/mobile/ui-auth-payments-ai-rag/template/lib/rag/config.ts +0 -180
  376. package/src/templates/mobile/ui-auth-payments-ai-rag/template/metro.config.js +0 -11
  377. package/src/templates/mobile/ui-auth-payments-ai-rag/template/package.json +0 -122
  378. package/src/templates/mobile/ui-auth-payments-ai-rag/template/scripts/setup-rag.js +0 -599
  379. package/src/templates/mobile/ui-auth-payments-ai-rag/template/tsconfig.json +0 -32
  380. package/src/templates/web/base/template/.eslintrc.js +0 -8
  381. package/src/templates/web/base/template/src/components/__tests__/example.test.tsx +0 -49
  382. package/src/templates/web/base/template/src/test/setup.ts +0 -74
  383. package/src/templates/web/base/template/vitest.config.ts +0 -17
  384. package/src/templates/web/ui-auth/template/.eslintrc.js +0 -8
  385. package/src/templates/web/ui-auth/template/src/components/__tests__/example.test.tsx +0 -49
  386. package/src/templates/web/ui-auth/template/src/test/setup.ts +0 -74
  387. package/src/templates/web/ui-auth/template/vitest.config.ts +0 -17
  388. package/src/templates/web/ui-auth-payments/template/src/components/__tests__/example.test.tsx +0 -49
  389. package/src/templates/web/ui-auth-payments/template/src/test/setup.ts +0 -74
  390. package/src/templates/web/ui-auth-payments/template/vitest.config.ts +0 -17
  391. package/src/templates/web/ui-auth-payments-ai/template/src/components/__tests__/example.test.tsx +0 -49
  392. package/src/templates/web/ui-auth-payments-ai/template/src/test/setup.ts +0 -74
  393. package/src/templates/web/ui-auth-payments-ai/template/vitest.config.ts +0 -17
  394. package/src/templates/web/ui-auth-payments-ai-rag/template/README.md +0 -434
  395. package/src/templates/web/ui-auth-payments-ai-rag/template/components/rag/KnowledgeManager.tsx +0 -642
  396. package/src/templates/web/ui-auth-payments-ai-rag/template/components/rag/RAGAnalytics.tsx +0 -466
  397. package/src/templates/web/ui-auth-payments-ai-rag/template/components/rag/RAGChatInterface.tsx +0 -393
  398. package/src/templates/web/ui-auth-payments-ai-rag/template/docs/GETTING-STARTED.md +0 -457
  399. package/src/templates/web/ui-auth-payments-ai-rag/template/hooks/useRAGSystem.ts +0 -478
  400. package/src/templates/web/ui-auth-payments-ai-rag/template/lib/rag/config.ts +0 -250
  401. package/src/templates/web/ui-auth-payments-ai-rag/template/package.json +0 -73
  402. package/src/templates/web/ui-auth-payments-ai-rag/template/scripts/setup-rag.js +0 -622
  403. package/src/templates/web/ui-auth-payments-ai-rag/template/src/app/ai/page.tsx +0 -396
  404. package/src/templates/web/ui-auth-payments-audio/template/src/components/__tests__/example.test.tsx +0 -49
  405. package/src/templates/web/ui-auth-payments-audio/template/src/test/setup.ts +0 -74
  406. package/src/templates/web/ui-auth-payments-audio/template/vitest.config.ts +0 -17
  407. package/src/templates/web/ui-auth-payments-video/template/src/components/__tests__/example.test.tsx +0 -49
  408. package/src/templates/web/ui-auth-payments-video/template/src/test/setup.ts +0 -74
  409. package/src/templates/web/ui-auth-payments-video/template/vitest.config.ts +0 -17
  410. package/src/templates/web/ui-only/template/.eslintrc.js +0 -8
  411. package/src/templates/web/ui-only/template/src/components/__tests__/example.test.tsx +0 -49
  412. package/src/templates/web/ui-only/template/src/test/setup.ts +0 -74
  413. package/src/templates/web/ui-only/template/vitest.config.ts +0 -17
@@ -1,310 +1,306 @@
1
- 'use client'
2
-
3
- import {
4
- Card,
5
- PageTransition,
6
- MobileContainer,
7
- ResponsiveGrid,
8
- useAnimationTokens,
9
- useGlassmorphism
10
- } from '@digilogiclabs/saas-factory-ui'
11
- import {
12
- ArrowLeft,
13
- MessageSquare,
14
- FileText,
15
- Headphones,
16
- Monitor,
17
- Clock,
18
- TrendingUp,
19
- Zap,
20
- Download,
21
- Share2,
22
- Heart,
23
- MoreHorizontal
24
- } from 'lucide-react'
25
- import { useAuth } from '@digilogiclabs/app-sdk'
26
- import Link from 'next/link'
27
- import { useState, useEffect } from 'react'
28
-
29
- interface AIGeneration {
30
- id: string
31
- type: 'chat' | 'text' | 'audio' | 'video'
32
- title: string
33
- prompt: string
34
- content: string
35
- createdAt: string
36
- status: 'completed' | 'processing' | 'failed'
37
- metadata?: any
38
- }
39
-
40
- export default function AIPage() {
41
- const { user, loading } = useAuth()
42
- const [generations, setGenerations] = useState<AIGeneration[]>([])
43
- const [selectedType, setSelectedType] = useState<'all' | 'chat' | 'text' | 'audio' | 'video'>('all')
44
-
45
- const animations = useAnimationTokens()
46
- const glass = useGlassmorphism()
47
-
48
- // Mock data for demonstration
49
- useEffect(() => {
50
- const mockGenerations: AIGeneration[] = [
51
- {
52
- id: '1',
53
- type: 'text',
54
- title: 'Blog Post: AI in Healthcare',
55
- prompt: 'Write a blog post about AI applications in healthcare',
56
- content: 'Artificial Intelligence is revolutionizing healthcare by enabling faster diagnoses...',
57
- createdAt: '2024-01-15T10:30:00Z',
58
- status: 'completed',
59
- metadata: { wordCount: 847, template: 'Blog post' }
60
- },
61
- {
62
- id: '2',
63
- type: 'audio',
64
- title: 'Meditation Music',
65
- prompt: 'Create calming meditation music with nature sounds',
66
- content: 'Audio file: meditation-music-v1.mp3',
67
- createdAt: '2024-01-15T09:15:00Z',
68
- status: 'completed',
69
- metadata: { duration: 300, format: 'mp3' }
70
- },
71
- {
72
- id: '3',
73
- type: 'video',
74
- title: 'Product Demo',
75
- prompt: 'Create a product demonstration video for a mobile app',
76
- content: 'Video file: product-demo-v1.mp4',
77
- createdAt: '2024-01-14T16:45:00Z',
78
- status: 'completed',
79
- metadata: { duration: 60, resolution: '1080p' }
80
- },
81
- {
82
- id: '4',
83
- type: 'chat',
84
- title: 'Technical Discussion',
85
- prompt: 'How do I optimize React performance?',
86
- content: 'Here are the best practices for optimizing React performance...',
87
- createdAt: '2024-01-14T14:20:00Z',
88
- status: 'completed',
89
- metadata: { messageCount: 8 }
90
- }
91
- ]
92
- setGenerations(mockGenerations)
93
- }, [])
94
-
95
- const filteredGenerations = selectedType === 'all'
96
- ? generations
97
- : generations.filter(gen => gen.type === selectedType)
98
-
99
- const stats = {
100
- totalGenerations: generations.length,
101
- textGenerated: generations.filter(g => g.type === 'text').length,
102
- audioCreated: generations.filter(g => g.type === 'audio').length,
103
- videosProduced: generations.filter(g => g.type === 'video').length,
104
- chatSessions: generations.filter(g => g.type === 'chat').length
105
- }
106
-
107
- const getTypeIcon = (type: AIGeneration['type']) => {
108
- switch (type) {
109
- case 'text': return FileText
110
- case 'audio': return Headphones
111
- case 'video': return Monitor
112
- case 'chat': return MessageSquare
113
- default: return FileText
114
- }
115
- }
116
-
117
- const getTypeColor = (type: AIGeneration['type']) => {
118
- switch (type) {
119
- case 'text': return 'purple'
120
- case 'audio': return 'green'
121
- case 'video': return 'orange'
122
- case 'chat': return 'blue'
123
- default: return 'gray'
124
- }
125
- }
126
-
127
- const formatDate = (dateString: string) => {
128
- return new Date(dateString).toLocaleDateString('en-US', {
129
- month: 'short',
130
- day: 'numeric',
131
- hour: '2-digit',
132
- minute: '2-digit'
133
- })
134
- }
135
-
136
- if (loading) {
137
- return (
138
- <div className="min-h-screen flex items-center justify-center">
139
- <div className="animate-spin rounded-full h-8 w-8 border-b-2 border-blue-500"></div>
140
- </div>
141
- )
142
- }
143
-
144
- if (!user) {
145
- return (
146
- <div className="min-h-screen flex items-center justify-center">
147
- <div className="text-center">
148
- <h2 className="text-2xl font-bold mb-4">Access Denied</h2>
149
- <p className="mb-4">You need to sign in to access the AI dashboard.</p>
150
- <Link href="/login" className="text-blue-500 hover:underline">
151
- Sign In
152
- </Link>
153
- </div>
154
- </div>
155
- )
156
- }
157
-
158
- return (
159
- <PageTransition type="slide" direction="up" duration={300}>
160
- <main className={`min-h-screen ${glass.background.primary} relative overflow-hidden`}>
161
- <div className={`absolute inset-0 ${glass.background.accent} opacity-30`} />
162
- <div className="relative z-10">
163
- <MobileContainer className="py-8">
164
- {/* Header */}
165
- <div className="flex items-center justify-between mb-8">
166
- <div className="flex items-center gap-4">
167
- <Link href="/" className={`${glass.card} ${glass.border} p-2 rounded-xl ${animations.hover.scale}`}>
168
- <ArrowLeft className="w-5 h-5" />
169
- </Link>
170
- <div>
171
- <h1 className="text-2xl font-bold">AI Dashboard</h1>
172
- <p className="text-gray-600 dark:text-gray-300">Manage your AI generations</p>
173
- </div>
174
- </div>
175
- </div>
176
-
177
- {/* Stats Overview */}
178
- <div className="grid grid-cols-2 lg:grid-cols-5 gap-4 mb-8">
179
- <div className={`${glass.card} ${glass.border} rounded-2xl p-4 text-center ${animations.hover.lift}`}>
180
- <div className="text-2xl font-bold text-blue-400 mb-1">{stats.totalGenerations}</div>
181
- <div className="text-xs text-gray-600 dark:text-gray-300">Total</div>
182
- </div>
183
- <div className={`${glass.card} ${glass.border} rounded-2xl p-4 text-center ${animations.hover.lift}`}>
184
- <div className="text-2xl font-bold text-purple-400 mb-1">{stats.textGenerated}</div>
185
- <div className="text-xs text-gray-600 dark:text-gray-300">Text</div>
186
- </div>
187
- <div className={`${glass.card} ${glass.border} rounded-2xl p-4 text-center ${animations.hover.lift}`}>
188
- <div className="text-2xl font-bold text-green-400 mb-1">{stats.audioCreated}</div>
189
- <div className="text-xs text-gray-600 dark:text-gray-300">Audio</div>
190
- </div>
191
- <div className={`${glass.card} ${glass.border} rounded-2xl p-4 text-center ${animations.hover.lift}`}>
192
- <div className="text-2xl font-bold text-orange-400 mb-1">{stats.videosProduced}</div>
193
- <div className="text-xs text-gray-600 dark:text-gray-300">Video</div>
194
- </div>
195
- <div className={`${glass.card} ${glass.border} rounded-2xl p-4 text-center ${animations.hover.lift}`}>
196
- <div className="text-2xl font-bold text-blue-400 mb-1">{stats.chatSessions}</div>
197
- <div className="text-xs text-gray-600 dark:text-gray-300">Chat</div>
198
- </div>
199
- </div>
200
-
201
- {/* Filter Tabs */}
202
- <div className={`${glass.card} ${glass.border} rounded-2xl p-1 mb-8 inline-flex`}>
203
- {['all', 'chat', 'text', 'audio', 'video'].map((type) => (
204
- <button
205
- key={type}
206
- onClick={() => setSelectedType(type as any)}
207
- className={`px-4 py-2 rounded-xl text-sm font-medium transition-all duration-200 ${
208
- selectedType === type
209
- ? 'bg-blue-500 text-white shadow-lg'
210
- : 'text-gray-600 dark:text-gray-300 hover:bg-white/10'
211
- }`}
212
- >
213
- {type.charAt(0).toUpperCase() + type.slice(1)}
214
- </button>
215
- ))}
216
- </div>
217
-
218
- {/* Generations Grid */}
219
- <div className="grid gap-6">
220
- {filteredGenerations.map((generation) => {
221
- const Icon = getTypeIcon(generation.type)
222
- const color = getTypeColor(generation.type)
223
-
224
- return (
225
- <div
226
- key={generation.id}
227
- className={`${glass.card} ${glass.border} rounded-2xl p-6 ${animations.hover.lift} ${animations.transition.smooth}`}
228
- >
229
- <div className="flex items-start justify-between mb-4">
230
- <div className="flex items-start gap-4">
231
- <div className={`w-12 h-12 rounded-xl bg-${color}-500/20 flex items-center justify-center`}>
232
- <Icon className={`w-6 h-6 text-${color}-400`} />
233
- </div>
234
- <div className="flex-1">
235
- <h3 className="font-semibold text-lg mb-1">{generation.title}</h3>
236
- <p className="text-sm text-gray-600 dark:text-gray-300 mb-2">
237
- {generation.prompt}
238
- </p>
239
- <div className="flex items-center gap-4 text-xs text-gray-500">
240
- <div className="flex items-center gap-1">
241
- <Clock className="w-3 h-3" />
242
- {formatDate(generation.createdAt)}
243
- </div>
244
- {generation.metadata && (
245
- <div className="flex items-center gap-2">
246
- {generation.metadata.wordCount && (
247
- <span>{generation.metadata.wordCount} words</span>
248
- )}
249
- {generation.metadata.duration && (
250
- <span>{generation.metadata.duration}s</span>
251
- )}
252
- {generation.metadata.resolution && (
253
- <span>{generation.metadata.resolution}</span>
254
- )}
255
- {generation.metadata.messageCount && (
256
- <span>{generation.metadata.messageCount} messages</span>
257
- )}
258
- </div>
259
- )}
260
- </div>
261
- </div>
262
- </div>
263
- <div className="flex items-center gap-2">
264
- <button className={`p-2 rounded-xl ${glass.card} ${glass.border} ${animations.hover.scale}`}>
265
- <Download className="w-4 h-4" />
266
- </button>
267
- <button className={`p-2 rounded-xl ${glass.card} ${glass.border} ${animations.hover.scale}`}>
268
- <Share2 className="w-4 h-4" />
269
- </button>
270
- <button className={`p-2 rounded-xl ${glass.card} ${glass.border} ${animations.hover.scale}`}>
271
- <MoreHorizontal className="w-4 h-4" />
272
- </button>
273
- </div>
274
- </div>
275
-
276
- <div className={`p-4 rounded-xl bg-gray-50 dark:bg-gray-800/50`}>
277
- <p className="text-sm line-clamp-3">{generation.content}</p>
278
- </div>
279
- </div>
280
- )
281
- })}
282
- </div>
283
-
284
- {filteredGenerations.length === 0 && (
285
- <div className={`${glass.card} ${glass.border} rounded-2xl p-12 text-center`}>
286
- <div className="text-gray-400 mb-4">
287
- <FileText className="w-16 h-16 mx-auto" />
288
- </div>
289
- <h3 className="text-xl font-semibold mb-2">No generations found</h3>
290
- <p className="text-gray-600 dark:text-gray-300 mb-6">
291
- {selectedType === 'all'
292
- ? "You haven't created any AI content yet."
293
- : `No ${selectedType} generations found.`
294
- }
295
- </p>
296
- <Link
297
- href="/"
298
- className="inline-flex items-center gap-2 px-6 py-3 bg-blue-500 text-white rounded-xl hover:bg-blue-600 transition-colors"
299
- >
300
- <Zap className="w-4 h-4" />
301
- Start Creating
302
- </Link>
303
- </div>
304
- )}
305
- </MobileContainer>
306
- </div>
307
- </main>
308
- </PageTransition>
309
- )
1
+ 'use client'
2
+
3
+ import {
4
+ Card,
5
+
6
+
7
+
8
+ } from '@digilogiclabs/saas-factory-ui'
9
+ import {
10
+ ArrowLeft,
11
+ MessageSquare,
12
+ FileText,
13
+ Headphones,
14
+ Monitor,
15
+ Clock,
16
+ TrendingUp,
17
+ Zap,
18
+ Download,
19
+ Share2,
20
+ Heart,
21
+ MoreHorizontal
22
+ } from 'lucide-react'
23
+
24
+ import Link from 'next/link'
25
+ import { useState, useEffect } from 'react'
26
+
27
+ interface AIGeneration {
28
+ id: string
29
+ type: 'chat' | 'text' | 'audio' | 'video'
30
+ title: string
31
+ prompt: string
32
+ content: string
33
+ createdAt: string
34
+ status: 'completed' | 'processing' | 'failed'
35
+ metadata?: any
36
+ }
37
+
38
+ export default function AIPage() {
39
+ const user = null; const loading = false
40
+ const [generations, setGenerations] = useState<AIGeneration[]>([])
41
+ const [selectedType, setSelectedType] = useState<'all' | 'chat' | 'text' | 'audio' | 'video'>('all')
42
+
43
+
44
+ // Mock data for demonstration
45
+ useEffect(() => {
46
+ const mockGenerations: AIGeneration[] = [
47
+ {
48
+ id: '1',
49
+ type: 'text',
50
+ title: 'Blog Post: AI in Healthcare',
51
+ prompt: 'Write a blog post about AI applications in healthcare',
52
+ content: 'Artificial Intelligence is revolutionizing healthcare by enabling faster diagnoses...',
53
+ createdAt: '2024-01-15T10:30:00Z',
54
+ status: 'completed',
55
+ metadata: { wordCount: 847, template: 'Blog post' }
56
+ },
57
+ {
58
+ id: '2',
59
+ type: 'audio',
60
+ title: 'Meditation Music',
61
+ prompt: 'Create calming meditation music with nature sounds',
62
+ content: 'Audio file: meditation-music-v1.mp3',
63
+ createdAt: '2024-01-15T09:15:00Z',
64
+ status: 'completed',
65
+ metadata: { duration: 300, format: 'mp3' }
66
+ },
67
+ {
68
+ id: '3',
69
+ type: 'video',
70
+ title: 'Product Demo',
71
+ prompt: 'Create a product demonstration video for a mobile app',
72
+ content: 'Video file: product-demo-v1.mp4',
73
+ createdAt: '2024-01-14T16:45:00Z',
74
+ status: 'completed',
75
+ metadata: { duration: 60, resolution: '1080p' }
76
+ },
77
+ {
78
+ id: '4',
79
+ type: 'chat',
80
+ title: 'Technical Discussion',
81
+ prompt: 'How do I optimize React performance?',
82
+ content: 'Here are the best practices for optimizing React performance...',
83
+ createdAt: '2024-01-14T14:20:00Z',
84
+ status: 'completed',
85
+ metadata: { messageCount: 8 }
86
+ }
87
+ ]
88
+ setGenerations(mockGenerations)
89
+ }, [])
90
+
91
+ const filteredGenerations = selectedType === 'all'
92
+ ? generations
93
+ : generations.filter(gen => gen.type === selectedType)
94
+
95
+ const stats = {
96
+ totalGenerations: generations.length,
97
+ textGenerated: generations.filter(g => g.type === 'text').length,
98
+ audioCreated: generations.filter(g => g.type === 'audio').length,
99
+ videosProduced: generations.filter(g => g.type === 'video').length,
100
+ chatSessions: generations.filter(g => g.type === 'chat').length
101
+ }
102
+
103
+ const getTypeIcon = (type: AIGeneration['type']) => {
104
+ switch (type) {
105
+ case 'text': return FileText
106
+ case 'audio': return Headphones
107
+ case 'video': return Monitor
108
+ case 'chat': return MessageSquare
109
+ default: return FileText
110
+ }
111
+ }
112
+
113
+ const getTypeColor = (type: AIGeneration['type']) => {
114
+ switch (type) {
115
+ case 'text': return 'purple'
116
+ case 'audio': return 'green'
117
+ case 'video': return 'orange'
118
+ case 'chat': return 'blue'
119
+ default: return 'gray'
120
+ }
121
+ }
122
+
123
+ const formatDate = (dateString: string) => {
124
+ return new Date(dateString).toLocaleDateString('en-US', {
125
+ month: 'short',
126
+ day: 'numeric',
127
+ hour: '2-digit',
128
+ minute: '2-digit'
129
+ })
130
+ }
131
+
132
+ if (loading) {
133
+ return (
134
+ <div className="min-h-screen flex items-center justify-center">
135
+ <div className="animate-spin rounded-full h-8 w-8 border-b-2 border-primary"></div>
136
+ </div>
137
+ )
138
+ }
139
+
140
+ if (!user) {
141
+ return (
142
+ <div className="min-h-screen flex items-center justify-center">
143
+ <div className="text-center">
144
+ <h2 className="text-2xl font-bold mb-4">Access Denied</h2>
145
+ <p className="mb-4">You need to sign in to access the AI dashboard.</p>
146
+ <Link href="/login" className="text-primary hover:underline">
147
+ Sign In
148
+ </Link>
149
+ </div>
150
+ </div>
151
+ )
152
+ }
153
+
154
+ return (
155
+ <div>
156
+ <main className={`min-h-screen bg-background relative overflow-hidden`}>
157
+ <div className={`absolute inset-0 bg-muted opacity-30`} />
158
+ <div className="relative z-10">
159
+ <div className="max-w-4xl mx-auto px-4">
160
+ {/* Header */}
161
+ <div className="flex items-center justify-between mb-8">
162
+ <div className="flex items-center gap-4">
163
+ <Link href="/" className={`rounded-xl border border-border bg-card p-2 rounded-xl hover:scale-[1.02] transition-transform`}>
164
+ <ArrowLeft className="w-5 h-5" />
165
+ </Link>
166
+ <div>
167
+ <h1 className="text-2xl font-bold">AI Dashboard</h1>
168
+ <p className="text-muted-foreground">Manage your AI generations</p>
169
+ </div>
170
+ </div>
171
+ </div>
172
+
173
+ {/* Stats Overview */}
174
+ <div className="grid grid-cols-2 lg:grid-cols-5 gap-4 mb-8">
175
+ <div className={`rounded-xl border border-border bg-card rounded-2xl p-4 text-center hover:-translate-y-0.5 transition-transform`}>
176
+ <div className="text-2xl font-bold text-primary mb-1">{stats.totalGenerations}</div>
177
+ <div className="text-xs text-muted-foreground">Total</div>
178
+ </div>
179
+ <div className={`rounded-xl border border-border bg-card rounded-2xl p-4 text-center hover:-translate-y-0.5 transition-transform`}>
180
+ <div className="text-2xl font-bold text-purple-400 mb-1">{stats.textGenerated}</div>
181
+ <div className="text-xs text-muted-foreground">Text</div>
182
+ </div>
183
+ <div className={`rounded-xl border border-border bg-card rounded-2xl p-4 text-center hover:-translate-y-0.5 transition-transform`}>
184
+ <div className="text-2xl font-bold text-green-400 mb-1">{stats.audioCreated}</div>
185
+ <div className="text-xs text-muted-foreground">Audio</div>
186
+ </div>
187
+ <div className={`rounded-xl border border-border bg-card rounded-2xl p-4 text-center hover:-translate-y-0.5 transition-transform`}>
188
+ <div className="text-2xl font-bold text-orange-400 mb-1">{stats.videosProduced}</div>
189
+ <div className="text-xs text-muted-foreground">Video</div>
190
+ </div>
191
+ <div className={`rounded-xl border border-border bg-card rounded-2xl p-4 text-center hover:-translate-y-0.5 transition-transform`}>
192
+ <div className="text-2xl font-bold text-primary mb-1">{stats.chatSessions}</div>
193
+ <div className="text-xs text-muted-foreground">Chat</div>
194
+ </div>
195
+ </div>
196
+
197
+ {/* Filter Tabs */}
198
+ <div className={`rounded-xl border border-border bg-card rounded-2xl p-1 mb-8 inline-flex`}>
199
+ {['all', 'chat', 'text', 'audio', 'video'].map((type) => (
200
+ <button
201
+ key={type}
202
+ onClick={() => setSelectedType(type as any)}
203
+ className={`px-4 py-2 rounded-xl text-sm font-medium transition-all duration-200 ${
204
+ selectedType === type
205
+ ? 'bg-primary text-primary-foreground shadow-lg'
206
+ : 'text-muted-foreground hover:bg-white/10'
207
+ }`}
208
+ >
209
+ {type.charAt(0).toUpperCase() + type.slice(1)}
210
+ </button>
211
+ ))}
212
+ </div>
213
+
214
+ {/* Generations Grid */}
215
+ <div className="grid gap-6">
216
+ {filteredGenerations.map((generation) => {
217
+ const Icon = getTypeIcon(generation.type)
218
+ const color = getTypeColor(generation.type)
219
+
220
+ return (
221
+ <div
222
+ key={generation.id}
223
+ className={`rounded-xl border border-border bg-card rounded-2xl p-6 hover:-translate-y-0.5 transition-transform transition-all duration-300`}
224
+ >
225
+ <div className="flex items-start justify-between mb-4">
226
+ <div className="flex items-start gap-4">
227
+ <div className={`w-12 h-12 rounded-xl bg-${color}-500/20 flex items-center justify-center`}>
228
+ <Icon className={`w-6 h-6 text-${color}-400`} />
229
+ </div>
230
+ <div className="flex-1">
231
+ <h3 className="font-semibold text-lg mb-1">{generation.title}</h3>
232
+ <p className="text-sm text-muted-foreground mb-2">
233
+ {generation.prompt}
234
+ </p>
235
+ <div className="flex items-center gap-4 text-xs text-muted-foreground">
236
+ <div className="flex items-center gap-1">
237
+ <Clock className="w-3 h-3" />
238
+ {formatDate(generation.createdAt)}
239
+ </div>
240
+ {generation.metadata && (
241
+ <div className="flex items-center gap-2">
242
+ {generation.metadata.wordCount && (
243
+ <span>{generation.metadata.wordCount} words</span>
244
+ )}
245
+ {generation.metadata.duration && (
246
+ <span>{generation.metadata.duration}s</span>
247
+ )}
248
+ {generation.metadata.resolution && (
249
+ <span>{generation.metadata.resolution}</span>
250
+ )}
251
+ {generation.metadata.messageCount && (
252
+ <span>{generation.metadata.messageCount} messages</span>
253
+ )}
254
+ </div>
255
+ )}
256
+ </div>
257
+ </div>
258
+ </div>
259
+ <div className="flex items-center gap-2">
260
+ <button className={`p-2 rounded-xl rounded-xl border border-border bg-card hover:scale-[1.02] transition-transform`}>
261
+ <Download className="w-4 h-4" />
262
+ </button>
263
+ <button className={`p-2 rounded-xl rounded-xl border border-border bg-card hover:scale-[1.02] transition-transform`}>
264
+ <Share2 className="w-4 h-4" />
265
+ </button>
266
+ <button className={`p-2 rounded-xl rounded-xl border border-border bg-card hover:scale-[1.02] transition-transform`}>
267
+ <MoreHorizontal className="w-4 h-4" />
268
+ </button>
269
+ </div>
270
+ </div>
271
+
272
+ <div className={`p-4 rounded-xl bg-muted`}>
273
+ <p className="text-sm line-clamp-3">{generation.content}</p>
274
+ </div>
275
+ </div>
276
+ )
277
+ })}
278
+ </div>
279
+
280
+ {filteredGenerations.length === 0 && (
281
+ <div className={`rounded-xl border border-border bg-card rounded-2xl p-12 text-center`}>
282
+ <div className="text-muted-foreground mb-4">
283
+ <FileText className="w-16 h-16 mx-auto" />
284
+ </div>
285
+ <h3 className="text-xl font-semibold mb-2">No generations found</h3>
286
+ <p className="text-muted-foreground mb-6">
287
+ {selectedType === 'all'
288
+ ? "You haven't created any AI content yet."
289
+ : `No ${selectedType} generations found.`
290
+ }
291
+ </p>
292
+ <Link
293
+ href="/"
294
+ className="inline-flex items-center gap-2 px-6 py-3 bg-primary text-primary-foreground rounded-xl hover:bg-primary/90 transition-colors"
295
+ >
296
+ <Zap className="w-4 h-4" />
297
+ Start Creating
298
+ </Link>
299
+ </div>
300
+ )}
301
+ </div>
302
+ </div>
303
+ </main>
304
+ </div>
305
+ )
310
306
  }