@digilogiclabs/create-saas-app 2.11.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 (358) hide show
  1. package/CHANGELOG.md +6 -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.map +1 -1
  6. package/dist/generators/template-generator.js +15 -8
  7. package/dist/generators/template-generator.js.map +1 -1
  8. package/dist/templates/shared/admin/web/src/components/admin-nav.tsx +3 -3
  9. package/dist/templates/shared/auth/supabase/web/src/lib/auth-session.ts +36 -16
  10. package/dist/templates/shared/auth/supabase/web/src/middleware.ts +6 -0
  11. package/dist/templates/shared/cookie-consent/web/components/cookie-consent.tsx +5 -5
  12. package/dist/templates/shared/design/web/src/components/ui/button.tsx +56 -0
  13. package/dist/templates/shared/email/web/src/lib/email/client.ts +1 -1
  14. package/dist/templates/shared/error-pages/web/src/app/error.tsx +13 -11
  15. package/dist/templates/shared/error-pages/web/src/app/global-error.tsx +2 -0
  16. package/dist/templates/shared/error-pages/web/src/app/not-found.tsx +6 -6
  17. package/dist/templates/shared/legal/web/src/app/(legal)/privacy/page.tsx +4 -4
  18. package/dist/templates/shared/legal/web/src/app/(legal)/terms/page.tsx +4 -4
  19. package/dist/templates/shared/loading/web/components/skeleton.tsx +4 -4
  20. package/dist/templates/shared/mock/web/.env.local +55 -0
  21. package/dist/templates/shared/mock/web/src/components/mock-auth-provider.tsx +72 -0
  22. package/dist/templates/shared/mock/web/src/components/mock-banner.tsx +29 -0
  23. package/dist/templates/shared/mock/web/src/lib/mock.ts +147 -0
  24. package/dist/templates/shared/payments/web/src/app/api/webhooks/stripe/route.ts +10 -4
  25. package/dist/templates/shared/redis/web/src/lib/redis.ts +1 -1
  26. package/dist/templates/web/base/template/eslint.config.mjs +14 -0
  27. package/dist/templates/web/base/template/src/app/auth/callback/route.ts +1 -1
  28. package/dist/templates/web/base/template/src/app/checkout/page.tsx +76 -103
  29. package/dist/templates/web/base/template/src/app/dashboard/page.tsx +145 -329
  30. package/dist/templates/web/base/template/src/app/layout.tsx +40 -38
  31. package/dist/templates/web/base/template/src/app/login/page.tsx +116 -66
  32. package/dist/templates/web/base/template/src/app/page.tsx +97 -193
  33. package/dist/templates/web/base/template/src/app/settings/page.tsx +154 -0
  34. package/dist/templates/web/base/template/src/app/signup/page.tsx +117 -66
  35. package/dist/templates/web/base/template/src/components/providers/app-providers.tsx +8 -3
  36. package/dist/templates/web/base/template/src/components/shared/header.tsx +229 -63
  37. package/dist/templates/web/ui-auth/template/eslint.config.mjs +14 -0
  38. package/dist/templates/web/ui-auth/template/src/app/checkout/page.tsx +3 -3
  39. package/dist/templates/web/ui-auth/template/src/app/dev-setup/page.tsx +81 -91
  40. package/dist/templates/web/ui-auth/template/src/app/layout.tsx +38 -36
  41. package/dist/templates/web/ui-auth/template/src/app/login/page.tsx +22 -45
  42. package/dist/templates/web/ui-auth/template/src/app/page.tsx +106 -306
  43. package/dist/templates/web/ui-auth/template/src/app/setup/page.tsx +387 -402
  44. package/dist/templates/web/ui-auth/template/src/app/signup/page.tsx +24 -47
  45. package/dist/templates/web/ui-auth/template/src/components/providers/app-providers.tsx +8 -3
  46. package/dist/templates/web/ui-auth/template/src/components/shared/header.tsx +229 -94
  47. package/dist/templates/web/ui-auth-ai/template/src/app/layout.tsx +38 -45
  48. package/dist/templates/web/ui-auth-ai/template/src/app/login/page.tsx +86 -0
  49. package/dist/templates/web/ui-auth-ai/template/src/app/page.tsx +107 -193
  50. package/dist/templates/web/ui-auth-ai/template/src/app/signup/page.tsx +105 -0
  51. package/dist/templates/web/ui-auth-ai/template/src/components/ai/audio-generator.tsx +144 -140
  52. package/dist/templates/web/ui-auth-ai/template/src/components/ai/video-generator.tsx +156 -157
  53. package/dist/templates/web/ui-auth-ai/template/src/components/auth/login-form.tsx +7 -3
  54. package/dist/templates/web/ui-auth-ai/template/src/components/providers/app-providers.tsx +25 -0
  55. package/dist/templates/web/ui-auth-ai/template/src/components/shared/footer.tsx +36 -0
  56. package/dist/templates/web/ui-auth-ai/template/src/components/shared/header.tsx +228 -0
  57. package/dist/templates/web/ui-auth-ai/template/src/components/ui/button.tsx +5 -5
  58. package/dist/templates/web/ui-auth-ai/template/src/components/ui/input.tsx +1 -1
  59. package/dist/templates/web/ui-auth-ai/template/src/components/ui/select.tsx +1 -1
  60. package/dist/templates/web/ui-auth-ai/template/src/components/ui/textarea.tsx +1 -1
  61. package/dist/templates/web/ui-auth-ai/template/src/components/ui/theme-toggle.tsx +34 -0
  62. package/dist/templates/web/ui-auth-ai/template/src/lib/supabase.ts +6 -4
  63. package/dist/templates/web/ui-auth-ai/template/src/providers/auth-provider.tsx +7 -5
  64. package/dist/templates/web/ui-auth-payments/template/src/app/billing/page.tsx +63 -192
  65. package/dist/templates/web/ui-auth-payments/template/src/app/checkout/page.tsx +104 -296
  66. package/dist/templates/web/ui-auth-payments/template/src/app/dashboard/page.tsx +27 -27
  67. package/dist/templates/web/ui-auth-payments/template/src/app/dev-setup/page.tsx +70 -81
  68. package/dist/templates/web/ui-auth-payments/template/src/app/layout.tsx +38 -36
  69. package/dist/templates/web/ui-auth-payments/template/src/app/login/loading.tsx +9 -9
  70. package/dist/templates/web/ui-auth-payments/template/src/app/login/page.tsx +4 -104
  71. package/dist/templates/web/ui-auth-payments/template/src/app/page.tsx +69 -337
  72. package/dist/templates/web/ui-auth-payments/template/src/app/setup/page.tsx +55 -68
  73. package/dist/templates/web/ui-auth-payments/template/src/app/signup/loading.tsx +13 -13
  74. package/dist/templates/web/ui-auth-payments/template/src/app/signup/page.tsx +4 -123
  75. package/dist/templates/web/ui-auth-payments/template/src/components/client/auth-status.tsx +37 -52
  76. package/dist/templates/web/ui-auth-payments/template/src/components/client/login-form.tsx +49 -103
  77. package/dist/templates/web/ui-auth-payments/template/src/components/client/newsletter-signup.tsx +4 -4
  78. package/dist/templates/web/ui-auth-payments/template/src/components/client/signup-form.tsx +60 -140
  79. package/dist/templates/web/ui-auth-payments/template/src/components/providers/app-providers.tsx +25 -28
  80. package/dist/templates/web/ui-auth-payments/template/src/components/shared/header.tsx +229 -230
  81. package/dist/templates/web/ui-auth-payments/template/src/lib/actions/auth.ts +245 -245
  82. package/dist/templates/web/ui-auth-payments/template/src/lib/actions/index.ts +339 -339
  83. package/dist/templates/web/ui-auth-payments-ai/template/src/app/ai/page.tsx +305 -309
  84. package/dist/templates/web/ui-auth-payments-ai/template/src/app/billing/page.tsx +62 -312
  85. package/dist/templates/web/ui-auth-payments-ai/template/src/app/checkout/page.tsx +109 -125
  86. package/dist/templates/web/ui-auth-payments-ai/template/src/app/dashboard/page.tsx +27 -27
  87. package/dist/templates/web/ui-auth-payments-ai/template/src/app/dev-setup/page.tsx +68 -83
  88. package/dist/templates/web/ui-auth-payments-ai/template/src/app/layout.tsx +40 -38
  89. package/dist/templates/web/ui-auth-payments-ai/template/src/app/onboarding/page.tsx +20 -20
  90. package/dist/templates/web/ui-auth-payments-ai/template/src/app/page.tsx +140 -394
  91. package/dist/templates/web/ui-auth-payments-ai/template/src/app/settings/page.tsx +28 -27
  92. package/dist/templates/web/ui-auth-payments-ai/template/src/app/setup/page.tsx +51 -66
  93. package/dist/templates/web/ui-auth-payments-ai/template/src/components/client/auth-status.tsx +37 -52
  94. package/dist/templates/web/ui-auth-payments-ai/template/src/components/client/login-form.tsx +50 -79
  95. package/dist/templates/web/ui-auth-payments-ai/template/src/components/client/signup-form.tsx +58 -111
  96. package/dist/templates/web/ui-auth-payments-ai/template/src/components/providers/app-providers.tsx +8 -3
  97. package/dist/templates/web/ui-auth-payments-ai/template/src/components/shared/header.tsx +229 -252
  98. package/dist/templates/web/ui-auth-payments-ai/template/src/lib/actions/auth.ts +245 -245
  99. package/dist/templates/web/ui-auth-payments-audio/template/src/app/billing/page.tsx +63 -192
  100. package/dist/templates/web/ui-auth-payments-audio/template/src/app/checkout/page.tsx +109 -125
  101. package/dist/templates/web/ui-auth-payments-audio/template/src/app/dashboard/page.tsx +27 -27
  102. package/dist/templates/web/ui-auth-payments-audio/template/src/app/layout.tsx +40 -38
  103. package/dist/templates/web/ui-auth-payments-audio/template/src/app/page.tsx +122 -385
  104. package/dist/templates/web/ui-auth-payments-audio/template/src/app/setup/page.tsx +340 -344
  105. package/dist/templates/web/ui-auth-payments-audio/template/src/components/client/auth-status.tsx +37 -52
  106. package/dist/templates/web/ui-auth-payments-audio/template/src/components/client/login-form.tsx +49 -103
  107. package/dist/templates/web/ui-auth-payments-audio/template/src/components/client/signup-form.tsx +60 -140
  108. package/dist/templates/web/ui-auth-payments-audio/template/src/components/providers/app-providers.tsx +8 -3
  109. package/dist/templates/web/ui-auth-payments-audio/template/src/components/shared/header.tsx +229 -252
  110. package/dist/templates/web/ui-auth-payments-audio/template/src/lib/actions/auth.ts +3 -3
  111. package/dist/templates/web/ui-auth-payments-video/template/src/app/billing/page.tsx +63 -192
  112. package/dist/templates/web/ui-auth-payments-video/template/src/app/checkout/page.tsx +109 -125
  113. package/dist/templates/web/ui-auth-payments-video/template/src/app/layout.tsx +38 -36
  114. package/dist/templates/web/ui-auth-payments-video/template/src/app/login/page.tsx +9 -109
  115. package/dist/templates/web/ui-auth-payments-video/template/src/app/page.tsx +132 -392
  116. package/dist/templates/web/ui-auth-payments-video/template/src/app/setup/page.tsx +346 -350
  117. package/dist/templates/web/ui-auth-payments-video/template/src/app/signup/page.tsx +9 -128
  118. package/dist/templates/web/ui-auth-payments-video/template/src/components/client/login-form.tsx +90 -0
  119. package/dist/templates/web/ui-auth-payments-video/template/src/components/client/signup-form.tsx +105 -0
  120. package/dist/templates/web/ui-auth-payments-video/template/src/components/providers/app-providers.tsx +8 -3
  121. package/dist/templates/web/ui-auth-payments-video/template/src/components/shared/header.tsx +229 -246
  122. package/dist/templates/web/ui-only/template/eslint.config.mjs +14 -0
  123. package/dist/templates/web/ui-only/template/src/app/checkout/page.tsx +2 -2
  124. package/dist/templates/web/ui-only/template/src/app/login/page.tsx +69 -63
  125. package/dist/templates/web/ui-only/template/src/app/page.tsx +69 -91
  126. package/dist/templates/web/ui-only/template/src/app/signup/page.tsx +94 -79
  127. package/dist/templates/web/ui-only/template/src/components/providers/app-providers.tsx +1 -6
  128. package/dist/templates/web/ui-only/template/src/components/shared/header.tsx +90 -53
  129. package/dist/templates/web/ui-package-test/template/package.json +19 -23
  130. package/dist/templates/web/ui-package-test/template/postcss.config.mjs +8 -0
  131. package/dist/templates/web/ui-package-test/template/src/app/globals.css +88 -0
  132. package/dist/templates/web/ui-package-test/template/src/app/layout.tsx +27 -0
  133. package/dist/templates/web/ui-package-test/template/src/app/page.tsx +46 -106
  134. package/package.json +1 -1
  135. package/src/templates/shared/admin/web/src/components/admin-nav.tsx +3 -3
  136. package/src/templates/shared/auth/supabase/web/src/lib/auth-session.ts +36 -16
  137. package/src/templates/shared/auth/supabase/web/src/middleware.ts +6 -0
  138. package/src/templates/shared/cookie-consent/web/components/cookie-consent.tsx +5 -5
  139. package/src/templates/shared/design/web/src/components/ui/button.tsx +56 -0
  140. package/src/templates/shared/email/web/src/lib/email/client.ts +1 -1
  141. package/src/templates/shared/error-pages/web/src/app/error.tsx +13 -11
  142. package/src/templates/shared/error-pages/web/src/app/global-error.tsx +2 -0
  143. package/src/templates/shared/error-pages/web/src/app/not-found.tsx +6 -6
  144. package/src/templates/shared/legal/web/src/app/(legal)/privacy/page.tsx +4 -4
  145. package/src/templates/shared/legal/web/src/app/(legal)/terms/page.tsx +4 -4
  146. package/src/templates/shared/loading/web/components/skeleton.tsx +4 -4
  147. package/src/templates/shared/mock/web/.env.local +55 -0
  148. package/src/templates/shared/mock/web/src/components/mock-auth-provider.tsx +72 -0
  149. package/src/templates/shared/mock/web/src/components/mock-banner.tsx +29 -0
  150. package/src/templates/shared/mock/web/src/lib/mock.ts +147 -0
  151. package/src/templates/shared/payments/web/src/app/api/webhooks/stripe/route.ts +10 -4
  152. package/src/templates/shared/redis/web/src/lib/redis.ts +1 -1
  153. package/src/templates/web/base/template/eslint.config.mjs +14 -0
  154. package/src/templates/web/base/template/src/app/auth/callback/route.ts +1 -1
  155. package/src/templates/web/base/template/src/app/checkout/page.tsx +76 -103
  156. package/src/templates/web/base/template/src/app/dashboard/page.tsx +145 -329
  157. package/src/templates/web/base/template/src/app/layout.tsx +40 -38
  158. package/src/templates/web/base/template/src/app/login/page.tsx +116 -66
  159. package/src/templates/web/base/template/src/app/page.tsx +97 -193
  160. package/src/templates/web/base/template/src/app/settings/page.tsx +154 -0
  161. package/src/templates/web/base/template/src/app/signup/page.tsx +117 -66
  162. package/src/templates/web/base/template/src/components/providers/app-providers.tsx +8 -3
  163. package/src/templates/web/base/template/src/components/shared/header.tsx +229 -63
  164. package/src/templates/web/ui-auth/template/eslint.config.mjs +14 -0
  165. package/src/templates/web/ui-auth/template/src/app/checkout/page.tsx +3 -3
  166. package/src/templates/web/ui-auth/template/src/app/dev-setup/page.tsx +81 -91
  167. package/src/templates/web/ui-auth/template/src/app/layout.tsx +38 -36
  168. package/src/templates/web/ui-auth/template/src/app/login/page.tsx +22 -45
  169. package/src/templates/web/ui-auth/template/src/app/page.tsx +106 -306
  170. package/src/templates/web/ui-auth/template/src/app/setup/page.tsx +387 -402
  171. package/src/templates/web/ui-auth/template/src/app/signup/page.tsx +24 -47
  172. package/src/templates/web/ui-auth/template/src/components/providers/app-providers.tsx +8 -3
  173. package/src/templates/web/ui-auth/template/src/components/shared/header.tsx +229 -94
  174. package/src/templates/web/ui-auth-ai/template/src/app/layout.tsx +38 -45
  175. package/src/templates/web/ui-auth-ai/template/src/app/login/page.tsx +86 -0
  176. package/src/templates/web/ui-auth-ai/template/src/app/page.tsx +107 -193
  177. package/src/templates/web/ui-auth-ai/template/src/app/signup/page.tsx +105 -0
  178. package/src/templates/web/ui-auth-ai/template/src/components/ai/audio-generator.tsx +144 -140
  179. package/src/templates/web/ui-auth-ai/template/src/components/ai/video-generator.tsx +156 -157
  180. package/src/templates/web/ui-auth-ai/template/src/components/auth/login-form.tsx +7 -3
  181. package/src/templates/web/ui-auth-ai/template/src/components/providers/app-providers.tsx +25 -0
  182. package/src/templates/web/ui-auth-ai/template/src/components/shared/footer.tsx +36 -0
  183. package/src/templates/web/ui-auth-ai/template/src/components/shared/header.tsx +228 -0
  184. package/src/templates/web/ui-auth-ai/template/src/components/ui/button.tsx +5 -5
  185. package/src/templates/web/ui-auth-ai/template/src/components/ui/input.tsx +1 -1
  186. package/src/templates/web/ui-auth-ai/template/src/components/ui/select.tsx +1 -1
  187. package/src/templates/web/ui-auth-ai/template/src/components/ui/textarea.tsx +1 -1
  188. package/src/templates/web/ui-auth-ai/template/src/components/ui/theme-toggle.tsx +34 -0
  189. package/src/templates/web/ui-auth-ai/template/src/lib/supabase.ts +6 -4
  190. package/src/templates/web/ui-auth-ai/template/src/providers/auth-provider.tsx +7 -5
  191. package/src/templates/web/ui-auth-payments/template/src/app/billing/page.tsx +63 -192
  192. package/src/templates/web/ui-auth-payments/template/src/app/checkout/page.tsx +104 -296
  193. package/src/templates/web/ui-auth-payments/template/src/app/dashboard/page.tsx +27 -27
  194. package/src/templates/web/ui-auth-payments/template/src/app/dev-setup/page.tsx +70 -81
  195. package/src/templates/web/ui-auth-payments/template/src/app/layout.tsx +38 -36
  196. package/src/templates/web/ui-auth-payments/template/src/app/login/loading.tsx +9 -9
  197. package/src/templates/web/ui-auth-payments/template/src/app/login/page.tsx +4 -104
  198. package/src/templates/web/ui-auth-payments/template/src/app/page.tsx +69 -337
  199. package/src/templates/web/ui-auth-payments/template/src/app/setup/page.tsx +55 -68
  200. package/src/templates/web/ui-auth-payments/template/src/app/signup/loading.tsx +13 -13
  201. package/src/templates/web/ui-auth-payments/template/src/app/signup/page.tsx +4 -123
  202. package/src/templates/web/ui-auth-payments/template/src/components/client/auth-status.tsx +37 -52
  203. package/src/templates/web/ui-auth-payments/template/src/components/client/login-form.tsx +49 -103
  204. package/src/templates/web/ui-auth-payments/template/src/components/client/newsletter-signup.tsx +4 -4
  205. package/src/templates/web/ui-auth-payments/template/src/components/client/signup-form.tsx +60 -140
  206. package/src/templates/web/ui-auth-payments/template/src/components/providers/app-providers.tsx +25 -28
  207. package/src/templates/web/ui-auth-payments/template/src/components/shared/header.tsx +229 -230
  208. package/src/templates/web/ui-auth-payments/template/src/lib/actions/auth.ts +245 -245
  209. package/src/templates/web/ui-auth-payments/template/src/lib/actions/index.ts +339 -339
  210. package/src/templates/web/ui-auth-payments-ai/template/src/app/ai/page.tsx +305 -309
  211. package/src/templates/web/ui-auth-payments-ai/template/src/app/billing/page.tsx +62 -312
  212. package/src/templates/web/ui-auth-payments-ai/template/src/app/checkout/page.tsx +109 -125
  213. package/src/templates/web/ui-auth-payments-ai/template/src/app/dashboard/page.tsx +27 -27
  214. package/src/templates/web/ui-auth-payments-ai/template/src/app/dev-setup/page.tsx +68 -83
  215. package/src/templates/web/ui-auth-payments-ai/template/src/app/layout.tsx +40 -38
  216. package/src/templates/web/ui-auth-payments-ai/template/src/app/onboarding/page.tsx +20 -20
  217. package/src/templates/web/ui-auth-payments-ai/template/src/app/page.tsx +140 -394
  218. package/src/templates/web/ui-auth-payments-ai/template/src/app/settings/page.tsx +28 -27
  219. package/src/templates/web/ui-auth-payments-ai/template/src/app/setup/page.tsx +51 -66
  220. package/src/templates/web/ui-auth-payments-ai/template/src/components/client/auth-status.tsx +37 -52
  221. package/src/templates/web/ui-auth-payments-ai/template/src/components/client/login-form.tsx +50 -79
  222. package/src/templates/web/ui-auth-payments-ai/template/src/components/client/signup-form.tsx +58 -111
  223. package/src/templates/web/ui-auth-payments-ai/template/src/components/providers/app-providers.tsx +8 -3
  224. package/src/templates/web/ui-auth-payments-ai/template/src/components/shared/header.tsx +229 -252
  225. package/src/templates/web/ui-auth-payments-ai/template/src/lib/actions/auth.ts +245 -245
  226. package/src/templates/web/ui-auth-payments-audio/template/src/app/billing/page.tsx +63 -192
  227. package/src/templates/web/ui-auth-payments-audio/template/src/app/checkout/page.tsx +109 -125
  228. package/src/templates/web/ui-auth-payments-audio/template/src/app/dashboard/page.tsx +27 -27
  229. package/src/templates/web/ui-auth-payments-audio/template/src/app/layout.tsx +40 -38
  230. package/src/templates/web/ui-auth-payments-audio/template/src/app/page.tsx +122 -385
  231. package/src/templates/web/ui-auth-payments-audio/template/src/app/setup/page.tsx +340 -344
  232. package/src/templates/web/ui-auth-payments-audio/template/src/components/client/auth-status.tsx +37 -52
  233. package/src/templates/web/ui-auth-payments-audio/template/src/components/client/login-form.tsx +49 -103
  234. package/src/templates/web/ui-auth-payments-audio/template/src/components/client/signup-form.tsx +60 -140
  235. package/src/templates/web/ui-auth-payments-audio/template/src/components/providers/app-providers.tsx +8 -3
  236. package/src/templates/web/ui-auth-payments-audio/template/src/components/shared/header.tsx +229 -252
  237. package/src/templates/web/ui-auth-payments-audio/template/src/lib/actions/auth.ts +3 -3
  238. package/src/templates/web/ui-auth-payments-video/template/src/app/billing/page.tsx +63 -192
  239. package/src/templates/web/ui-auth-payments-video/template/src/app/checkout/page.tsx +109 -125
  240. package/src/templates/web/ui-auth-payments-video/template/src/app/layout.tsx +38 -36
  241. package/src/templates/web/ui-auth-payments-video/template/src/app/login/page.tsx +9 -109
  242. package/src/templates/web/ui-auth-payments-video/template/src/app/page.tsx +132 -392
  243. package/src/templates/web/ui-auth-payments-video/template/src/app/setup/page.tsx +346 -350
  244. package/src/templates/web/ui-auth-payments-video/template/src/app/signup/page.tsx +9 -128
  245. package/src/templates/web/ui-auth-payments-video/template/src/components/client/login-form.tsx +90 -0
  246. package/src/templates/web/ui-auth-payments-video/template/src/components/client/signup-form.tsx +105 -0
  247. package/src/templates/web/ui-auth-payments-video/template/src/components/providers/app-providers.tsx +8 -3
  248. package/src/templates/web/ui-auth-payments-video/template/src/components/shared/header.tsx +229 -246
  249. package/src/templates/web/ui-only/template/eslint.config.mjs +14 -0
  250. package/src/templates/web/ui-only/template/src/app/checkout/page.tsx +2 -2
  251. package/src/templates/web/ui-only/template/src/app/login/page.tsx +69 -63
  252. package/src/templates/web/ui-only/template/src/app/page.tsx +69 -91
  253. package/src/templates/web/ui-only/template/src/app/signup/page.tsx +94 -79
  254. package/src/templates/web/ui-only/template/src/components/providers/app-providers.tsx +1 -6
  255. package/src/templates/web/ui-only/template/src/components/shared/header.tsx +90 -53
  256. package/src/templates/web/ui-package-test/template/package.json +19 -23
  257. package/src/templates/web/ui-package-test/template/postcss.config.mjs +8 -0
  258. package/src/templates/web/ui-package-test/template/src/app/globals.css +88 -0
  259. package/src/templates/web/ui-package-test/template/src/app/layout.tsx +27 -0
  260. package/src/templates/web/ui-package-test/template/src/app/page.tsx +46 -106
  261. package/dist/templates/mobile/ui-auth-payments-ai-rag/template/README.md +0 -655
  262. package/dist/templates/mobile/ui-auth-payments-ai-rag/template/app/(tabs)/ai.tsx +0 -683
  263. package/dist/templates/mobile/ui-auth-payments-ai-rag/template/app/_layout.tsx +0 -124
  264. package/dist/templates/mobile/ui-auth-payments-ai-rag/template/app.json +0 -74
  265. package/dist/templates/mobile/ui-auth-payments-ai-rag/template/babel.config.js +0 -25
  266. package/dist/templates/mobile/ui-auth-payments-ai-rag/template/docs/MOBILE-SETUP.md +0 -787
  267. package/dist/templates/mobile/ui-auth-payments-ai-rag/template/eas.json +0 -25
  268. package/dist/templates/mobile/ui-auth-payments-ai-rag/template/expo-env.d.ts +0 -3
  269. package/dist/templates/mobile/ui-auth-payments-ai-rag/template/hooks/useRAGSystem.ts +0 -346
  270. package/dist/templates/mobile/ui-auth-payments-ai-rag/template/jest-setup.ts +0 -37
  271. package/dist/templates/mobile/ui-auth-payments-ai-rag/template/lib/rag/config.ts +0 -180
  272. package/dist/templates/mobile/ui-auth-payments-ai-rag/template/metro.config.js +0 -11
  273. package/dist/templates/mobile/ui-auth-payments-ai-rag/template/package.json +0 -122
  274. package/dist/templates/mobile/ui-auth-payments-ai-rag/template/scripts/setup-rag.js +0 -599
  275. package/dist/templates/mobile/ui-auth-payments-ai-rag/template/tsconfig.json +0 -32
  276. package/dist/templates/web/base/template/.eslintrc.js +0 -8
  277. package/dist/templates/web/base/template/src/components/__tests__/example.test.tsx +0 -49
  278. package/dist/templates/web/base/template/src/test/setup.ts +0 -74
  279. package/dist/templates/web/base/template/vitest.config.ts +0 -17
  280. package/dist/templates/web/ui-auth/template/.eslintrc.js +0 -8
  281. package/dist/templates/web/ui-auth/template/src/components/__tests__/example.test.tsx +0 -49
  282. package/dist/templates/web/ui-auth/template/src/test/setup.ts +0 -74
  283. package/dist/templates/web/ui-auth/template/vitest.config.ts +0 -17
  284. package/dist/templates/web/ui-auth-payments/template/src/components/__tests__/example.test.tsx +0 -49
  285. package/dist/templates/web/ui-auth-payments/template/src/test/setup.ts +0 -74
  286. package/dist/templates/web/ui-auth-payments/template/vitest.config.ts +0 -17
  287. package/dist/templates/web/ui-auth-payments-ai/template/src/components/__tests__/example.test.tsx +0 -49
  288. package/dist/templates/web/ui-auth-payments-ai/template/src/test/setup.ts +0 -74
  289. package/dist/templates/web/ui-auth-payments-ai/template/vitest.config.ts +0 -17
  290. package/dist/templates/web/ui-auth-payments-ai-rag/template/README.md +0 -434
  291. package/dist/templates/web/ui-auth-payments-ai-rag/template/components/rag/KnowledgeManager.tsx +0 -642
  292. package/dist/templates/web/ui-auth-payments-ai-rag/template/components/rag/RAGAnalytics.tsx +0 -466
  293. package/dist/templates/web/ui-auth-payments-ai-rag/template/components/rag/RAGChatInterface.tsx +0 -393
  294. package/dist/templates/web/ui-auth-payments-ai-rag/template/docs/GETTING-STARTED.md +0 -457
  295. package/dist/templates/web/ui-auth-payments-ai-rag/template/hooks/useRAGSystem.ts +0 -478
  296. package/dist/templates/web/ui-auth-payments-ai-rag/template/lib/rag/config.ts +0 -250
  297. package/dist/templates/web/ui-auth-payments-ai-rag/template/package.json +0 -73
  298. package/dist/templates/web/ui-auth-payments-ai-rag/template/scripts/setup-rag.js +0 -622
  299. package/dist/templates/web/ui-auth-payments-ai-rag/template/src/app/ai/page.tsx +0 -396
  300. package/dist/templates/web/ui-auth-payments-audio/template/src/components/__tests__/example.test.tsx +0 -49
  301. package/dist/templates/web/ui-auth-payments-audio/template/src/test/setup.ts +0 -74
  302. package/dist/templates/web/ui-auth-payments-audio/template/vitest.config.ts +0 -17
  303. package/dist/templates/web/ui-auth-payments-video/template/src/components/__tests__/example.test.tsx +0 -49
  304. package/dist/templates/web/ui-auth-payments-video/template/src/test/setup.ts +0 -74
  305. package/dist/templates/web/ui-auth-payments-video/template/vitest.config.ts +0 -17
  306. package/dist/templates/web/ui-only/template/.eslintrc.js +0 -8
  307. package/dist/templates/web/ui-only/template/src/components/__tests__/example.test.tsx +0 -49
  308. package/dist/templates/web/ui-only/template/src/test/setup.ts +0 -74
  309. package/dist/templates/web/ui-only/template/vitest.config.ts +0 -17
  310. package/src/templates/mobile/ui-auth-payments-ai-rag/template/README.md +0 -655
  311. package/src/templates/mobile/ui-auth-payments-ai-rag/template/app/(tabs)/ai.tsx +0 -683
  312. package/src/templates/mobile/ui-auth-payments-ai-rag/template/app/_layout.tsx +0 -124
  313. package/src/templates/mobile/ui-auth-payments-ai-rag/template/app.json +0 -74
  314. package/src/templates/mobile/ui-auth-payments-ai-rag/template/babel.config.js +0 -25
  315. package/src/templates/mobile/ui-auth-payments-ai-rag/template/docs/MOBILE-SETUP.md +0 -787
  316. package/src/templates/mobile/ui-auth-payments-ai-rag/template/eas.json +0 -25
  317. package/src/templates/mobile/ui-auth-payments-ai-rag/template/expo-env.d.ts +0 -3
  318. package/src/templates/mobile/ui-auth-payments-ai-rag/template/hooks/useRAGSystem.ts +0 -346
  319. package/src/templates/mobile/ui-auth-payments-ai-rag/template/jest-setup.ts +0 -37
  320. package/src/templates/mobile/ui-auth-payments-ai-rag/template/lib/rag/config.ts +0 -180
  321. package/src/templates/mobile/ui-auth-payments-ai-rag/template/metro.config.js +0 -11
  322. package/src/templates/mobile/ui-auth-payments-ai-rag/template/package.json +0 -122
  323. package/src/templates/mobile/ui-auth-payments-ai-rag/template/scripts/setup-rag.js +0 -599
  324. package/src/templates/mobile/ui-auth-payments-ai-rag/template/tsconfig.json +0 -32
  325. package/src/templates/web/base/template/.eslintrc.js +0 -8
  326. package/src/templates/web/base/template/src/components/__tests__/example.test.tsx +0 -49
  327. package/src/templates/web/base/template/src/test/setup.ts +0 -74
  328. package/src/templates/web/base/template/vitest.config.ts +0 -17
  329. package/src/templates/web/ui-auth/template/.eslintrc.js +0 -8
  330. package/src/templates/web/ui-auth/template/src/components/__tests__/example.test.tsx +0 -49
  331. package/src/templates/web/ui-auth/template/src/test/setup.ts +0 -74
  332. package/src/templates/web/ui-auth/template/vitest.config.ts +0 -17
  333. package/src/templates/web/ui-auth-payments/template/src/components/__tests__/example.test.tsx +0 -49
  334. package/src/templates/web/ui-auth-payments/template/src/test/setup.ts +0 -74
  335. package/src/templates/web/ui-auth-payments/template/vitest.config.ts +0 -17
  336. package/src/templates/web/ui-auth-payments-ai/template/src/components/__tests__/example.test.tsx +0 -49
  337. package/src/templates/web/ui-auth-payments-ai/template/src/test/setup.ts +0 -74
  338. package/src/templates/web/ui-auth-payments-ai/template/vitest.config.ts +0 -17
  339. package/src/templates/web/ui-auth-payments-ai-rag/template/README.md +0 -434
  340. package/src/templates/web/ui-auth-payments-ai-rag/template/components/rag/KnowledgeManager.tsx +0 -642
  341. package/src/templates/web/ui-auth-payments-ai-rag/template/components/rag/RAGAnalytics.tsx +0 -466
  342. package/src/templates/web/ui-auth-payments-ai-rag/template/components/rag/RAGChatInterface.tsx +0 -393
  343. package/src/templates/web/ui-auth-payments-ai-rag/template/docs/GETTING-STARTED.md +0 -457
  344. package/src/templates/web/ui-auth-payments-ai-rag/template/hooks/useRAGSystem.ts +0 -478
  345. package/src/templates/web/ui-auth-payments-ai-rag/template/lib/rag/config.ts +0 -250
  346. package/src/templates/web/ui-auth-payments-ai-rag/template/package.json +0 -73
  347. package/src/templates/web/ui-auth-payments-ai-rag/template/scripts/setup-rag.js +0 -622
  348. package/src/templates/web/ui-auth-payments-ai-rag/template/src/app/ai/page.tsx +0 -396
  349. package/src/templates/web/ui-auth-payments-audio/template/src/components/__tests__/example.test.tsx +0 -49
  350. package/src/templates/web/ui-auth-payments-audio/template/src/test/setup.ts +0 -74
  351. package/src/templates/web/ui-auth-payments-audio/template/vitest.config.ts +0 -17
  352. package/src/templates/web/ui-auth-payments-video/template/src/components/__tests__/example.test.tsx +0 -49
  353. package/src/templates/web/ui-auth-payments-video/template/src/test/setup.ts +0 -74
  354. package/src/templates/web/ui-auth-payments-video/template/vitest.config.ts +0 -17
  355. package/src/templates/web/ui-only/template/.eslintrc.js +0 -8
  356. package/src/templates/web/ui-only/template/src/components/__tests__/example.test.tsx +0 -49
  357. package/src/templates/web/ui-only/template/src/test/setup.ts +0 -74
  358. package/src/templates/web/ui-only/template/vitest.config.ts +0 -17
@@ -1,212 +1,83 @@
1
1
  'use client';
2
2
 
3
3
  import React from 'react';
4
- import { usePayments } from '@digilogiclabs/app-sdk';
5
- import { formatCurrency, formatDate } from '@/lib/utils';
6
- import { Button, Card } from '@digilogiclabs/saas-factory-ui';
4
+ import { Card, CardContent, CardHeader, CardTitle } from '@digilogiclabs/saas-factory-ui';
5
+ import { CreditCard, ExternalLink, Receipt } from 'lucide-react';
6
+ import Link from 'next/link';
7
7
 
8
8
  export default function BillingPage() {
9
- const { loading } = usePayments();
10
-
11
- const handleSubscriptionChange = () => {
12
- console.log('Subscription change requested');
13
- // Handle subscription changes (upgrade, downgrade, cancel, resume)
14
- };
15
-
16
- const handlePaymentMethodUpdate = () => {
17
- console.log('Payment method update requested');
18
- // Handle payment method updates (add, edit, delete, set default)
19
- };
20
-
21
- const handleInvoiceDownload = (invoiceId: string) => {
22
- console.log('Download invoice:', invoiceId);
23
- // Handle invoice download
24
- };
25
-
26
- // Mock current subscription data - in real app this would come from your backend
27
- const currentSubscription = {
28
- plan: 'Pro Plan',
29
- price: 1999,
30
- interval: 'month',
31
- status: 'active',
32
- nextBilling: new Date(Date.now() + 15 * 24 * 60 * 60 * 1000)
33
- };
34
-
35
- // Mock payment methods - in real app this would come from your backend
36
- const paymentMethods = [
37
- {
38
- id: 'pm_123',
39
- type: 'card',
40
- last4: '4242',
41
- brand: 'visa',
42
- expiryMonth: 12,
43
- expiryYear: 2025,
44
- isDefault: true
45
- },
46
- {
47
- id: 'pm_456',
48
- type: 'card',
49
- last4: '0005',
50
- brand: 'mastercard',
51
- expiryMonth: 8,
52
- expiryYear: 2026,
53
- isDefault: false
54
- }
55
- ];
56
-
57
- // Mock billing history - in real app this would come from your backend
58
- const invoices = [
59
- {
60
- id: 'inv_123',
61
- amount: 1999,
62
- currency: 'usd',
63
- status: 'paid',
64
- date: new Date(Date.now() - 30 * 24 * 60 * 60 * 1000),
65
- description: 'Pro Plan - Monthly'
66
- },
67
- {
68
- id: 'inv_456',
69
- amount: 1999,
70
- currency: 'usd',
71
- status: 'paid',
72
- date: new Date(Date.now() - 60 * 24 * 60 * 60 * 1000),
73
- description: 'Pro Plan - Monthly'
74
- },
75
- {
76
- id: 'inv_789',
77
- amount: 999,
78
- currency: 'usd',
79
- status: 'paid',
80
- date: new Date(Date.now() - 90 * 24 * 60 * 60 * 1000),
81
- description: 'Basic Plan - Monthly'
9
+ const handleManageBilling = async () => {
10
+ const res = await fetch('/api/billing/portal', { method: 'POST' });
11
+ const data = await res.json();
12
+ if (data.url) {
13
+ window.location.href = data.url;
82
14
  }
83
- ];
15
+ };
84
16
 
85
17
  return (
86
- <div className="min-h-screen bg-gray-100 py-8">
87
- <div className="max-w-7xl mx-auto px-4">
88
- <div className="mb-8">
89
- <h1 className="text-4xl font-bold text-gray-900 mb-2">Billing & Subscription</h1>
90
- <p className="text-xl text-gray-600">Manage your subscription and billing information</p>
91
- </div>
92
-
93
- <div className="grid grid-cols-1 lg:grid-cols-2 gap-8 mb-8">
94
- {/* Current Subscription */}
95
- <Card className="p-6">
96
- <h2 className="text-2xl font-bold mb-6">Current Subscription</h2>
97
- <div className="space-y-4">
18
+ <div className="mx-auto max-w-4xl px-4 py-8">
19
+ <h1 className="text-3xl font-bold text-foreground mb-2">Billing</h1>
20
+ <p className="text-muted-foreground mb-8">Manage your subscription and payment methods.</p>
21
+
22
+ <div className="grid gap-6 md:grid-cols-2 mb-8">
23
+ <Card>
24
+ <CardHeader>
25
+ <CardTitle className="text-lg">Current Plan</CardTitle>
26
+ </CardHeader>
27
+ <CardContent>
28
+ <div className="flex items-center justify-between">
98
29
  <div>
99
- <h3 className="font-semibold">{currentSubscription.plan}</h3>
100
- <p className="text-2xl font-bold">
101
- {formatCurrency(currentSubscription.price)}
102
- <span className="text-sm font-normal">/{currentSubscription.interval}</span>
103
- </p>
30
+ <p className="text-2xl font-bold text-foreground">Free</p>
31
+ <p className="text-sm text-muted-foreground">Basic features included</p>
104
32
  </div>
105
- <div>
106
- <p className="text-sm text-gray-600">Status</p>
107
- <span className="inline-block px-2 py-1 bg-green-100 text-green-800 rounded text-sm">
108
- {currentSubscription.status}
109
- </span>
33
+ <Link href="/checkout" className="inline-flex items-center justify-center rounded-md bg-primary px-4 py-2 text-sm font-medium text-primary-foreground hover:bg-primary/90 transition-colors">
34
+ Upgrade
35
+ </Link>
36
+ </div>
37
+ </CardContent>
38
+ </Card>
39
+
40
+ <Card>
41
+ <CardHeader>
42
+ <CardTitle className="text-lg">Payment Method</CardTitle>
43
+ </CardHeader>
44
+ <CardContent>
45
+ <div className="flex items-center gap-3">
46
+ <div className="flex h-10 w-10 items-center justify-center rounded-lg bg-muted">
47
+ <CreditCard className="h-5 w-5 text-muted-foreground" />
110
48
  </div>
111
49
  <div>
112
- <p className="text-sm text-gray-600">Next billing date</p>
113
- <p>{formatDate(currentSubscription.nextBilling)}</p>
50
+ <p className="text-sm font-medium text-foreground">No payment method</p>
51
+ <p className="text-xs text-muted-foreground">Add one to upgrade your plan</p>
114
52
  </div>
115
- <Button
116
- onClick={handleSubscriptionChange}
117
- disabled={loading}
118
- variant="outline"
119
- className="w-full"
120
- >
121
- Change Plan
122
- </Button>
123
53
  </div>
124
- </Card>
54
+ </CardContent>
55
+ </Card>
56
+ </div>
125
57
 
126
- {/* Payment Methods */}
127
- <Card className="p-6">
128
- <h2 className="text-2xl font-bold mb-6">Payment Methods</h2>
129
- <div className="space-y-4">
130
- {paymentMethods.map((method) => (
131
- <div key={method.id} className="flex items-center justify-between p-3 border rounded-lg">
132
- <div className="flex items-center">
133
- <div className="w-8 h-8 bg-blue-100 rounded flex items-center justify-center mr-3">
134
- 💳
135
- </div>
136
- <div>
137
- <p className="font-medium">
138
- {method.brand.toUpperCase()} •••• {method.last4}
139
- </p>
140
- <p className="text-sm text-gray-600">
141
- Expires {method.expiryMonth}/{method.expiryYear}
142
- {method.isDefault && <span className="ml-2 text-blue-600">(Default)</span>}
143
- </p>
144
- </div>
145
- </div>
146
- <Button
147
- onClick={handlePaymentMethodUpdate}
148
- disabled={loading}
149
- variant="outline"
150
- size="sm"
151
- >
152
- Edit
153
- </Button>
154
- </div>
155
- ))}
156
- <Button
157
- onClick={handlePaymentMethodUpdate}
158
- disabled={loading}
159
- variant="outline"
160
- className="w-full"
161
- >
162
- Add Payment Method
163
- </Button>
164
- </div>
165
- </Card>
166
- </div>
58
+ <Card>
59
+ <CardHeader>
60
+ <CardTitle className="flex items-center gap-2 text-lg">
61
+ <Receipt className="h-5 w-5" />
62
+ Invoices
63
+ </CardTitle>
64
+ </CardHeader>
65
+ <CardContent>
66
+ <p className="text-sm text-muted-foreground">
67
+ No invoices yet. Invoices will appear here after your first payment.
68
+ </p>
69
+ </CardContent>
70
+ </Card>
167
71
 
168
- {/* Billing History */}
169
- <Card className="p-6">
170
- <h2 className="text-2xl font-bold mb-6">Billing History</h2>
171
- <div className="overflow-x-auto">
172
- <table className="w-full">
173
- <thead>
174
- <tr className="border-b">
175
- <th className="text-left py-2">Date</th>
176
- <th className="text-left py-2">Description</th>
177
- <th className="text-left py-2">Amount</th>
178
- <th className="text-left py-2">Status</th>
179
- <th className="text-left py-2">Actions</th>
180
- </tr>
181
- </thead>
182
- <tbody>
183
- {invoices.map((invoice) => (
184
- <tr key={invoice.id} className="border-b">
185
- <td className="py-3">{formatDate(invoice.date)}</td>
186
- <td className="py-3">{invoice.description}</td>
187
- <td className="py-3">{formatCurrency(invoice.amount)}</td>
188
- <td className="py-3">
189
- <span className="inline-block px-2 py-1 bg-green-100 text-green-800 rounded text-sm">
190
- {invoice.status}
191
- </span>
192
- </td>
193
- <td className="py-3">
194
- <Button
195
- onClick={() => handleInvoiceDownload(invoice.id)}
196
- variant="outline"
197
- size="sm"
198
- >
199
- Download
200
- </Button>
201
- </td>
202
- </tr>
203
- ))}
204
- </tbody>
205
- </table>
206
- </div>
207
- </Card>
72
+ <div className="mt-6 flex justify-end">
73
+ <button
74
+ onClick={handleManageBilling}
75
+ className="inline-flex items-center justify-center rounded-md border border-input bg-background px-4 py-2 text-sm font-medium text-foreground hover:bg-accent transition-colors"
76
+ >
77
+ <ExternalLink className="mr-2 h-4 w-4" />
78
+ Manage in Stripe
79
+ </button>
208
80
  </div>
209
81
  </div>
210
82
  );
211
83
  }
212
-
@@ -1,143 +1,127 @@
1
1
  'use client';
2
2
 
3
- import React from 'react';
4
- import { usePayments } from '@digilogiclabs/app-sdk';
5
- import { formatCurrency } from '@/lib/utils';
6
- import { Button, Card } from '@digilogiclabs/saas-factory-ui';
3
+ import React, { useState } from 'react';
4
+ import { Button, Card, CardContent, CardHeader, CardTitle } from '@digilogiclabs/saas-factory-ui';
5
+ import { CreditCard, Check, ArrowLeft } from 'lucide-react';
6
+ import Link from 'next/link';
7
7
 
8
- export default function CheckoutPage() {
9
- const { loading } = usePayments();
10
-
11
- const handlePlanSelect = (planId: string) => {
12
- console.log('Plan selected:', planId);
13
- // Handle plan selection - redirect to payment processing
14
- };
8
+ const PLANS = [
9
+ {
10
+ id: 'starter',
11
+ name: 'Starter',
12
+ price: '$9',
13
+ period: '/month',
14
+ features: ['Up to 1,000 users', 'Basic analytics', 'Email support', 'API access'],
15
+ featured: false,
16
+ },
17
+ {
18
+ id: 'pro',
19
+ name: 'Pro',
20
+ price: '$29',
21
+ period: '/month',
22
+ features: ['Unlimited users', 'Advanced analytics', 'Priority support', 'Custom domains', 'Team management'],
23
+ featured: true,
24
+ },
25
+ {
26
+ id: 'enterprise',
27
+ name: 'Enterprise',
28
+ price: '$99',
29
+ period: '/month',
30
+ features: ['Everything in Pro', 'SSO/SAML', 'Dedicated support', 'SLA guarantee', 'Custom integrations'],
31
+ featured: false,
32
+ },
33
+ ];
15
34
 
16
- const handlePayment = () => {
17
- console.log('Processing payment...');
18
- // Handle payment processing
19
- };
35
+ export default function CheckoutPage() {
36
+ const [selectedPlan, setSelectedPlan] = useState('pro');
37
+ const [loading, setLoading] = useState(false);
20
38
 
21
- // Example pricing plans - in real app these would come from your backend/Stripe
22
- const plans = [
23
- {
24
- id: 'basic',
25
- name: 'Basic Plan',
26
- price: 999, // in cents
27
- interval: 'month',
28
- features: ['Feature 1', 'Feature 2', 'Feature 3'],
29
- stripePriceId: 'price_basic_monthly'
30
- },
31
- {
32
- id: 'pro',
33
- name: 'Pro Plan',
34
- price: 1999, // in cents
35
- interval: 'month',
36
- features: ['All Basic features', 'Feature 4', 'Feature 5', 'Priority support'],
37
- popular: true,
38
- stripePriceId: 'price_pro_monthly'
39
- },
40
- {
41
- id: 'enterprise',
42
- name: 'Enterprise Plan',
43
- price: 4999, // in cents
44
- interval: 'month',
45
- features: ['All Pro features', 'Custom integrations', 'Dedicated support', 'SLA guarantee'],
46
- stripePriceId: 'price_enterprise_monthly'
39
+ const onCheckout = async () => {
40
+ setLoading(true);
41
+ try {
42
+ // TODO: Create Stripe checkout session
43
+ const res = await fetch('/api/checkout', {
44
+ method: 'POST',
45
+ headers: { 'Content-Type': 'application/json' },
46
+ body: JSON.stringify({ planId: selectedPlan }),
47
+ });
48
+ const data = await res.json();
49
+ if (data.url) {
50
+ window.location.href = data.url;
51
+ }
52
+ } finally {
53
+ setLoading(false);
47
54
  }
48
- ];
55
+ };
49
56
 
50
57
  return (
51
- <div className="min-h-screen bg-gray-100 py-8">
52
- <div className="max-w-6xl mx-auto px-4">
53
- <div className="text-center mb-12">
54
- <h1 className="text-4xl font-bold text-gray-900 mb-4">Choose Your Plan</h1>
55
- <p className="text-xl text-gray-600">Select the perfect plan for your needs</p>
58
+ <div className="min-h-screen bg-background py-12">
59
+ <div className="mx-auto max-w-5xl px-4">
60
+ <div className="mb-8">
61
+ <Link
62
+ href="/dashboard"
63
+ className="inline-flex items-center gap-1 text-sm text-muted-foreground hover:text-foreground mb-4"
64
+ >
65
+ <ArrowLeft className="h-3 w-3" />
66
+ Back to Dashboard
67
+ </Link>
68
+ <h1 className="text-3xl font-bold text-foreground">Choose Your Plan</h1>
69
+ <p className="text-muted-foreground mt-1">
70
+ Select the plan that best fits your needs.
71
+ </p>
56
72
  </div>
57
-
58
- {/* Subscription Plans */}
59
- <div className="grid md:grid-cols-3 gap-6 mb-8">
60
- {plans.map((plan) => (
61
- <Card key={plan.id} className={`p-6 relative ${plan.popular ? 'ring-2 ring-blue-500' : ''}`}>
62
- {plan.popular && (
63
- <div className="absolute -top-3 left-1/2 transform -translate-x-1/2">
64
- <span className="bg-blue-500 text-white px-3 py-1 rounded-full text-sm font-medium">
65
- Most Popular
66
- </span>
73
+
74
+ <div className="grid gap-6 md:grid-cols-3 mb-8">
75
+ {PLANS.map((plan) => (
76
+ <Card
77
+ key={plan.id}
78
+ className={`cursor-pointer transition-all ${
79
+ selectedPlan === plan.id
80
+ ? 'ring-2 ring-primary border-primary'
81
+ : 'hover:border-primary/50'
82
+ } ${plan.featured ? 'shadow-lg' : ''}`}
83
+ onClick={() => setSelectedPlan(plan.id)}
84
+ >
85
+ <CardHeader>
86
+ <CardTitle className="flex items-center justify-between">
87
+ {plan.name}
88
+ {plan.featured && (
89
+ <span className="text-xs font-medium bg-primary text-primary-foreground px-2 py-0.5 rounded-full">
90
+ Popular
91
+ </span>
92
+ )}
93
+ </CardTitle>
94
+ <div>
95
+ <span className="text-3xl font-bold text-foreground">{plan.price}</span>
96
+ <span className="text-muted-foreground">{plan.period}</span>
67
97
  </div>
68
- )}
69
- <h3 className="text-xl font-bold mb-2">{plan.name}</h3>
70
- <div className="text-3xl font-bold mb-4">
71
- {formatCurrency(plan.price)}
72
- <span className="text-sm font-normal">/{plan.interval}</span>
73
- </div>
74
- <ul className="mb-6 space-y-2">
75
- {plan.features.map((feature, index) => (
76
- <li key={index} className="flex items-center">
77
- <span className="text-green-500 mr-2">✓</span>
78
- {feature}
79
- </li>
80
- ))}
81
- </ul>
82
- <Button
83
- onClick={() => handlePlanSelect(plan.id)}
84
- disabled={loading}
85
- className="w-full"
86
- variant={plan.popular ? "default" : "outline"}
87
- >
88
- {loading ? 'Processing...' : 'Select Plan'}
89
- </Button>
98
+ </CardHeader>
99
+ <CardContent>
100
+ <ul className="space-y-2">
101
+ {plan.features.map((feat) => (
102
+ <li key={feat} className="flex items-center gap-2 text-sm text-muted-foreground">
103
+ <Check className="h-4 w-4 text-primary shrink-0" />
104
+ {feat}
105
+ </li>
106
+ ))}
107
+ </ul>
108
+ </CardContent>
90
109
  </Card>
91
110
  ))}
92
111
  </div>
93
112
 
94
- {/* Payment Form */}
95
- <Card className="p-6 max-w-md mx-auto">
96
- <h2 className="text-2xl font-bold mb-6">Payment Details</h2>
97
- <div className="space-y-4">
98
- <div>
99
- <label className="block text-sm font-medium mb-2">Card Number</label>
100
- <input
101
- type="text"
102
- placeholder="1234 5678 9012 3456"
103
- className="w-full p-3 border rounded-lg"
104
- disabled
105
- />
106
- </div>
107
- <div className="grid grid-cols-2 gap-4">
108
- <div>
109
- <label className="block text-sm font-medium mb-2">Expiry Date</label>
110
- <input
111
- type="text"
112
- placeholder="MM/YY"
113
- className="w-full p-3 border rounded-lg"
114
- disabled
115
- />
116
- </div>
117
- <div>
118
- <label className="block text-sm font-medium mb-2">CVC</label>
119
- <input
120
- type="text"
121
- placeholder="123"
122
- className="w-full p-3 border rounded-lg"
123
- disabled
124
- />
125
- </div>
126
- </div>
127
- <Button
128
- onClick={handlePayment}
129
- disabled={loading}
130
- className="w-full"
131
- >
132
- {loading ? 'Processing...' : 'Complete Payment'}
133
- </Button>
134
- <p className="text-sm text-gray-600 text-center">
135
- This is a demo. Payment processing requires Stripe integration.
136
- </p>
137
- </div>
138
- </Card>
113
+ <div className="flex justify-center">
114
+ <Button
115
+ onClick={onCheckout}
116
+ size="lg"
117
+ disabled={loading}
118
+ className="min-w-[200px]"
119
+ >
120
+ <CreditCard className="mr-2 h-4 w-4" />
121
+ {loading ? 'Processing...' : 'Continue to Payment'}
122
+ </Button>
123
+ </div>
139
124
  </div>
140
125
  </div>
141
126
  );
142
127
  }
143
-
@@ -36,10 +36,10 @@ function StatsCard({ title, value, icon: Icon, href }: {
36
36
  <Card className="p-6 hover:shadow-lg transition-shadow">
37
37
  <div className="flex items-center justify-between">
38
38
  <div>
39
- <p className="text-sm font-medium text-gray-600 dark:text-gray-400">{title}</p>
40
- <p className="text-2xl font-bold text-gray-900 dark:text-white">{value}</p>
39
+ <p className="text-sm font-medium text-muted-foreground">{title}</p>
40
+ <p className="text-2xl font-bold text-foreground">{value}</p>
41
41
  </div>
42
- <Icon className="h-8 w-8 text-blue-600 dark:text-blue-400" />
42
+ <Icon className="h-8 w-8 text-primary" />
43
43
  </div>
44
44
  </Card>
45
45
  )
@@ -86,8 +86,8 @@ function UserStatsSkeleton() {
86
86
  {[...Array(4)].map((_, i) => (
87
87
  <Card key={i} className="p-6">
88
88
  <div className="animate-pulse">
89
- <div className="h-4 bg-gray-200 dark:bg-gray-700 rounded w-1/2 mb-2"></div>
90
- <div className="h-8 bg-gray-200 dark:bg-gray-700 rounded w-1/3"></div>
89
+ <div className="h-4 bg-muted rounded w-1/2 mb-2"></div>
90
+ <div className="h-8 bg-muted rounded w-1/3"></div>
91
91
  </div>
92
92
  </Card>
93
93
  ))}
@@ -101,14 +101,14 @@ export default async function DashboardPage() {
101
101
 
102
102
  return (
103
103
  <DashboardLayout>
104
- <div className="min-h-screen bg-gray-50 dark:bg-gray-900">
104
+ <div className="min-h-screen bg-muted">
105
105
  <div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-8">
106
106
  {/* Header */}
107
107
  <div className="mb-8" data-tour="overview">
108
- <h1 className="text-3xl font-bold text-gray-900 dark:text-white">
108
+ <h1 className="text-3xl font-bold text-foreground">
109
109
  Welcome back, {user.name || user.email}!
110
110
  </h1>
111
- <p className="text-gray-600 dark:text-gray-300 mt-2">
111
+ <p className="text-muted-foreground mt-2">
112
112
  Here's what's happening with your audio projects today.
113
113
  </p>
114
114
  </div>
@@ -124,10 +124,10 @@ export default async function DashboardPage() {
124
124
  <div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6 mb-8" data-tour="actions">
125
125
  <Card className="p-6">
126
126
  <div className="flex items-center mb-4">
127
- <User className="h-6 w-6 text-blue-600 dark:text-blue-400 mr-3" />
128
- <h3 className="text-lg font-semibold text-gray-900 dark:text-white">Profile</h3>
127
+ <User className="h-6 w-6 text-primary mr-3" />
128
+ <h3 className="text-lg font-semibold text-foreground">Profile</h3>
129
129
  </div>
130
- <p className="text-gray-600 dark:text-gray-300 mb-4">
130
+ <p className="text-muted-foreground mb-4">
131
131
  Update your personal information and preferences
132
132
  </p>
133
133
  <Link href="/profile">
@@ -137,10 +137,10 @@ export default async function DashboardPage() {
137
137
 
138
138
  <Card className="p-6">
139
139
  <div className="flex items-center mb-4">
140
- <Settings className="h-6 w-6 text-blue-600 dark:text-blue-400 mr-3" />
141
- <h3 className="text-lg font-semibold text-gray-900 dark:text-white">Settings</h3>
140
+ <Settings className="h-6 w-6 text-primary mr-3" />
141
+ <h3 className="text-lg font-semibold text-foreground">Settings</h3>
142
142
  </div>
143
- <p className="text-gray-600 dark:text-gray-300 mb-4">
143
+ <p className="text-muted-foreground mb-4">
144
144
  Configure your account settings and security options
145
145
  </p>
146
146
  <Link href="/settings">
@@ -150,10 +150,10 @@ export default async function DashboardPage() {
150
150
 
151
151
  <Card className="p-6">
152
152
  <div className="flex items-center mb-4">
153
- <CreditCard className="h-6 w-6 text-blue-600 dark:text-blue-400 mr-3" />
154
- <h3 className="text-lg font-semibold text-gray-900 dark:text-white">Billing</h3>
153
+ <CreditCard className="h-6 w-6 text-primary mr-3" />
154
+ <h3 className="text-lg font-semibold text-foreground">Billing</h3>
155
155
  </div>
156
- <p className="text-gray-600 dark:text-gray-300 mb-4">
156
+ <p className="text-muted-foreground mb-4">
157
157
  View your subscription and payment information
158
158
  </p>
159
159
  <Link href="/billing">
@@ -164,28 +164,28 @@ export default async function DashboardPage() {
164
164
 
165
165
  {/* Recent Activity */}
166
166
  <Card className="p-6">
167
- <h3 className="text-lg font-semibold text-gray-900 dark:text-white mb-4">Recent Activity</h3>
167
+ <h3 className="text-lg font-semibold text-foreground mb-4">Recent Activity</h3>
168
168
  <div className="space-y-4">
169
- <div className="flex items-center justify-between py-3 border-b border-gray-200 dark:border-gray-700">
169
+ <div className="flex items-center justify-between py-3 border-b border-border">
170
170
  <div className="flex items-center">
171
171
  <div className="w-2 h-2 bg-green-500 rounded-full mr-3"></div>
172
- <span className="text-gray-900 dark:text-white">Account created</span>
172
+ <span className="text-foreground">Account created</span>
173
173
  </div>
174
- <span className="text-sm text-gray-500 dark:text-gray-400">2 days ago</span>
174
+ <span className="text-sm text-muted-foreground">2 days ago</span>
175
175
  </div>
176
- <div className="flex items-center justify-between py-3 border-b border-gray-200 dark:border-gray-700">
176
+ <div className="flex items-center justify-between py-3 border-b border-border">
177
177
  <div className="flex items-center">
178
- <div className="w-2 h-2 bg-blue-500 rounded-full mr-3"></div>
179
- <span className="text-gray-900 dark:text-white">Profile updated</span>
178
+ <div className="w-2 h-2 bg-primary rounded-full mr-3"></div>
179
+ <span className="text-foreground">Profile updated</span>
180
180
  </div>
181
- <span className="text-sm text-gray-500 dark:text-gray-400">1 week ago</span>
181
+ <span className="text-sm text-muted-foreground">1 week ago</span>
182
182
  </div>
183
183
  <div className="flex items-center justify-between py-3">
184
184
  <div className="flex items-center">
185
185
  <div className="w-2 h-2 bg-purple-500 rounded-full mr-3"></div>
186
- <span className="text-gray-900 dark:text-white">Subscription started</span>
186
+ <span className="text-foreground">Subscription started</span>
187
187
  </div>
188
- <span className="text-sm text-gray-500 dark:text-gray-400">2 weeks ago</span>
188
+ <span className="text-sm text-muted-foreground">2 weeks ago</span>
189
189
  </div>
190
190
  </div>
191
191
  </Card>