@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,66 +1,116 @@
1
- 'use client';
2
-
3
- import {
4
- LoginForm,
5
- PageTransition,
6
- MobileContainer,
7
- NetworkAwareContent,
8
- OfflineWrapper
9
- } from '@digilogiclabs/saas-factory-ui';
10
- import { createBrowserClient } from '@supabase/ssr';
11
- import React from 'react';
12
-
13
- export default function LoginPage() {
14
- const supabase = createBrowserClient(
15
- process.env.NEXT_PUBLIC_SUPABASE_URL!,
16
- process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY!
17
- );
18
-
19
- const handleLogin = async (values: any) => {
20
- await supabase.auth.signInWithPassword({
21
- email: values.email,
22
- password: values.password,
23
- });
24
- };
25
-
26
- const handleGoogleLogin = async () => {
27
- await supabase.auth.signInWithOAuth({
28
- provider: 'google',
29
- options: {
30
- redirectTo: `${location.origin}/auth/callback`,
31
- },
32
- });
33
- };
34
-
35
- return (
36
- <PageTransition type="slide" direction="horizontal" duration={300}>
37
- <OfflineWrapper
38
- cacheStrategy="network-first"
39
- showOfflineIndicator={true}
40
- >
41
- <NetworkAwareContent
42
- showOnOffline={
43
- <div className="flex items-center justify-center min-h-screen bg-gray-100">
44
- <div className="text-center p-6">
45
- <h2 className="text-xl font-semibold mb-2">You're offline</h2>
46
- <p className="text-gray-600">Please check your connection to sign in.</p>
47
- </div>
48
- </div>
49
- }
50
- >
51
- <div className="flex items-center justify-center min-h-screen bg-gray-100">
52
- <MobileContainer className="w-full max-w-md">
53
- <LoginForm
54
- onSubmit={handleLogin}
55
- onGoogleSignIn={handleGoogleLogin}
56
- authProvider="supabase"
57
- mobileOptimized={true}
58
- touchFriendly={true}
59
- />
60
- </MobileContainer>
61
- </div>
62
- </NetworkAwareContent>
63
- </OfflineWrapper>
64
- </PageTransition>
65
- );
66
- }
1
+ 'use client';
2
+
3
+ import React, { useState, useEffect } from 'react';
4
+ import Link from 'next/link';
5
+ import { useRouter } from 'next/navigation';
6
+ import { Button } from '@/components/ui/button';
7
+ import { useMockAuth } from '@/components/mock-auth-provider';
8
+ import { MOCK_MODE } from '@/lib/mock';
9
+
10
+ export default function LoginPage() {
11
+ const [email, setEmail] = useState('');
12
+ const [password, setPassword] = useState('');
13
+ const [error, setError] = useState('');
14
+ const [loading, setLoading] = useState(false);
15
+ const { signIn, isAuthenticated } = useMockAuth();
16
+ const router = useRouter();
17
+
18
+ // Redirect if already signed in
19
+ useEffect(() => {
20
+ if (isAuthenticated) router.push('/dashboard');
21
+ }, [isAuthenticated, router]);
22
+
23
+ if (isAuthenticated) return null;
24
+
25
+ const handleLogin = async (e: React.FormEvent) => {
26
+ e.preventDefault();
27
+ setLoading(true);
28
+ setError('');
29
+
30
+ if (MOCK_MODE) {
31
+ // Mock mode: sign in immediately with mock user
32
+ signIn(email, password);
33
+ router.push('/dashboard');
34
+ return;
35
+ }
36
+
37
+ // TODO: [REAL_DATA] Replace with your auth provider's sign in
38
+ // Example (Supabase):
39
+ // const { error } = await supabase.auth.signInWithPassword({ email, password });
40
+ // Example (NextAuth):
41
+ // const result = await signIn('credentials', { email, password, redirect: false });
42
+ try {
43
+ const res = await fetch('/api/auth/login', {
44
+ method: 'POST',
45
+ headers: { 'Content-Type': 'application/json' },
46
+ body: JSON.stringify({ email, password }),
47
+ });
48
+ if (!res.ok) {
49
+ const data = await res.json();
50
+ setError(data.error || 'Sign in failed');
51
+ return;
52
+ }
53
+ router.push('/dashboard');
54
+ } catch {
55
+ setError('An unexpected error occurred');
56
+ } finally {
57
+ setLoading(false);
58
+ }
59
+ };
60
+
61
+ return (
62
+ <div className="flex items-center justify-center min-h-screen bg-background px-4">
63
+ <div className="w-full max-w-sm">
64
+ <div className="rounded-xl border border-border bg-card p-8 shadow-sm">
65
+ <h1 className="text-2xl font-bold text-card-foreground mb-1">Sign In</h1>
66
+ <p className="text-sm text-muted-foreground mb-6">Welcome back. Sign in to continue.</p>
67
+
68
+ {MOCK_MODE && (
69
+ <div className="mb-4 rounded-lg bg-primary/10 p-3 text-xs text-primary">
70
+ <strong>Mock Mode:</strong> Any email/password will work. Click Sign In to continue.
71
+ </div>
72
+ )}
73
+
74
+ {error && (
75
+ <div className="mb-4 rounded-lg bg-destructive/10 p-3 text-sm text-destructive">{error}</div>
76
+ )}
77
+
78
+ <form onSubmit={handleLogin} className="space-y-4">
79
+ <div>
80
+ <label htmlFor="email" className="block text-sm font-medium text-foreground mb-1">Email</label>
81
+ <input
82
+ id="email"
83
+ type="email"
84
+ value={email}
85
+ onChange={(e) => setEmail(e.target.value)}
86
+ className="w-full rounded-lg border border-input bg-background px-3 py-2 text-sm text-foreground placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring"
87
+ placeholder="you@example.com"
88
+ required
89
+ />
90
+ </div>
91
+ <div>
92
+ <label htmlFor="password" className="block text-sm font-medium text-foreground mb-1">Password</label>
93
+ <input
94
+ id="password"
95
+ type="password"
96
+ value={password}
97
+ onChange={(e) => setPassword(e.target.value)}
98
+ className="w-full rounded-lg border border-input bg-background px-3 py-2 text-sm text-foreground placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring"
99
+ placeholder="••••••••"
100
+ required
101
+ />
102
+ </div>
103
+ <Button type="submit" className="w-full" disabled={loading}>
104
+ {loading ? 'Signing in...' : 'Sign In'}
105
+ </Button>
106
+ </form>
107
+
108
+ <p className="mt-6 text-center text-sm text-muted-foreground">
109
+ Don&apos;t have an account?{' '}
110
+ <Link href="/signup" className="text-primary hover:underline">Sign up</Link>
111
+ </p>
112
+ </div>
113
+ </div>
114
+ </div>
115
+ );
116
+ }
@@ -1,193 +1,97 @@
1
- 'use client'
2
-
3
- import { Button } from '@/components/ui/button'
4
- import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card'
5
- import { Badge } from '@/components/ui/badge'
6
- import { ArrowRight, Zap, Shield, Rocket, LogOut } from 'lucide-react'
7
- import { useAuth } from '@digilogiclabs/app-sdk'
8
- import {
9
- MobileHero,
10
- LazyImage,
11
- ProgressiveImage,
12
- NetworkAwareContent,
13
- PageTransition,
14
- ResponsiveGrid,
15
- MobileContainer
16
- } from '@digilogiclabs/saas-factory-ui'
17
- import Link from 'next/link'
18
-
19
- export default function Home() {
20
- const { user, signOut } = useAuth()
21
-
22
- const projectName = "{{titleCaseName}}"
23
- const projectDescription = "{{description}}"
24
-
25
- const gridConfig = {
26
- columns_1_2: { base: 1, md: 2 },
27
- columns_1_3: { base: 1, md: 3 },
28
- columns_1_sm2: { base: 1, sm: 2 },
29
- columns_1_sm2_md3: { base: 1, sm: 2, md: 3 },
30
- columns_1_sm2_md4: { base: 1, sm: 2, md: 4 },
31
- columns_2: { base: 2 },
32
- columns_2_md3: { base: 2, md: 3 },
33
- columns_2_2: { base: 2 },
34
- columns_2_md4: { base: 2, md: 4 }
35
- }
36
-
37
- const heroConfig = {
38
- badge: {
39
- text: "Built with Digi Logic Labs",
40
- variant: "secondary" as const
41
- },
42
- title: {
43
- text: `Welcome to ${projectName}`,
44
- highlight: projectName,
45
- size: "xl" as const
46
- },
47
- description: `${projectDescription}. Get started by editing src/app/page.tsx`
48
- }
49
-
50
- return (
51
- <PageTransition type="fade" duration={300}>
52
- <main className="min-h-screen bg-gradient-to-br from-blue-50 to-indigo-100 dark:from-gray-900 dark:to-gray-800">
53
- <MobileContainer className="py-16">
54
- {/* Hero Section */}
55
- <MobileHero
56
- badge={heroConfig.badge}
57
- title={heroConfig.title}
58
- description={heroConfig.description}
59
- actions={!user ? [
60
- {
61
- label: "Get Started",
62
- href: "/signup",
63
- icon: ArrowRight,
64
- variant: "default",
65
- size: "lg"
66
- },
67
- {
68
- label: "Learn More",
69
- href: "/login",
70
- variant: "outline",
71
- size: "lg"
72
- }
73
- ] : [
74
- {
75
- label: "Go to Dashboard",
76
- href: "/dashboard",
77
- icon: ArrowRight,
78
- variant: "default",
79
- size: "lg"
80
- },
81
- {
82
- label: "Sign Out",
83
- onClick: signOut,
84
- icon: LogOut,
85
- variant: "outline",
86
- size: "lg"
87
- }
88
- ]}
89
- className="text-center mb-16"
90
- />
91
-
92
- {/* Features Grid */}
93
- <NetworkAwareContent
94
- showOnSlow={
95
- <ResponsiveGrid columns={gridConfig.columns_1_2} gap={4} className="mb-16">
96
- <Card className="text-center">
97
- <CardHeader>
98
- <div className="mx-auto w-12 h-12 bg-blue-100 dark:bg-blue-900 rounded-lg flex items-center justify-center mb-4">
99
- <Zap className="h-6 w-6 text-blue-600 dark:text-blue-400" />
100
- </div>
101
- <CardTitle>Lightning Fast</CardTitle>
102
- <CardDescription>
103
- Built with Next.js 15 and optimized for performance
104
- </CardDescription>
105
- </CardHeader>
106
- </Card>
107
- <Card className="text-center">
108
- <CardHeader>
109
- <div className="mx-auto w-12 h-12 bg-green-100 dark:bg-green-900 rounded-lg flex items-center justify-center mb-4">
110
- <Shield className="h-6 w-6 text-green-600 dark:text-green-400" />
111
- </div>
112
- <CardTitle>Secure by Default</CardTitle>
113
- <CardDescription>
114
- {{#auth}}{{#firebase}}Firebase{{/firebase}}{{#supabase}}Supabase{{/supabase}}{{/auth}} authentication and security best practices
115
- </CardDescription>
116
- </CardHeader>
117
- </Card>
118
- </ResponsiveGrid>
119
- }
120
- >
121
- <ResponsiveGrid columns={gridConfig.columns_1_3} gap={6} className="mb-16">
122
- <Card className="text-center">
123
- <CardHeader>
124
- <div className="mx-auto w-12 h-12 bg-blue-100 dark:bg-blue-900 rounded-lg flex items-center justify-center mb-4">
125
- <Zap className="h-6 w-6 text-blue-600 dark:text-blue-400" />
126
- </div>
127
- <CardTitle>Lightning Fast</CardTitle>
128
- <CardDescription>
129
- Built with Next.js 15 and optimized for performance
130
- </CardDescription>
131
- </CardHeader>
132
- </Card>
133
-
134
- <Card className="text-center">
135
- <CardHeader>
136
- <div className="mx-auto w-12 h-12 bg-green-100 dark:bg-green-900 rounded-lg flex items-center justify-center mb-4">
137
- <Shield className="h-6 w-6 text-green-600 dark:text-green-400" />
138
- </div>
139
- <CardTitle>Secure by Default</CardTitle>
140
- <CardDescription>
141
- {{#auth}}{{#firebase}}Firebase{{/firebase}}{{#supabase}}Supabase{{/supabase}}{{/auth}} authentication and security best practices
142
- </CardDescription>
143
- </CardHeader>
144
- </Card>
145
-
146
- <Card className="text-center">
147
- <CardHeader>
148
- <div className="mx-auto w-12 h-12 bg-purple-100 dark:bg-purple-900 rounded-lg flex items-center justify-center mb-4">
149
- <Rocket className="h-6 w-6 text-purple-600 dark:text-purple-400" />
150
- </div>
151
- <CardTitle>Ready to Scale</CardTitle>
152
- <CardDescription>
153
- Production-ready with TypeScript, Tailwind CSS, and modern tooling
154
- </CardDescription>
155
- </CardHeader>
156
- </Card>
157
- </ResponsiveGrid>
158
- </NetworkAwareContent>
159
-
160
- {/* Tech Stack */}
161
- <Card className="max-w-4xl mx-auto">
162
- <CardHeader className="text-center">
163
- <CardTitle className="text-2xl">Built with Modern Technologies</CardTitle>
164
- <CardDescription>
165
- This template includes everything you need to build a modern SaaS application
166
- </CardDescription>
167
- </CardHeader>
168
- <CardContent>
169
- <div className="grid grid-cols-2 md:grid-cols-4 gap-4 text-center">
170
- <div className="p-4">
171
- <div className="font-semibold">Next.js 15</div>
172
- <div className="text-sm text-gray-600 dark:text-gray-400">React Framework</div>
173
- </div>
174
- <div className="p-4">
175
- <div className="font-semibold">TypeScript</div>
176
- <div className="text-sm text-gray-600 dark:text-gray-400">Type Safety</div>
177
- </div>
178
- <div className="p-4">
179
- <div className="font-semibold">Tailwind CSS</div>
180
- <div className="text-sm text-gray-600 dark:text-gray-400">Styling</div>
181
- </div>
182
- <div className="p-4">
183
- <div className="font-semibold">{{#auth}}{{#firebase}}Firebase{{/firebase}}{{#supabase}}Supabase{{/supabase}}{{/auth}}</div>
184
- <div className="text-sm text-gray-600 dark:text-gray-400">Authentication</div>
185
- </div>
186
- </div>
187
- </CardContent>
188
- </Card>
189
- </MobileContainer>
190
- </main>
191
- </PageTransition>
192
- )
193
- }
1
+ import { Button } from '@/components/ui/button'
2
+ import { ArrowRight, Zap, Shield, Rocket } from 'lucide-react'
3
+ import Link from 'next/link'
4
+
5
+ export default function Home() {
6
+ return (
7
+ <main className="min-h-screen bg-background">
8
+ {/* Hero */}
9
+ <section className="mx-auto max-w-5xl px-4 py-24 text-center">
10
+ <div className="inline-flex items-center rounded-full border border-border bg-muted px-3 py-1 text-sm text-muted-foreground mb-6">
11
+ Built with Digi Logic Labs
12
+ </div>
13
+ <h1 className="text-4xl font-bold tracking-tight text-foreground sm:text-6xl mb-4">
14
+ Build your SaaS,{' '}
15
+ <span className="text-primary">faster</span>
16
+ </h1>
17
+ <p className="mx-auto max-w-2xl text-lg text-muted-foreground mb-8">
18
+ A production-ready starter with authentication, payments, and everything
19
+ you need to ship your next project.
20
+ </p>
21
+ <div className="flex items-center justify-center gap-4">
22
+ <Button size="lg" asChild>
23
+ <Link href="/signup">
24
+ Get Started <ArrowRight className="ml-2 h-4 w-4" />
25
+ </Link>
26
+ </Button>
27
+ <Button variant="outline" size="lg" asChild>
28
+ <Link href="/login">Sign In</Link>
29
+ </Button>
30
+ </div>
31
+ </section>
32
+
33
+ {/* Features */}
34
+ <section className="mx-auto max-w-5xl px-4 pb-24">
35
+ <div className="grid gap-6 md:grid-cols-3">
36
+ <div className="rounded-xl border border-border bg-card p-6 text-center">
37
+ <div className="mx-auto mb-4 flex h-12 w-12 items-center justify-center rounded-lg bg-blue-100 dark:bg-blue-900/30">
38
+ <Zap className="h-6 w-6 text-blue-600 dark:text-blue-400" />
39
+ </div>
40
+ <h3 className="text-lg font-semibold text-card-foreground mb-2">Lightning Fast</h3>
41
+ <p className="text-sm text-muted-foreground">
42
+ Built with Next.js 15 and optimized for performance out of the box.
43
+ </p>
44
+ </div>
45
+
46
+ <div className="rounded-xl border border-border bg-card p-6 text-center">
47
+ <div className="mx-auto mb-4 flex h-12 w-12 items-center justify-center rounded-lg bg-emerald-100 dark:bg-emerald-900/30">
48
+ <Shield className="h-6 w-6 text-emerald-600 dark:text-emerald-400" />
49
+ </div>
50
+ <h3 className="text-lg font-semibold text-card-foreground mb-2">Secure by Default</h3>
51
+ <p className="text-sm text-muted-foreground">
52
+ Authentication, security headers, and best practices baked in.
53
+ </p>
54
+ </div>
55
+
56
+ <div className="rounded-xl border border-border bg-card p-6 text-center">
57
+ <div className="mx-auto mb-4 flex h-12 w-12 items-center justify-center rounded-lg bg-purple-100 dark:bg-purple-900/30">
58
+ <Rocket className="h-6 w-6 text-purple-600 dark:text-purple-400" />
59
+ </div>
60
+ <h3 className="text-lg font-semibold text-card-foreground mb-2">Ready to Scale</h3>
61
+ <p className="text-sm text-muted-foreground">
62
+ TypeScript, Tailwind CSS, and modern tooling for production apps.
63
+ </p>
64
+ </div>
65
+ </div>
66
+ </section>
67
+
68
+ {/* Tech Stack */}
69
+ <section className="mx-auto max-w-5xl px-4 pb-24">
70
+ <div className="rounded-xl border border-border bg-card p-8 text-center">
71
+ <h2 className="text-2xl font-bold text-card-foreground mb-2">Built with Modern Technologies</h2>
72
+ <p className="text-muted-foreground mb-6">
73
+ Everything you need to build a modern SaaS application.
74
+ </p>
75
+ <div className="grid grid-cols-2 gap-4 md:grid-cols-4">
76
+ <div className="p-4">
77
+ <div className="font-semibold text-foreground">Next.js 15</div>
78
+ <div className="text-sm text-muted-foreground">React Framework</div>
79
+ </div>
80
+ <div className="p-4">
81
+ <div className="font-semibold text-foreground">TypeScript</div>
82
+ <div className="text-sm text-muted-foreground">Type Safety</div>
83
+ </div>
84
+ <div className="p-4">
85
+ <div className="font-semibold text-foreground">Tailwind CSS</div>
86
+ <div className="text-sm text-muted-foreground">Styling</div>
87
+ </div>
88
+ <div className="p-4">
89
+ <div className="font-semibold text-foreground">Supabase</div>
90
+ <div className="text-sm text-muted-foreground">Authentication</div>
91
+ </div>
92
+ </div>
93
+ </div>
94
+ </section>
95
+ </main>
96
+ )
97
+ }
@@ -0,0 +1,154 @@
1
+ 'use client';
2
+
3
+ import { useState } from 'react';
4
+ import { Button } from '@/components/ui/button';
5
+ import { User, Bell, Shield, Palette, Save, LogIn } from 'lucide-react';
6
+ import Link from 'next/link';
7
+ import { MOCK_MODE } from '@/lib/mock';
8
+ import { useMockAuth } from '@/components/mock-auth-provider';
9
+
10
+ export default function SettingsPage() {
11
+ const [saved, setSaved] = useState(false);
12
+ const { user, isAuthenticated } = useMockAuth();
13
+
14
+ if (!isAuthenticated) {
15
+ return (
16
+ <div className="flex flex-col items-center justify-center min-h-[60vh] text-center px-4">
17
+ <LogIn className="h-12 w-12 text-muted-foreground mb-4" />
18
+ <h1 className="text-2xl font-bold text-foreground mb-2">Sign in required</h1>
19
+ <p className="text-muted-foreground mb-6">You need to be signed in to view settings.</p>
20
+ <Link href="/login" className="inline-flex items-center justify-center rounded-md bg-primary px-6 py-2.5 text-sm font-medium text-primary-foreground hover:bg-primary/90 transition-colors">
21
+ Sign In
22
+ </Link>
23
+ </div>
24
+ );
25
+ }
26
+
27
+ const handleSave = () => {
28
+ // TODO: [REAL_DATA] Save settings to your database
29
+ setSaved(true);
30
+ setTimeout(() => setSaved(false), 2000);
31
+ };
32
+
33
+ return (
34
+ <div className="mx-auto max-w-3xl px-4 py-8">
35
+ <div className="flex items-center justify-between mb-8">
36
+ <div>
37
+ <h1 className="text-3xl font-bold text-foreground">Settings</h1>
38
+ <p className="text-muted-foreground mt-1">Manage your account and preferences.</p>
39
+ </div>
40
+ {MOCK_MODE && (
41
+ <span className="rounded-full bg-primary/10 px-3 py-1 text-xs font-medium text-primary">
42
+ Mock Data
43
+ </span>
44
+ )}
45
+ </div>
46
+
47
+ <div className="space-y-6">
48
+ {/* Profile */}
49
+ <div className="rounded-xl border border-border bg-card p-6">
50
+ <h2 className="text-lg font-semibold text-card-foreground mb-4 flex items-center gap-2">
51
+ <User className="h-5 w-5" />
52
+ Profile
53
+ </h2>
54
+ <div className="space-y-4">
55
+ <div>
56
+ <label htmlFor="name" className="block text-sm font-medium text-foreground mb-1">Name</label>
57
+ <input
58
+ id="name"
59
+ type="text"
60
+ defaultValue={user?.name ?? ''}
61
+ className="w-full rounded-lg border border-input bg-background px-3 py-2 text-sm text-foreground focus:outline-none focus:ring-2 focus:ring-ring"
62
+ />
63
+ </div>
64
+ <div>
65
+ <label htmlFor="email" className="block text-sm font-medium text-foreground mb-1">Email</label>
66
+ <input
67
+ id="email"
68
+ type="email"
69
+ defaultValue={user?.email ?? ''}
70
+ className="w-full rounded-lg border border-input bg-background px-3 py-2 text-sm text-foreground focus:outline-none focus:ring-2 focus:ring-ring"
71
+ />
72
+ </div>
73
+ </div>
74
+ </div>
75
+
76
+ {/* Notifications */}
77
+ <div className="rounded-xl border border-border bg-card p-6">
78
+ <h2 className="text-lg font-semibold text-card-foreground mb-4 flex items-center gap-2">
79
+ <Bell className="h-5 w-5" />
80
+ Notifications
81
+ </h2>
82
+ {/* TODO: [REAL_DATA] Fetch notification preferences from your database */}
83
+ <div className="space-y-3">
84
+ {[
85
+ { label: 'Email notifications', description: 'Receive updates via email', defaultChecked: true },
86
+ { label: 'Marketing emails', description: 'News, tips, and product updates', defaultChecked: false },
87
+ { label: 'Security alerts', description: 'Important account security notifications', defaultChecked: true },
88
+ ].map((pref) => (
89
+ <label key={pref.label} className="flex items-center justify-between py-2">
90
+ <div>
91
+ <p className="text-sm font-medium text-foreground">{pref.label}</p>
92
+ <p className="text-xs text-muted-foreground">{pref.description}</p>
93
+ </div>
94
+ <input
95
+ type="checkbox"
96
+ defaultChecked={pref.defaultChecked}
97
+ className="h-4 w-4 rounded border-input text-primary focus:ring-ring"
98
+ />
99
+ </label>
100
+ ))}
101
+ </div>
102
+ </div>
103
+
104
+ {/* Appearance */}
105
+ <div className="rounded-xl border border-border bg-card p-6">
106
+ <h2 className="text-lg font-semibold text-card-foreground mb-4 flex items-center gap-2">
107
+ <Palette className="h-5 w-5" />
108
+ Appearance
109
+ </h2>
110
+ <p className="text-sm text-muted-foreground">
111
+ Theme is controlled by the toggle in the header. Your preference is saved automatically.
112
+ </p>
113
+ </div>
114
+
115
+ {/* Security */}
116
+ <div className="rounded-xl border border-border bg-card p-6">
117
+ <h2 className="text-lg font-semibold text-card-foreground mb-4 flex items-center gap-2">
118
+ <Shield className="h-5 w-5" />
119
+ Security
120
+ </h2>
121
+ {/* TODO: [REAL_DATA] Wire up password change to your auth provider */}
122
+ <div className="space-y-4">
123
+ <div>
124
+ <label htmlFor="current-password" className="block text-sm font-medium text-foreground mb-1">Current Password</label>
125
+ <input
126
+ id="current-password"
127
+ type="password"
128
+ placeholder="••••••••"
129
+ className="w-full rounded-lg border border-input bg-background px-3 py-2 text-sm text-foreground focus:outline-none focus:ring-2 focus:ring-ring"
130
+ />
131
+ </div>
132
+ <div>
133
+ <label htmlFor="new-password" className="block text-sm font-medium text-foreground mb-1">New Password</label>
134
+ <input
135
+ id="new-password"
136
+ type="password"
137
+ placeholder="••••••••"
138
+ className="w-full rounded-lg border border-input bg-background px-3 py-2 text-sm text-foreground focus:outline-none focus:ring-2 focus:ring-ring"
139
+ />
140
+ </div>
141
+ </div>
142
+ </div>
143
+
144
+ {/* Save */}
145
+ <div className="flex justify-end">
146
+ <Button onClick={handleSave}>
147
+ <Save className="mr-2 h-4 w-4" />
148
+ {saved ? 'Saved!' : 'Save Changes'}
149
+ </Button>
150
+ </div>
151
+ </div>
152
+ </div>
153
+ );
154
+ }