@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
@@ -13,7 +13,7 @@ export function Skeleton({
13
13
  }) {
14
14
  return (
15
15
  <div
16
- className={`animate-pulse rounded bg-gray-200 dark:bg-gray-800 ${className}`}
16
+ className={`animate-pulse rounded bg-muted ${className}`}
17
17
  />
18
18
  );
19
19
  }
@@ -21,7 +21,7 @@ export function Skeleton({
21
21
  /** Skeleton for a card with title, description, and action area */
22
22
  export function CardSkeleton() {
23
23
  return (
24
- <div className="rounded-lg border border-gray-200 p-6 dark:border-gray-800">
24
+ <div className="rounded-lg border border-border p-6">
25
25
  <Skeleton className="mb-4 h-4 w-3/4" />
26
26
  <Skeleton className="mb-2 h-3 w-full" />
27
27
  <Skeleton className="mb-4 h-3 w-5/6" />
@@ -46,7 +46,7 @@ export function TableSkeleton({ rows = 5 }: { rows?: number }) {
46
46
  return (
47
47
  <div className="space-y-3">
48
48
  {/* Header */}
49
- <div className="flex gap-4 border-b border-gray-200 pb-3 dark:border-gray-800">
49
+ <div className="flex gap-4 border-b border-border pb-3">
50
50
  <Skeleton className="h-4 w-1/4" />
51
51
  <Skeleton className="h-4 w-1/3" />
52
52
  <Skeleton className="h-4 w-1/4" />
@@ -89,7 +89,7 @@ export function PageSkeleton() {
89
89
  export function LoadingSpinner() {
90
90
  return (
91
91
  <div className="flex min-h-[50vh] items-center justify-center">
92
- <div className="h-8 w-8 animate-spin rounded-full border-4 border-gray-200 border-t-blue-600 dark:border-gray-700 dark:border-t-blue-400" />
92
+ <div className="h-8 w-8 animate-spin rounded-full border-4 border-muted border-t-primary" />
93
93
  </div>
94
94
  );
95
95
  }
@@ -0,0 +1,55 @@
1
+ # ═══════════════════════════════════════════════════════════════
2
+ # MOCK MODE (default: enabled for local development)
3
+ # ═══════════════════════════════════════════════════════════════
4
+ # true = Mock user, mock data, no auth required, all pages accessible
5
+ # false = Real providers required (configure below)
6
+ NEXT_PUBLIC_MOCK_MODE=true
7
+
8
+ # ═══════════════════════════════════════════════════════════════
9
+ # AUTH PROVIDER — uncomment and configure your chosen provider
10
+ # ═══════════════════════════════════════════════════════════════
11
+
12
+ # --- Supabase ---
13
+ # NEXT_PUBLIC_SUPABASE_URL=https://your-project.supabase.co
14
+ # NEXT_PUBLIC_SUPABASE_ANON_KEY=your-anon-key
15
+ # SUPABASE_SERVICE_ROLE_KEY=your-service-role-key
16
+
17
+ # --- Firebase ---
18
+ # NEXT_PUBLIC_FIREBASE_API_KEY=
19
+ # NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN=
20
+ # NEXT_PUBLIC_FIREBASE_PROJECT_ID=
21
+
22
+ # --- Keycloak ---
23
+ # KEYCLOAK_ISSUER=https://auth.yourdomain.com/realms/your-realm
24
+ # KEYCLOAK_CLIENT_ID=your-client-id
25
+ # KEYCLOAK_CLIENT_SECRET=your-client-secret
26
+
27
+ # --- NextAuth / Auth.js ---
28
+ # AUTH_SECRET=your-secret-here
29
+ # NEXTAUTH_URL=http://localhost:3000
30
+
31
+ # ═══════════════════════════════════════════════════════════════
32
+ # DATABASE — uncomment and configure your chosen provider
33
+ # ═══════════════════════════════════════════════════════════════
34
+
35
+ # --- PostgreSQL (direct) ---
36
+ # DATABASE_URL=postgres://user:password@localhost:5432/mydb
37
+
38
+ # --- Supabase (uses same URL as auth above) ---
39
+
40
+ # ═══════════════════════════════════════════════════════════════
41
+ # PAYMENTS — uncomment when ready
42
+ # ═══════════════════════════════════════════════════════════════
43
+
44
+ # STRIPE_SECRET_KEY=sk_test_...
45
+ # STRIPE_WEBHOOK_SECRET=whsec_...
46
+ # NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY=pk_test_...
47
+
48
+ # ═══════════════════════════════════════════════════════════════
49
+ # OPTIONAL SERVICES
50
+ # ═══════════════════════════════════════════════════════════════
51
+
52
+ # REDIS_URL=redis://localhost:6379
53
+ # RESEND_API_KEY=re_...
54
+ # OPENAI_API_KEY=sk-...
55
+ # ANTHROPIC_API_KEY=sk-ant-...
@@ -0,0 +1,72 @@
1
+ 'use client';
2
+
3
+ import { createContext, useContext, useState, useCallback, type ReactNode } from 'react';
4
+ import { MOCK_MODE, MOCK_USER, type MockUser } from '@/lib/mock';
5
+
6
+ /**
7
+ * Mock Auth Context — provides login/logout state for mock mode.
8
+ *
9
+ * When MOCK_MODE=true:
10
+ * - User starts as "logged in" with MOCK_USER
11
+ * - signOut() sets user to null (shows logged-out UI)
12
+ * - signIn() restores mock user (shows logged-in UI)
13
+ * - All pages still accessible (no real redirects)
14
+ *
15
+ * When MOCK_MODE=false:
16
+ * - This provider is a passthrough (renders children only)
17
+ * - TODO: [REAL_DATA] Replace with your real auth provider
18
+ */
19
+
20
+ type MockAuthState = {
21
+ user: MockUser | null;
22
+ isAuthenticated: boolean;
23
+ signIn: (email?: string, password?: string) => void;
24
+ signOut: () => void;
25
+ loading: boolean;
26
+ };
27
+
28
+ const MockAuthContext = createContext<MockAuthState | undefined>(undefined);
29
+
30
+ export function MockAuthProvider({ children }: { children: ReactNode }) {
31
+ const [user, setUser] = useState<MockUser | null>(MOCK_MODE ? MOCK_USER : null);
32
+ const [loading] = useState(false);
33
+
34
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
35
+ const signIn = useCallback((_email?: string, _password?: string) => {
36
+ // TODO: [REAL_DATA] Replace with your auth provider's sign in
37
+ setUser(MOCK_USER);
38
+ }, []);
39
+
40
+ const signOut = useCallback(() => {
41
+ // TODO: [REAL_DATA] Replace with your auth provider's sign out
42
+ setUser(null);
43
+ }, []);
44
+
45
+ return (
46
+ <MockAuthContext.Provider value={{ user, isAuthenticated: !!user, signIn, signOut, loading }}>
47
+ {children}
48
+ </MockAuthContext.Provider>
49
+ );
50
+ }
51
+
52
+ /**
53
+ * Hook to access mock auth state.
54
+ * Works identically to a real useAuth() hook — same shape, same behavior.
55
+ *
56
+ * TODO: [REAL_DATA] When switching to a real auth provider, replace
57
+ * useMockAuth() calls with your provider's hook (e.g. useAuth(), useSession()).
58
+ */
59
+ export function useMockAuth() {
60
+ const context = useContext(MockAuthContext);
61
+ if (context === undefined) {
62
+ // Fallback for non-mock mode or missing provider
63
+ return {
64
+ user: null,
65
+ isAuthenticated: false,
66
+ signIn: () => {},
67
+ signOut: () => {},
68
+ loading: false,
69
+ };
70
+ }
71
+ return context;
72
+ }
@@ -0,0 +1,29 @@
1
+ 'use client';
2
+
3
+ import { useState, useEffect } from 'react';
4
+
5
+ /**
6
+ * Mock mode indicator banner.
7
+ * Shown at the top of every page when NEXT_PUBLIC_MOCK_MODE=true.
8
+ * Uses useEffect to render only on the client (avoids SSR double-render).
9
+ */
10
+ export function MockBanner() {
11
+ const [show, setShow] = useState(false);
12
+
13
+ useEffect(() => {
14
+ setShow(process.env.NEXT_PUBLIC_MOCK_MODE === 'true');
15
+ }, []);
16
+
17
+ if (!show) return null;
18
+
19
+ return (
20
+ <div className="bg-primary/10 border-b border-primary/20 px-4 py-2 text-center text-xs text-primary">
21
+ <strong>Mock Mode</strong> — Showing demo data. All pages accessible without auth.
22
+ <span className="hidden sm:inline">
23
+ {' '}Set <code className="rounded bg-primary/10 px-1 py-0.5 font-mono">NEXT_PUBLIC_MOCK_MODE=false</code> and
24
+ configure your providers to use real data. Search for{' '}
25
+ <code className="rounded bg-primary/10 px-1 py-0.5 font-mono">TODO: [REAL_DATA]</code> in the code.
26
+ </span>
27
+ </div>
28
+ );
29
+ }
@@ -0,0 +1,147 @@
1
+ /**
2
+ * Mock Mode — for local development and template smoke testing.
3
+ *
4
+ * Set NEXT_PUBLIC_MOCK_MODE=true in .env.local to enable.
5
+ * Provides mock user, mock data, and bypasses all auth/provider checks
6
+ * so you can explore every page without any backend configuration.
7
+ *
8
+ * ┌─────────────────────────────────────────────────────────────┐
9
+ * │ TO CONNECT REAL PROVIDERS: │
10
+ * │ │
11
+ * │ 1. Set NEXT_PUBLIC_MOCK_MODE=false in .env.local │
12
+ * │ 2. Configure your auth provider (see .env.example) │
13
+ * │ 3. Configure your database provider │
14
+ * │ 4. Search for "TODO: [REAL_DATA]" in this codebase │
15
+ * │ to find all mock→real integration points │
16
+ * └─────────────────────────────────────────────────────────────┘
17
+ *
18
+ * This file is provider-agnostic — works with Supabase, Firebase,
19
+ * Keycloak, Auth0, NextAuth, or any custom auth/database solution.
20
+ */
21
+
22
+ // ═══════════════════════════════════════════════════════════════
23
+ // CORE
24
+ // ═══════════════════════════════════════════════════════════════
25
+
26
+ export const MOCK_MODE = process.env.NEXT_PUBLIC_MOCK_MODE === 'true';
27
+
28
+ // ═══════════════════════════════════════════════════════════════
29
+ // MOCK USER
30
+ // ═══════════════════════════════════════════════════════════════
31
+
32
+ export const MOCK_USER = {
33
+ id: 'mock-user-000-0000-000000000000',
34
+ email: 'demo@example.com',
35
+ name: 'Demo User',
36
+ avatar_url: null,
37
+ role: 'admin' as const,
38
+ plan: 'pro' as const,
39
+ createdAt: '2025-01-15T00:00:00Z',
40
+ };
41
+
42
+ export type MockUser = typeof MOCK_USER;
43
+
44
+ // ═══════════════════════════════════════════════════════════════
45
+ // MOCK DASHBOARD DATA
46
+ // ═══════════════════════════════════════════════════════════════
47
+
48
+ export const MOCK_STATS = {
49
+ totalUsers: 1_234,
50
+ activeUsers: 847,
51
+ revenue: 12_580,
52
+ mrr: 4_250,
53
+ growth: 12.5,
54
+ churn: 2.1,
55
+ newSignups: 42,
56
+ avgSessionMinutes: 8.3,
57
+ };
58
+
59
+ export const MOCK_RECENT_ACTIVITY = [
60
+ { id: '1', action: 'New signup', user: 'alice@example.com', timestamp: '2 min ago' },
61
+ { id: '2', action: 'Plan upgraded', user: 'bob@corp.io', timestamp: '15 min ago' },
62
+ { id: '3', action: 'Invoice paid', user: 'carol@startup.co', timestamp: '1 hour ago' },
63
+ { id: '4', action: 'Support ticket', user: 'dave@agency.com', timestamp: '2 hours ago' },
64
+ { id: '5', action: 'New signup', user: 'eve@freelance.dev', timestamp: '3 hours ago' },
65
+ ];
66
+
67
+ // ═══════════════════════════════════════════════════════════════
68
+ // MOCK BILLING DATA
69
+ // ═══════════════════════════════════════════════════════════════
70
+
71
+ export const MOCK_SUBSCRIPTION = {
72
+ plan: 'Pro',
73
+ status: 'active' as const,
74
+ price: '$29/month',
75
+ nextBilling: '2025-04-15',
76
+ cardLast4: '4242',
77
+ cardBrand: 'Visa',
78
+ };
79
+
80
+ export const MOCK_INVOICES = [
81
+ { id: 'inv_001', date: '2025-03-01', amount: '$29.00', status: 'paid' as const },
82
+ { id: 'inv_002', date: '2025-02-01', amount: '$29.00', status: 'paid' as const },
83
+ { id: 'inv_003', date: '2025-01-01', amount: '$29.00', status: 'paid' as const },
84
+ ];
85
+
86
+ // ═══════════════════════════════════════════════════════════════
87
+ // MOCK PRODUCTS (for marketplace/checkout)
88
+ // ═══════════════════════════════════════════════════════════════
89
+
90
+ export const MOCK_PRODUCTS = [
91
+ {
92
+ id: 'prod_1',
93
+ name: 'Starter',
94
+ price: 9,
95
+ features: ['1,000 users', 'Basic analytics', 'Email support'],
96
+ },
97
+ {
98
+ id: 'prod_2',
99
+ name: 'Pro',
100
+ price: 29,
101
+ features: ['Unlimited users', 'Advanced analytics', 'Priority support', 'Custom domains'],
102
+ },
103
+ {
104
+ id: 'prod_3',
105
+ name: 'Enterprise',
106
+ price: 99,
107
+ features: ['Everything in Pro', 'SSO/SAML', 'Dedicated support', 'SLA guarantee'],
108
+ },
109
+ ];
110
+
111
+ // ═══════════════════════════════════════════════════════════════
112
+ // MOCK NOTIFICATIONS
113
+ // ═══════════════════════════════════════════════════════════════
114
+
115
+ export const MOCK_NOTIFICATIONS = [
116
+ {
117
+ id: 'n1',
118
+ title: 'Welcome!',
119
+ message: 'Your account is set up and ready to go.',
120
+ read: true,
121
+ timestamp: '1 day ago',
122
+ },
123
+ {
124
+ id: 'n2',
125
+ title: 'New feature',
126
+ message: 'Check out our latest dashboard improvements.',
127
+ read: false,
128
+ timestamp: '2 hours ago',
129
+ },
130
+ ];
131
+
132
+ // ═══════════════════════════════════════════════════════════════
133
+ // HELPERS
134
+ // ═══════════════════════════════════════════════════════════════
135
+
136
+ /**
137
+ * Returns mock data when in mock mode, or calls the real fetcher.
138
+ * Use this to wrap any data-fetching function for easy mock→real transition.
139
+ *
140
+ * @example
141
+ * // TODO: [REAL_DATA] Replace mockData with your actual API call
142
+ * const stats = await mockOr(MOCK_STATS, () => fetchDashboardStats());
143
+ */
144
+ export async function mockOr<T>(mockData: T, realFetcher: () => Promise<T>): Promise<T> {
145
+ if (MOCK_MODE) return mockData;
146
+ return realFetcher();
147
+ }
@@ -15,9 +15,11 @@ import { enforceRateLimit, AppRateLimits } from '@/lib/api-security';
15
15
 
16
16
  export const dynamic = 'force-dynamic';
17
17
 
18
- const stripe = new Stripe(process.env.STRIPE_SECRET_KEY!, {
19
- apiVersion: '2025-02-24.acacia',
20
- });
18
+ function getStripe() {
19
+ return new Stripe(process.env.STRIPE_SECRET_KEY!, {
20
+ apiVersion: '2025-02-24.acacia',
21
+ });
22
+ }
21
23
 
22
24
  /**
23
25
  * Check if this webhook event has already been processed (idempotency).
@@ -49,7 +51,11 @@ export async function POST(request: NextRequest) {
49
51
 
50
52
  let event: Stripe.Event;
51
53
  try {
52
- event = stripe.webhooks.constructEvent(body, signature, process.env.STRIPE_WEBHOOK_SECRET!);
54
+ event = getStripe().webhooks.constructEvent(
55
+ body,
56
+ signature,
57
+ process.env.STRIPE_WEBHOOK_SECRET!,
58
+ );
53
59
  } catch (err) {
54
60
  console.error('[Stripe Webhook] Signature verification failed:', err);
55
61
  return NextResponse.json({ error: 'Invalid signature' }, { status: 400 });
@@ -32,7 +32,7 @@ export function getRedisClient(): RedisClient | null {
32
32
 
33
33
  try {
34
34
  // Dynamic require — only loads if ioredis is installed
35
- // eslint-disable-next-line @typescript-eslint/no-require-imports
35
+ // eslint-disable-next-line
36
36
  const Redis = require('ioredis');
37
37
  _client = new Redis(url, {
38
38
  keyPrefix: process.env.REDIS_KEY_PREFIX || 'app:',
@@ -15,7 +15,6 @@
15
15
  "react": "^19.0.0",
16
16
  "react-dom": "^19.0.0",
17
17
  "@digilogiclabs/platform-core": "^1.14.0",
18
- "@digilogiclabs/app-sdk": "^1.1.0",
19
18
  "@digilogiclabs/saas-factory-ui": "^1.8.1",
20
19
  "tailwindcss": "^4.1.0",
21
20
  "@tailwindcss/postcss": "^4.1.0",
@@ -3,7 +3,8 @@
3
3
  import { useState, useRef, useEffect } from 'react'
4
4
  import { Button, Card } from '@digilogiclabs/saas-factory-ui'
5
5
  import { Send, Bot, User, Loader2, Sparkles } from 'lucide-react'
6
- import { useAuth } from '@digilogiclabs/app-sdk'
6
+ // TODO: Replace with direct @digilogiclabs/saas-factory-auth or Auth.js usage
7
+ // import { useAuth } from '@digilogiclabs/app-sdk'
7
8
  import Link from 'next/link'
8
9
 
9
10
  interface Message {
@@ -20,7 +21,9 @@ const MODELS = [
20
21
  ]
21
22
 
22
23
  export default function ChatPage() {
23
- const { user, loading: authLoading } = useAuth()
24
+ // TODO: Replace with direct auth provider usage
25
+ const user = null as any // placeholder — wire up your auth provider
26
+ const authLoading = false
24
27
  const [messages, setMessages] = useState<Message[]>([])
25
28
  const [input, setInput] = useState('')
26
29
  const [isLoading, setIsLoading] = useState(false)
@@ -3,7 +3,8 @@
3
3
  import { useState } from 'react'
4
4
  import { Button, Card } from '@digilogiclabs/saas-factory-ui'
5
5
  import { Play, Loader2, Clock, Hash, Bot } from 'lucide-react'
6
- import { useAuth } from '@digilogiclabs/app-sdk'
6
+ // TODO: Replace with direct @digilogiclabs/saas-factory-auth or Auth.js usage
7
+ // import { useAuth } from '@digilogiclabs/app-sdk'
7
8
  import Link from 'next/link'
8
9
 
9
10
  const MODELS = [
@@ -25,7 +26,9 @@ const DEMO_RESPONSES: Record<string, string> = {
25
26
  }
26
27
 
27
28
  export default function PlaygroundPage() {
28
- const { user, loading: authLoading } = useAuth()
29
+ // TODO: Replace with direct auth provider usage
30
+ const user = null as any // placeholder — wire up your auth provider
31
+ const authLoading = false
29
32
  const [model, setModel] = useState(MODELS[0].id)
30
33
  const [systemPrompt, setSystemPrompt] = useState('You are a helpful AI assistant.')
31
34
  const [userMessage, setUserMessage] = useState('')
@@ -2,7 +2,6 @@
2
2
 
3
3
  import { ThemeProvider } from 'next-themes'
4
4
  import { Toaster } from '@digilogiclabs/saas-factory-ui'
5
- import { DLLProvider } from '@digilogiclabs/app-sdk'
6
5
 
7
6
  interface AppProvidersProps {
8
7
  children: React.ReactNode
@@ -11,10 +10,8 @@ interface AppProvidersProps {
11
10
  export function AppProviders({ children }: AppProvidersProps) {
12
11
  return (
13
12
  <ThemeProvider attribute="class" defaultTheme="system" enableSystem disableTransitionOnChange>
14
- <DLLProvider>
15
- {children}
16
- <Toaster />
17
- </DLLProvider>
13
+ {children}
14
+ <Toaster />
18
15
  </ThemeProvider>
19
16
  )
20
17
  }
@@ -0,0 +1,14 @@
1
+ import { dirname } from 'path';
2
+ import { fileURLToPath } from 'url';
3
+ import { FlatCompat } from '@eslint/eslintrc';
4
+
5
+ const __filename = fileURLToPath(import.meta.url);
6
+ const __dirname = dirname(__filename);
7
+
8
+ const compat = new FlatCompat({
9
+ baseDirectory: __dirname,
10
+ });
11
+
12
+ const eslintConfig = [...compat.extends('next/core-web-vitals')];
13
+
14
+ export default eslintConfig;
@@ -16,7 +16,7 @@ export async function GET(request: NextRequest) {
16
16
  {
17
17
  cookies: {
18
18
  getAll: () => cookieStore.getAll(),
19
- setAll: (cookiesToSet) => {
19
+ setAll: (cookiesToSet: Array<{ name: string; value: string; options?: Record<string, unknown> }>) => {
20
20
  cookiesToSet.forEach(({ name, value, options }) =>
21
21
  cookieStore.set(name, value, options)
22
22
  );