@digilogiclabs/create-saas-app 2.9.0 → 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 (343) 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 +249 -155
  20. package/dist/templates/web/ai-platform/template/src/components/providers/app-providers.tsx +5 -2
  21. package/dist/templates/web/ai-platform/template/src/lib/auth-server.ts +32 -33
  22. package/dist/templates/web/base/template/next.config.js +14 -15
  23. package/dist/templates/web/base/template/package.json +16 -31
  24. package/dist/templates/web/base/template/postcss.config.mjs +8 -0
  25. package/dist/templates/web/base/template/src/app/error.tsx +97 -97
  26. package/dist/templates/web/base/template/src/app/globals.css +87 -148
  27. package/dist/templates/web/base/template/src/app/layout.tsx +4 -1
  28. package/dist/templates/web/base/template/src/app/loading.tsx +52 -52
  29. package/dist/templates/web/base/template/src/components/providers/app-providers.tsx +5 -2
  30. package/dist/templates/web/base/template/tsconfig.json +27 -33
  31. package/dist/templates/web/iot-dashboard/template/next.config.js +14 -14
  32. package/dist/templates/web/iot-dashboard/template/package.json +12 -16
  33. package/dist/templates/web/iot-dashboard/template/postcss.config.mjs +8 -0
  34. package/dist/templates/web/iot-dashboard/template/src/app/dashboard/page.tsx +224 -224
  35. package/dist/templates/web/iot-dashboard/template/src/app/error.tsx +8 -8
  36. package/dist/templates/web/iot-dashboard/template/src/app/globals.css +97 -20
  37. package/dist/templates/web/iot-dashboard/template/src/app/layout.tsx +3 -0
  38. package/dist/templates/web/iot-dashboard/template/src/app/loading.tsx +5 -5
  39. package/dist/templates/web/iot-dashboard/template/src/app/page.tsx +266 -189
  40. package/dist/templates/web/iot-dashboard/template/src/components/providers/app-providers.tsx +5 -2
  41. package/dist/templates/web/iot-dashboard/template/src/lib/auth-server.ts +32 -33
  42. package/dist/templates/web/marketplace/template/next.config.js +14 -14
  43. package/dist/templates/web/marketplace/template/package.json +11 -18
  44. package/dist/templates/web/marketplace/template/postcss.config.mjs +8 -0
  45. package/dist/templates/web/marketplace/template/src/app/cart/page.tsx +147 -147
  46. package/dist/templates/web/marketplace/template/src/app/dashboard/page.tsx +149 -149
  47. package/dist/templates/web/marketplace/template/src/app/error.tsx +7 -7
  48. package/dist/templates/web/marketplace/template/src/app/globals.css +97 -20
  49. package/dist/templates/web/marketplace/template/src/app/layout.tsx +3 -0
  50. package/dist/templates/web/marketplace/template/src/app/loading.tsx +5 -5
  51. package/dist/templates/web/marketplace/template/src/app/page.tsx +370 -169
  52. package/dist/templates/web/marketplace/template/src/app/products/page.tsx +129 -129
  53. package/dist/templates/web/marketplace/template/src/components/providers/app-providers.tsx +5 -2
  54. package/dist/templates/web/marketplace/template/src/lib/auth-server.ts +32 -33
  55. package/dist/templates/web/micro-saas/template/next.config.js +14 -14
  56. package/dist/templates/web/micro-saas/template/package.json +9 -8
  57. package/dist/templates/web/micro-saas/template/postcss.config.mjs +8 -0
  58. package/dist/templates/web/micro-saas/template/src/app/dashboard/page.tsx +145 -117
  59. package/dist/templates/web/micro-saas/template/src/app/error.tsx +7 -7
  60. package/dist/templates/web/micro-saas/template/src/app/globals.css +97 -20
  61. package/dist/templates/web/micro-saas/template/src/app/layout.tsx +3 -0
  62. package/dist/templates/web/micro-saas/template/src/app/loading.tsx +43 -27
  63. package/dist/templates/web/micro-saas/template/src/app/login/page.tsx +101 -87
  64. package/dist/templates/web/micro-saas/template/src/app/page.tsx +227 -137
  65. package/dist/templates/web/micro-saas/template/src/app/signup/page.tsx +122 -108
  66. package/dist/templates/web/micro-saas/template/src/components/providers/app-providers.tsx +5 -2
  67. package/dist/templates/web/micro-saas/template/src/lib/auth-server.ts +32 -33
  68. package/dist/templates/web/ui-auth/template/next.config.js +14 -12
  69. package/dist/templates/web/ui-auth/template/package.json +16 -26
  70. package/dist/templates/web/ui-auth/template/postcss.config.mjs +8 -0
  71. package/dist/templates/web/ui-auth/template/src/app/error.tsx +67 -67
  72. package/dist/templates/web/ui-auth/template/src/app/globals.css +85 -84
  73. package/dist/templates/web/ui-auth/template/src/app/layout.tsx +4 -1
  74. package/dist/templates/web/ui-auth/template/src/app/loading.tsx +20 -38
  75. package/dist/templates/web/ui-auth/template/src/components/providers/app-providers.tsx +5 -2
  76. package/dist/templates/web/ui-auth/template/tsconfig.json +27 -33
  77. package/dist/templates/web/ui-auth-ai/template/next.config.js +15 -13
  78. package/dist/templates/web/ui-auth-ai/template/package.json +25 -21
  79. package/dist/templates/web/ui-auth-ai/template/postcss.config.mjs +8 -0
  80. package/dist/templates/web/ui-auth-ai/template/src/app/error.tsx +7 -7
  81. package/dist/templates/web/ui-auth-ai/template/src/app/globals.css +87 -25
  82. package/dist/templates/web/ui-auth-ai/template/src/app/layout.tsx +3 -0
  83. package/dist/templates/web/ui-auth-ai/template/src/app/loading.tsx +4 -4
  84. package/dist/templates/web/ui-auth-ai/template/tsconfig.json +27 -28
  85. package/dist/templates/web/ui-auth-payments/template/next.config.js +14 -12
  86. package/dist/templates/web/ui-auth-payments/template/package.json +16 -29
  87. package/dist/templates/web/ui-auth-payments/template/postcss.config.mjs +8 -0
  88. package/dist/templates/web/ui-auth-payments/template/src/app/error.tsx +67 -67
  89. package/dist/templates/web/ui-auth-payments/template/src/app/globals.css +89 -204
  90. package/dist/templates/web/ui-auth-payments/template/src/app/layout.tsx +4 -1
  91. package/dist/templates/web/ui-auth-payments/template/src/app/loading.tsx +20 -20
  92. package/dist/templates/web/ui-auth-payments/template/tsconfig.json +27 -33
  93. package/dist/templates/web/ui-auth-payments-ai/template/next.config.js +14 -12
  94. package/dist/templates/web/ui-auth-payments-ai/template/package.json +17 -33
  95. package/dist/templates/web/ui-auth-payments-ai/template/postcss.config.mjs +8 -0
  96. package/dist/templates/web/ui-auth-payments-ai/template/src/app/error.tsx +67 -67
  97. package/dist/templates/web/ui-auth-payments-ai/template/src/app/globals.css +85 -85
  98. package/dist/templates/web/ui-auth-payments-ai/template/src/app/layout.tsx +4 -1
  99. package/dist/templates/web/ui-auth-payments-ai/template/src/app/loading.tsx +20 -20
  100. package/dist/templates/web/ui-auth-payments-ai/template/src/components/providers/app-providers.tsx +5 -2
  101. package/dist/templates/web/ui-auth-payments-ai/template/tsconfig.json +27 -33
  102. package/dist/templates/web/ui-auth-payments-audio/template/next.config.js +14 -12
  103. package/dist/templates/web/ui-auth-payments-audio/template/package.json +17 -30
  104. package/dist/templates/web/ui-auth-payments-audio/template/postcss.config.mjs +8 -0
  105. package/dist/templates/web/ui-auth-payments-audio/template/src/app/error.tsx +67 -67
  106. package/dist/templates/web/ui-auth-payments-audio/template/src/app/globals.css +85 -85
  107. package/dist/templates/web/ui-auth-payments-audio/template/src/app/layout.tsx +4 -1
  108. package/dist/templates/web/ui-auth-payments-audio/template/src/app/loading.tsx +20 -20
  109. package/dist/templates/web/ui-auth-payments-audio/template/src/components/providers/app-providers.tsx +5 -2
  110. package/dist/templates/web/ui-auth-payments-audio/template/tsconfig.json +27 -33
  111. package/dist/templates/web/ui-auth-payments-video/template/next.config.js +14 -12
  112. package/dist/templates/web/ui-auth-payments-video/template/package.json +17 -30
  113. package/dist/templates/web/ui-auth-payments-video/template/postcss.config.mjs +8 -0
  114. package/dist/templates/web/ui-auth-payments-video/template/src/app/error.tsx +67 -67
  115. package/dist/templates/web/ui-auth-payments-video/template/src/app/globals.css +89 -221
  116. package/dist/templates/web/ui-auth-payments-video/template/src/app/layout.tsx +4 -1
  117. package/dist/templates/web/ui-auth-payments-video/template/src/app/loading.tsx +20 -20
  118. package/dist/templates/web/ui-auth-payments-video/template/src/components/providers/app-providers.tsx +5 -2
  119. package/dist/templates/web/ui-auth-payments-video/template/tsconfig.json +27 -33
  120. package/dist/templates/web/ui-only/template/next.config.js +14 -12
  121. package/dist/templates/web/ui-only/template/package.json +15 -25
  122. package/dist/templates/web/ui-only/template/postcss.config.mjs +8 -0
  123. package/dist/templates/web/ui-only/template/src/app/error.tsx +67 -67
  124. package/dist/templates/web/ui-only/template/src/app/globals.css +85 -31
  125. package/dist/templates/web/ui-only/template/src/app/layout.tsx +4 -1
  126. package/dist/templates/web/ui-only/template/src/app/loading.tsx +20 -20
  127. package/dist/templates/web/ui-only/template/src/components/providers/app-providers.tsx +20 -26
  128. package/dist/templates/web/ui-only/template/tsconfig.json +27 -33
  129. package/package.json +1 -1
  130. package/src/templates/shared/auth/supabase/web/src/middleware.ts +63 -0
  131. package/src/templates/shared/database/supabase/web/src/lib/supabase/server.ts +3 -1
  132. package/src/templates/shared/design/web/src/config/design.config.ts +14 -14
  133. package/src/templates/shared/landing/web/src/components/LandingPage.tsx +0 -3
  134. package/src/templates/shared/security/web/src/lib/api-security.ts +2 -2
  135. package/src/templates/web/ai-platform/template/next.config.js +14 -14
  136. package/src/templates/web/ai-platform/template/package.json +11 -22
  137. package/src/templates/web/ai-platform/template/postcss.config.mjs +8 -0
  138. package/src/templates/web/ai-platform/template/src/app/chat/page.tsx +234 -235
  139. package/src/templates/web/ai-platform/template/src/app/dashboard/page.tsx +142 -142
  140. package/src/templates/web/ai-platform/template/src/app/error.tsx +13 -13
  141. package/src/templates/web/ai-platform/template/src/app/globals.css +97 -34
  142. package/src/templates/web/ai-platform/template/src/app/layout.tsx +3 -0
  143. package/src/templates/web/ai-platform/template/src/app/loading.tsx +22 -22
  144. package/src/templates/web/ai-platform/template/src/app/page.tsx +249 -155
  145. package/src/templates/web/ai-platform/template/src/components/providers/app-providers.tsx +5 -2
  146. package/src/templates/web/ai-platform/template/src/lib/auth-server.ts +32 -33
  147. package/src/templates/web/base/template/next.config.js +14 -15
  148. package/src/templates/web/base/template/package.json +16 -31
  149. package/src/templates/web/base/template/postcss.config.mjs +8 -0
  150. package/src/templates/web/base/template/src/app/error.tsx +97 -97
  151. package/src/templates/web/base/template/src/app/globals.css +87 -148
  152. package/src/templates/web/base/template/src/app/layout.tsx +4 -1
  153. package/src/templates/web/base/template/src/app/loading.tsx +52 -52
  154. package/src/templates/web/base/template/src/components/providers/app-providers.tsx +5 -2
  155. package/src/templates/web/base/template/tsconfig.json +27 -33
  156. package/src/templates/web/iot-dashboard/template/next.config.js +14 -14
  157. package/src/templates/web/iot-dashboard/template/package.json +12 -16
  158. package/src/templates/web/iot-dashboard/template/postcss.config.mjs +8 -0
  159. package/src/templates/web/iot-dashboard/template/src/app/dashboard/page.tsx +224 -224
  160. package/src/templates/web/iot-dashboard/template/src/app/error.tsx +8 -8
  161. package/src/templates/web/iot-dashboard/template/src/app/globals.css +97 -20
  162. package/src/templates/web/iot-dashboard/template/src/app/layout.tsx +3 -0
  163. package/src/templates/web/iot-dashboard/template/src/app/loading.tsx +5 -5
  164. package/src/templates/web/iot-dashboard/template/src/app/page.tsx +266 -189
  165. package/src/templates/web/iot-dashboard/template/src/components/providers/app-providers.tsx +5 -2
  166. package/src/templates/web/iot-dashboard/template/src/lib/auth-server.ts +32 -33
  167. package/src/templates/web/marketplace/template/next.config.js +14 -14
  168. package/src/templates/web/marketplace/template/package.json +11 -18
  169. package/src/templates/web/marketplace/template/postcss.config.mjs +8 -0
  170. package/src/templates/web/marketplace/template/src/app/cart/page.tsx +147 -147
  171. package/src/templates/web/marketplace/template/src/app/dashboard/page.tsx +149 -149
  172. package/src/templates/web/marketplace/template/src/app/error.tsx +7 -7
  173. package/src/templates/web/marketplace/template/src/app/globals.css +97 -20
  174. package/src/templates/web/marketplace/template/src/app/layout.tsx +3 -0
  175. package/src/templates/web/marketplace/template/src/app/loading.tsx +5 -5
  176. package/src/templates/web/marketplace/template/src/app/page.tsx +370 -169
  177. package/src/templates/web/marketplace/template/src/app/products/page.tsx +129 -129
  178. package/src/templates/web/marketplace/template/src/components/providers/app-providers.tsx +5 -2
  179. package/src/templates/web/marketplace/template/src/lib/auth-server.ts +32 -33
  180. package/src/templates/web/micro-saas/template/next.config.js +14 -14
  181. package/src/templates/web/micro-saas/template/package.json +9 -8
  182. package/src/templates/web/micro-saas/template/postcss.config.mjs +8 -0
  183. package/src/templates/web/micro-saas/template/src/app/dashboard/page.tsx +145 -117
  184. package/src/templates/web/micro-saas/template/src/app/error.tsx +7 -7
  185. package/src/templates/web/micro-saas/template/src/app/globals.css +97 -20
  186. package/src/templates/web/micro-saas/template/src/app/layout.tsx +3 -0
  187. package/src/templates/web/micro-saas/template/src/app/loading.tsx +43 -27
  188. package/src/templates/web/micro-saas/template/src/app/login/page.tsx +101 -87
  189. package/src/templates/web/micro-saas/template/src/app/page.tsx +227 -137
  190. package/src/templates/web/micro-saas/template/src/app/signup/page.tsx +122 -108
  191. package/src/templates/web/micro-saas/template/src/components/providers/app-providers.tsx +5 -2
  192. package/src/templates/web/micro-saas/template/src/lib/auth-server.ts +32 -33
  193. package/src/templates/web/ui-auth/template/next.config.js +14 -12
  194. package/src/templates/web/ui-auth/template/package.json +16 -26
  195. package/src/templates/web/ui-auth/template/postcss.config.mjs +8 -0
  196. package/src/templates/web/ui-auth/template/src/app/error.tsx +67 -67
  197. package/src/templates/web/ui-auth/template/src/app/globals.css +85 -84
  198. package/src/templates/web/ui-auth/template/src/app/layout.tsx +4 -1
  199. package/src/templates/web/ui-auth/template/src/app/loading.tsx +20 -38
  200. package/src/templates/web/ui-auth/template/src/components/providers/app-providers.tsx +5 -2
  201. package/src/templates/web/ui-auth/template/tsconfig.json +27 -33
  202. package/src/templates/web/ui-auth-ai/template/next.config.js +15 -13
  203. package/src/templates/web/ui-auth-ai/template/package.json +25 -21
  204. package/src/templates/web/ui-auth-ai/template/postcss.config.mjs +8 -0
  205. package/src/templates/web/ui-auth-ai/template/src/app/error.tsx +7 -7
  206. package/src/templates/web/ui-auth-ai/template/src/app/globals.css +87 -25
  207. package/src/templates/web/ui-auth-ai/template/src/app/layout.tsx +3 -0
  208. package/src/templates/web/ui-auth-ai/template/src/app/loading.tsx +4 -4
  209. package/src/templates/web/ui-auth-ai/template/tsconfig.json +27 -28
  210. package/src/templates/web/ui-auth-payments/template/next.config.js +14 -12
  211. package/src/templates/web/ui-auth-payments/template/package.json +16 -29
  212. package/src/templates/web/ui-auth-payments/template/postcss.config.mjs +8 -0
  213. package/src/templates/web/ui-auth-payments/template/src/app/error.tsx +67 -67
  214. package/src/templates/web/ui-auth-payments/template/src/app/globals.css +89 -204
  215. package/src/templates/web/ui-auth-payments/template/src/app/layout.tsx +4 -1
  216. package/src/templates/web/ui-auth-payments/template/src/app/loading.tsx +20 -20
  217. package/src/templates/web/ui-auth-payments/template/tsconfig.json +27 -33
  218. package/src/templates/web/ui-auth-payments-ai/template/next.config.js +14 -12
  219. package/src/templates/web/ui-auth-payments-ai/template/package.json +17 -33
  220. package/src/templates/web/ui-auth-payments-ai/template/postcss.config.mjs +8 -0
  221. package/src/templates/web/ui-auth-payments-ai/template/src/app/error.tsx +67 -67
  222. package/src/templates/web/ui-auth-payments-ai/template/src/app/globals.css +85 -85
  223. package/src/templates/web/ui-auth-payments-ai/template/src/app/layout.tsx +4 -1
  224. package/src/templates/web/ui-auth-payments-ai/template/src/app/loading.tsx +20 -20
  225. package/src/templates/web/ui-auth-payments-ai/template/src/components/providers/app-providers.tsx +5 -2
  226. package/src/templates/web/ui-auth-payments-ai/template/tsconfig.json +27 -33
  227. package/src/templates/web/ui-auth-payments-audio/template/next.config.js +14 -12
  228. package/src/templates/web/ui-auth-payments-audio/template/package.json +17 -30
  229. package/src/templates/web/ui-auth-payments-audio/template/postcss.config.mjs +8 -0
  230. package/src/templates/web/ui-auth-payments-audio/template/src/app/error.tsx +67 -67
  231. package/src/templates/web/ui-auth-payments-audio/template/src/app/globals.css +85 -85
  232. package/src/templates/web/ui-auth-payments-audio/template/src/app/layout.tsx +4 -1
  233. package/src/templates/web/ui-auth-payments-audio/template/src/app/loading.tsx +20 -20
  234. package/src/templates/web/ui-auth-payments-audio/template/src/components/providers/app-providers.tsx +5 -2
  235. package/src/templates/web/ui-auth-payments-audio/template/tsconfig.json +27 -33
  236. package/src/templates/web/ui-auth-payments-video/template/next.config.js +14 -12
  237. package/src/templates/web/ui-auth-payments-video/template/package.json +17 -30
  238. package/src/templates/web/ui-auth-payments-video/template/postcss.config.mjs +8 -0
  239. package/src/templates/web/ui-auth-payments-video/template/src/app/error.tsx +67 -67
  240. package/src/templates/web/ui-auth-payments-video/template/src/app/globals.css +89 -221
  241. package/src/templates/web/ui-auth-payments-video/template/src/app/layout.tsx +4 -1
  242. package/src/templates/web/ui-auth-payments-video/template/src/app/loading.tsx +20 -20
  243. package/src/templates/web/ui-auth-payments-video/template/src/components/providers/app-providers.tsx +5 -2
  244. package/src/templates/web/ui-auth-payments-video/template/tsconfig.json +27 -33
  245. package/src/templates/web/ui-only/template/next.config.js +14 -12
  246. package/src/templates/web/ui-only/template/package.json +15 -25
  247. package/src/templates/web/ui-only/template/postcss.config.mjs +8 -0
  248. package/src/templates/web/ui-only/template/src/app/error.tsx +67 -67
  249. package/src/templates/web/ui-only/template/src/app/globals.css +85 -31
  250. package/src/templates/web/ui-only/template/src/app/layout.tsx +4 -1
  251. package/src/templates/web/ui-only/template/src/app/loading.tsx +20 -20
  252. package/src/templates/web/ui-only/template/src/components/providers/app-providers.tsx +20 -26
  253. package/src/templates/web/ui-only/template/tsconfig.json +27 -33
  254. package/dist/templates/web/ai-platform/template/middleware.ts +0 -55
  255. package/dist/templates/web/ai-platform/template/src/lib/supabase/client.ts +0 -8
  256. package/dist/templates/web/ai-platform/template/src/lib/supabase/server.ts +0 -27
  257. package/dist/templates/web/base/template/postcss.config.js +0 -7
  258. package/dist/templates/web/base/template/tailwind.config.js +0 -77
  259. package/dist/templates/web/iot-dashboard/template/middleware.ts +0 -56
  260. package/dist/templates/web/iot-dashboard/template/src/lib/supabase/client.ts +0 -8
  261. package/dist/templates/web/iot-dashboard/template/src/lib/supabase/server.ts +0 -27
  262. package/dist/templates/web/marketplace/template/middleware.ts +0 -56
  263. package/dist/templates/web/marketplace/template/src/lib/supabase/client.ts +0 -8
  264. package/dist/templates/web/marketplace/template/src/lib/supabase/server.ts +0 -27
  265. package/dist/templates/web/micro-saas/template/middleware.ts +0 -53
  266. package/dist/templates/web/micro-saas/template/src/lib/supabase/client.ts +0 -8
  267. package/dist/templates/web/micro-saas/template/src/lib/supabase/server.ts +0 -29
  268. package/dist/templates/web/ui-auth/template/.claude +0 -21
  269. package/dist/templates/web/ui-auth/template/context.md +0 -105
  270. package/dist/templates/web/ui-auth/template/postcss.config.js +0 -7
  271. package/dist/templates/web/ui-auth/template/tailwind.config.js +0 -77
  272. package/dist/templates/web/ui-auth-ai/template/postcss.config.js +0 -6
  273. package/dist/templates/web/ui-auth-ai/template/tailwind.config.js +0 -22
  274. package/dist/templates/web/ui-auth-payments/template/middleware.ts +0 -68
  275. package/dist/templates/web/ui-auth-payments/template/package-lock.json +0 -12240
  276. package/dist/templates/web/ui-auth-payments/template/postcss.config.js +0 -7
  277. package/dist/templates/web/ui-auth-payments/template/tailwind.config.js +0 -77
  278. package/dist/templates/web/ui-auth-payments/template/tsconfig.tsbuildinfo +0 -1
  279. package/dist/templates/web/ui-auth-payments-ai/template/.claude +0 -21
  280. package/dist/templates/web/ui-auth-payments-ai/template/context.md +0 -169
  281. package/dist/templates/web/ui-auth-payments-ai/template/middleware.ts +0 -68
  282. package/dist/templates/web/ui-auth-payments-ai/template/package-lock.json +0 -12241
  283. package/dist/templates/web/ui-auth-payments-ai/template/postcss.config.js +0 -7
  284. package/dist/templates/web/ui-auth-payments-ai/template/tailwind.config.js +0 -77
  285. package/dist/templates/web/ui-auth-payments-ai/template/tsconfig.tsbuildinfo +0 -1
  286. package/dist/templates/web/ui-auth-payments-audio/template/middleware.ts +0 -68
  287. package/dist/templates/web/ui-auth-payments-audio/template/package-lock.json +0 -12241
  288. package/dist/templates/web/ui-auth-payments-audio/template/postcss.config.js +0 -7
  289. package/dist/templates/web/ui-auth-payments-audio/template/tailwind.config.js +0 -77
  290. package/dist/templates/web/ui-auth-payments-audio/template/tsconfig.tsbuildinfo +0 -1
  291. package/dist/templates/web/ui-auth-payments-video/template/postcss.config.js +0 -7
  292. package/dist/templates/web/ui-auth-payments-video/template/tailwind.config.js +0 -77
  293. package/dist/templates/web/ui-only/template/postcss.config.js +0 -7
  294. package/dist/templates/web/ui-only/template/tailwind.config.js +0 -77
  295. package/src/templates/web/ai-platform/template/middleware.ts +0 -55
  296. package/src/templates/web/ai-platform/template/src/lib/supabase/client.ts +0 -8
  297. package/src/templates/web/ai-platform/template/src/lib/supabase/server.ts +0 -27
  298. package/src/templates/web/base/template/postcss.config.js +0 -7
  299. package/src/templates/web/base/template/tailwind.config.js +0 -77
  300. package/src/templates/web/iot-dashboard/template/middleware.ts +0 -56
  301. package/src/templates/web/iot-dashboard/template/src/lib/supabase/client.ts +0 -8
  302. package/src/templates/web/iot-dashboard/template/src/lib/supabase/server.ts +0 -27
  303. package/src/templates/web/marketplace/template/middleware.ts +0 -56
  304. package/src/templates/web/marketplace/template/src/lib/supabase/client.ts +0 -8
  305. package/src/templates/web/marketplace/template/src/lib/supabase/server.ts +0 -27
  306. package/src/templates/web/micro-saas/template/middleware.ts +0 -53
  307. package/src/templates/web/micro-saas/template/src/lib/supabase/client.ts +0 -8
  308. package/src/templates/web/micro-saas/template/src/lib/supabase/server.ts +0 -29
  309. package/src/templates/web/ui-auth/template/.claude +0 -21
  310. package/src/templates/web/ui-auth/template/context.md +0 -105
  311. package/src/templates/web/ui-auth/template/postcss.config.js +0 -7
  312. package/src/templates/web/ui-auth/template/tailwind.config.js +0 -77
  313. package/src/templates/web/ui-auth-ai/template/postcss.config.js +0 -6
  314. package/src/templates/web/ui-auth-ai/template/tailwind.config.js +0 -22
  315. package/src/templates/web/ui-auth-payments/template/middleware.ts +0 -68
  316. package/src/templates/web/ui-auth-payments/template/package-lock.json +0 -12240
  317. package/src/templates/web/ui-auth-payments/template/postcss.config.js +0 -7
  318. package/src/templates/web/ui-auth-payments/template/tailwind.config.js +0 -77
  319. package/src/templates/web/ui-auth-payments/template/tsconfig.tsbuildinfo +0 -1
  320. package/src/templates/web/ui-auth-payments-ai/template/.claude +0 -21
  321. package/src/templates/web/ui-auth-payments-ai/template/context.md +0 -169
  322. package/src/templates/web/ui-auth-payments-ai/template/middleware.ts +0 -68
  323. package/src/templates/web/ui-auth-payments-ai/template/package-lock.json +0 -12241
  324. package/src/templates/web/ui-auth-payments-ai/template/postcss.config.js +0 -7
  325. package/src/templates/web/ui-auth-payments-ai/template/tailwind.config.js +0 -77
  326. package/src/templates/web/ui-auth-payments-ai/template/tsconfig.tsbuildinfo +0 -1
  327. package/src/templates/web/ui-auth-payments-audio/template/middleware.ts +0 -68
  328. package/src/templates/web/ui-auth-payments-audio/template/package-lock.json +0 -12241
  329. package/src/templates/web/ui-auth-payments-audio/template/postcss.config.js +0 -7
  330. package/src/templates/web/ui-auth-payments-audio/template/tailwind.config.js +0 -77
  331. package/src/templates/web/ui-auth-payments-audio/template/tsconfig.tsbuildinfo +0 -1
  332. package/src/templates/web/ui-auth-payments-video/template/postcss.config.js +0 -7
  333. package/src/templates/web/ui-auth-payments-video/template/tailwind.config.js +0 -77
  334. package/src/templates/web/ui-only/template/postcss.config.js +0 -7
  335. package/src/templates/web/ui-only/template/tailwind.config.js +0 -77
  336. /package/dist/templates/shared/admin/web/{components → src/components}/admin-nav.tsx +0 -0
  337. /package/dist/templates/shared/auth/keycloak/web/{auth.config.ts → src/auth.config.ts} +0 -0
  338. /package/dist/templates/shared/auth/keycloak/web/{auth.ts → src/auth.ts} +0 -0
  339. /package/dist/templates/shared/middleware/web/{middleware.ts → src/middleware.ts} +0 -0
  340. /package/src/templates/shared/admin/web/{components → src/components}/admin-nav.tsx +0 -0
  341. /package/src/templates/shared/auth/keycloak/web/{auth.config.ts → src/auth.config.ts} +0 -0
  342. /package/src/templates/shared/auth/keycloak/web/{auth.ts → src/auth.ts} +0 -0
  343. /package/src/templates/shared/middleware/web/{middleware.ts → src/middleware.ts} +0 -0
@@ -1,169 +1,370 @@
1
- 'use client'
2
-
3
- import { Button, Card, GradientBorderCard } from '@digilogiclabs/saas-factory-ui'
4
- import { useAuth } from '@digilogiclabs/app-sdk'
5
- import { ShoppingCart, Store, Search, Star, ArrowRight, User, LogOut } from 'lucide-react'
6
- import Link from 'next/link'
7
- import { useState } from 'react'
8
-
9
- const FEATURED_PRODUCTS = [
10
- { id: 1, name: 'Premium Widget', price: 49.99, vendor: 'TechCo', rating: 4.8, image: '/placeholder.jpg' },
11
- { id: 2, name: 'Pro Toolkit', price: 129.99, vendor: 'DevTools', rating: 4.9, image: '/placeholder.jpg' },
12
- { id: 3, name: 'Designer Pack', price: 79.99, vendor: 'CreativeStudio', rating: 4.7, image: '/placeholder.jpg' },
13
- { id: 4, name: 'Analytics Suite', price: 199.99, vendor: 'DataCorp', rating: 4.6, image: '/placeholder.jpg' },
14
- ]
15
-
16
- const CATEGORIES = [
17
- { name: 'Software', count: 234, icon: '💻' },
18
- { name: 'Templates', count: 156, icon: '📄' },
19
- { name: 'Services', count: 89, icon: '🔧' },
20
- { name: 'Courses', count: 67, icon: '📚' },
21
- ]
22
-
23
- export default function Home() {
24
- const { user, signOut, loading } = useAuth()
25
- const [searchQuery, setSearchQuery] = useState('')
26
-
27
- const projectName = "{{titleCaseName}}"
28
-
29
- const handleSignOut = async () => {
30
- try {
31
- await signOut()
32
- } catch (err) {
33
- console.error('Sign out error:', err)
34
- }
35
- }
36
-
37
- return (
38
- <main className="min-h-screen bg-gray-50 dark:bg-gray-900">
39
- {/* Header */}
40
- <header className="bg-white dark:bg-gray-800 border-b border-gray-200 dark:border-gray-700 sticky top-0 z-50">
41
- <div className="max-w-7xl mx-auto px-4 py-4">
42
- <div className="flex items-center justify-between">
43
- <Link href="/" className="text-2xl font-bold text-gray-900 dark:text-white">
44
- {projectName}
45
- </Link>
46
-
47
- {/* Search */}
48
- <div className="flex-1 max-w-xl mx-8">
49
- <div className="relative">
50
- <Search className="absolute left-3 top-1/2 -translate-y-1/2 w-5 h-5 text-gray-400" />
51
- <input
52
- type="text"
53
- placeholder="Search products..."
54
- value={searchQuery}
55
- onChange={(e) => setSearchQuery(e.target.value)}
56
- className="w-full pl-10 pr-4 py-2 border border-gray-300 dark:border-gray-600 rounded-lg focus:ring-2 focus:ring-blue-500 dark:bg-gray-700 dark:text-white"
57
- />
58
- </div>
59
- </div>
60
-
61
- {/* Actions */}
62
- <div className="flex items-center gap-4">
63
- <Link href="/cart">
64
- <Button variant="outline" size="sm">
65
- <ShoppingCart className="w-4 h-4 mr-2" />
66
- Cart
67
- </Button>
68
- </Link>
69
- {loading ? (
70
- <div className="text-sm text-gray-600">Loading...</div>
71
- ) : user ? (
72
- <div className="flex items-center gap-2">
73
- <Link href="/dashboard">
74
- <Button variant="outline" size="sm">
75
- <User className="w-4 h-4 mr-2" />
76
- Dashboard
77
- </Button>
78
- </Link>
79
- <Button variant="ghost" size="sm" onClick={handleSignOut}>
80
- <LogOut className="w-4 h-4" />
81
- </Button>
82
- </div>
83
- ) : (
84
- <div className="flex gap-2">
85
- <Link href="/login">
86
- <Button variant="outline" size="sm">Sign In</Button>
87
- </Link>
88
- <Link href="/signup">
89
- <Button size="sm">Get Started</Button>
90
- </Link>
91
- </div>
92
- )}
93
- </div>
94
- </div>
95
- </div>
96
- </header>
97
-
98
- <div className="max-w-7xl mx-auto px-4 py-8">
99
- {/* Hero */}
100
- <div className="text-center mb-12">
101
- <h1 className="text-4xl md:text-5xl font-bold text-gray-900 dark:text-white mb-4">
102
- Your Digital Marketplace
103
- </h1>
104
- <p className="text-xl text-gray-600 dark:text-gray-300 max-w-2xl mx-auto">
105
- Discover amazing products from verified vendors. Buy and sell with confidence.
106
- </p>
107
- </div>
108
-
109
- {/* Categories */}
110
- <div className="grid grid-cols-2 md:grid-cols-4 gap-4 mb-12">
111
- {CATEGORIES.map((category) => (
112
- <Card key={category.name} className="p-6 text-center hover:shadow-lg transition-shadow cursor-pointer">
113
- <div className="text-4xl mb-3">{category.icon}</div>
114
- <h3 className="font-semibold text-gray-900 dark:text-white">{category.name}</h3>
115
- <p className="text-sm text-gray-500">{category.count} items</p>
116
- </Card>
117
- ))}
118
- </div>
119
-
120
- {/* Featured Products */}
121
- <div className="mb-12">
122
- <div className="flex items-center justify-between mb-6">
123
- <h2 className="text-2xl font-bold text-gray-900 dark:text-white">Featured Products</h2>
124
- <Link href="/products">
125
- <Button variant="ghost">
126
- View All
127
- <ArrowRight className="w-4 h-4 ml-2" />
128
- </Button>
129
- </Link>
130
- </div>
131
-
132
- <div className="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-6">
133
- {FEATURED_PRODUCTS.map((product) => (
134
- <Card key={product.id} className="overflow-hidden hover:shadow-lg transition-shadow">
135
- <div className="aspect-square bg-gray-100 dark:bg-gray-700" />
136
- <div className="p-4">
137
- <h3 className="font-semibold text-gray-900 dark:text-white mb-1">{product.name}</h3>
138
- <p className="text-sm text-gray-500 mb-2">by {product.vendor}</p>
139
- <div className="flex items-center justify-between">
140
- <span className="text-lg font-bold text-blue-600">${product.price}</span>
141
- <div className="flex items-center text-yellow-500">
142
- <Star className="w-4 h-4 fill-current" />
143
- <span className="text-sm ml-1">{product.rating}</span>
144
- </div>
145
- </div>
146
- <Button className="w-full mt-3" size="sm">Add to Cart</Button>
147
- </div>
148
- </Card>
149
- ))}
150
- </div>
151
- </div>
152
-
153
- {/* Become a Vendor CTA */}
154
- <GradientBorderCard gradientColors="from-blue-500 via-purple-500 to-blue-500" borderWidth={2}>
155
- <div className="text-center">
156
- <Store className="w-12 h-12 mx-auto mb-4 text-blue-600 dark:text-blue-400" />
157
- <h2 className="text-2xl font-bold text-gray-900 dark:text-white mb-2">Become a Vendor</h2>
158
- <p className="mb-6 text-gray-600 dark:text-gray-300 max-w-md mx-auto">
159
- Start selling your products to thousands of customers. Low fees, powerful tools.
160
- </p>
161
- <Link href="/vendors/apply">
162
- <Button size="lg">Apply Now</Button>
163
- </Link>
164
- </div>
165
- </GradientBorderCard>
166
- </div>
167
- </main>
168
- )
169
- }
1
+ 'use client'
2
+
3
+ import { Button, Card, CardContent } from '@digilogiclabs/saas-factory-ui'
4
+ import { ArrowRight, Search, Star, Store, ShoppingCart, Code, FileText, Wrench, GraduationCap, Sun, Moon, ShoppingBag } from 'lucide-react'
5
+ import { useTheme } from 'next-themes'
6
+ import Link from 'next/link'
7
+ import { useEffect, useState } from 'react'
8
+
9
+ const CATEGORIES = [
10
+ {
11
+ name: 'Software',
12
+ description: 'Apps, plugins & tools',
13
+ count: 234,
14
+ icon: Code,
15
+ color: 'text-blue-500 group-hover:text-blue-400',
16
+ bg: 'bg-blue-500/10 group-hover:bg-blue-500/20',
17
+ border: 'group-hover:border-blue-500/30',
18
+ },
19
+ {
20
+ name: 'Templates',
21
+ description: 'Themes, kits & starters',
22
+ count: 156,
23
+ icon: FileText,
24
+ color: 'text-violet-500 group-hover:text-violet-400',
25
+ bg: 'bg-violet-500/10 group-hover:bg-violet-500/20',
26
+ border: 'group-hover:border-violet-500/30',
27
+ },
28
+ {
29
+ name: 'Services',
30
+ description: 'Freelance & consulting',
31
+ count: 89,
32
+ icon: Wrench,
33
+ color: 'text-amber-500 group-hover:text-amber-400',
34
+ bg: 'bg-amber-500/10 group-hover:bg-amber-500/20',
35
+ border: 'group-hover:border-amber-500/30',
36
+ },
37
+ {
38
+ name: 'Courses',
39
+ description: 'Learn new skills',
40
+ count: 67,
41
+ icon: GraduationCap,
42
+ color: 'text-emerald-500 group-hover:text-emerald-400',
43
+ bg: 'bg-emerald-500/10 group-hover:bg-emerald-500/20',
44
+ border: 'group-hover:border-emerald-500/30',
45
+ },
46
+ ]
47
+
48
+ const FEATURED_PRODUCTS = [
49
+ {
50
+ id: 1,
51
+ name: 'Premium UI Kit',
52
+ price: 49.99,
53
+ vendor: 'DesignCraft',
54
+ rating: 4.8,
55
+ reviews: 124,
56
+ tag: 'Best Seller',
57
+ },
58
+ {
59
+ id: 2,
60
+ name: 'DevOps Toolkit Pro',
61
+ price: 129.99,
62
+ vendor: 'CloudForge',
63
+ rating: 4.9,
64
+ reviews: 87,
65
+ tag: 'New',
66
+ },
67
+ {
68
+ id: 3,
69
+ name: 'Icon Library Plus',
70
+ price: 29.99,
71
+ vendor: 'PixelWorks',
72
+ rating: 4.7,
73
+ reviews: 203,
74
+ tag: 'Popular',
75
+ },
76
+ {
77
+ id: 4,
78
+ name: 'Analytics Dashboard',
79
+ price: 199.99,
80
+ vendor: 'DataViz Co',
81
+ rating: 4.6,
82
+ reviews: 56,
83
+ tag: 'Featured',
84
+ },
85
+ ]
86
+
87
+ function ThemeToggle() {
88
+ const { theme, setTheme } = useTheme()
89
+ const [mounted, setMounted] = useState(false)
90
+ useEffect(() => setMounted(true), [])
91
+ if (!mounted) return <div className="w-9 h-9" />
92
+ return (
93
+ <button
94
+ onClick={() => setTheme(theme === 'dark' ? 'light' : 'dark')}
95
+ 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"
96
+ aria-label="Toggle theme"
97
+ >
98
+ {theme === 'dark' ? <Sun className="w-4 h-4" /> : <Moon className="w-4 h-4" />}
99
+ </button>
100
+ )
101
+ }
102
+
103
+ function StarRating({ rating, reviews }: { rating: number; reviews: number }) {
104
+ return (
105
+ <div className="flex items-center gap-1.5">
106
+ <div className="flex items-center">
107
+ {[...Array(5)].map((_, i) => (
108
+ <Star
109
+ key={i}
110
+ className={`w-3.5 h-3.5 ${
111
+ i < Math.floor(rating)
112
+ ? 'text-amber-500 fill-amber-500'
113
+ : i < rating
114
+ ? 'text-amber-500 fill-amber-500/50'
115
+ : 'text-muted-foreground/30'
116
+ }`}
117
+ />
118
+ ))}
119
+ </div>
120
+ <span className="text-xs text-muted-foreground">({reviews})</span>
121
+ </div>
122
+ )
123
+ }
124
+
125
+ export default function Home() {
126
+ const [searchQuery, setSearchQuery] = useState('')
127
+
128
+ return (
129
+ <main id="main-content" className="min-h-screen bg-background text-foreground">
130
+ {/* Nav */}
131
+ <nav className="sticky top-0 z-50 border-b border-border bg-background/80 backdrop-blur-lg">
132
+ <div className="max-w-6xl mx-auto px-4 sm:px-6 h-16 flex items-center justify-between gap-4">
133
+ <Link href="/" className="flex items-center gap-2 hover:opacity-80 active:scale-[0.97] transition-all duration-200 flex-shrink-0">
134
+ <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">
135
+ <Store className="w-4 h-4 text-white" />
136
+ </div>
137
+ <span className="font-bold text-lg hidden sm:inline">{'{{titleCaseName}}'}</span>
138
+ </Link>
139
+
140
+ {/* Search */}
141
+ <div className="flex-1 max-w-md mx-2 sm:mx-4">
142
+ <div className="relative">
143
+ <Search className="absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4 text-muted-foreground" />
144
+ <input
145
+ type="text"
146
+ placeholder="Search products..."
147
+ value={searchQuery}
148
+ onChange={(e) => setSearchQuery(e.target.value)}
149
+ className="w-full pl-9 pr-4 py-2 text-sm rounded-lg border border-border bg-muted/50 text-foreground placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-primary/30 focus:border-primary/50 transition-all duration-200"
150
+ />
151
+ </div>
152
+ </div>
153
+
154
+ <div className="flex items-center gap-2 flex-shrink-0">
155
+ <ThemeToggle />
156
+ <Link href="/login">
157
+ <Button variant="ghost" size="sm" className="hover:bg-accent active:scale-95 transition-all duration-200 cursor-pointer">Sign In</Button>
158
+ </Link>
159
+ <Link href="/signup">
160
+ <Button size="sm" className="bg-gradient-to-r from-brand-from to-brand-to text-white hover:brightness-110 active:scale-95 transition-all duration-200 cursor-pointer shadow-sm hover:shadow-md">Get Started</Button>
161
+ </Link>
162
+ </div>
163
+ </div>
164
+ </nav>
165
+
166
+ {/* Hero */}
167
+ <section className="relative overflow-hidden">
168
+ <div className="absolute inset-0 bg-gradient-to-b from-primary/5 to-transparent" />
169
+ <div className="relative max-w-6xl mx-auto px-4 sm:px-6 pt-16 sm:pt-24 pb-16 text-center">
170
+ <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">
171
+ <ShoppingBag className="w-3.5 h-3.5 text-primary" />
172
+ Multi-Vendor Digital Marketplace
173
+ </div>
174
+ <h1 className="text-4xl sm:text-5xl lg:text-6xl font-extrabold tracking-tight mb-6">
175
+ Discover, Buy &amp; Sell
176
+ <br />
177
+ <span className="text-primary">
178
+ Digital Products
179
+ </span>
180
+ </h1>
181
+ <p className="text-lg sm:text-xl text-muted-foreground max-w-2xl mx-auto mb-10 leading-relaxed">
182
+ A curated marketplace connecting creators with customers.
183
+ Find premium software, templates, services, and courses from verified vendors.
184
+ </p>
185
+ <div className="flex flex-col sm:flex-row gap-3 justify-center">
186
+ <Link href="/signup">
187
+ <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">
188
+ Start Shopping
189
+ <ArrowRight className="w-4 h-4 ml-2" />
190
+ </Button>
191
+ </Link>
192
+ <Link href="/vendors/apply">
193
+ <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">
194
+ Become a Vendor
195
+ </Button>
196
+ </Link>
197
+ </div>
198
+ </div>
199
+ </section>
200
+
201
+ {/* Categories */}
202
+ <section className="max-w-6xl mx-auto px-4 sm:px-6 py-16 sm:py-24">
203
+ <div className="text-center mb-12 sm:mb-16">
204
+ <h2 className="text-3xl sm:text-4xl font-bold mb-4">Browse by Category</h2>
205
+ <p className="text-muted-foreground text-lg max-w-xl mx-auto">
206
+ Explore thousands of digital products across popular categories.
207
+ </p>
208
+ </div>
209
+ <div className="grid grid-cols-2 lg:grid-cols-4 gap-4 sm:gap-6">
210
+ {CATEGORIES.map((category) => (
211
+ <Card key={category.name} className={`group cursor-default hover:shadow-xl hover:-translate-y-1 ${category.border} transition-all duration-300`}>
212
+ <CardContent className="p-6 sm:p-8 text-center">
213
+ <div className={`w-14 h-14 ${category.bg} rounded-xl flex items-center justify-center mx-auto mb-4 transition-colors duration-300`}>
214
+ <category.icon className={`w-7 h-7 ${category.color} transition-colors duration-300`} />
215
+ </div>
216
+ <h3 className="text-lg font-semibold mb-1 group-hover:text-primary transition-colors duration-200">{category.name}</h3>
217
+ <p className="text-sm text-muted-foreground mb-2">{category.description}</p>
218
+ <span className="text-xs font-medium text-primary">{category.count} products</span>
219
+ </CardContent>
220
+ </Card>
221
+ ))}
222
+ </div>
223
+ </section>
224
+
225
+ {/* Featured Products */}
226
+ <section className="bg-muted/50">
227
+ <div className="max-w-6xl mx-auto px-4 sm:px-6 py-16 sm:py-24">
228
+ <div className="flex items-center justify-between mb-12">
229
+ <div>
230
+ <h2 className="text-3xl sm:text-4xl font-bold mb-2">Featured Products</h2>
231
+ <p className="text-muted-foreground text-lg">Hand-picked by our team, loved by our community.</p>
232
+ </div>
233
+ <Link href="/products" className="hidden sm:inline-flex">
234
+ <Button variant="ghost" className="hover:bg-accent active:scale-[0.97] transition-all duration-200 cursor-pointer">
235
+ View All
236
+ <ArrowRight className="w-4 h-4 ml-2" />
237
+ </Button>
238
+ </Link>
239
+ </div>
240
+
241
+ <div className="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-6">
242
+ {FEATURED_PRODUCTS.map((product) => (
243
+ <Card key={product.id} className="group cursor-default hover:shadow-xl hover:-translate-y-1 transition-all duration-300 overflow-hidden">
244
+ <CardContent className="p-0">
245
+ {/* Image placeholder */}
246
+ <div className="relative aspect-[4/3] bg-gradient-to-br from-primary/10 via-muted to-accent overflow-hidden">
247
+ <div className="absolute inset-0 flex items-center justify-center">
248
+ <div className="w-16 h-16 rounded-2xl bg-background/60 backdrop-blur-sm flex items-center justify-center border border-border/50 group-hover:scale-110 transition-transform duration-300">
249
+ <ShoppingBag className="w-8 h-8 text-primary/40" />
250
+ </div>
251
+ </div>
252
+ <div className="absolute top-3 left-3">
253
+ <span className="px-2.5 py-1 rounded-full bg-primary text-primary-foreground text-xs font-semibold shadow-sm">
254
+ {product.tag}
255
+ </span>
256
+ </div>
257
+ </div>
258
+
259
+ <div className="p-5">
260
+ <div className="flex items-start justify-between gap-2 mb-2">
261
+ <div>
262
+ <h3 className="font-semibold group-hover:text-primary transition-colors duration-200">
263
+ {product.name}
264
+ </h3>
265
+ <p className="text-sm text-muted-foreground">by {product.vendor}</p>
266
+ </div>
267
+ </div>
268
+
269
+ <StarRating rating={product.rating} reviews={product.reviews} />
270
+
271
+ <div className="flex items-center justify-between mt-4 pt-4 border-t border-border">
272
+ <span className="text-xl font-bold text-primary">${product.price}</span>
273
+ <Button size="sm" className="bg-gradient-to-r from-brand-from to-brand-to text-white hover:brightness-110 active:scale-95 transition-all duration-200 cursor-pointer shadow-sm hover:shadow-md">
274
+ <ShoppingCart className="w-3.5 h-3.5 mr-1.5" />
275
+ Add to Cart
276
+ </Button>
277
+ </div>
278
+ </div>
279
+ </CardContent>
280
+ </Card>
281
+ ))}
282
+ </div>
283
+
284
+ <div className="mt-8 text-center sm:hidden">
285
+ <Link href="/products">
286
+ <Button variant="outline" className="hover:bg-accent active:scale-[0.97] transition-all duration-200 cursor-pointer">
287
+ View All Products
288
+ <ArrowRight className="w-4 h-4 ml-2" />
289
+ </Button>
290
+ </Link>
291
+ </div>
292
+ </div>
293
+ </section>
294
+
295
+ {/* Vendor CTA */}
296
+ <section className="max-w-6xl mx-auto px-4 sm:px-6 py-16 sm:py-24">
297
+ <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 hover:shadow-2xl hover:shadow-primary/20 transition-shadow duration-500">
298
+ <div className="grid lg:grid-cols-2 gap-8 items-center">
299
+ <div>
300
+ <h2 className="text-3xl sm:text-4xl font-bold mb-4">Start Selling Today</h2>
301
+ <p className="text-white/80 text-lg mb-6 leading-relaxed">
302
+ Join thousands of vendors earning revenue on our platform.
303
+ Low fees, powerful analytics, and a growing customer base ready to discover your products.
304
+ </p>
305
+ <div className="flex flex-col sm:flex-row gap-3">
306
+ <Link href="/vendors/apply">
307
+ <Button variant="secondary" size="lg" className="w-full sm:w-auto 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">
308
+ Apply as Vendor
309
+ <ArrowRight className="w-4 h-4 ml-2" />
310
+ </Button>
311
+ </Link>
312
+ <Link href="/vendors/learn-more">
313
+ <Button variant="ghost" size="lg" className="w-full sm:w-auto px-8 h-12 text-base text-white hover:bg-white/10 active:scale-[0.97] transition-all duration-200 cursor-pointer">
314
+ Learn More
315
+ </Button>
316
+ </Link>
317
+ </div>
318
+ </div>
319
+ <div className="grid grid-cols-2 gap-4">
320
+ {[
321
+ { label: 'Active Vendors', value: '2,400+' },
322
+ { label: 'Products Listed', value: '12,000+' },
323
+ { label: 'Happy Customers', value: '85,000+' },
324
+ { label: 'Avg. Vendor Revenue', value: '$3.2k/mo' },
325
+ ].map((stat) => (
326
+ <div key={stat.label} className="rounded-xl bg-white/10 backdrop-blur-sm p-4 text-center hover:bg-white/15 transition-colors duration-200">
327
+ <div className="text-2xl sm:text-3xl font-bold mb-1">{stat.value}</div>
328
+ <div className="text-sm text-white/70">{stat.label}</div>
329
+ </div>
330
+ ))}
331
+ </div>
332
+ </div>
333
+ </div>
334
+ </section>
335
+
336
+ {/* Footer */}
337
+ <footer className="border-t border-border">
338
+ <div className="max-w-6xl mx-auto px-4 sm:px-6 py-8">
339
+ <div className="flex flex-col sm:flex-row items-center justify-between gap-6">
340
+ <Link href="/" className="flex items-center gap-2 hover:opacity-80 active:scale-[0.97] transition-all duration-200">
341
+ <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">
342
+ <Store className="w-3 h-3 text-white" />
343
+ </div>
344
+ <span className="text-sm font-medium">{'{{titleCaseName}}'}</span>
345
+ </Link>
346
+ <nav className="flex items-center gap-6">
347
+ <Link href="/products" className="text-sm text-muted-foreground hover:text-foreground transition-colors">
348
+ Products
349
+ </Link>
350
+ <Link href="/vendors" className="text-sm text-muted-foreground hover:text-foreground transition-colors">
351
+ Vendors
352
+ </Link>
353
+ <Link href="/contact" className="text-sm text-muted-foreground hover:text-foreground transition-colors">
354
+ Contact
355
+ </Link>
356
+ <Link href="/login" className="text-sm text-muted-foreground hover:text-foreground transition-colors">
357
+ Sign In
358
+ </Link>
359
+ </nav>
360
+ </div>
361
+ <div className="mt-6 pt-6 border-t border-border text-center">
362
+ <p className="text-xs text-muted-foreground">
363
+ Built with DLL Platform. Ship fast, own everything.
364
+ </p>
365
+ </div>
366
+ </div>
367
+ </footer>
368
+ </main>
369
+ )
370
+ }