@digilogiclabs/create-saas-app 2.9.1 → 2.10.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 (323) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/generators/template-generator.d.ts.map +1 -1
  3. package/dist/generators/template-generator.js +6 -3
  4. package/dist/generators/template-generator.js.map +1 -1
  5. package/dist/templates/shared/auth/supabase/web/src/middleware.ts +63 -0
  6. package/dist/templates/shared/database/supabase/web/src/lib/supabase/server.ts +3 -1
  7. package/dist/templates/shared/design/web/src/config/design.config.ts +14 -14
  8. package/dist/templates/shared/landing/web/src/components/LandingPage.tsx +0 -3
  9. package/dist/templates/shared/security/web/src/lib/api-security.ts +2 -2
  10. package/dist/templates/web/ai-platform/template/next.config.js +14 -14
  11. package/dist/templates/web/ai-platform/template/package.json +11 -22
  12. package/dist/templates/web/ai-platform/template/postcss.config.mjs +8 -0
  13. package/dist/templates/web/ai-platform/template/src/app/chat/page.tsx +234 -235
  14. package/dist/templates/web/ai-platform/template/src/app/dashboard/page.tsx +142 -142
  15. package/dist/templates/web/ai-platform/template/src/app/error.tsx +13 -13
  16. package/dist/templates/web/ai-platform/template/src/app/globals.css +97 -34
  17. package/dist/templates/web/ai-platform/template/src/app/layout.tsx +3 -0
  18. package/dist/templates/web/ai-platform/template/src/app/loading.tsx +22 -22
  19. package/dist/templates/web/ai-platform/template/src/app/page.tsx +248 -154
  20. package/dist/templates/web/ai-platform/template/src/lib/auth-server.ts +32 -33
  21. package/dist/templates/web/base/template/next.config.js +14 -15
  22. package/dist/templates/web/base/template/package.json +16 -31
  23. package/dist/templates/web/base/template/postcss.config.mjs +8 -0
  24. package/dist/templates/web/base/template/src/app/error.tsx +97 -97
  25. package/dist/templates/web/base/template/src/app/globals.css +87 -148
  26. package/dist/templates/web/base/template/src/app/layout.tsx +4 -1
  27. package/dist/templates/web/base/template/src/app/loading.tsx +52 -52
  28. package/dist/templates/web/base/template/tsconfig.json +27 -33
  29. package/dist/templates/web/iot-dashboard/template/next.config.js +14 -14
  30. package/dist/templates/web/iot-dashboard/template/package.json +12 -16
  31. package/dist/templates/web/iot-dashboard/template/postcss.config.mjs +8 -0
  32. package/dist/templates/web/iot-dashboard/template/src/app/dashboard/page.tsx +224 -224
  33. package/dist/templates/web/iot-dashboard/template/src/app/error.tsx +8 -8
  34. package/dist/templates/web/iot-dashboard/template/src/app/globals.css +97 -20
  35. package/dist/templates/web/iot-dashboard/template/src/app/layout.tsx +3 -0
  36. package/dist/templates/web/iot-dashboard/template/src/app/loading.tsx +5 -5
  37. package/dist/templates/web/iot-dashboard/template/src/app/page.tsx +266 -189
  38. package/dist/templates/web/iot-dashboard/template/src/lib/auth-server.ts +32 -33
  39. package/dist/templates/web/marketplace/template/next.config.js +14 -14
  40. package/dist/templates/web/marketplace/template/package.json +11 -18
  41. package/dist/templates/web/marketplace/template/postcss.config.mjs +8 -0
  42. package/dist/templates/web/marketplace/template/src/app/cart/page.tsx +147 -147
  43. package/dist/templates/web/marketplace/template/src/app/dashboard/page.tsx +149 -149
  44. package/dist/templates/web/marketplace/template/src/app/error.tsx +7 -7
  45. package/dist/templates/web/marketplace/template/src/app/globals.css +97 -20
  46. package/dist/templates/web/marketplace/template/src/app/layout.tsx +3 -0
  47. package/dist/templates/web/marketplace/template/src/app/loading.tsx +5 -5
  48. package/dist/templates/web/marketplace/template/src/app/page.tsx +370 -169
  49. package/dist/templates/web/marketplace/template/src/app/products/page.tsx +129 -129
  50. package/dist/templates/web/marketplace/template/src/lib/auth-server.ts +32 -33
  51. package/dist/templates/web/micro-saas/template/next.config.js +14 -14
  52. package/dist/templates/web/micro-saas/template/package.json +9 -8
  53. package/dist/templates/web/micro-saas/template/postcss.config.mjs +8 -0
  54. package/dist/templates/web/micro-saas/template/src/app/dashboard/page.tsx +145 -117
  55. package/dist/templates/web/micro-saas/template/src/app/error.tsx +7 -7
  56. package/dist/templates/web/micro-saas/template/src/app/globals.css +97 -20
  57. package/dist/templates/web/micro-saas/template/src/app/layout.tsx +3 -0
  58. package/dist/templates/web/micro-saas/template/src/app/loading.tsx +43 -27
  59. package/dist/templates/web/micro-saas/template/src/app/login/page.tsx +101 -87
  60. package/dist/templates/web/micro-saas/template/src/app/page.tsx +227 -137
  61. package/dist/templates/web/micro-saas/template/src/app/signup/page.tsx +122 -108
  62. package/dist/templates/web/micro-saas/template/src/lib/auth-server.ts +32 -33
  63. package/dist/templates/web/ui-auth/template/next.config.js +14 -12
  64. package/dist/templates/web/ui-auth/template/package.json +16 -26
  65. package/dist/templates/web/ui-auth/template/postcss.config.mjs +8 -0
  66. package/dist/templates/web/ui-auth/template/src/app/error.tsx +67 -67
  67. package/dist/templates/web/ui-auth/template/src/app/globals.css +85 -84
  68. package/dist/templates/web/ui-auth/template/src/app/layout.tsx +4 -1
  69. package/dist/templates/web/ui-auth/template/src/app/loading.tsx +20 -38
  70. package/dist/templates/web/ui-auth/template/tsconfig.json +27 -33
  71. package/dist/templates/web/ui-auth-ai/template/next.config.js +15 -13
  72. package/dist/templates/web/ui-auth-ai/template/package.json +25 -21
  73. package/dist/templates/web/ui-auth-ai/template/postcss.config.mjs +8 -0
  74. package/dist/templates/web/ui-auth-ai/template/src/app/error.tsx +7 -7
  75. package/dist/templates/web/ui-auth-ai/template/src/app/globals.css +87 -25
  76. package/dist/templates/web/ui-auth-ai/template/src/app/layout.tsx +3 -0
  77. package/dist/templates/web/ui-auth-ai/template/src/app/loading.tsx +4 -4
  78. package/dist/templates/web/ui-auth-ai/template/tsconfig.json +27 -28
  79. package/dist/templates/web/ui-auth-payments/template/next.config.js +14 -12
  80. package/dist/templates/web/ui-auth-payments/template/package.json +16 -29
  81. package/dist/templates/web/ui-auth-payments/template/postcss.config.mjs +8 -0
  82. package/dist/templates/web/ui-auth-payments/template/src/app/error.tsx +67 -67
  83. package/dist/templates/web/ui-auth-payments/template/src/app/globals.css +89 -204
  84. package/dist/templates/web/ui-auth-payments/template/src/app/layout.tsx +4 -1
  85. package/dist/templates/web/ui-auth-payments/template/src/app/loading.tsx +20 -20
  86. package/dist/templates/web/ui-auth-payments/template/tsconfig.json +27 -33
  87. package/dist/templates/web/ui-auth-payments-ai/template/next.config.js +14 -12
  88. package/dist/templates/web/ui-auth-payments-ai/template/package.json +17 -33
  89. package/dist/templates/web/ui-auth-payments-ai/template/postcss.config.mjs +8 -0
  90. package/dist/templates/web/ui-auth-payments-ai/template/src/app/error.tsx +67 -67
  91. package/dist/templates/web/ui-auth-payments-ai/template/src/app/globals.css +85 -85
  92. package/dist/templates/web/ui-auth-payments-ai/template/src/app/layout.tsx +4 -1
  93. package/dist/templates/web/ui-auth-payments-ai/template/src/app/loading.tsx +20 -20
  94. package/dist/templates/web/ui-auth-payments-ai/template/tsconfig.json +27 -33
  95. package/dist/templates/web/ui-auth-payments-audio/template/next.config.js +14 -12
  96. package/dist/templates/web/ui-auth-payments-audio/template/package.json +17 -30
  97. package/dist/templates/web/ui-auth-payments-audio/template/postcss.config.mjs +8 -0
  98. package/dist/templates/web/ui-auth-payments-audio/template/src/app/error.tsx +67 -67
  99. package/dist/templates/web/ui-auth-payments-audio/template/src/app/globals.css +85 -85
  100. package/dist/templates/web/ui-auth-payments-audio/template/src/app/layout.tsx +4 -1
  101. package/dist/templates/web/ui-auth-payments-audio/template/src/app/loading.tsx +20 -20
  102. package/dist/templates/web/ui-auth-payments-audio/template/tsconfig.json +27 -33
  103. package/dist/templates/web/ui-auth-payments-video/template/next.config.js +14 -12
  104. package/dist/templates/web/ui-auth-payments-video/template/package.json +17 -30
  105. package/dist/templates/web/ui-auth-payments-video/template/postcss.config.mjs +8 -0
  106. package/dist/templates/web/ui-auth-payments-video/template/src/app/error.tsx +67 -67
  107. package/dist/templates/web/ui-auth-payments-video/template/src/app/globals.css +89 -221
  108. package/dist/templates/web/ui-auth-payments-video/template/src/app/layout.tsx +4 -1
  109. package/dist/templates/web/ui-auth-payments-video/template/src/app/loading.tsx +20 -20
  110. package/dist/templates/web/ui-auth-payments-video/template/tsconfig.json +27 -33
  111. package/dist/templates/web/ui-only/template/next.config.js +14 -12
  112. package/dist/templates/web/ui-only/template/package.json +15 -25
  113. package/dist/templates/web/ui-only/template/postcss.config.mjs +8 -0
  114. package/dist/templates/web/ui-only/template/src/app/error.tsx +67 -67
  115. package/dist/templates/web/ui-only/template/src/app/globals.css +85 -31
  116. package/dist/templates/web/ui-only/template/src/app/layout.tsx +4 -1
  117. package/dist/templates/web/ui-only/template/src/app/loading.tsx +20 -20
  118. package/dist/templates/web/ui-only/template/tsconfig.json +27 -33
  119. package/package.json +1 -1
  120. package/src/templates/shared/auth/supabase/web/src/middleware.ts +63 -0
  121. package/src/templates/shared/database/supabase/web/src/lib/supabase/server.ts +3 -1
  122. package/src/templates/shared/design/web/src/config/design.config.ts +14 -14
  123. package/src/templates/shared/landing/web/src/components/LandingPage.tsx +0 -3
  124. package/src/templates/shared/security/web/src/lib/api-security.ts +2 -2
  125. package/src/templates/web/ai-platform/template/next.config.js +14 -14
  126. package/src/templates/web/ai-platform/template/package.json +11 -22
  127. package/src/templates/web/ai-platform/template/postcss.config.mjs +8 -0
  128. package/src/templates/web/ai-platform/template/src/app/chat/page.tsx +234 -235
  129. package/src/templates/web/ai-platform/template/src/app/dashboard/page.tsx +142 -142
  130. package/src/templates/web/ai-platform/template/src/app/error.tsx +13 -13
  131. package/src/templates/web/ai-platform/template/src/app/globals.css +97 -34
  132. package/src/templates/web/ai-platform/template/src/app/layout.tsx +3 -0
  133. package/src/templates/web/ai-platform/template/src/app/loading.tsx +22 -22
  134. package/src/templates/web/ai-platform/template/src/app/page.tsx +248 -154
  135. package/src/templates/web/ai-platform/template/src/lib/auth-server.ts +32 -33
  136. package/src/templates/web/base/template/next.config.js +14 -15
  137. package/src/templates/web/base/template/package.json +16 -31
  138. package/src/templates/web/base/template/postcss.config.mjs +8 -0
  139. package/src/templates/web/base/template/src/app/error.tsx +97 -97
  140. package/src/templates/web/base/template/src/app/globals.css +87 -148
  141. package/src/templates/web/base/template/src/app/layout.tsx +4 -1
  142. package/src/templates/web/base/template/src/app/loading.tsx +52 -52
  143. package/src/templates/web/base/template/tsconfig.json +27 -33
  144. package/src/templates/web/iot-dashboard/template/next.config.js +14 -14
  145. package/src/templates/web/iot-dashboard/template/package.json +12 -16
  146. package/src/templates/web/iot-dashboard/template/postcss.config.mjs +8 -0
  147. package/src/templates/web/iot-dashboard/template/src/app/dashboard/page.tsx +224 -224
  148. package/src/templates/web/iot-dashboard/template/src/app/error.tsx +8 -8
  149. package/src/templates/web/iot-dashboard/template/src/app/globals.css +97 -20
  150. package/src/templates/web/iot-dashboard/template/src/app/layout.tsx +3 -0
  151. package/src/templates/web/iot-dashboard/template/src/app/loading.tsx +5 -5
  152. package/src/templates/web/iot-dashboard/template/src/app/page.tsx +266 -189
  153. package/src/templates/web/iot-dashboard/template/src/lib/auth-server.ts +32 -33
  154. package/src/templates/web/marketplace/template/next.config.js +14 -14
  155. package/src/templates/web/marketplace/template/package.json +11 -18
  156. package/src/templates/web/marketplace/template/postcss.config.mjs +8 -0
  157. package/src/templates/web/marketplace/template/src/app/cart/page.tsx +147 -147
  158. package/src/templates/web/marketplace/template/src/app/dashboard/page.tsx +149 -149
  159. package/src/templates/web/marketplace/template/src/app/error.tsx +7 -7
  160. package/src/templates/web/marketplace/template/src/app/globals.css +97 -20
  161. package/src/templates/web/marketplace/template/src/app/layout.tsx +3 -0
  162. package/src/templates/web/marketplace/template/src/app/loading.tsx +5 -5
  163. package/src/templates/web/marketplace/template/src/app/page.tsx +370 -169
  164. package/src/templates/web/marketplace/template/src/app/products/page.tsx +129 -129
  165. package/src/templates/web/marketplace/template/src/lib/auth-server.ts +32 -33
  166. package/src/templates/web/micro-saas/template/next.config.js +14 -14
  167. package/src/templates/web/micro-saas/template/package.json +9 -8
  168. package/src/templates/web/micro-saas/template/postcss.config.mjs +8 -0
  169. package/src/templates/web/micro-saas/template/src/app/dashboard/page.tsx +145 -117
  170. package/src/templates/web/micro-saas/template/src/app/error.tsx +7 -7
  171. package/src/templates/web/micro-saas/template/src/app/globals.css +97 -20
  172. package/src/templates/web/micro-saas/template/src/app/layout.tsx +3 -0
  173. package/src/templates/web/micro-saas/template/src/app/loading.tsx +43 -27
  174. package/src/templates/web/micro-saas/template/src/app/login/page.tsx +101 -87
  175. package/src/templates/web/micro-saas/template/src/app/page.tsx +227 -137
  176. package/src/templates/web/micro-saas/template/src/app/signup/page.tsx +122 -108
  177. package/src/templates/web/micro-saas/template/src/lib/auth-server.ts +32 -33
  178. package/src/templates/web/ui-auth/template/next.config.js +14 -12
  179. package/src/templates/web/ui-auth/template/package.json +16 -26
  180. package/src/templates/web/ui-auth/template/postcss.config.mjs +8 -0
  181. package/src/templates/web/ui-auth/template/src/app/error.tsx +67 -67
  182. package/src/templates/web/ui-auth/template/src/app/globals.css +85 -84
  183. package/src/templates/web/ui-auth/template/src/app/layout.tsx +4 -1
  184. package/src/templates/web/ui-auth/template/src/app/loading.tsx +20 -38
  185. package/src/templates/web/ui-auth/template/tsconfig.json +27 -33
  186. package/src/templates/web/ui-auth-ai/template/next.config.js +15 -13
  187. package/src/templates/web/ui-auth-ai/template/package.json +25 -21
  188. package/src/templates/web/ui-auth-ai/template/postcss.config.mjs +8 -0
  189. package/src/templates/web/ui-auth-ai/template/src/app/error.tsx +7 -7
  190. package/src/templates/web/ui-auth-ai/template/src/app/globals.css +87 -25
  191. package/src/templates/web/ui-auth-ai/template/src/app/layout.tsx +3 -0
  192. package/src/templates/web/ui-auth-ai/template/src/app/loading.tsx +4 -4
  193. package/src/templates/web/ui-auth-ai/template/tsconfig.json +27 -28
  194. package/src/templates/web/ui-auth-payments/template/next.config.js +14 -12
  195. package/src/templates/web/ui-auth-payments/template/package.json +16 -29
  196. package/src/templates/web/ui-auth-payments/template/postcss.config.mjs +8 -0
  197. package/src/templates/web/ui-auth-payments/template/src/app/error.tsx +67 -67
  198. package/src/templates/web/ui-auth-payments/template/src/app/globals.css +89 -204
  199. package/src/templates/web/ui-auth-payments/template/src/app/layout.tsx +4 -1
  200. package/src/templates/web/ui-auth-payments/template/src/app/loading.tsx +20 -20
  201. package/src/templates/web/ui-auth-payments/template/tsconfig.json +27 -33
  202. package/src/templates/web/ui-auth-payments-ai/template/next.config.js +14 -12
  203. package/src/templates/web/ui-auth-payments-ai/template/package.json +17 -33
  204. package/src/templates/web/ui-auth-payments-ai/template/postcss.config.mjs +8 -0
  205. package/src/templates/web/ui-auth-payments-ai/template/src/app/error.tsx +67 -67
  206. package/src/templates/web/ui-auth-payments-ai/template/src/app/globals.css +85 -85
  207. package/src/templates/web/ui-auth-payments-ai/template/src/app/layout.tsx +4 -1
  208. package/src/templates/web/ui-auth-payments-ai/template/src/app/loading.tsx +20 -20
  209. package/src/templates/web/ui-auth-payments-ai/template/tsconfig.json +27 -33
  210. package/src/templates/web/ui-auth-payments-audio/template/next.config.js +14 -12
  211. package/src/templates/web/ui-auth-payments-audio/template/package.json +17 -30
  212. package/src/templates/web/ui-auth-payments-audio/template/postcss.config.mjs +8 -0
  213. package/src/templates/web/ui-auth-payments-audio/template/src/app/error.tsx +67 -67
  214. package/src/templates/web/ui-auth-payments-audio/template/src/app/globals.css +85 -85
  215. package/src/templates/web/ui-auth-payments-audio/template/src/app/layout.tsx +4 -1
  216. package/src/templates/web/ui-auth-payments-audio/template/src/app/loading.tsx +20 -20
  217. package/src/templates/web/ui-auth-payments-audio/template/tsconfig.json +27 -33
  218. package/src/templates/web/ui-auth-payments-video/template/next.config.js +14 -12
  219. package/src/templates/web/ui-auth-payments-video/template/package.json +17 -30
  220. package/src/templates/web/ui-auth-payments-video/template/postcss.config.mjs +8 -0
  221. package/src/templates/web/ui-auth-payments-video/template/src/app/error.tsx +67 -67
  222. package/src/templates/web/ui-auth-payments-video/template/src/app/globals.css +89 -221
  223. package/src/templates/web/ui-auth-payments-video/template/src/app/layout.tsx +4 -1
  224. package/src/templates/web/ui-auth-payments-video/template/src/app/loading.tsx +20 -20
  225. package/src/templates/web/ui-auth-payments-video/template/tsconfig.json +27 -33
  226. package/src/templates/web/ui-only/template/next.config.js +14 -12
  227. package/src/templates/web/ui-only/template/package.json +15 -25
  228. package/src/templates/web/ui-only/template/postcss.config.mjs +8 -0
  229. package/src/templates/web/ui-only/template/src/app/error.tsx +67 -67
  230. package/src/templates/web/ui-only/template/src/app/globals.css +85 -31
  231. package/src/templates/web/ui-only/template/src/app/layout.tsx +4 -1
  232. package/src/templates/web/ui-only/template/src/app/loading.tsx +20 -20
  233. package/src/templates/web/ui-only/template/tsconfig.json +27 -33
  234. package/dist/templates/web/ai-platform/template/middleware.ts +0 -55
  235. package/dist/templates/web/ai-platform/template/src/lib/supabase/client.ts +0 -8
  236. package/dist/templates/web/ai-platform/template/src/lib/supabase/server.ts +0 -27
  237. package/dist/templates/web/base/template/postcss.config.js +0 -7
  238. package/dist/templates/web/base/template/tailwind.config.js +0 -77
  239. package/dist/templates/web/iot-dashboard/template/middleware.ts +0 -56
  240. package/dist/templates/web/iot-dashboard/template/src/lib/supabase/client.ts +0 -8
  241. package/dist/templates/web/iot-dashboard/template/src/lib/supabase/server.ts +0 -27
  242. package/dist/templates/web/marketplace/template/middleware.ts +0 -56
  243. package/dist/templates/web/marketplace/template/src/lib/supabase/client.ts +0 -8
  244. package/dist/templates/web/marketplace/template/src/lib/supabase/server.ts +0 -27
  245. package/dist/templates/web/micro-saas/template/middleware.ts +0 -53
  246. package/dist/templates/web/micro-saas/template/src/lib/supabase/client.ts +0 -8
  247. package/dist/templates/web/micro-saas/template/src/lib/supabase/server.ts +0 -29
  248. package/dist/templates/web/ui-auth/template/.claude +0 -21
  249. package/dist/templates/web/ui-auth/template/context.md +0 -105
  250. package/dist/templates/web/ui-auth/template/postcss.config.js +0 -7
  251. package/dist/templates/web/ui-auth/template/tailwind.config.js +0 -77
  252. package/dist/templates/web/ui-auth-ai/template/postcss.config.js +0 -6
  253. package/dist/templates/web/ui-auth-ai/template/tailwind.config.js +0 -22
  254. package/dist/templates/web/ui-auth-payments/template/middleware.ts +0 -68
  255. package/dist/templates/web/ui-auth-payments/template/package-lock.json +0 -12240
  256. package/dist/templates/web/ui-auth-payments/template/postcss.config.js +0 -7
  257. package/dist/templates/web/ui-auth-payments/template/tailwind.config.js +0 -77
  258. package/dist/templates/web/ui-auth-payments/template/tsconfig.tsbuildinfo +0 -1
  259. package/dist/templates/web/ui-auth-payments-ai/template/.claude +0 -21
  260. package/dist/templates/web/ui-auth-payments-ai/template/context.md +0 -169
  261. package/dist/templates/web/ui-auth-payments-ai/template/middleware.ts +0 -68
  262. package/dist/templates/web/ui-auth-payments-ai/template/package-lock.json +0 -12241
  263. package/dist/templates/web/ui-auth-payments-ai/template/postcss.config.js +0 -7
  264. package/dist/templates/web/ui-auth-payments-ai/template/tailwind.config.js +0 -77
  265. package/dist/templates/web/ui-auth-payments-ai/template/tsconfig.tsbuildinfo +0 -1
  266. package/dist/templates/web/ui-auth-payments-audio/template/middleware.ts +0 -68
  267. package/dist/templates/web/ui-auth-payments-audio/template/package-lock.json +0 -12241
  268. package/dist/templates/web/ui-auth-payments-audio/template/postcss.config.js +0 -7
  269. package/dist/templates/web/ui-auth-payments-audio/template/tailwind.config.js +0 -77
  270. package/dist/templates/web/ui-auth-payments-audio/template/tsconfig.tsbuildinfo +0 -1
  271. package/dist/templates/web/ui-auth-payments-video/template/postcss.config.js +0 -7
  272. package/dist/templates/web/ui-auth-payments-video/template/tailwind.config.js +0 -77
  273. package/dist/templates/web/ui-only/template/postcss.config.js +0 -7
  274. package/dist/templates/web/ui-only/template/tailwind.config.js +0 -77
  275. package/src/templates/web/ai-platform/template/middleware.ts +0 -55
  276. package/src/templates/web/ai-platform/template/src/lib/supabase/client.ts +0 -8
  277. package/src/templates/web/ai-platform/template/src/lib/supabase/server.ts +0 -27
  278. package/src/templates/web/base/template/postcss.config.js +0 -7
  279. package/src/templates/web/base/template/tailwind.config.js +0 -77
  280. package/src/templates/web/iot-dashboard/template/middleware.ts +0 -56
  281. package/src/templates/web/iot-dashboard/template/src/lib/supabase/client.ts +0 -8
  282. package/src/templates/web/iot-dashboard/template/src/lib/supabase/server.ts +0 -27
  283. package/src/templates/web/marketplace/template/middleware.ts +0 -56
  284. package/src/templates/web/marketplace/template/src/lib/supabase/client.ts +0 -8
  285. package/src/templates/web/marketplace/template/src/lib/supabase/server.ts +0 -27
  286. package/src/templates/web/micro-saas/template/middleware.ts +0 -53
  287. package/src/templates/web/micro-saas/template/src/lib/supabase/client.ts +0 -8
  288. package/src/templates/web/micro-saas/template/src/lib/supabase/server.ts +0 -29
  289. package/src/templates/web/ui-auth/template/.claude +0 -21
  290. package/src/templates/web/ui-auth/template/context.md +0 -105
  291. package/src/templates/web/ui-auth/template/postcss.config.js +0 -7
  292. package/src/templates/web/ui-auth/template/tailwind.config.js +0 -77
  293. package/src/templates/web/ui-auth-ai/template/postcss.config.js +0 -6
  294. package/src/templates/web/ui-auth-ai/template/tailwind.config.js +0 -22
  295. package/src/templates/web/ui-auth-payments/template/middleware.ts +0 -68
  296. package/src/templates/web/ui-auth-payments/template/package-lock.json +0 -12240
  297. package/src/templates/web/ui-auth-payments/template/postcss.config.js +0 -7
  298. package/src/templates/web/ui-auth-payments/template/tailwind.config.js +0 -77
  299. package/src/templates/web/ui-auth-payments/template/tsconfig.tsbuildinfo +0 -1
  300. package/src/templates/web/ui-auth-payments-ai/template/.claude +0 -21
  301. package/src/templates/web/ui-auth-payments-ai/template/context.md +0 -169
  302. package/src/templates/web/ui-auth-payments-ai/template/middleware.ts +0 -68
  303. package/src/templates/web/ui-auth-payments-ai/template/package-lock.json +0 -12241
  304. package/src/templates/web/ui-auth-payments-ai/template/postcss.config.js +0 -7
  305. package/src/templates/web/ui-auth-payments-ai/template/tailwind.config.js +0 -77
  306. package/src/templates/web/ui-auth-payments-ai/template/tsconfig.tsbuildinfo +0 -1
  307. package/src/templates/web/ui-auth-payments-audio/template/middleware.ts +0 -68
  308. package/src/templates/web/ui-auth-payments-audio/template/package-lock.json +0 -12241
  309. package/src/templates/web/ui-auth-payments-audio/template/postcss.config.js +0 -7
  310. package/src/templates/web/ui-auth-payments-audio/template/tailwind.config.js +0 -77
  311. package/src/templates/web/ui-auth-payments-audio/template/tsconfig.tsbuildinfo +0 -1
  312. package/src/templates/web/ui-auth-payments-video/template/postcss.config.js +0 -7
  313. package/src/templates/web/ui-auth-payments-video/template/tailwind.config.js +0 -77
  314. package/src/templates/web/ui-only/template/postcss.config.js +0 -7
  315. package/src/templates/web/ui-only/template/tailwind.config.js +0 -77
  316. /package/dist/templates/shared/admin/web/{components → src/components}/admin-nav.tsx +0 -0
  317. /package/dist/templates/shared/auth/keycloak/web/{auth.config.ts → src/auth.config.ts} +0 -0
  318. /package/dist/templates/shared/auth/keycloak/web/{auth.ts → src/auth.ts} +0 -0
  319. /package/dist/templates/shared/middleware/web/{middleware.ts → src/middleware.ts} +0 -0
  320. /package/src/templates/shared/admin/web/{components → src/components}/admin-nav.tsx +0 -0
  321. /package/src/templates/shared/auth/keycloak/web/{auth.config.ts → src/auth.config.ts} +0 -0
  322. /package/src/templates/shared/auth/keycloak/web/{auth.ts → src/auth.ts} +0 -0
  323. /package/src/templates/shared/middleware/web/{middleware.ts → src/middleware.ts} +0 -0
@@ -1,20 +1,97 @@
1
- @import "tailwindcss";
2
-
3
- @theme {
4
- --color-primary: oklch(55% 0.18 160);
5
- --color-background: oklch(98% 0.01 256);
6
- --color-foreground: oklch(15% 0.02 256);
7
- --font-sans: 'Inter', system-ui, sans-serif;
8
- --radius: 0.5rem;
9
- }
10
-
11
- .dark {
12
- --color-background: oklch(15% 0.02 256);
13
- --color-foreground: oklch(95% 0 0);
14
- }
15
-
16
- body {
17
- font-family: var(--font-sans);
18
- background-color: var(--color-background);
19
- color: var(--color-foreground);
20
- }
1
+ @import "tailwindcss";
2
+
3
+ @theme {
4
+ --font-sans: 'Inter', system-ui, sans-serif;
5
+
6
+ --radius: 0.5rem;
7
+ --radius-sm: calc(var(--radius) - 4px);
8
+ --radius-md: calc(var(--radius) - 2px);
9
+ --radius-lg: var(--radius);
10
+ --radius-xl: calc(var(--radius) + 4px);
11
+
12
+ --color-background: hsl(var(--background));
13
+ --color-foreground: hsl(var(--foreground));
14
+ --color-card: hsl(var(--card));
15
+ --color-card-foreground: hsl(var(--card-foreground));
16
+ --color-popover: hsl(var(--popover));
17
+ --color-popover-foreground: hsl(var(--popover-foreground));
18
+ --color-primary: hsl(var(--primary));
19
+ --color-primary-foreground: hsl(var(--primary-foreground));
20
+ --color-secondary: hsl(var(--secondary));
21
+ --color-secondary-foreground: hsl(var(--secondary-foreground));
22
+ --color-muted: hsl(var(--muted));
23
+ --color-muted-foreground: hsl(var(--muted-foreground));
24
+ --color-accent: hsl(var(--accent));
25
+ --color-accent-foreground: hsl(var(--accent-foreground));
26
+ --color-destructive: hsl(var(--destructive));
27
+ --color-destructive-foreground: hsl(var(--destructive-foreground));
28
+ --color-border: hsl(var(--border));
29
+ --color-input: hsl(var(--input));
30
+ --color-ring: hsl(var(--ring));
31
+ --color-brand-from: hsl(var(--brand-from));
32
+ --color-brand-via: hsl(var(--brand-via));
33
+ --color-brand-to: hsl(var(--brand-to));
34
+ }
35
+
36
+ :root {
37
+ --brand-from: 160 84% 39%;
38
+ --brand-via: 158 64% 52%;
39
+ --brand-to: 155 47% 59%;
40
+ --background: 210 20% 98%;
41
+ --foreground: 215 25% 10%;
42
+ --card: 0 0% 100%;
43
+ --card-foreground: 215 25% 10%;
44
+ --popover: 0 0% 100%;
45
+ --popover-foreground: 215 25% 10%;
46
+ --primary: 160 84% 39%;
47
+ --primary-foreground: 0 0% 100%;
48
+ --secondary: 210 40% 96%;
49
+ --secondary-foreground: 215 25% 10%;
50
+ --muted: 210 40% 96%;
51
+ --muted-foreground: 215 16% 47%;
52
+ --accent: 210 40% 96%;
53
+ --accent-foreground: 215 25% 10%;
54
+ --destructive: 0 84% 60%;
55
+ --destructive-foreground: 0 0% 100%;
56
+ --border: 214 32% 91%;
57
+ --input: 214 32% 91%;
58
+ --ring: 160 84% 39%;
59
+ }
60
+
61
+ .dark {
62
+ --brand-from: 160 84% 39%;
63
+ --brand-via: 158 64% 52%;
64
+ --brand-to: 155 47% 59%;
65
+ --background: 215 28% 7%;
66
+ --foreground: 210 40% 98%;
67
+ --card: 215 28% 7%;
68
+ --card-foreground: 210 40% 98%;
69
+ --popover: 215 28% 7%;
70
+ --popover-foreground: 210 40% 98%;
71
+ --primary: 160 84% 39%;
72
+ --primary-foreground: 0 0% 100%;
73
+ --secondary: 215 25% 15%;
74
+ --secondary-foreground: 210 40% 98%;
75
+ --muted: 215 25% 15%;
76
+ --muted-foreground: 215 20% 65%;
77
+ --accent: 215 25% 15%;
78
+ --accent-foreground: 210 40% 98%;
79
+ --destructive: 0 63% 31%;
80
+ --destructive-foreground: 210 40% 98%;
81
+ --border: 215 25% 15%;
82
+ --input: 215 25% 15%;
83
+ --ring: 160 84% 39%;
84
+ }
85
+
86
+ @layer base {
87
+ * {
88
+ border-color: hsl(var(--border));
89
+ }
90
+ body {
91
+ font-family: var(--font-sans);
92
+ background-color: hsl(var(--background));
93
+ color: hsl(var(--foreground));
94
+ -webkit-font-smoothing: antialiased;
95
+ -moz-osx-font-smoothing: grayscale;
96
+ }
97
+ }
@@ -19,6 +19,9 @@ export default function RootLayout({
19
19
  <html lang="en" suppressHydrationWarning>
20
20
  <body className={inter.className}>
21
21
  <AppProviders>
22
+ <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">
23
+ Skip to content
24
+ </a>
22
25
  {children}
23
26
  </AppProviders>
24
27
  </body>
@@ -2,9 +2,9 @@ import { Card, SkeletonText } from '@digilogiclabs/saas-factory-ui'
2
2
 
3
3
  export default function Loading() {
4
4
  return (
5
- <div className="min-h-screen bg-slate-50 dark:bg-slate-900">
5
+ <div className="min-h-screen bg-background">
6
6
  {/* Header skeleton */}
7
- <div className="bg-white dark:bg-slate-800 border-b border-slate-200 dark:border-slate-700 px-4 py-4">
7
+ <div className="bg-card border-b border-border px-4 py-4">
8
8
  <div className="max-w-7xl mx-auto flex items-center justify-between">
9
9
  <div className="flex items-center gap-2">
10
10
  <SkeletonText className="h-8 w-8 rounded-lg" />
@@ -66,10 +66,10 @@ export default function Loading() {
66
66
  <div className="flex justify-center">
67
67
  <div className="flex items-center gap-3">
68
68
  <div className="relative">
69
- <div className="w-8 h-8 border-4 border-slate-200 dark:border-slate-700 rounded-full"></div>
70
- <div className="absolute top-0 left-0 w-8 h-8 border-4 border-emerald-600 border-t-transparent rounded-full animate-spin"></div>
69
+ <div className="w-8 h-8 border-4 border-border rounded-full"></div>
70
+ <div className="absolute top-0 left-0 w-8 h-8 border-4 border-primary border-t-transparent rounded-full animate-spin"></div>
71
71
  </div>
72
- <p className="text-sm text-slate-600 dark:text-slate-300">Loading IoT dashboard...</p>
72
+ <p className="text-sm text-muted-foreground">Loading IoT dashboard...</p>
73
73
  </div>
74
74
  </div>
75
75
  </div>
@@ -1,189 +1,266 @@
1
- 'use client'
2
-
3
- import { Button, Card, PulseIndicator } from '@digilogiclabs/saas-factory-ui'
4
- import { useAuth } from '@digilogiclabs/app-sdk'
5
- import { Cpu, Activity, Signal, Bell, Settings, ArrowRight, User, LogOut, Wifi, ThermometerSun, Gauge, Shield } from 'lucide-react'
6
- import Link from 'next/link'
7
-
8
- const FEATURES = [
9
- {
10
- icon: Cpu,
11
- title: 'Device Management',
12
- description: 'Monitor and control all your IoT devices from one dashboard',
13
- },
14
- {
15
- icon: Activity,
16
- title: 'Real-time Telemetry',
17
- description: 'Live data streams with historical analysis and trends',
18
- },
19
- {
20
- icon: Bell,
21
- title: 'Smart Alerts',
22
- description: 'Configurable alerts and notifications for critical events',
23
- },
24
- {
25
- icon: Shield,
26
- title: 'Secure & Scalable',
27
- description: 'Enterprise-grade security for your connected devices',
28
- },
29
- ]
30
-
31
- const DEVICE_TYPES = [
32
- { name: 'Temperature Sensors', count: 24, icon: ThermometerSun, status: 'online' },
33
- { name: 'Pressure Gauges', count: 12, icon: Gauge, status: 'online' },
34
- { name: 'Network Gateways', count: 8, icon: Wifi, status: 'online' },
35
- { name: 'Motion Sensors', count: 18, icon: Signal, status: 'partial' },
36
- ]
37
-
38
- export default function Home() {
39
- const { user, signOut, loading } = useAuth()
40
-
41
- const projectName = "{{titleCaseName}}"
42
-
43
- const handleSignOut = async () => {
44
- try {
45
- await signOut()
46
- } catch (err) {
47
- console.error('Sign out error:', err)
48
- }
49
- }
50
-
51
- return (
52
- <main className="min-h-screen bg-slate-50 dark:bg-slate-900">
53
- {/* Header */}
54
- <header className="bg-white dark:bg-slate-800 border-b border-slate-200 dark:border-slate-700 sticky top-0 z-50">
55
- <div className="max-w-7xl mx-auto px-4 py-4">
56
- <div className="flex items-center justify-between">
57
- <Link href="/" className="flex items-center gap-2">
58
- <div className="w-8 h-8 bg-emerald-600 rounded-lg flex items-center justify-center">
59
- <Cpu className="w-5 h-5 text-white" />
60
- </div>
61
- <span className="text-2xl font-bold text-slate-900 dark:text-white">{projectName}</span>
62
- </Link>
63
-
64
- <nav className="hidden md:flex items-center gap-6">
65
- <Link href="/devices" className="text-slate-600 dark:text-slate-300 hover:text-slate-900 dark:hover:text-white transition">
66
- Devices
67
- </Link>
68
- <Link href="/analytics" className="text-slate-600 dark:text-slate-300 hover:text-slate-900 dark:hover:text-white transition">
69
- Analytics
70
- </Link>
71
- <Link href="/alerts" className="text-slate-600 dark:text-slate-300 hover:text-slate-900 dark:hover:text-white transition">
72
- Alerts
73
- </Link>
74
- </nav>
75
-
76
- <div className="flex items-center gap-4">
77
- {loading ? (
78
- <div className="text-sm text-slate-600">Loading...</div>
79
- ) : user ? (
80
- <div className="flex items-center gap-2">
81
- <Link href="/dashboard">
82
- <Button variant="outline" size="sm">
83
- <User className="w-4 h-4 mr-2" />
84
- Dashboard
85
- </Button>
86
- </Link>
87
- <Button variant="ghost" size="sm" onClick={handleSignOut}>
88
- <LogOut className="w-4 h-4" />
89
- </Button>
90
- </div>
91
- ) : (
92
- <div className="flex gap-2">
93
- <Link href="/login">
94
- <Button variant="outline" size="sm">Sign In</Button>
95
- </Link>
96
- <Link href="/signup">
97
- <Button size="sm" className="bg-emerald-600 hover:bg-emerald-700">Get Started</Button>
98
- </Link>
99
- </div>
100
- )}
101
- </div>
102
- </div>
103
- </div>
104
- </header>
105
-
106
- <div className="max-w-7xl mx-auto px-4 py-16">
107
- {/* Hero */}
108
- <div className="text-center mb-16">
109
- <div className="inline-flex items-center px-4 py-2 rounded-full bg-emerald-100 dark:bg-emerald-900/30 text-emerald-700 dark:text-emerald-400 text-sm mb-6">
110
- <Signal className="w-4 h-4 mr-2" />
111
- IoT Management Platform
112
- </div>
113
- <h1 className="text-5xl font-bold text-slate-900 dark:text-white mb-6">
114
- Monitor Your <span className="text-emerald-600">Connected Devices</span>
115
- </h1>
116
- <p className="text-xl text-slate-600 dark:text-slate-300 max-w-2xl mx-auto mb-8">
117
- Real-time monitoring, analytics, and control for your IoT infrastructure.
118
- Built for scale, designed for simplicity.
119
- </p>
120
- <div className="flex gap-4 justify-center">
121
- <Link href="/dashboard">
122
- <Button size="lg" className="bg-emerald-600 hover:bg-emerald-700">
123
- <Activity className="w-5 h-5 mr-2" />
124
- View Dashboard
125
- </Button>
126
- </Link>
127
- <Link href="/devices">
128
- <Button size="lg" variant="outline">
129
- Manage Devices
130
- </Button>
131
- </Link>
132
- </div>
133
- </div>
134
-
135
- {/* Device Overview */}
136
- <div className="grid md:grid-cols-2 lg:grid-cols-4 gap-4 mb-16">
137
- {DEVICE_TYPES.map((device) => (
138
- <Card key={device.name} className="p-6">
139
- <div className="flex items-center justify-between mb-3">
140
- <div className="w-10 h-10 bg-emerald-100 dark:bg-emerald-900/30 rounded-lg flex items-center justify-center">
141
- <device.icon className="w-5 h-5 text-emerald-600" />
142
- </div>
143
- <PulseIndicator
144
- status={device.status === 'online' ? 'success' : 'loading'}
145
- label={device.status === 'online' ? 'All Online' : 'Partial'}
146
- size="sm"
147
- />
148
- </div>
149
- <h3 className="font-semibold text-slate-900 dark:text-white">{device.name}</h3>
150
- <p className="text-2xl font-bold text-emerald-600">{device.count}</p>
151
- </Card>
152
- ))}
153
- </div>
154
-
155
- {/* Features */}
156
- <div className="mb-16">
157
- <h2 className="text-3xl font-bold text-slate-900 dark:text-white text-center mb-12">
158
- Everything You Need
159
- </h2>
160
- <div className="grid md:grid-cols-2 lg:grid-cols-4 gap-6">
161
- {FEATURES.map((feature) => (
162
- <Card key={feature.title} className="p-6 text-center">
163
- <div className="w-12 h-12 bg-emerald-100 dark:bg-emerald-900/30 rounded-lg flex items-center justify-center mx-auto mb-4">
164
- <feature.icon className="w-6 h-6 text-emerald-600" />
165
- </div>
166
- <h3 className="text-lg font-semibold text-slate-900 dark:text-white mb-2">{feature.title}</h3>
167
- <p className="text-slate-600 dark:text-slate-400 text-sm">{feature.description}</p>
168
- </Card>
169
- ))}
170
- </div>
171
- </div>
172
-
173
- {/* CTA */}
174
- <Card className="p-12 bg-gradient-to-r from-emerald-600 to-teal-600 text-white text-center">
175
- <h2 className="text-3xl font-bold mb-4">Ready to Connect?</h2>
176
- <p className="text-white/80 mb-8 max-w-md mx-auto">
177
- Start monitoring your IoT devices in minutes. Free tier available for up to 10 devices.
178
- </p>
179
- <Link href="/signup">
180
- <Button size="lg" variant="secondary">
181
- Get Started Free
182
- <ArrowRight className="w-5 h-5 ml-2" />
183
- </Button>
184
- </Link>
185
- </Card>
186
- </div>
187
- </main>
188
- )
189
- }
1
+ 'use client'
2
+
3
+ import { Button, Card, CardContent } from '@digilogiclabs/saas-factory-ui'
4
+ import { Cpu, Activity, Signal, Bell, Shield, ArrowRight, Wifi, ThermometerSun, Gauge, Sun, Moon, Radio } from 'lucide-react'
5
+ import { useTheme } from 'next-themes'
6
+ import Link from 'next/link'
7
+ import { useEffect, useState } from 'react'
8
+
9
+ const DEVICE_TYPES = [
10
+ {
11
+ name: 'Temperature Sensors',
12
+ count: 24,
13
+ icon: ThermometerSun,
14
+ status: 'online' as const,
15
+ color: 'text-emerald-500',
16
+ bg: 'bg-emerald-500/10',
17
+ },
18
+ {
19
+ name: 'Pressure Gauges',
20
+ count: 12,
21
+ icon: Gauge,
22
+ status: 'online' as const,
23
+ color: 'text-cyan-500',
24
+ bg: 'bg-cyan-500/10',
25
+ },
26
+ {
27
+ name: 'Network Gateways',
28
+ count: 8,
29
+ icon: Wifi,
30
+ status: 'online' as const,
31
+ color: 'text-violet-500',
32
+ bg: 'bg-violet-500/10',
33
+ },
34
+ {
35
+ name: 'Motion Sensors',
36
+ count: 18,
37
+ icon: Radio,
38
+ status: 'partial' as const,
39
+ color: 'text-amber-500',
40
+ bg: 'bg-amber-500/10',
41
+ },
42
+ ]
43
+
44
+ const FEATURES = [
45
+ {
46
+ icon: Cpu,
47
+ title: 'Device Management',
48
+ description: 'Register, provision, and manage your entire device fleet from a single pane of glass.',
49
+ color: 'text-emerald-500 group-hover:text-emerald-400',
50
+ bg: 'bg-emerald-500/10 group-hover:bg-emerald-500/20',
51
+ border: 'group-hover:border-emerald-500/30',
52
+ },
53
+ {
54
+ icon: Activity,
55
+ title: 'Real-time Telemetry',
56
+ description: 'Live data streams with historical analysis, trend detection, and customizable dashboards.',
57
+ color: 'text-cyan-500 group-hover:text-cyan-400',
58
+ bg: 'bg-cyan-500/10 group-hover:bg-cyan-500/20',
59
+ border: 'group-hover:border-cyan-500/30',
60
+ },
61
+ {
62
+ icon: Bell,
63
+ title: 'Smart Alerts',
64
+ description: 'Configurable thresholds and anomaly detection with multi-channel notifications.',
65
+ color: 'text-amber-500 group-hover:text-amber-400',
66
+ bg: 'bg-amber-500/10 group-hover:bg-amber-500/20',
67
+ border: 'group-hover:border-amber-500/30',
68
+ },
69
+ {
70
+ icon: Shield,
71
+ title: 'Secure & Scalable',
72
+ description: 'End-to-end encryption, device authentication, and infrastructure that scales with your fleet.',
73
+ color: 'text-violet-500 group-hover:text-violet-400',
74
+ bg: 'bg-violet-500/10 group-hover:bg-violet-500/20',
75
+ border: 'group-hover:border-violet-500/30',
76
+ },
77
+ ]
78
+
79
+ function ThemeToggle() {
80
+ const { theme, setTheme } = useTheme()
81
+ const [mounted, setMounted] = useState(false)
82
+ useEffect(() => setMounted(true), [])
83
+ if (!mounted) return <div className="w-9 h-9" />
84
+ return (
85
+ <button
86
+ onClick={() => setTheme(theme === 'dark' ? 'light' : 'dark')}
87
+ className="inline-flex items-center justify-center w-9 h-9 rounded-md border border-border bg-background hover:bg-accent hover:text-accent-foreground active:scale-95 transition-all duration-200 cursor-pointer"
88
+ aria-label="Toggle theme"
89
+ >
90
+ {theme === 'dark' ? <Sun className="w-4 h-4" /> : <Moon className="w-4 h-4" />}
91
+ </button>
92
+ )
93
+ }
94
+
95
+ export default function Home() {
96
+ return (
97
+ <main id="main-content" className="min-h-screen bg-background text-foreground">
98
+ {/* Nav */}
99
+ <nav className="sticky top-0 z-50 border-b border-border bg-background/80 backdrop-blur-lg">
100
+ <div className="max-w-6xl mx-auto px-4 sm:px-6 h-16 flex items-center justify-between">
101
+ <Link href="/" className="flex items-center gap-2 hover:opacity-80 active:scale-[0.97] transition-all duration-200">
102
+ <div className="w-8 h-8 rounded-lg bg-gradient-to-br from-brand-from via-brand-via to-brand-to flex items-center justify-center">
103
+ <Cpu className="w-4 h-4 text-white" />
104
+ </div>
105
+ <span className="font-bold text-lg">{`{{titleCaseName}}`}</span>
106
+ </Link>
107
+ <div className="hidden md:flex items-center gap-6">
108
+ <Link href="/dashboard" className="text-sm text-muted-foreground hover:text-foreground transition-colors">
109
+ Devices
110
+ </Link>
111
+ <Link href="/dashboard" className="text-sm text-muted-foreground hover:text-foreground transition-colors">
112
+ Analytics
113
+ </Link>
114
+ <Link href="/dashboard" className="text-sm text-muted-foreground hover:text-foreground transition-colors">
115
+ Alerts
116
+ </Link>
117
+ </div>
118
+ <div className="flex items-center gap-2">
119
+ <ThemeToggle />
120
+ <Link href="/login">
121
+ <Button variant="ghost" size="sm" className="hover:bg-accent active:scale-95 transition-all duration-200 cursor-pointer">Sign In</Button>
122
+ </Link>
123
+ <Link href="/signup">
124
+ <Button size="sm" className="hover:brightness-110 active:scale-95 transition-all duration-200 cursor-pointer shadow-sm hover:shadow-md">Get Started</Button>
125
+ </Link>
126
+ </div>
127
+ </div>
128
+ </nav>
129
+
130
+ {/* Hero */}
131
+ <section className="relative overflow-hidden">
132
+ <div className="absolute inset-0 bg-gradient-to-b from-primary/5 to-transparent" />
133
+ <div className="relative max-w-6xl mx-auto px-4 sm:px-6 pt-16 sm:pt-24 pb-16 text-center">
134
+ <div className="inline-flex items-center gap-2 px-4 py-1.5 rounded-full border border-border bg-muted text-muted-foreground text-sm font-medium mb-8 hover:bg-accent hover:border-primary/20 transition-colors duration-200 cursor-default">
135
+ <Signal className="w-3.5 h-3.5 text-primary" />
136
+ IoT Management Platform
137
+ </div>
138
+ <h1 className="text-4xl sm:text-5xl lg:text-6xl font-extrabold tracking-tight mb-6">
139
+ Monitor Your
140
+ <br />
141
+ <span className="text-primary">Connected Devices</span>
142
+ </h1>
143
+ <p className="text-lg sm:text-xl text-muted-foreground max-w-2xl mx-auto mb-10 leading-relaxed">
144
+ Real-time monitoring, analytics, and control for your IoT infrastructure.
145
+ Built for scale, designed for simplicity.
146
+ </p>
147
+ <div className="flex flex-col sm:flex-row gap-3 justify-center">
148
+ <Link href="/dashboard">
149
+ <Button size="lg" className="w-full sm:w-auto text-base px-8 h-12 hover:brightness-110 active:scale-[0.97] transition-all duration-200 cursor-pointer shadow-md hover:shadow-lg">
150
+ <Activity className="w-4 h-4 mr-2" />
151
+ View Dashboard
152
+ </Button>
153
+ </Link>
154
+ <Link href="/dashboard">
155
+ <Button variant="outline" size="lg" className="w-full sm:w-auto text-base px-8 h-12 hover:bg-accent hover:border-primary/30 active:scale-[0.97] transition-all duration-200 cursor-pointer">
156
+ Manage Devices
157
+ </Button>
158
+ </Link>
159
+ </div>
160
+ </div>
161
+ </section>
162
+
163
+ {/* Device Overview */}
164
+ <section className="max-w-6xl mx-auto px-4 sm:px-6 pb-16 sm:pb-24">
165
+ <div className="grid grid-cols-2 lg:grid-cols-4 gap-4">
166
+ {DEVICE_TYPES.map((device) => (
167
+ <Card key={device.name} className="group cursor-default hover:shadow-lg hover:-translate-y-0.5 transition-all duration-300">
168
+ <CardContent className="p-5 sm:p-6">
169
+ <div className="flex items-center justify-between mb-4">
170
+ <div className={`w-10 h-10 ${device.bg} rounded-xl flex items-center justify-center transition-colors duration-300`}>
171
+ <device.icon className={`w-5 h-5 ${device.color} transition-colors duration-300`} />
172
+ </div>
173
+ <div className="flex items-center gap-1.5">
174
+ <span className={`w-2 h-2 rounded-full ${device.status === 'online' ? 'bg-emerald-500' : 'bg-amber-500'}`} />
175
+ <span className="text-xs text-muted-foreground">
176
+ {device.status === 'online' ? 'All Online' : 'Partial'}
177
+ </span>
178
+ </div>
179
+ </div>
180
+ <h3 className="text-sm font-medium text-muted-foreground mb-1">{device.name}</h3>
181
+ <p className="text-3xl font-bold text-primary">{device.count}</p>
182
+ </CardContent>
183
+ </Card>
184
+ ))}
185
+ </div>
186
+ </section>
187
+
188
+ {/* Features */}
189
+ <section className="bg-muted/50">
190
+ <div className="max-w-6xl mx-auto px-4 sm:px-6 py-16 sm:py-24">
191
+ <div className="text-center mb-12 sm:mb-16">
192
+ <h2 className="text-3xl sm:text-4xl font-bold mb-4">Everything You Need</h2>
193
+ <p className="text-muted-foreground text-lg max-w-xl mx-auto">
194
+ A complete toolkit for managing your connected device infrastructure.
195
+ </p>
196
+ </div>
197
+ <div className="grid sm:grid-cols-2 lg:grid-cols-4 gap-6">
198
+ {FEATURES.map((feature) => (
199
+ <Card key={feature.title} className={`group cursor-default hover:shadow-xl hover:-translate-y-1 ${feature.border} transition-all duration-300`}>
200
+ <CardContent className="p-6 sm:p-8">
201
+ <div className={`w-12 h-12 ${feature.bg} rounded-xl flex items-center justify-center mb-5 transition-colors duration-300`}>
202
+ <feature.icon className={`w-6 h-6 ${feature.color} transition-colors duration-300`} />
203
+ </div>
204
+ <h3 className="text-lg font-semibold mb-3 group-hover:text-primary transition-colors duration-200">{feature.title}</h3>
205
+ <p className="text-muted-foreground text-sm leading-relaxed">
206
+ {feature.description}
207
+ </p>
208
+ </CardContent>
209
+ </Card>
210
+ ))}
211
+ </div>
212
+ </div>
213
+ </section>
214
+
215
+ {/* CTA */}
216
+ <section className="max-w-6xl mx-auto px-4 sm:px-6 py-16 sm:py-24">
217
+ <div className="overflow-hidden rounded-2xl bg-gradient-to-br from-brand-from via-brand-via to-brand-to text-white p-8 sm:p-12 text-center hover:shadow-2xl hover:shadow-primary/20 transition-shadow duration-500">
218
+ <h2 className="text-3xl sm:text-4xl font-bold mb-4">Ready to Connect?</h2>
219
+ <p className="text-white/80 text-lg mb-8 max-w-lg mx-auto">
220
+ Start monitoring your IoT devices in minutes. Free tier available for up to 10 devices.
221
+ </p>
222
+ <Link href="/signup">
223
+ <Button variant="secondary" size="lg" className="px-8 h-12 text-base font-semibold hover:brightness-110 active:scale-[0.97] transition-all duration-200 cursor-pointer shadow-lg hover:shadow-xl">
224
+ Get Started Free
225
+ <ArrowRight className="w-4 h-4 ml-2" />
226
+ </Button>
227
+ </Link>
228
+ <p className="text-white/60 text-sm mt-4">No credit card required</p>
229
+ </div>
230
+ </section>
231
+
232
+ {/* Footer */}
233
+ <footer className="border-t border-border">
234
+ <div className="max-w-6xl mx-auto px-4 sm:px-6 py-8">
235
+ <div className="flex flex-col sm:flex-row items-center justify-between gap-6">
236
+ <Link href="/" className="flex items-center gap-2 hover:opacity-80 active:scale-[0.97] transition-all duration-200">
237
+ <div className="w-6 h-6 rounded bg-gradient-to-br from-brand-from via-brand-via to-brand-to flex items-center justify-center">
238
+ <Cpu className="w-3 h-3 text-white" />
239
+ </div>
240
+ <span className="text-sm font-medium">{`{{titleCaseName}}`}</span>
241
+ </Link>
242
+ <nav className="flex items-center gap-6">
243
+ <Link href="/dashboard" className="text-sm text-muted-foreground hover:text-foreground transition-colors">
244
+ Devices
245
+ </Link>
246
+ <Link href="/dashboard" className="text-sm text-muted-foreground hover:text-foreground transition-colors">
247
+ Analytics
248
+ </Link>
249
+ <Link href="/dashboard" className="text-sm text-muted-foreground hover:text-foreground transition-colors">
250
+ Alerts
251
+ </Link>
252
+ <Link href="/login" className="text-sm text-muted-foreground hover:text-foreground transition-colors">
253
+ Sign In
254
+ </Link>
255
+ </nav>
256
+ </div>
257
+ <div className="mt-6 pt-6 border-t border-border text-center">
258
+ <p className="text-xs text-muted-foreground">
259
+ Built with DLL Platform. Ship fast, own everything.
260
+ </p>
261
+ </div>
262
+ </div>
263
+ </footer>
264
+ </main>
265
+ )
266
+ }