@digilogiclabs/create-saas-app 2.11.0 → 2.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (358) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/dist/.tsbuildinfo +1 -1
  3. package/dist/cli/index.js +1 -1
  4. package/dist/cli/index.js.map +1 -1
  5. package/dist/generators/template-generator.d.ts.map +1 -1
  6. package/dist/generators/template-generator.js +15 -8
  7. package/dist/generators/template-generator.js.map +1 -1
  8. package/dist/templates/shared/admin/web/src/components/admin-nav.tsx +3 -3
  9. package/dist/templates/shared/auth/supabase/web/src/lib/auth-session.ts +36 -16
  10. package/dist/templates/shared/auth/supabase/web/src/middleware.ts +6 -0
  11. package/dist/templates/shared/cookie-consent/web/components/cookie-consent.tsx +5 -5
  12. package/dist/templates/shared/design/web/src/components/ui/button.tsx +56 -0
  13. package/dist/templates/shared/email/web/src/lib/email/client.ts +1 -1
  14. package/dist/templates/shared/error-pages/web/src/app/error.tsx +13 -11
  15. package/dist/templates/shared/error-pages/web/src/app/global-error.tsx +2 -0
  16. package/dist/templates/shared/error-pages/web/src/app/not-found.tsx +6 -6
  17. package/dist/templates/shared/legal/web/src/app/(legal)/privacy/page.tsx +4 -4
  18. package/dist/templates/shared/legal/web/src/app/(legal)/terms/page.tsx +4 -4
  19. package/dist/templates/shared/loading/web/components/skeleton.tsx +4 -4
  20. package/dist/templates/shared/mock/web/.env.local +55 -0
  21. package/dist/templates/shared/mock/web/src/components/mock-auth-provider.tsx +72 -0
  22. package/dist/templates/shared/mock/web/src/components/mock-banner.tsx +29 -0
  23. package/dist/templates/shared/mock/web/src/lib/mock.ts +147 -0
  24. package/dist/templates/shared/payments/web/src/app/api/webhooks/stripe/route.ts +10 -4
  25. package/dist/templates/shared/redis/web/src/lib/redis.ts +1 -1
  26. package/dist/templates/web/base/template/eslint.config.mjs +14 -0
  27. package/dist/templates/web/base/template/src/app/auth/callback/route.ts +1 -1
  28. package/dist/templates/web/base/template/src/app/checkout/page.tsx +76 -103
  29. package/dist/templates/web/base/template/src/app/dashboard/page.tsx +145 -329
  30. package/dist/templates/web/base/template/src/app/layout.tsx +40 -38
  31. package/dist/templates/web/base/template/src/app/login/page.tsx +116 -66
  32. package/dist/templates/web/base/template/src/app/page.tsx +97 -193
  33. package/dist/templates/web/base/template/src/app/settings/page.tsx +154 -0
  34. package/dist/templates/web/base/template/src/app/signup/page.tsx +117 -66
  35. package/dist/templates/web/base/template/src/components/providers/app-providers.tsx +8 -3
  36. package/dist/templates/web/base/template/src/components/shared/header.tsx +229 -63
  37. package/dist/templates/web/ui-auth/template/eslint.config.mjs +14 -0
  38. package/dist/templates/web/ui-auth/template/src/app/checkout/page.tsx +3 -3
  39. package/dist/templates/web/ui-auth/template/src/app/dev-setup/page.tsx +81 -91
  40. package/dist/templates/web/ui-auth/template/src/app/layout.tsx +38 -36
  41. package/dist/templates/web/ui-auth/template/src/app/login/page.tsx +22 -45
  42. package/dist/templates/web/ui-auth/template/src/app/page.tsx +106 -306
  43. package/dist/templates/web/ui-auth/template/src/app/setup/page.tsx +387 -402
  44. package/dist/templates/web/ui-auth/template/src/app/signup/page.tsx +24 -47
  45. package/dist/templates/web/ui-auth/template/src/components/providers/app-providers.tsx +8 -3
  46. package/dist/templates/web/ui-auth/template/src/components/shared/header.tsx +229 -94
  47. package/dist/templates/web/ui-auth-ai/template/src/app/layout.tsx +38 -45
  48. package/dist/templates/web/ui-auth-ai/template/src/app/login/page.tsx +86 -0
  49. package/dist/templates/web/ui-auth-ai/template/src/app/page.tsx +107 -193
  50. package/dist/templates/web/ui-auth-ai/template/src/app/signup/page.tsx +105 -0
  51. package/dist/templates/web/ui-auth-ai/template/src/components/ai/audio-generator.tsx +144 -140
  52. package/dist/templates/web/ui-auth-ai/template/src/components/ai/video-generator.tsx +156 -157
  53. package/dist/templates/web/ui-auth-ai/template/src/components/auth/login-form.tsx +7 -3
  54. package/dist/templates/web/ui-auth-ai/template/src/components/providers/app-providers.tsx +25 -0
  55. package/dist/templates/web/ui-auth-ai/template/src/components/shared/footer.tsx +36 -0
  56. package/dist/templates/web/ui-auth-ai/template/src/components/shared/header.tsx +228 -0
  57. package/dist/templates/web/ui-auth-ai/template/src/components/ui/button.tsx +5 -5
  58. package/dist/templates/web/ui-auth-ai/template/src/components/ui/input.tsx +1 -1
  59. package/dist/templates/web/ui-auth-ai/template/src/components/ui/select.tsx +1 -1
  60. package/dist/templates/web/ui-auth-ai/template/src/components/ui/textarea.tsx +1 -1
  61. package/dist/templates/web/ui-auth-ai/template/src/components/ui/theme-toggle.tsx +34 -0
  62. package/dist/templates/web/ui-auth-ai/template/src/lib/supabase.ts +6 -4
  63. package/dist/templates/web/ui-auth-ai/template/src/providers/auth-provider.tsx +7 -5
  64. package/dist/templates/web/ui-auth-payments/template/src/app/billing/page.tsx +63 -192
  65. package/dist/templates/web/ui-auth-payments/template/src/app/checkout/page.tsx +104 -296
  66. package/dist/templates/web/ui-auth-payments/template/src/app/dashboard/page.tsx +27 -27
  67. package/dist/templates/web/ui-auth-payments/template/src/app/dev-setup/page.tsx +70 -81
  68. package/dist/templates/web/ui-auth-payments/template/src/app/layout.tsx +38 -36
  69. package/dist/templates/web/ui-auth-payments/template/src/app/login/loading.tsx +9 -9
  70. package/dist/templates/web/ui-auth-payments/template/src/app/login/page.tsx +4 -104
  71. package/dist/templates/web/ui-auth-payments/template/src/app/page.tsx +69 -337
  72. package/dist/templates/web/ui-auth-payments/template/src/app/setup/page.tsx +55 -68
  73. package/dist/templates/web/ui-auth-payments/template/src/app/signup/loading.tsx +13 -13
  74. package/dist/templates/web/ui-auth-payments/template/src/app/signup/page.tsx +4 -123
  75. package/dist/templates/web/ui-auth-payments/template/src/components/client/auth-status.tsx +37 -52
  76. package/dist/templates/web/ui-auth-payments/template/src/components/client/login-form.tsx +49 -103
  77. package/dist/templates/web/ui-auth-payments/template/src/components/client/newsletter-signup.tsx +4 -4
  78. package/dist/templates/web/ui-auth-payments/template/src/components/client/signup-form.tsx +60 -140
  79. package/dist/templates/web/ui-auth-payments/template/src/components/providers/app-providers.tsx +25 -28
  80. package/dist/templates/web/ui-auth-payments/template/src/components/shared/header.tsx +229 -230
  81. package/dist/templates/web/ui-auth-payments/template/src/lib/actions/auth.ts +245 -245
  82. package/dist/templates/web/ui-auth-payments/template/src/lib/actions/index.ts +339 -339
  83. package/dist/templates/web/ui-auth-payments-ai/template/src/app/ai/page.tsx +305 -309
  84. package/dist/templates/web/ui-auth-payments-ai/template/src/app/billing/page.tsx +62 -312
  85. package/dist/templates/web/ui-auth-payments-ai/template/src/app/checkout/page.tsx +109 -125
  86. package/dist/templates/web/ui-auth-payments-ai/template/src/app/dashboard/page.tsx +27 -27
  87. package/dist/templates/web/ui-auth-payments-ai/template/src/app/dev-setup/page.tsx +68 -83
  88. package/dist/templates/web/ui-auth-payments-ai/template/src/app/layout.tsx +40 -38
  89. package/dist/templates/web/ui-auth-payments-ai/template/src/app/onboarding/page.tsx +20 -20
  90. package/dist/templates/web/ui-auth-payments-ai/template/src/app/page.tsx +140 -394
  91. package/dist/templates/web/ui-auth-payments-ai/template/src/app/settings/page.tsx +28 -27
  92. package/dist/templates/web/ui-auth-payments-ai/template/src/app/setup/page.tsx +51 -66
  93. package/dist/templates/web/ui-auth-payments-ai/template/src/components/client/auth-status.tsx +37 -52
  94. package/dist/templates/web/ui-auth-payments-ai/template/src/components/client/login-form.tsx +50 -79
  95. package/dist/templates/web/ui-auth-payments-ai/template/src/components/client/signup-form.tsx +58 -111
  96. package/dist/templates/web/ui-auth-payments-ai/template/src/components/providers/app-providers.tsx +8 -3
  97. package/dist/templates/web/ui-auth-payments-ai/template/src/components/shared/header.tsx +229 -252
  98. package/dist/templates/web/ui-auth-payments-ai/template/src/lib/actions/auth.ts +245 -245
  99. package/dist/templates/web/ui-auth-payments-audio/template/src/app/billing/page.tsx +63 -192
  100. package/dist/templates/web/ui-auth-payments-audio/template/src/app/checkout/page.tsx +109 -125
  101. package/dist/templates/web/ui-auth-payments-audio/template/src/app/dashboard/page.tsx +27 -27
  102. package/dist/templates/web/ui-auth-payments-audio/template/src/app/layout.tsx +40 -38
  103. package/dist/templates/web/ui-auth-payments-audio/template/src/app/page.tsx +122 -385
  104. package/dist/templates/web/ui-auth-payments-audio/template/src/app/setup/page.tsx +340 -344
  105. package/dist/templates/web/ui-auth-payments-audio/template/src/components/client/auth-status.tsx +37 -52
  106. package/dist/templates/web/ui-auth-payments-audio/template/src/components/client/login-form.tsx +49 -103
  107. package/dist/templates/web/ui-auth-payments-audio/template/src/components/client/signup-form.tsx +60 -140
  108. package/dist/templates/web/ui-auth-payments-audio/template/src/components/providers/app-providers.tsx +8 -3
  109. package/dist/templates/web/ui-auth-payments-audio/template/src/components/shared/header.tsx +229 -252
  110. package/dist/templates/web/ui-auth-payments-audio/template/src/lib/actions/auth.ts +3 -3
  111. package/dist/templates/web/ui-auth-payments-video/template/src/app/billing/page.tsx +63 -192
  112. package/dist/templates/web/ui-auth-payments-video/template/src/app/checkout/page.tsx +109 -125
  113. package/dist/templates/web/ui-auth-payments-video/template/src/app/layout.tsx +38 -36
  114. package/dist/templates/web/ui-auth-payments-video/template/src/app/login/page.tsx +9 -109
  115. package/dist/templates/web/ui-auth-payments-video/template/src/app/page.tsx +132 -392
  116. package/dist/templates/web/ui-auth-payments-video/template/src/app/setup/page.tsx +346 -350
  117. package/dist/templates/web/ui-auth-payments-video/template/src/app/signup/page.tsx +9 -128
  118. package/dist/templates/web/ui-auth-payments-video/template/src/components/client/login-form.tsx +90 -0
  119. package/dist/templates/web/ui-auth-payments-video/template/src/components/client/signup-form.tsx +105 -0
  120. package/dist/templates/web/ui-auth-payments-video/template/src/components/providers/app-providers.tsx +8 -3
  121. package/dist/templates/web/ui-auth-payments-video/template/src/components/shared/header.tsx +229 -246
  122. package/dist/templates/web/ui-only/template/eslint.config.mjs +14 -0
  123. package/dist/templates/web/ui-only/template/src/app/checkout/page.tsx +2 -2
  124. package/dist/templates/web/ui-only/template/src/app/login/page.tsx +69 -63
  125. package/dist/templates/web/ui-only/template/src/app/page.tsx +69 -91
  126. package/dist/templates/web/ui-only/template/src/app/signup/page.tsx +94 -79
  127. package/dist/templates/web/ui-only/template/src/components/providers/app-providers.tsx +1 -6
  128. package/dist/templates/web/ui-only/template/src/components/shared/header.tsx +90 -53
  129. package/dist/templates/web/ui-package-test/template/package.json +19 -23
  130. package/dist/templates/web/ui-package-test/template/postcss.config.mjs +8 -0
  131. package/dist/templates/web/ui-package-test/template/src/app/globals.css +88 -0
  132. package/dist/templates/web/ui-package-test/template/src/app/layout.tsx +27 -0
  133. package/dist/templates/web/ui-package-test/template/src/app/page.tsx +46 -106
  134. package/package.json +1 -1
  135. package/src/templates/shared/admin/web/src/components/admin-nav.tsx +3 -3
  136. package/src/templates/shared/auth/supabase/web/src/lib/auth-session.ts +36 -16
  137. package/src/templates/shared/auth/supabase/web/src/middleware.ts +6 -0
  138. package/src/templates/shared/cookie-consent/web/components/cookie-consent.tsx +5 -5
  139. package/src/templates/shared/design/web/src/components/ui/button.tsx +56 -0
  140. package/src/templates/shared/email/web/src/lib/email/client.ts +1 -1
  141. package/src/templates/shared/error-pages/web/src/app/error.tsx +13 -11
  142. package/src/templates/shared/error-pages/web/src/app/global-error.tsx +2 -0
  143. package/src/templates/shared/error-pages/web/src/app/not-found.tsx +6 -6
  144. package/src/templates/shared/legal/web/src/app/(legal)/privacy/page.tsx +4 -4
  145. package/src/templates/shared/legal/web/src/app/(legal)/terms/page.tsx +4 -4
  146. package/src/templates/shared/loading/web/components/skeleton.tsx +4 -4
  147. package/src/templates/shared/mock/web/.env.local +55 -0
  148. package/src/templates/shared/mock/web/src/components/mock-auth-provider.tsx +72 -0
  149. package/src/templates/shared/mock/web/src/components/mock-banner.tsx +29 -0
  150. package/src/templates/shared/mock/web/src/lib/mock.ts +147 -0
  151. package/src/templates/shared/payments/web/src/app/api/webhooks/stripe/route.ts +10 -4
  152. package/src/templates/shared/redis/web/src/lib/redis.ts +1 -1
  153. package/src/templates/web/base/template/eslint.config.mjs +14 -0
  154. package/src/templates/web/base/template/src/app/auth/callback/route.ts +1 -1
  155. package/src/templates/web/base/template/src/app/checkout/page.tsx +76 -103
  156. package/src/templates/web/base/template/src/app/dashboard/page.tsx +145 -329
  157. package/src/templates/web/base/template/src/app/layout.tsx +40 -38
  158. package/src/templates/web/base/template/src/app/login/page.tsx +116 -66
  159. package/src/templates/web/base/template/src/app/page.tsx +97 -193
  160. package/src/templates/web/base/template/src/app/settings/page.tsx +154 -0
  161. package/src/templates/web/base/template/src/app/signup/page.tsx +117 -66
  162. package/src/templates/web/base/template/src/components/providers/app-providers.tsx +8 -3
  163. package/src/templates/web/base/template/src/components/shared/header.tsx +229 -63
  164. package/src/templates/web/ui-auth/template/eslint.config.mjs +14 -0
  165. package/src/templates/web/ui-auth/template/src/app/checkout/page.tsx +3 -3
  166. package/src/templates/web/ui-auth/template/src/app/dev-setup/page.tsx +81 -91
  167. package/src/templates/web/ui-auth/template/src/app/layout.tsx +38 -36
  168. package/src/templates/web/ui-auth/template/src/app/login/page.tsx +22 -45
  169. package/src/templates/web/ui-auth/template/src/app/page.tsx +106 -306
  170. package/src/templates/web/ui-auth/template/src/app/setup/page.tsx +387 -402
  171. package/src/templates/web/ui-auth/template/src/app/signup/page.tsx +24 -47
  172. package/src/templates/web/ui-auth/template/src/components/providers/app-providers.tsx +8 -3
  173. package/src/templates/web/ui-auth/template/src/components/shared/header.tsx +229 -94
  174. package/src/templates/web/ui-auth-ai/template/src/app/layout.tsx +38 -45
  175. package/src/templates/web/ui-auth-ai/template/src/app/login/page.tsx +86 -0
  176. package/src/templates/web/ui-auth-ai/template/src/app/page.tsx +107 -193
  177. package/src/templates/web/ui-auth-ai/template/src/app/signup/page.tsx +105 -0
  178. package/src/templates/web/ui-auth-ai/template/src/components/ai/audio-generator.tsx +144 -140
  179. package/src/templates/web/ui-auth-ai/template/src/components/ai/video-generator.tsx +156 -157
  180. package/src/templates/web/ui-auth-ai/template/src/components/auth/login-form.tsx +7 -3
  181. package/src/templates/web/ui-auth-ai/template/src/components/providers/app-providers.tsx +25 -0
  182. package/src/templates/web/ui-auth-ai/template/src/components/shared/footer.tsx +36 -0
  183. package/src/templates/web/ui-auth-ai/template/src/components/shared/header.tsx +228 -0
  184. package/src/templates/web/ui-auth-ai/template/src/components/ui/button.tsx +5 -5
  185. package/src/templates/web/ui-auth-ai/template/src/components/ui/input.tsx +1 -1
  186. package/src/templates/web/ui-auth-ai/template/src/components/ui/select.tsx +1 -1
  187. package/src/templates/web/ui-auth-ai/template/src/components/ui/textarea.tsx +1 -1
  188. package/src/templates/web/ui-auth-ai/template/src/components/ui/theme-toggle.tsx +34 -0
  189. package/src/templates/web/ui-auth-ai/template/src/lib/supabase.ts +6 -4
  190. package/src/templates/web/ui-auth-ai/template/src/providers/auth-provider.tsx +7 -5
  191. package/src/templates/web/ui-auth-payments/template/src/app/billing/page.tsx +63 -192
  192. package/src/templates/web/ui-auth-payments/template/src/app/checkout/page.tsx +104 -296
  193. package/src/templates/web/ui-auth-payments/template/src/app/dashboard/page.tsx +27 -27
  194. package/src/templates/web/ui-auth-payments/template/src/app/dev-setup/page.tsx +70 -81
  195. package/src/templates/web/ui-auth-payments/template/src/app/layout.tsx +38 -36
  196. package/src/templates/web/ui-auth-payments/template/src/app/login/loading.tsx +9 -9
  197. package/src/templates/web/ui-auth-payments/template/src/app/login/page.tsx +4 -104
  198. package/src/templates/web/ui-auth-payments/template/src/app/page.tsx +69 -337
  199. package/src/templates/web/ui-auth-payments/template/src/app/setup/page.tsx +55 -68
  200. package/src/templates/web/ui-auth-payments/template/src/app/signup/loading.tsx +13 -13
  201. package/src/templates/web/ui-auth-payments/template/src/app/signup/page.tsx +4 -123
  202. package/src/templates/web/ui-auth-payments/template/src/components/client/auth-status.tsx +37 -52
  203. package/src/templates/web/ui-auth-payments/template/src/components/client/login-form.tsx +49 -103
  204. package/src/templates/web/ui-auth-payments/template/src/components/client/newsletter-signup.tsx +4 -4
  205. package/src/templates/web/ui-auth-payments/template/src/components/client/signup-form.tsx +60 -140
  206. package/src/templates/web/ui-auth-payments/template/src/components/providers/app-providers.tsx +25 -28
  207. package/src/templates/web/ui-auth-payments/template/src/components/shared/header.tsx +229 -230
  208. package/src/templates/web/ui-auth-payments/template/src/lib/actions/auth.ts +245 -245
  209. package/src/templates/web/ui-auth-payments/template/src/lib/actions/index.ts +339 -339
  210. package/src/templates/web/ui-auth-payments-ai/template/src/app/ai/page.tsx +305 -309
  211. package/src/templates/web/ui-auth-payments-ai/template/src/app/billing/page.tsx +62 -312
  212. package/src/templates/web/ui-auth-payments-ai/template/src/app/checkout/page.tsx +109 -125
  213. package/src/templates/web/ui-auth-payments-ai/template/src/app/dashboard/page.tsx +27 -27
  214. package/src/templates/web/ui-auth-payments-ai/template/src/app/dev-setup/page.tsx +68 -83
  215. package/src/templates/web/ui-auth-payments-ai/template/src/app/layout.tsx +40 -38
  216. package/src/templates/web/ui-auth-payments-ai/template/src/app/onboarding/page.tsx +20 -20
  217. package/src/templates/web/ui-auth-payments-ai/template/src/app/page.tsx +140 -394
  218. package/src/templates/web/ui-auth-payments-ai/template/src/app/settings/page.tsx +28 -27
  219. package/src/templates/web/ui-auth-payments-ai/template/src/app/setup/page.tsx +51 -66
  220. package/src/templates/web/ui-auth-payments-ai/template/src/components/client/auth-status.tsx +37 -52
  221. package/src/templates/web/ui-auth-payments-ai/template/src/components/client/login-form.tsx +50 -79
  222. package/src/templates/web/ui-auth-payments-ai/template/src/components/client/signup-form.tsx +58 -111
  223. package/src/templates/web/ui-auth-payments-ai/template/src/components/providers/app-providers.tsx +8 -3
  224. package/src/templates/web/ui-auth-payments-ai/template/src/components/shared/header.tsx +229 -252
  225. package/src/templates/web/ui-auth-payments-ai/template/src/lib/actions/auth.ts +245 -245
  226. package/src/templates/web/ui-auth-payments-audio/template/src/app/billing/page.tsx +63 -192
  227. package/src/templates/web/ui-auth-payments-audio/template/src/app/checkout/page.tsx +109 -125
  228. package/src/templates/web/ui-auth-payments-audio/template/src/app/dashboard/page.tsx +27 -27
  229. package/src/templates/web/ui-auth-payments-audio/template/src/app/layout.tsx +40 -38
  230. package/src/templates/web/ui-auth-payments-audio/template/src/app/page.tsx +122 -385
  231. package/src/templates/web/ui-auth-payments-audio/template/src/app/setup/page.tsx +340 -344
  232. package/src/templates/web/ui-auth-payments-audio/template/src/components/client/auth-status.tsx +37 -52
  233. package/src/templates/web/ui-auth-payments-audio/template/src/components/client/login-form.tsx +49 -103
  234. package/src/templates/web/ui-auth-payments-audio/template/src/components/client/signup-form.tsx +60 -140
  235. package/src/templates/web/ui-auth-payments-audio/template/src/components/providers/app-providers.tsx +8 -3
  236. package/src/templates/web/ui-auth-payments-audio/template/src/components/shared/header.tsx +229 -252
  237. package/src/templates/web/ui-auth-payments-audio/template/src/lib/actions/auth.ts +3 -3
  238. package/src/templates/web/ui-auth-payments-video/template/src/app/billing/page.tsx +63 -192
  239. package/src/templates/web/ui-auth-payments-video/template/src/app/checkout/page.tsx +109 -125
  240. package/src/templates/web/ui-auth-payments-video/template/src/app/layout.tsx +38 -36
  241. package/src/templates/web/ui-auth-payments-video/template/src/app/login/page.tsx +9 -109
  242. package/src/templates/web/ui-auth-payments-video/template/src/app/page.tsx +132 -392
  243. package/src/templates/web/ui-auth-payments-video/template/src/app/setup/page.tsx +346 -350
  244. package/src/templates/web/ui-auth-payments-video/template/src/app/signup/page.tsx +9 -128
  245. package/src/templates/web/ui-auth-payments-video/template/src/components/client/login-form.tsx +90 -0
  246. package/src/templates/web/ui-auth-payments-video/template/src/components/client/signup-form.tsx +105 -0
  247. package/src/templates/web/ui-auth-payments-video/template/src/components/providers/app-providers.tsx +8 -3
  248. package/src/templates/web/ui-auth-payments-video/template/src/components/shared/header.tsx +229 -246
  249. package/src/templates/web/ui-only/template/eslint.config.mjs +14 -0
  250. package/src/templates/web/ui-only/template/src/app/checkout/page.tsx +2 -2
  251. package/src/templates/web/ui-only/template/src/app/login/page.tsx +69 -63
  252. package/src/templates/web/ui-only/template/src/app/page.tsx +69 -91
  253. package/src/templates/web/ui-only/template/src/app/signup/page.tsx +94 -79
  254. package/src/templates/web/ui-only/template/src/components/providers/app-providers.tsx +1 -6
  255. package/src/templates/web/ui-only/template/src/components/shared/header.tsx +90 -53
  256. package/src/templates/web/ui-package-test/template/package.json +19 -23
  257. package/src/templates/web/ui-package-test/template/postcss.config.mjs +8 -0
  258. package/src/templates/web/ui-package-test/template/src/app/globals.css +88 -0
  259. package/src/templates/web/ui-package-test/template/src/app/layout.tsx +27 -0
  260. package/src/templates/web/ui-package-test/template/src/app/page.tsx +46 -106
  261. package/dist/templates/mobile/ui-auth-payments-ai-rag/template/README.md +0 -655
  262. package/dist/templates/mobile/ui-auth-payments-ai-rag/template/app/(tabs)/ai.tsx +0 -683
  263. package/dist/templates/mobile/ui-auth-payments-ai-rag/template/app/_layout.tsx +0 -124
  264. package/dist/templates/mobile/ui-auth-payments-ai-rag/template/app.json +0 -74
  265. package/dist/templates/mobile/ui-auth-payments-ai-rag/template/babel.config.js +0 -25
  266. package/dist/templates/mobile/ui-auth-payments-ai-rag/template/docs/MOBILE-SETUP.md +0 -787
  267. package/dist/templates/mobile/ui-auth-payments-ai-rag/template/eas.json +0 -25
  268. package/dist/templates/mobile/ui-auth-payments-ai-rag/template/expo-env.d.ts +0 -3
  269. package/dist/templates/mobile/ui-auth-payments-ai-rag/template/hooks/useRAGSystem.ts +0 -346
  270. package/dist/templates/mobile/ui-auth-payments-ai-rag/template/jest-setup.ts +0 -37
  271. package/dist/templates/mobile/ui-auth-payments-ai-rag/template/lib/rag/config.ts +0 -180
  272. package/dist/templates/mobile/ui-auth-payments-ai-rag/template/metro.config.js +0 -11
  273. package/dist/templates/mobile/ui-auth-payments-ai-rag/template/package.json +0 -122
  274. package/dist/templates/mobile/ui-auth-payments-ai-rag/template/scripts/setup-rag.js +0 -599
  275. package/dist/templates/mobile/ui-auth-payments-ai-rag/template/tsconfig.json +0 -32
  276. package/dist/templates/web/base/template/.eslintrc.js +0 -8
  277. package/dist/templates/web/base/template/src/components/__tests__/example.test.tsx +0 -49
  278. package/dist/templates/web/base/template/src/test/setup.ts +0 -74
  279. package/dist/templates/web/base/template/vitest.config.ts +0 -17
  280. package/dist/templates/web/ui-auth/template/.eslintrc.js +0 -8
  281. package/dist/templates/web/ui-auth/template/src/components/__tests__/example.test.tsx +0 -49
  282. package/dist/templates/web/ui-auth/template/src/test/setup.ts +0 -74
  283. package/dist/templates/web/ui-auth/template/vitest.config.ts +0 -17
  284. package/dist/templates/web/ui-auth-payments/template/src/components/__tests__/example.test.tsx +0 -49
  285. package/dist/templates/web/ui-auth-payments/template/src/test/setup.ts +0 -74
  286. package/dist/templates/web/ui-auth-payments/template/vitest.config.ts +0 -17
  287. package/dist/templates/web/ui-auth-payments-ai/template/src/components/__tests__/example.test.tsx +0 -49
  288. package/dist/templates/web/ui-auth-payments-ai/template/src/test/setup.ts +0 -74
  289. package/dist/templates/web/ui-auth-payments-ai/template/vitest.config.ts +0 -17
  290. package/dist/templates/web/ui-auth-payments-ai-rag/template/README.md +0 -434
  291. package/dist/templates/web/ui-auth-payments-ai-rag/template/components/rag/KnowledgeManager.tsx +0 -642
  292. package/dist/templates/web/ui-auth-payments-ai-rag/template/components/rag/RAGAnalytics.tsx +0 -466
  293. package/dist/templates/web/ui-auth-payments-ai-rag/template/components/rag/RAGChatInterface.tsx +0 -393
  294. package/dist/templates/web/ui-auth-payments-ai-rag/template/docs/GETTING-STARTED.md +0 -457
  295. package/dist/templates/web/ui-auth-payments-ai-rag/template/hooks/useRAGSystem.ts +0 -478
  296. package/dist/templates/web/ui-auth-payments-ai-rag/template/lib/rag/config.ts +0 -250
  297. package/dist/templates/web/ui-auth-payments-ai-rag/template/package.json +0 -73
  298. package/dist/templates/web/ui-auth-payments-ai-rag/template/scripts/setup-rag.js +0 -622
  299. package/dist/templates/web/ui-auth-payments-ai-rag/template/src/app/ai/page.tsx +0 -396
  300. package/dist/templates/web/ui-auth-payments-audio/template/src/components/__tests__/example.test.tsx +0 -49
  301. package/dist/templates/web/ui-auth-payments-audio/template/src/test/setup.ts +0 -74
  302. package/dist/templates/web/ui-auth-payments-audio/template/vitest.config.ts +0 -17
  303. package/dist/templates/web/ui-auth-payments-video/template/src/components/__tests__/example.test.tsx +0 -49
  304. package/dist/templates/web/ui-auth-payments-video/template/src/test/setup.ts +0 -74
  305. package/dist/templates/web/ui-auth-payments-video/template/vitest.config.ts +0 -17
  306. package/dist/templates/web/ui-only/template/.eslintrc.js +0 -8
  307. package/dist/templates/web/ui-only/template/src/components/__tests__/example.test.tsx +0 -49
  308. package/dist/templates/web/ui-only/template/src/test/setup.ts +0 -74
  309. package/dist/templates/web/ui-only/template/vitest.config.ts +0 -17
  310. package/src/templates/mobile/ui-auth-payments-ai-rag/template/README.md +0 -655
  311. package/src/templates/mobile/ui-auth-payments-ai-rag/template/app/(tabs)/ai.tsx +0 -683
  312. package/src/templates/mobile/ui-auth-payments-ai-rag/template/app/_layout.tsx +0 -124
  313. package/src/templates/mobile/ui-auth-payments-ai-rag/template/app.json +0 -74
  314. package/src/templates/mobile/ui-auth-payments-ai-rag/template/babel.config.js +0 -25
  315. package/src/templates/mobile/ui-auth-payments-ai-rag/template/docs/MOBILE-SETUP.md +0 -787
  316. package/src/templates/mobile/ui-auth-payments-ai-rag/template/eas.json +0 -25
  317. package/src/templates/mobile/ui-auth-payments-ai-rag/template/expo-env.d.ts +0 -3
  318. package/src/templates/mobile/ui-auth-payments-ai-rag/template/hooks/useRAGSystem.ts +0 -346
  319. package/src/templates/mobile/ui-auth-payments-ai-rag/template/jest-setup.ts +0 -37
  320. package/src/templates/mobile/ui-auth-payments-ai-rag/template/lib/rag/config.ts +0 -180
  321. package/src/templates/mobile/ui-auth-payments-ai-rag/template/metro.config.js +0 -11
  322. package/src/templates/mobile/ui-auth-payments-ai-rag/template/package.json +0 -122
  323. package/src/templates/mobile/ui-auth-payments-ai-rag/template/scripts/setup-rag.js +0 -599
  324. package/src/templates/mobile/ui-auth-payments-ai-rag/template/tsconfig.json +0 -32
  325. package/src/templates/web/base/template/.eslintrc.js +0 -8
  326. package/src/templates/web/base/template/src/components/__tests__/example.test.tsx +0 -49
  327. package/src/templates/web/base/template/src/test/setup.ts +0 -74
  328. package/src/templates/web/base/template/vitest.config.ts +0 -17
  329. package/src/templates/web/ui-auth/template/.eslintrc.js +0 -8
  330. package/src/templates/web/ui-auth/template/src/components/__tests__/example.test.tsx +0 -49
  331. package/src/templates/web/ui-auth/template/src/test/setup.ts +0 -74
  332. package/src/templates/web/ui-auth/template/vitest.config.ts +0 -17
  333. package/src/templates/web/ui-auth-payments/template/src/components/__tests__/example.test.tsx +0 -49
  334. package/src/templates/web/ui-auth-payments/template/src/test/setup.ts +0 -74
  335. package/src/templates/web/ui-auth-payments/template/vitest.config.ts +0 -17
  336. package/src/templates/web/ui-auth-payments-ai/template/src/components/__tests__/example.test.tsx +0 -49
  337. package/src/templates/web/ui-auth-payments-ai/template/src/test/setup.ts +0 -74
  338. package/src/templates/web/ui-auth-payments-ai/template/vitest.config.ts +0 -17
  339. package/src/templates/web/ui-auth-payments-ai-rag/template/README.md +0 -434
  340. package/src/templates/web/ui-auth-payments-ai-rag/template/components/rag/KnowledgeManager.tsx +0 -642
  341. package/src/templates/web/ui-auth-payments-ai-rag/template/components/rag/RAGAnalytics.tsx +0 -466
  342. package/src/templates/web/ui-auth-payments-ai-rag/template/components/rag/RAGChatInterface.tsx +0 -393
  343. package/src/templates/web/ui-auth-payments-ai-rag/template/docs/GETTING-STARTED.md +0 -457
  344. package/src/templates/web/ui-auth-payments-ai-rag/template/hooks/useRAGSystem.ts +0 -478
  345. package/src/templates/web/ui-auth-payments-ai-rag/template/lib/rag/config.ts +0 -250
  346. package/src/templates/web/ui-auth-payments-ai-rag/template/package.json +0 -73
  347. package/src/templates/web/ui-auth-payments-ai-rag/template/scripts/setup-rag.js +0 -622
  348. package/src/templates/web/ui-auth-payments-ai-rag/template/src/app/ai/page.tsx +0 -396
  349. package/src/templates/web/ui-auth-payments-audio/template/src/components/__tests__/example.test.tsx +0 -49
  350. package/src/templates/web/ui-auth-payments-audio/template/src/test/setup.ts +0 -74
  351. package/src/templates/web/ui-auth-payments-audio/template/vitest.config.ts +0 -17
  352. package/src/templates/web/ui-auth-payments-video/template/src/components/__tests__/example.test.tsx +0 -49
  353. package/src/templates/web/ui-auth-payments-video/template/src/test/setup.ts +0 -74
  354. package/src/templates/web/ui-auth-payments-video/template/vitest.config.ts +0 -17
  355. package/src/templates/web/ui-only/template/.eslintrc.js +0 -8
  356. package/src/templates/web/ui-only/template/src/components/__tests__/example.test.tsx +0 -49
  357. package/src/templates/web/ui-only/template/src/test/setup.ts +0 -74
  358. package/src/templates/web/ui-only/template/vitest.config.ts +0 -17
@@ -1,329 +1,145 @@
1
- 'use client';
2
-
3
- import React, { useState } from 'react';
4
- import { useAuth } from '@digilogiclabs/app-sdk';
5
- import { Button } from '@/components/ui/button';
6
- import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card';
7
- import {
8
- PageTransition,
9
- MobileContainer,
10
- ResponsiveGrid,
11
- PullToRefresh,
12
- LazyImage,
13
- VirtualScrollList,
14
- SwipeableCard,
15
- NetworkAwareContent,
16
- OfflineWrapper,
17
- useNetworkInfo,
18
- useOfflineState,
19
- DashboardLayout
20
- } from '@digilogiclabs/saas-factory-ui';
21
- import {
22
- BarChart3,
23
- Users,
24
- DollarSign,
25
- TrendingUp,
26
- Settings,
27
- Archive,
28
- Star,
29
- Trash2,
30
- Wifi,
31
- WifiOff
32
- } from 'lucide-react';
33
-
34
- // Mock data for demonstration
35
- const mockActivityData = Array.from({ length: 50 }, (_, i) => ({
36
- id: i + 1,
37
- title: `Activity ${i + 1}`,
38
- description: `This is a sample activity item #${i + 1}`,
39
- timestamp: new Date(Date.now() - Math.random() * 7 * 24 * 60 * 60 * 1000).toISOString(),
40
- type: ['user', 'sale', 'system'][Math.floor(Math.random() * 3)],
41
- avatar: `https://api.dicebear.com/7.x/avataaars/svg?seed=${i}`
42
- }));
43
-
44
- export default function DashboardPage() {
45
- const { user } = useAuth();
46
-
47
- const lazyImageConfig = {
48
- mobileOptimization: {
49
- quality: 80,
50
- format: "webp"
51
- }
52
- };
53
- const networkInfo = useNetworkInfo();
54
- const isOnline = useOfflineState();
55
- const [activityData, setActivityData] = useState(mockActivityData);
56
- const [isRefreshing, setIsRefreshing] = useState(false);
57
-
58
- const handleRefresh = async () => {
59
- setIsRefreshing(true);
60
- // Simulate API call
61
- await new Promise(resolve => setTimeout(resolve, 1500));
62
- setIsRefreshing(false);
63
- };
64
-
65
- const handleArchive = (id: number) => {
66
- setActivityData(prev => prev.filter(item => item.id !== id));
67
- };
68
-
69
- const handleStar = (id: number) => {
70
- console.log('Starred item:', id);
71
- };
72
-
73
- const handleDelete = (id: number) => {
74
- setActivityData(prev => prev.filter(item => item.id !== id));
75
- };
76
-
77
- const stats = [
78
- {
79
- title: 'Total Users',
80
- value: '2,543',
81
- change: '+12%',
82
- icon: Users,
83
- color: 'blue'
84
- },
85
- {
86
- title: 'Revenue',
87
- value: '$12,456',
88
- change: '+8%',
89
- icon: DollarSign,
90
- color: 'green'
91
- },
92
- {
93
- title: 'Growth',
94
- value: '23.5%',
95
- change: '+2.1%',
96
- icon: TrendingUp,
97
- color: 'purple'
98
- },
99
- {
100
- title: 'Analytics',
101
- value: '1,234',
102
- change: '+5%',
103
- icon: BarChart3,
104
- color: 'orange'
105
- }
106
- ];
107
- const gridConfig = {
108
- columns_1_2: { base: 1, md: 2 },
109
- columns_1_3: { base: 1, md: 3 },
110
- columns_1_sm2: { base: 1, sm: 2 },
111
- columns_1_sm2_md3: { base: 1, sm: 2, md: 3 },
112
- columns_1_sm2_md4: { base: 1, sm: 2, md: 4 },
113
- columns_2_2: { base: 2, md: 2 },
114
- columns_2_md3: { base: 2, md: 3 },
115
- columns_2_md4: { base: 2, md: 4 }
116
- };
117
-
118
-
119
- return (
120
- <DashboardLayout>
121
- <PageTransition type="slide" direction="horizontal" duration={300}>
122
- <OfflineWrapper
123
- cacheStrategy="stale-while-revalidate"
124
- showOfflineIndicator={true}
125
- backgroundSync={true}
126
- >
127
- <PullToRefresh
128
- onRefresh={handleRefresh}
129
- threshold={80}
130
- loadingIndicator="spinner"
131
- hapticOnTrigger={true}
132
- networkAware={true}
133
- >
134
- <div className="min-h-screen bg-gray-50">
135
- <MobileContainer className="py-6">
136
- {/* Header */}
137
- <div className="mb-6" data-tour="overview">
138
- <div className="flex items-center justify-between">
139
- <div>
140
- <h1 className="text-2xl font-bold text-gray-900">
141
- Welcome back, {user?.email?.split('@')[0]}
142
- </h1>
143
- <p className="text-gray-600 flex items-center gap-2">
144
- {isOnline ? (
145
- <>
146
- <Wifi className="h-4 w-4 text-green-600" />
147
- <span>Online</span>
148
- </>
149
- ) : (
150
- <>
151
- <WifiOff className="h-4 w-4 text-red-600" />
152
- <span>Offline</span>
153
- </>
154
- )}
155
- {networkInfo?.effectiveType && (
156
- <span className="text-xs bg-gray-200 px-2 py-1 rounded">
157
- {networkInfo.effectiveType.toUpperCase()}
158
- </span>
159
- )}
160
- </p>
161
- </div>
162
- <Button variant="outline" size="icon">
163
- <Settings className="h-4 w-4" />
164
- </Button>
165
- </div>
166
- </div>
167
-
168
- {/* Stats Grid */}
169
- <div data-tour="stats">
170
- <NetworkAwareContent
171
- showOnSlow={
172
- <ResponsiveGrid columns={gridConfig.columns_2_2} gap={2} className="mb-6">
173
- {stats.slice(0, 2).map((stat, index) => (
174
- <Card key={index}>
175
- <CardContent className="p-4">
176
- <div className="flex items-center gap-2">
177
- <stat.icon className={`h-5 w-5 text-${stat.color}-600`} />
178
- <div>
179
- <p className="text-sm font-medium text-gray-600">{stat.title}</p>
180
- <p className="text-lg font-bold">{stat.value}</p>
181
- </div>
182
- </div>
183
- </CardContent>
184
- </Card>
185
- ))}
186
- </ResponsiveGrid>
187
- }
188
- >
189
- <ResponsiveGrid columns={gridConfig.columns_2_md4} gap={4} className="mb-6">
190
- {stats.map((stat, index) => (
191
- <Card key={index}>
192
- <CardContent className="p-4">
193
- <div className="flex items-center justify-between mb-2">
194
- <stat.icon className={`h-5 w-5 text-${stat.color}-600`} />
195
- <span className="text-sm text-green-600 font-medium">
196
- {stat.change}
197
- </span>
198
- </div>
199
- <div>
200
- <p className="text-sm font-medium text-gray-600">{stat.title}</p>
201
- <p className="text-2xl font-bold">{stat.value}</p>
202
- </div>
203
- </CardContent>
204
- </Card>
205
- ))}
206
- </ResponsiveGrid>
207
- </NetworkAwareContent>
208
- </div>
209
-
210
- {/* Activity Feed */}
211
- <Card className="mb-6" data-tour="activity">
212
- <CardHeader>
213
- <CardTitle className="flex items-center gap-2">
214
- <BarChart3 className="h-5 w-5" />
215
- Recent Activity
216
- </CardTitle>
217
- <CardDescription>
218
- Swipe left on items to archive or star them
219
- </CardDescription>
220
- </CardHeader>
221
- <CardContent className="p-0">
222
- <VirtualScrollList
223
- items={activityData}
224
- itemHeight={80}
225
- containerHeight={400}
226
- bufferSize={5}
227
- renderItem={(item) => (
228
- <SwipeableCard
229
- key={item.id}
230
- leftActions={[
231
- {
232
- id: 'archive',
233
- label: 'Archive',
234
- onAction: () => handleArchive(item.id),
235
- color: 'blue',
236
- icon: Archive
237
- },
238
- {
239
- id: 'star',
240
- label: 'Star',
241
- onAction: () => handleStar(item.id),
242
- color: 'yellow',
243
- icon: Star
244
- }
245
- ]}
246
- rightActions={[
247
- {
248
- id: 'delete',
249
- label: 'Delete',
250
- onAction: () => handleDelete(item.id),
251
- color: 'red',
252
- icon: Trash2
253
- }
254
- ]}
255
- threshold={50}
256
- hapticFeedback={true}
257
- showActionLabels={true}
258
- >
259
- <div className="flex items-center gap-3 p-4 border-b">
260
- <LazyImage
261
- src={item.avatar}
262
- alt={`Activity ${item.id}`}
263
- className="w-10 h-10 rounded-full"
264
- placeholder="skeleton"
265
- webpSupport={true}
266
- mobileOptimization={lazyImageConfig.mobileOptimization}
267
- />
268
- <div className="flex-1 min-w-0">
269
- <h4 className="font-medium text-gray-900 truncate">
270
- {item.title}
271
- </h4>
272
- <p className="text-sm text-gray-600 truncate">
273
- {item.description}
274
- </p>
275
- <p className="text-xs text-gray-400">
276
- {new Date(item.timestamp).toLocaleDateString()}
277
- </p>
278
- </div>
279
- <div className={`px-2 py-1 rounded-full text-xs ${
280
- item.type === 'user' ? 'bg-blue-100 text-blue-800' :
281
- item.type === 'sale' ? 'bg-green-100 text-green-800' :
282
- 'bg-gray-100 text-gray-800'
283
- }`}>
284
- {item.type}
285
- </div>
286
- </div>
287
- </SwipeableCard>
288
- )}
289
- onEndReached={() => {
290
- console.log('Loading more items...');
291
- }}
292
- mobileOptimized={true}
293
- />
294
- </CardContent>
295
- </Card>
296
-
297
- {/* Quick Actions */}
298
- <Card>
299
- <CardHeader>
300
- <CardTitle>Quick Actions</CardTitle>
301
- <CardDescription>
302
- Common tasks and shortcuts
303
- </CardDescription>
304
- </CardHeader>
305
- <CardContent>
306
- <ResponsiveGrid columns={gridConfig.columns_2_md3} gap={2}>
307
- <Button variant="outline" className="h-20 flex flex-col gap-2">
308
- <Users className="h-5 w-5" />
309
- <span className="text-xs">Manage Users</span>
310
- </Button>
311
- <Button variant="outline" className="h-20 flex flex-col gap-2">
312
- <DollarSign className="h-5 w-5" />
313
- <span className="text-xs">View Revenue</span>
314
- </Button>
315
- <Button variant="outline" className="h-20 flex flex-col gap-2">
316
- <BarChart3 className="h-5 w-5" />
317
- <span className="text-xs">Analytics</span>
318
- </Button>
319
- </ResponsiveGrid>
320
- </CardContent>
321
- </Card>
322
- </MobileContainer>
323
- </div>
324
- </PullToRefresh>
325
- </OfflineWrapper>
326
- </PageTransition>
327
- </DashboardLayout>
328
- );
329
- }
1
+ 'use client';
2
+
3
+ import { Button } from '@/components/ui/button';
4
+ import { LayoutDashboard, Users, CreditCard, Settings, ArrowUpRight, Activity, LogIn } from 'lucide-react';
5
+ import Link from 'next/link';
6
+ import { useMockAuth } from '@/components/mock-auth-provider';
7
+ import {
8
+ MOCK_MODE,
9
+ MOCK_STATS,
10
+ MOCK_RECENT_ACTIVITY,
11
+ } from '@/lib/mock';
12
+
13
+ // TODO: [REAL_DATA] Replace with your actual data fetching
14
+ // Example: const stats = await fetchDashboardStats()
15
+ // Example: const activity = await fetchRecentActivity()
16
+ const stats = [
17
+ { label: 'Total Users', value: MOCK_STATS.totalUsers.toLocaleString(), change: `+${MOCK_STATS.growth}%`, icon: Users },
18
+ { label: 'Revenue', value: `$${MOCK_STATS.revenue.toLocaleString()}`, change: `+${MOCK_STATS.growth}%`, icon: CreditCard },
19
+ { label: 'Active Now', value: MOCK_STATS.activeUsers.toLocaleString(), change: `+${MOCK_STATS.newSignups}`, icon: LayoutDashboard },
20
+ ];
21
+
22
+ export default function DashboardPage() {
23
+ const { user, isAuthenticated } = useMockAuth();
24
+
25
+ if (!isAuthenticated) {
26
+ return (
27
+ <div className="flex flex-col items-center justify-center min-h-[60vh] text-center px-4">
28
+ <LogIn className="h-12 w-12 text-muted-foreground mb-4" />
29
+ <h1 className="text-2xl font-bold text-foreground mb-2">Sign in required</h1>
30
+ <p className="text-muted-foreground mb-6">You need to be signed in to view the dashboard.</p>
31
+ <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">
32
+ Sign In
33
+ </Link>
34
+ </div>
35
+ );
36
+ }
37
+
38
+ return (
39
+ <div className="mx-auto max-w-6xl px-4 py-8">
40
+ <div className="mb-8 flex items-center justify-between">
41
+ <div>
42
+ <h1 className="text-3xl font-bold text-foreground">Dashboard</h1>
43
+ <p className="text-muted-foreground mt-1">
44
+ Welcome back, {user?.name ?? 'User'}.
45
+ </p>
46
+ </div>
47
+ {MOCK_MODE && (
48
+ <span className="rounded-full bg-primary/10 px-3 py-1 text-xs font-medium text-primary">
49
+ Mock Data
50
+ </span>
51
+ )}
52
+ </div>
53
+
54
+ {/* Stats */}
55
+ {/* TODO: [REAL_DATA] Fetch stats from your API/database */}
56
+ <div className="grid gap-4 md:grid-cols-3 mb-8">
57
+ {stats.map((stat) => (
58
+ <div
59
+ key={stat.label}
60
+ className="rounded-xl border border-border bg-card p-6"
61
+ >
62
+ <div className="flex items-center justify-between mb-2">
63
+ <span className="text-sm text-muted-foreground">{stat.label}</span>
64
+ <stat.icon className="h-4 w-4 text-muted-foreground" />
65
+ </div>
66
+ <div className="text-2xl font-bold text-card-foreground">{stat.value}</div>
67
+ <p className="text-xs text-primary mt-1">{stat.change} from last month</p>
68
+ </div>
69
+ ))}
70
+ </div>
71
+
72
+ <div className="grid gap-6 lg:grid-cols-2 mb-8">
73
+ {/* Recent Activity */}
74
+ {/* TODO: [REAL_DATA] Fetch activity feed from your API/database */}
75
+ <div className="rounded-xl border border-border bg-card p-6">
76
+ <h2 className="text-lg font-semibold text-card-foreground mb-4 flex items-center gap-2">
77
+ <Activity className="h-5 w-5" />
78
+ Recent Activity
79
+ </h2>
80
+ <div className="space-y-3">
81
+ {MOCK_RECENT_ACTIVITY.map((item) => (
82
+ <div key={item.id} className="flex items-center justify-between py-2 border-b border-border last:border-0">
83
+ <div>
84
+ <p className="text-sm font-medium text-foreground">{item.action}</p>
85
+ <p className="text-xs text-muted-foreground">{item.user}</p>
86
+ </div>
87
+ <span className="text-xs text-muted-foreground">{item.timestamp}</span>
88
+ </div>
89
+ ))}
90
+ </div>
91
+ </div>
92
+
93
+ {/* Quick Actions */}
94
+ <div className="rounded-xl border border-border bg-card p-6">
95
+ <h2 className="text-lg font-semibold text-card-foreground mb-4">Quick Actions</h2>
96
+ <div className="grid gap-3 sm:grid-cols-2">
97
+ <Button variant="outline" className="justify-start" asChild>
98
+ <Link href="/settings">
99
+ <Settings className="mr-2 h-4 w-4" />
100
+ Settings
101
+ </Link>
102
+ </Button>
103
+ <Button variant="outline" className="justify-start" asChild>
104
+ <Link href="/checkout">
105
+ <CreditCard className="mr-2 h-4 w-4" />
106
+ Upgrade Plan
107
+ </Link>
108
+ </Button>
109
+ <Button variant="outline" className="justify-start" asChild>
110
+ <Link href="/dashboard">
111
+ <Users className="mr-2 h-4 w-4" />
112
+ Team Members
113
+ </Link>
114
+ </Button>
115
+ <Button variant="outline" className="justify-start" asChild>
116
+ <Link href="https://docs.digilogiclabs.com" target="_blank">
117
+ <ArrowUpRight className="mr-2 h-4 w-4" />
118
+ Documentation
119
+ </Link>
120
+ </Button>
121
+ </div>
122
+ </div>
123
+ </div>
124
+
125
+ {/* Getting Started */}
126
+ <div className="rounded-xl border border-border bg-card p-6">
127
+ <h2 className="text-lg font-semibold text-card-foreground mb-4">Getting Started</h2>
128
+ <ol className="space-y-3 text-sm text-muted-foreground">
129
+ <li className="flex gap-3">
130
+ <span className="flex h-6 w-6 shrink-0 items-center justify-center rounded-full bg-primary text-xs font-medium text-primary-foreground">1</span>
131
+ <span>Set <code className="text-primary">NEXT_PUBLIC_MOCK_MODE=false</code> in <code className="text-primary">.env.local</code></span>
132
+ </li>
133
+ <li className="flex gap-3">
134
+ <span className="flex h-6 w-6 shrink-0 items-center justify-center rounded-full bg-primary text-xs font-medium text-primary-foreground">2</span>
135
+ <span>Configure your auth and database provider (see <code className="text-primary">.env.example</code>)</span>
136
+ </li>
137
+ <li className="flex gap-3">
138
+ <span className="flex h-6 w-6 shrink-0 items-center justify-center rounded-full bg-primary text-xs font-medium text-primary-foreground">3</span>
139
+ <span>Search for <code className="text-primary">TODO: [REAL_DATA]</code> to find all mock→real integration points</span>
140
+ </li>
141
+ </ol>
142
+ </div>
143
+ </div>
144
+ );
145
+ }
@@ -1,38 +1,40 @@
1
- import type { Metadata } from 'next'
2
- import { Inter } from 'next/font/google'
3
- import './globals.css'
4
- import { AppProviders } from '@/components/providers/app-providers'
5
- import { Header } from '@/components/shared/header'
6
- import { Footer } from '@/components/shared/footer'
7
-
8
- const inter = Inter({ subsets: ['latin'] })
9
-
10
- export const metadata: Metadata = {
11
- title: '{{titleCaseName}}',
12
- description: '{{description}}',
13
- }
14
-
15
- export default function RootLayout({
16
- children,
17
- }: {
18
- children: React.ReactNode
19
- }) {
20
- return (
21
- <html lang="en" suppressHydrationWarning>
22
- <body className={inter.className}>
23
- <AppProviders>
24
- <div className="min-h-screen flex flex-col">
25
- <a href="#main-content" className="sr-only focus:not-sr-only focus:absolute focus:top-4 focus:left-4 focus:z-[90] focus:px-4 focus:py-2 focus:bg-primary focus:text-primary-foreground focus:rounded-lg focus:outline-none">
26
- Skip to content
27
- </a>
28
- <Header />
29
- <main id="main-content" className="flex-1">
30
- {children}
31
- </main>
32
- <Footer />
33
- </div>
34
- </AppProviders>
35
- </body>
36
- </html>
37
- )
38
- }
1
+ import type { Metadata } from 'next'
2
+ import { Inter } from 'next/font/google'
3
+ import './globals.css'
4
+ import { AppProviders } from '@/components/providers/app-providers'
5
+ import { Header } from '@/components/shared/header'
6
+ import { Footer } from '@/components/shared/footer'
7
+ import { MockBanner } from '@/components/mock-banner'
8
+
9
+ const inter = Inter({ subsets: ['latin'] })
10
+
11
+ export const metadata: Metadata = {
12
+ title: '{{titleCaseName}}',
13
+ description: '{{description}}',
14
+ }
15
+
16
+ export default function RootLayout({
17
+ children,
18
+ }: {
19
+ children: React.ReactNode
20
+ }) {
21
+ return (
22
+ <html lang="en" suppressHydrationWarning>
23
+ <body className={inter.className}>
24
+ <AppProviders>
25
+ <MockBanner />
26
+ <div className="min-h-screen flex flex-col">
27
+ <a href="#main-content" className="sr-only focus:not-sr-only focus:absolute focus:top-4 focus:left-4 focus:z-[90] focus:px-4 focus:py-2 focus:bg-primary focus:text-primary-foreground focus:rounded-lg focus:outline-none">
28
+ Skip to content
29
+ </a>
30
+ <Header />
31
+ <main id="main-content" className="flex-1">
32
+ {children}
33
+ </main>
34
+ <Footer />
35
+ </div>
36
+ </AppProviders>
37
+ </body>
38
+ </html>
39
+ )
40
+ }