@digilogiclabs/create-saas-app 2.9.1 → 2.11.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 (377) hide show
  1. package/README.md +153 -113
  2. package/dist/.tsbuildinfo +1 -1
  3. package/dist/cli/commands/create.d.ts.map +1 -1
  4. package/dist/cli/commands/create.js +2 -6
  5. package/dist/cli/commands/create.js.map +1 -1
  6. package/dist/generators/template-generator.d.ts.map +1 -1
  7. package/dist/generators/template-generator.js +6 -3
  8. package/dist/generators/template-generator.js.map +1 -1
  9. package/dist/templates/shared/auth/supabase/web/src/middleware.ts +63 -0
  10. package/dist/templates/shared/database/supabase/web/src/lib/supabase/server.ts +3 -1
  11. package/dist/templates/shared/design/web/src/config/design.config.ts +14 -14
  12. package/dist/templates/shared/landing/web/src/components/LandingPage.tsx +0 -3
  13. package/dist/templates/shared/security/web/src/lib/api-security.ts +2 -2
  14. package/dist/templates/web/ai-platform/template/next.config.js +14 -14
  15. package/dist/templates/web/ai-platform/template/package.json +11 -22
  16. package/dist/templates/web/ai-platform/template/postcss.config.mjs +8 -0
  17. package/dist/templates/web/ai-platform/template/src/app/api/auth/route.ts +57 -0
  18. package/dist/templates/web/ai-platform/template/src/app/chat/page.tsx +234 -235
  19. package/dist/templates/web/ai-platform/template/src/app/dashboard/page.tsx +142 -142
  20. package/dist/templates/web/ai-platform/template/src/app/error.tsx +13 -13
  21. package/dist/templates/web/ai-platform/template/src/app/globals.css +97 -34
  22. package/dist/templates/web/ai-platform/template/src/app/layout.tsx +3 -0
  23. package/dist/templates/web/ai-platform/template/src/app/loading.tsx +22 -22
  24. package/dist/templates/web/ai-platform/template/src/app/login/page.tsx +112 -0
  25. package/dist/templates/web/ai-platform/template/src/app/models/page.tsx +186 -0
  26. package/dist/templates/web/ai-platform/template/src/app/page.tsx +248 -154
  27. package/dist/templates/web/ai-platform/template/src/app/playground/page.tsx +251 -0
  28. package/dist/templates/web/ai-platform/template/src/app/settings/page.tsx +190 -0
  29. package/dist/templates/web/ai-platform/template/src/app/signup/page.tsx +133 -0
  30. package/dist/templates/web/ai-platform/template/src/lib/auth-server.ts +32 -33
  31. package/dist/templates/web/ai-platform/template/src/lib/auth-session.ts +52 -0
  32. package/dist/templates/web/base/template/next.config.js +14 -15
  33. package/dist/templates/web/base/template/package.json +16 -31
  34. package/dist/templates/web/base/template/postcss.config.mjs +8 -0
  35. package/dist/templates/web/base/template/src/app/error.tsx +97 -97
  36. package/dist/templates/web/base/template/src/app/globals.css +87 -148
  37. package/dist/templates/web/base/template/src/app/layout.tsx +4 -1
  38. package/dist/templates/web/base/template/src/app/loading.tsx +52 -52
  39. package/dist/templates/web/base/template/tsconfig.json +27 -33
  40. package/dist/templates/web/iot-dashboard/template/next.config.js +14 -14
  41. package/dist/templates/web/iot-dashboard/template/package.json +12 -16
  42. package/dist/templates/web/iot-dashboard/template/postcss.config.mjs +8 -0
  43. package/dist/templates/web/iot-dashboard/template/src/app/alerts/page.tsx +157 -0
  44. package/dist/templates/web/iot-dashboard/template/src/app/api/auth/route.ts +57 -0
  45. package/dist/templates/web/iot-dashboard/template/src/app/dashboard/page.tsx +224 -224
  46. package/dist/templates/web/iot-dashboard/template/src/app/devices/[id]/page.tsx +204 -0
  47. package/dist/templates/web/iot-dashboard/template/src/app/devices/new/page.tsx +139 -0
  48. package/dist/templates/web/iot-dashboard/template/src/app/devices/page.tsx +171 -0
  49. package/dist/templates/web/iot-dashboard/template/src/app/error.tsx +8 -8
  50. package/dist/templates/web/iot-dashboard/template/src/app/globals.css +97 -20
  51. package/dist/templates/web/iot-dashboard/template/src/app/layout.tsx +3 -0
  52. package/dist/templates/web/iot-dashboard/template/src/app/loading.tsx +5 -5
  53. package/dist/templates/web/iot-dashboard/template/src/app/login/page.tsx +112 -0
  54. package/dist/templates/web/iot-dashboard/template/src/app/page.tsx +266 -189
  55. package/dist/templates/web/iot-dashboard/template/src/app/settings/page.tsx +186 -0
  56. package/dist/templates/web/iot-dashboard/template/src/app/signup/page.tsx +133 -0
  57. package/dist/templates/web/iot-dashboard/template/src/lib/auth-server.ts +32 -33
  58. package/dist/templates/web/iot-dashboard/template/src/lib/auth-session.ts +52 -0
  59. package/dist/templates/web/marketplace/template/next.config.js +14 -14
  60. package/dist/templates/web/marketplace/template/package.json +11 -18
  61. package/dist/templates/web/marketplace/template/postcss.config.mjs +8 -0
  62. package/dist/templates/web/marketplace/template/src/app/api/auth/route.ts +57 -0
  63. package/dist/templates/web/marketplace/template/src/app/cart/page.tsx +147 -147
  64. package/dist/templates/web/marketplace/template/src/app/dashboard/page.tsx +149 -149
  65. package/dist/templates/web/marketplace/template/src/app/error.tsx +7 -7
  66. package/dist/templates/web/marketplace/template/src/app/globals.css +97 -20
  67. package/dist/templates/web/marketplace/template/src/app/layout.tsx +3 -0
  68. package/dist/templates/web/marketplace/template/src/app/loading.tsx +5 -5
  69. package/dist/templates/web/marketplace/template/src/app/login/page.tsx +112 -0
  70. package/dist/templates/web/marketplace/template/src/app/orders/page.tsx +160 -0
  71. package/dist/templates/web/marketplace/template/src/app/page.tsx +370 -169
  72. package/dist/templates/web/marketplace/template/src/app/products/[id]/page.tsx +218 -0
  73. package/dist/templates/web/marketplace/template/src/app/products/page.tsx +129 -129
  74. package/dist/templates/web/marketplace/template/src/app/settings/page.tsx +150 -0
  75. package/dist/templates/web/marketplace/template/src/app/signup/page.tsx +133 -0
  76. package/dist/templates/web/marketplace/template/src/lib/auth-server.ts +32 -33
  77. package/dist/templates/web/marketplace/template/src/lib/auth-session.ts +52 -0
  78. package/dist/templates/web/micro-saas/template/next.config.js +14 -14
  79. package/dist/templates/web/micro-saas/template/package.json +9 -8
  80. package/dist/templates/web/micro-saas/template/postcss.config.mjs +8 -0
  81. package/dist/templates/web/micro-saas/template/src/app/api/auth/route.ts +57 -0
  82. package/dist/templates/web/micro-saas/template/src/app/dashboard/page.tsx +145 -117
  83. package/dist/templates/web/micro-saas/template/src/app/error.tsx +7 -7
  84. package/dist/templates/web/micro-saas/template/src/app/globals.css +97 -20
  85. package/dist/templates/web/micro-saas/template/src/app/layout.tsx +3 -0
  86. package/dist/templates/web/micro-saas/template/src/app/loading.tsx +43 -27
  87. package/dist/templates/web/micro-saas/template/src/app/login/page.tsx +112 -87
  88. package/dist/templates/web/micro-saas/template/src/app/page.tsx +227 -137
  89. package/dist/templates/web/micro-saas/template/src/app/signup/page.tsx +133 -108
  90. package/dist/templates/web/micro-saas/template/src/lib/auth-server.ts +32 -33
  91. package/dist/templates/web/micro-saas/template/src/lib/auth-session.ts +52 -0
  92. package/dist/templates/web/ui-auth/template/next.config.js +14 -12
  93. package/dist/templates/web/ui-auth/template/package.json +16 -26
  94. package/dist/templates/web/ui-auth/template/postcss.config.mjs +8 -0
  95. package/dist/templates/web/ui-auth/template/src/app/error.tsx +67 -67
  96. package/dist/templates/web/ui-auth/template/src/app/globals.css +85 -84
  97. package/dist/templates/web/ui-auth/template/src/app/layout.tsx +4 -1
  98. package/dist/templates/web/ui-auth/template/src/app/loading.tsx +20 -38
  99. package/dist/templates/web/ui-auth/template/tsconfig.json +27 -33
  100. package/dist/templates/web/ui-auth-ai/template/next.config.js +15 -13
  101. package/dist/templates/web/ui-auth-ai/template/package.json +25 -21
  102. package/dist/templates/web/ui-auth-ai/template/postcss.config.mjs +8 -0
  103. package/dist/templates/web/ui-auth-ai/template/src/app/error.tsx +7 -7
  104. package/dist/templates/web/ui-auth-ai/template/src/app/globals.css +87 -25
  105. package/dist/templates/web/ui-auth-ai/template/src/app/layout.tsx +3 -0
  106. package/dist/templates/web/ui-auth-ai/template/src/app/loading.tsx +4 -4
  107. package/dist/templates/web/ui-auth-ai/template/tsconfig.json +27 -28
  108. package/dist/templates/web/ui-auth-payments/template/next.config.js +14 -12
  109. package/dist/templates/web/ui-auth-payments/template/package.json +16 -29
  110. package/dist/templates/web/ui-auth-payments/template/postcss.config.mjs +8 -0
  111. package/dist/templates/web/ui-auth-payments/template/src/app/error.tsx +67 -67
  112. package/dist/templates/web/ui-auth-payments/template/src/app/globals.css +89 -204
  113. package/dist/templates/web/ui-auth-payments/template/src/app/layout.tsx +4 -1
  114. package/dist/templates/web/ui-auth-payments/template/src/app/loading.tsx +20 -20
  115. package/dist/templates/web/ui-auth-payments/template/tsconfig.json +27 -33
  116. package/dist/templates/web/ui-auth-payments-ai/template/next.config.js +14 -12
  117. package/dist/templates/web/ui-auth-payments-ai/template/package.json +17 -33
  118. package/dist/templates/web/ui-auth-payments-ai/template/postcss.config.mjs +8 -0
  119. package/dist/templates/web/ui-auth-payments-ai/template/src/app/error.tsx +67 -67
  120. package/dist/templates/web/ui-auth-payments-ai/template/src/app/globals.css +85 -85
  121. package/dist/templates/web/ui-auth-payments-ai/template/src/app/layout.tsx +4 -1
  122. package/dist/templates/web/ui-auth-payments-ai/template/src/app/loading.tsx +20 -20
  123. package/dist/templates/web/ui-auth-payments-ai/template/tsconfig.json +27 -33
  124. package/dist/templates/web/ui-auth-payments-audio/template/next.config.js +14 -12
  125. package/dist/templates/web/ui-auth-payments-audio/template/package.json +17 -30
  126. package/dist/templates/web/ui-auth-payments-audio/template/postcss.config.mjs +8 -0
  127. package/dist/templates/web/ui-auth-payments-audio/template/src/app/error.tsx +67 -67
  128. package/dist/templates/web/ui-auth-payments-audio/template/src/app/globals.css +85 -85
  129. package/dist/templates/web/ui-auth-payments-audio/template/src/app/layout.tsx +4 -1
  130. package/dist/templates/web/ui-auth-payments-audio/template/src/app/loading.tsx +20 -20
  131. package/dist/templates/web/ui-auth-payments-audio/template/tsconfig.json +27 -33
  132. package/dist/templates/web/ui-auth-payments-video/template/next.config.js +14 -12
  133. package/dist/templates/web/ui-auth-payments-video/template/package.json +17 -30
  134. package/dist/templates/web/ui-auth-payments-video/template/postcss.config.mjs +8 -0
  135. package/dist/templates/web/ui-auth-payments-video/template/src/app/error.tsx +67 -67
  136. package/dist/templates/web/ui-auth-payments-video/template/src/app/globals.css +89 -221
  137. package/dist/templates/web/ui-auth-payments-video/template/src/app/layout.tsx +4 -1
  138. package/dist/templates/web/ui-auth-payments-video/template/src/app/loading.tsx +20 -20
  139. package/dist/templates/web/ui-auth-payments-video/template/tsconfig.json +27 -33
  140. package/dist/templates/web/ui-only/template/next.config.js +14 -12
  141. package/dist/templates/web/ui-only/template/package.json +15 -25
  142. package/dist/templates/web/ui-only/template/postcss.config.mjs +8 -0
  143. package/dist/templates/web/ui-only/template/src/app/error.tsx +67 -67
  144. package/dist/templates/web/ui-only/template/src/app/globals.css +85 -31
  145. package/dist/templates/web/ui-only/template/src/app/layout.tsx +4 -1
  146. package/dist/templates/web/ui-only/template/src/app/loading.tsx +20 -20
  147. package/dist/templates/web/ui-only/template/tsconfig.json +27 -33
  148. package/package.json +1 -1
  149. package/src/templates/shared/auth/supabase/web/src/middleware.ts +63 -0
  150. package/src/templates/shared/database/supabase/web/src/lib/supabase/server.ts +3 -1
  151. package/src/templates/shared/design/web/src/config/design.config.ts +14 -14
  152. package/src/templates/shared/landing/web/src/components/LandingPage.tsx +0 -3
  153. package/src/templates/shared/security/web/src/lib/api-security.ts +2 -2
  154. package/src/templates/web/ai-platform/template/next.config.js +14 -14
  155. package/src/templates/web/ai-platform/template/package.json +11 -22
  156. package/src/templates/web/ai-platform/template/postcss.config.mjs +8 -0
  157. package/src/templates/web/ai-platform/template/src/app/api/auth/route.ts +57 -0
  158. package/src/templates/web/ai-platform/template/src/app/chat/page.tsx +234 -235
  159. package/src/templates/web/ai-platform/template/src/app/dashboard/page.tsx +142 -142
  160. package/src/templates/web/ai-platform/template/src/app/error.tsx +13 -13
  161. package/src/templates/web/ai-platform/template/src/app/globals.css +97 -34
  162. package/src/templates/web/ai-platform/template/src/app/layout.tsx +3 -0
  163. package/src/templates/web/ai-platform/template/src/app/loading.tsx +22 -22
  164. package/src/templates/web/ai-platform/template/src/app/login/page.tsx +112 -0
  165. package/src/templates/web/ai-platform/template/src/app/models/page.tsx +186 -0
  166. package/src/templates/web/ai-platform/template/src/app/page.tsx +248 -154
  167. package/src/templates/web/ai-platform/template/src/app/playground/page.tsx +251 -0
  168. package/src/templates/web/ai-platform/template/src/app/settings/page.tsx +190 -0
  169. package/src/templates/web/ai-platform/template/src/app/signup/page.tsx +133 -0
  170. package/src/templates/web/ai-platform/template/src/lib/auth-server.ts +32 -33
  171. package/src/templates/web/ai-platform/template/src/lib/auth-session.ts +52 -0
  172. package/src/templates/web/base/template/next.config.js +14 -15
  173. package/src/templates/web/base/template/package.json +16 -31
  174. package/src/templates/web/base/template/postcss.config.mjs +8 -0
  175. package/src/templates/web/base/template/src/app/error.tsx +97 -97
  176. package/src/templates/web/base/template/src/app/globals.css +87 -148
  177. package/src/templates/web/base/template/src/app/layout.tsx +4 -1
  178. package/src/templates/web/base/template/src/app/loading.tsx +52 -52
  179. package/src/templates/web/base/template/tsconfig.json +27 -33
  180. package/src/templates/web/iot-dashboard/template/next.config.js +14 -14
  181. package/src/templates/web/iot-dashboard/template/package.json +12 -16
  182. package/src/templates/web/iot-dashboard/template/postcss.config.mjs +8 -0
  183. package/src/templates/web/iot-dashboard/template/src/app/alerts/page.tsx +157 -0
  184. package/src/templates/web/iot-dashboard/template/src/app/api/auth/route.ts +57 -0
  185. package/src/templates/web/iot-dashboard/template/src/app/dashboard/page.tsx +224 -224
  186. package/src/templates/web/iot-dashboard/template/src/app/devices/[id]/page.tsx +204 -0
  187. package/src/templates/web/iot-dashboard/template/src/app/devices/new/page.tsx +139 -0
  188. package/src/templates/web/iot-dashboard/template/src/app/devices/page.tsx +171 -0
  189. package/src/templates/web/iot-dashboard/template/src/app/error.tsx +8 -8
  190. package/src/templates/web/iot-dashboard/template/src/app/globals.css +97 -20
  191. package/src/templates/web/iot-dashboard/template/src/app/layout.tsx +3 -0
  192. package/src/templates/web/iot-dashboard/template/src/app/loading.tsx +5 -5
  193. package/src/templates/web/iot-dashboard/template/src/app/login/page.tsx +112 -0
  194. package/src/templates/web/iot-dashboard/template/src/app/page.tsx +266 -189
  195. package/src/templates/web/iot-dashboard/template/src/app/settings/page.tsx +186 -0
  196. package/src/templates/web/iot-dashboard/template/src/app/signup/page.tsx +133 -0
  197. package/src/templates/web/iot-dashboard/template/src/lib/auth-server.ts +32 -33
  198. package/src/templates/web/iot-dashboard/template/src/lib/auth-session.ts +52 -0
  199. package/src/templates/web/marketplace/template/next.config.js +14 -14
  200. package/src/templates/web/marketplace/template/package.json +11 -18
  201. package/src/templates/web/marketplace/template/postcss.config.mjs +8 -0
  202. package/src/templates/web/marketplace/template/src/app/api/auth/route.ts +57 -0
  203. package/src/templates/web/marketplace/template/src/app/cart/page.tsx +147 -147
  204. package/src/templates/web/marketplace/template/src/app/dashboard/page.tsx +149 -149
  205. package/src/templates/web/marketplace/template/src/app/error.tsx +7 -7
  206. package/src/templates/web/marketplace/template/src/app/globals.css +97 -20
  207. package/src/templates/web/marketplace/template/src/app/layout.tsx +3 -0
  208. package/src/templates/web/marketplace/template/src/app/loading.tsx +5 -5
  209. package/src/templates/web/marketplace/template/src/app/login/page.tsx +112 -0
  210. package/src/templates/web/marketplace/template/src/app/orders/page.tsx +160 -0
  211. package/src/templates/web/marketplace/template/src/app/page.tsx +370 -169
  212. package/src/templates/web/marketplace/template/src/app/products/[id]/page.tsx +218 -0
  213. package/src/templates/web/marketplace/template/src/app/products/page.tsx +129 -129
  214. package/src/templates/web/marketplace/template/src/app/settings/page.tsx +150 -0
  215. package/src/templates/web/marketplace/template/src/app/signup/page.tsx +133 -0
  216. package/src/templates/web/marketplace/template/src/lib/auth-server.ts +32 -33
  217. package/src/templates/web/marketplace/template/src/lib/auth-session.ts +52 -0
  218. package/src/templates/web/micro-saas/template/next.config.js +14 -14
  219. package/src/templates/web/micro-saas/template/package.json +9 -8
  220. package/src/templates/web/micro-saas/template/postcss.config.mjs +8 -0
  221. package/src/templates/web/micro-saas/template/src/app/api/auth/route.ts +57 -0
  222. package/src/templates/web/micro-saas/template/src/app/dashboard/page.tsx +145 -117
  223. package/src/templates/web/micro-saas/template/src/app/error.tsx +7 -7
  224. package/src/templates/web/micro-saas/template/src/app/globals.css +97 -20
  225. package/src/templates/web/micro-saas/template/src/app/layout.tsx +3 -0
  226. package/src/templates/web/micro-saas/template/src/app/loading.tsx +43 -27
  227. package/src/templates/web/micro-saas/template/src/app/login/page.tsx +112 -87
  228. package/src/templates/web/micro-saas/template/src/app/page.tsx +227 -137
  229. package/src/templates/web/micro-saas/template/src/app/signup/page.tsx +133 -108
  230. package/src/templates/web/micro-saas/template/src/lib/auth-server.ts +32 -33
  231. package/src/templates/web/micro-saas/template/src/lib/auth-session.ts +52 -0
  232. package/src/templates/web/ui-auth/template/next.config.js +14 -12
  233. package/src/templates/web/ui-auth/template/package.json +16 -26
  234. package/src/templates/web/ui-auth/template/postcss.config.mjs +8 -0
  235. package/src/templates/web/ui-auth/template/src/app/error.tsx +67 -67
  236. package/src/templates/web/ui-auth/template/src/app/globals.css +85 -84
  237. package/src/templates/web/ui-auth/template/src/app/layout.tsx +4 -1
  238. package/src/templates/web/ui-auth/template/src/app/loading.tsx +20 -38
  239. package/src/templates/web/ui-auth/template/tsconfig.json +27 -33
  240. package/src/templates/web/ui-auth-ai/template/next.config.js +15 -13
  241. package/src/templates/web/ui-auth-ai/template/package.json +25 -21
  242. package/src/templates/web/ui-auth-ai/template/postcss.config.mjs +8 -0
  243. package/src/templates/web/ui-auth-ai/template/src/app/error.tsx +7 -7
  244. package/src/templates/web/ui-auth-ai/template/src/app/globals.css +87 -25
  245. package/src/templates/web/ui-auth-ai/template/src/app/layout.tsx +3 -0
  246. package/src/templates/web/ui-auth-ai/template/src/app/loading.tsx +4 -4
  247. package/src/templates/web/ui-auth-ai/template/tsconfig.json +27 -28
  248. package/src/templates/web/ui-auth-payments/template/next.config.js +14 -12
  249. package/src/templates/web/ui-auth-payments/template/package.json +16 -29
  250. package/src/templates/web/ui-auth-payments/template/postcss.config.mjs +8 -0
  251. package/src/templates/web/ui-auth-payments/template/src/app/error.tsx +67 -67
  252. package/src/templates/web/ui-auth-payments/template/src/app/globals.css +89 -204
  253. package/src/templates/web/ui-auth-payments/template/src/app/layout.tsx +4 -1
  254. package/src/templates/web/ui-auth-payments/template/src/app/loading.tsx +20 -20
  255. package/src/templates/web/ui-auth-payments/template/tsconfig.json +27 -33
  256. package/src/templates/web/ui-auth-payments-ai/template/next.config.js +14 -12
  257. package/src/templates/web/ui-auth-payments-ai/template/package.json +17 -33
  258. package/src/templates/web/ui-auth-payments-ai/template/postcss.config.mjs +8 -0
  259. package/src/templates/web/ui-auth-payments-ai/template/src/app/error.tsx +67 -67
  260. package/src/templates/web/ui-auth-payments-ai/template/src/app/globals.css +85 -85
  261. package/src/templates/web/ui-auth-payments-ai/template/src/app/layout.tsx +4 -1
  262. package/src/templates/web/ui-auth-payments-ai/template/src/app/loading.tsx +20 -20
  263. package/src/templates/web/ui-auth-payments-ai/template/tsconfig.json +27 -33
  264. package/src/templates/web/ui-auth-payments-audio/template/next.config.js +14 -12
  265. package/src/templates/web/ui-auth-payments-audio/template/package.json +17 -30
  266. package/src/templates/web/ui-auth-payments-audio/template/postcss.config.mjs +8 -0
  267. package/src/templates/web/ui-auth-payments-audio/template/src/app/error.tsx +67 -67
  268. package/src/templates/web/ui-auth-payments-audio/template/src/app/globals.css +85 -85
  269. package/src/templates/web/ui-auth-payments-audio/template/src/app/layout.tsx +4 -1
  270. package/src/templates/web/ui-auth-payments-audio/template/src/app/loading.tsx +20 -20
  271. package/src/templates/web/ui-auth-payments-audio/template/tsconfig.json +27 -33
  272. package/src/templates/web/ui-auth-payments-video/template/next.config.js +14 -12
  273. package/src/templates/web/ui-auth-payments-video/template/package.json +17 -30
  274. package/src/templates/web/ui-auth-payments-video/template/postcss.config.mjs +8 -0
  275. package/src/templates/web/ui-auth-payments-video/template/src/app/error.tsx +67 -67
  276. package/src/templates/web/ui-auth-payments-video/template/src/app/globals.css +89 -221
  277. package/src/templates/web/ui-auth-payments-video/template/src/app/layout.tsx +4 -1
  278. package/src/templates/web/ui-auth-payments-video/template/src/app/loading.tsx +20 -20
  279. package/src/templates/web/ui-auth-payments-video/template/tsconfig.json +27 -33
  280. package/src/templates/web/ui-only/template/next.config.js +14 -12
  281. package/src/templates/web/ui-only/template/package.json +15 -25
  282. package/src/templates/web/ui-only/template/postcss.config.mjs +8 -0
  283. package/src/templates/web/ui-only/template/src/app/error.tsx +67 -67
  284. package/src/templates/web/ui-only/template/src/app/globals.css +85 -31
  285. package/src/templates/web/ui-only/template/src/app/layout.tsx +4 -1
  286. package/src/templates/web/ui-only/template/src/app/loading.tsx +20 -20
  287. package/src/templates/web/ui-only/template/tsconfig.json +27 -33
  288. package/dist/templates/web/ai-platform/template/middleware.ts +0 -55
  289. package/dist/templates/web/ai-platform/template/src/lib/supabase/client.ts +0 -8
  290. package/dist/templates/web/ai-platform/template/src/lib/supabase/server.ts +0 -27
  291. package/dist/templates/web/base/template/postcss.config.js +0 -7
  292. package/dist/templates/web/base/template/tailwind.config.js +0 -77
  293. package/dist/templates/web/iot-dashboard/template/middleware.ts +0 -56
  294. package/dist/templates/web/iot-dashboard/template/src/lib/supabase/client.ts +0 -8
  295. package/dist/templates/web/iot-dashboard/template/src/lib/supabase/server.ts +0 -27
  296. package/dist/templates/web/marketplace/template/middleware.ts +0 -56
  297. package/dist/templates/web/marketplace/template/src/lib/supabase/client.ts +0 -8
  298. package/dist/templates/web/marketplace/template/src/lib/supabase/server.ts +0 -27
  299. package/dist/templates/web/micro-saas/template/middleware.ts +0 -53
  300. package/dist/templates/web/micro-saas/template/src/lib/supabase/client.ts +0 -8
  301. package/dist/templates/web/micro-saas/template/src/lib/supabase/server.ts +0 -29
  302. package/dist/templates/web/ui-auth/template/.claude +0 -21
  303. package/dist/templates/web/ui-auth/template/context.md +0 -105
  304. package/dist/templates/web/ui-auth/template/postcss.config.js +0 -7
  305. package/dist/templates/web/ui-auth/template/tailwind.config.js +0 -77
  306. package/dist/templates/web/ui-auth-ai/template/postcss.config.js +0 -6
  307. package/dist/templates/web/ui-auth-ai/template/tailwind.config.js +0 -22
  308. package/dist/templates/web/ui-auth-payments/template/middleware.ts +0 -68
  309. package/dist/templates/web/ui-auth-payments/template/package-lock.json +0 -12240
  310. package/dist/templates/web/ui-auth-payments/template/postcss.config.js +0 -7
  311. package/dist/templates/web/ui-auth-payments/template/tailwind.config.js +0 -77
  312. package/dist/templates/web/ui-auth-payments/template/tsconfig.tsbuildinfo +0 -1
  313. package/dist/templates/web/ui-auth-payments-ai/template/.claude +0 -21
  314. package/dist/templates/web/ui-auth-payments-ai/template/context.md +0 -169
  315. package/dist/templates/web/ui-auth-payments-ai/template/middleware.ts +0 -68
  316. package/dist/templates/web/ui-auth-payments-ai/template/package-lock.json +0 -12241
  317. package/dist/templates/web/ui-auth-payments-ai/template/postcss.config.js +0 -7
  318. package/dist/templates/web/ui-auth-payments-ai/template/tailwind.config.js +0 -77
  319. package/dist/templates/web/ui-auth-payments-ai/template/tsconfig.tsbuildinfo +0 -1
  320. package/dist/templates/web/ui-auth-payments-audio/template/middleware.ts +0 -68
  321. package/dist/templates/web/ui-auth-payments-audio/template/package-lock.json +0 -12241
  322. package/dist/templates/web/ui-auth-payments-audio/template/postcss.config.js +0 -7
  323. package/dist/templates/web/ui-auth-payments-audio/template/tailwind.config.js +0 -77
  324. package/dist/templates/web/ui-auth-payments-audio/template/tsconfig.tsbuildinfo +0 -1
  325. package/dist/templates/web/ui-auth-payments-video/template/postcss.config.js +0 -7
  326. package/dist/templates/web/ui-auth-payments-video/template/tailwind.config.js +0 -77
  327. package/dist/templates/web/ui-only/template/postcss.config.js +0 -7
  328. package/dist/templates/web/ui-only/template/tailwind.config.js +0 -77
  329. package/src/templates/web/ai-platform/template/middleware.ts +0 -55
  330. package/src/templates/web/ai-platform/template/src/lib/supabase/client.ts +0 -8
  331. package/src/templates/web/ai-platform/template/src/lib/supabase/server.ts +0 -27
  332. package/src/templates/web/base/template/postcss.config.js +0 -7
  333. package/src/templates/web/base/template/tailwind.config.js +0 -77
  334. package/src/templates/web/iot-dashboard/template/middleware.ts +0 -56
  335. package/src/templates/web/iot-dashboard/template/src/lib/supabase/client.ts +0 -8
  336. package/src/templates/web/iot-dashboard/template/src/lib/supabase/server.ts +0 -27
  337. package/src/templates/web/marketplace/template/middleware.ts +0 -56
  338. package/src/templates/web/marketplace/template/src/lib/supabase/client.ts +0 -8
  339. package/src/templates/web/marketplace/template/src/lib/supabase/server.ts +0 -27
  340. package/src/templates/web/micro-saas/template/middleware.ts +0 -53
  341. package/src/templates/web/micro-saas/template/src/lib/supabase/client.ts +0 -8
  342. package/src/templates/web/micro-saas/template/src/lib/supabase/server.ts +0 -29
  343. package/src/templates/web/ui-auth/template/.claude +0 -21
  344. package/src/templates/web/ui-auth/template/context.md +0 -105
  345. package/src/templates/web/ui-auth/template/postcss.config.js +0 -7
  346. package/src/templates/web/ui-auth/template/tailwind.config.js +0 -77
  347. package/src/templates/web/ui-auth-ai/template/postcss.config.js +0 -6
  348. package/src/templates/web/ui-auth-ai/template/tailwind.config.js +0 -22
  349. package/src/templates/web/ui-auth-payments/template/middleware.ts +0 -68
  350. package/src/templates/web/ui-auth-payments/template/package-lock.json +0 -12240
  351. package/src/templates/web/ui-auth-payments/template/postcss.config.js +0 -7
  352. package/src/templates/web/ui-auth-payments/template/tailwind.config.js +0 -77
  353. package/src/templates/web/ui-auth-payments/template/tsconfig.tsbuildinfo +0 -1
  354. package/src/templates/web/ui-auth-payments-ai/template/.claude +0 -21
  355. package/src/templates/web/ui-auth-payments-ai/template/context.md +0 -169
  356. package/src/templates/web/ui-auth-payments-ai/template/middleware.ts +0 -68
  357. package/src/templates/web/ui-auth-payments-ai/template/package-lock.json +0 -12241
  358. package/src/templates/web/ui-auth-payments-ai/template/postcss.config.js +0 -7
  359. package/src/templates/web/ui-auth-payments-ai/template/tailwind.config.js +0 -77
  360. package/src/templates/web/ui-auth-payments-ai/template/tsconfig.tsbuildinfo +0 -1
  361. package/src/templates/web/ui-auth-payments-audio/template/middleware.ts +0 -68
  362. package/src/templates/web/ui-auth-payments-audio/template/package-lock.json +0 -12241
  363. package/src/templates/web/ui-auth-payments-audio/template/postcss.config.js +0 -7
  364. package/src/templates/web/ui-auth-payments-audio/template/tailwind.config.js +0 -77
  365. package/src/templates/web/ui-auth-payments-audio/template/tsconfig.tsbuildinfo +0 -1
  366. package/src/templates/web/ui-auth-payments-video/template/postcss.config.js +0 -7
  367. package/src/templates/web/ui-auth-payments-video/template/tailwind.config.js +0 -77
  368. package/src/templates/web/ui-only/template/postcss.config.js +0 -7
  369. package/src/templates/web/ui-only/template/tailwind.config.js +0 -77
  370. /package/dist/templates/shared/admin/web/{components → src/components}/admin-nav.tsx +0 -0
  371. /package/dist/templates/shared/auth/keycloak/web/{auth.config.ts → src/auth.config.ts} +0 -0
  372. /package/dist/templates/shared/auth/keycloak/web/{auth.ts → src/auth.ts} +0 -0
  373. /package/dist/templates/shared/middleware/web/{middleware.ts → src/middleware.ts} +0 -0
  374. /package/src/templates/shared/admin/web/{components → src/components}/admin-nav.tsx +0 -0
  375. /package/src/templates/shared/auth/keycloak/web/{auth.config.ts → src/auth.config.ts} +0 -0
  376. /package/src/templates/shared/auth/keycloak/web/{auth.ts → src/auth.ts} +0 -0
  377. /package/src/templates/shared/middleware/web/{middleware.ts → src/middleware.ts} +0 -0
@@ -0,0 +1,52 @@
1
+ /**
2
+ * Auth session adapter — demo implementation.
3
+ *
4
+ * Replace this file with a real provider when configuring your app:
5
+ * - Keycloak: import { auth } from '@/auth' (Auth.js)
6
+ * - Supabase: import { createClient } from '@/lib/supabase/server'
7
+ * - Firebase: import { getServerSession } from 'next-auth'
8
+ *
9
+ * The getSession() and getUser() exports are consumed by auth-server.ts
10
+ * and must return the same shape regardless of provider.
11
+ */
12
+ import 'server-only'
13
+ import { cookies } from 'next/headers'
14
+
15
+ type SessionUser = {
16
+ id?: string
17
+ email?: string | null
18
+ name?: string | null
19
+ roles?: string[]
20
+ }
21
+
22
+ type Session = {
23
+ user?: SessionUser
24
+ }
25
+
26
+ /**
27
+ * Get the current session from cookies.
28
+ * Demo: reads a JSON cookie set at login. Replace with your auth provider.
29
+ */
30
+ export async function getSession(): Promise<Session | null> {
31
+ const cookieStore = await cookies()
32
+ const sessionCookie = cookieStore.get('session')
33
+
34
+ if (!sessionCookie?.value) {
35
+ return null
36
+ }
37
+
38
+ try {
39
+ const session = JSON.parse(sessionCookie.value) as Session
40
+ return session
41
+ } catch {
42
+ return null
43
+ }
44
+ }
45
+
46
+ /**
47
+ * Get the current authenticated user, or null.
48
+ */
49
+ export async function getUser(): Promise<SessionUser | null> {
50
+ const session = await getSession()
51
+ return session?.user ?? null
52
+ }
@@ -1,15 +1,14 @@
1
- /** @type {import('next').NextConfig} */
2
- const nextConfig = {
3
- experimental: {
4
- appDir: true,
5
- },
6
- images: {
7
- domains: ['localhost'],
8
- },
9
- env: {
10
- CUSTOM_KEY: process.env.CUSTOM_KEY,
11
- },
12
- }
13
-
14
- module.exports = nextConfig
15
-
1
+ /** @type {import('next').NextConfig} */
2
+ const nextConfig = {
3
+ reactStrictMode: true,
4
+ images: {
5
+ remotePatterns: [
6
+ {
7
+ protocol: 'https',
8
+ hostname: '**',
9
+ },
10
+ ],
11
+ },
12
+ }
13
+
14
+ module.exports = nextConfig
@@ -1,55 +1,40 @@
1
1
  {
2
2
  "name": "{{packageName}}",
3
3
  "version": "0.1.0",
4
- "description": "{{description}} (with Platform Core + UI + Auth + Payments)",
4
+ "description": "{{description}}",
5
5
  "private": true,
6
6
  "scripts": {
7
7
  "dev": "next dev",
8
8
  "build": "next build",
9
9
  "start": "next start",
10
10
  "lint": "next lint",
11
- "type-check": "tsc --noEmit",
12
- "test": "vitest",
13
- "test:ui": "vitest --ui",
14
- "test:run": "vitest run"
11
+ "type-check": "tsc --noEmit"
15
12
  },
16
13
  "dependencies": {
17
- "next": "^15.0.0",
14
+ "next": "^15.5.0",
18
15
  "react": "^19.0.0",
19
16
  "react-dom": "^19.0.0",
20
- "@digilogiclabs/platform-core": "^1.13.0",
21
- "@digilogiclabs/saas-factory-ui": "^1.4.0",
22
- "tailwindcss": "^3.3.0",
23
- "autoprefixer": "^10.4.16",
24
- "postcss": "^8.4.31",
25
- "clsx": "^2.0.0",
17
+ "@digilogiclabs/platform-core": "^1.14.0",
18
+ "@digilogiclabs/saas-factory-ui": "^1.8.1",
19
+ "tailwindcss": "^4.1.0",
20
+ "@tailwindcss/postcss": "^4.1.0",
21
+ "clsx": "^2.1.0",
26
22
  "class-variance-authority": "^0.7.0",
27
- "tailwind-merge": "^2.0.0",
28
- "next-themes": "^0.2.1",
29
- "@radix-ui/react-slot": "^1.0.2",
30
- "tailwindcss-animate": "^1.0.7",
31
- "lucide-react": "^0.542.0",
32
- "zod": "^4.1.0",
33
- "firebase": "^10.0.0",
34
- "@supabase/supabase-js": "^2.0.0"
23
+ "tailwind-merge": "^2.6.0",
24
+ "next-themes": "^0.4.0",
25
+ "lucide-react": "^0.460.0",
26
+ "zod": "^4.1.0"
35
27
  },
36
28
  "devDependencies": {
37
- "typescript": "^5.0.0",
38
- "@types/node": "^20.0.0",
29
+ "typescript": "^5.8.0",
30
+ "@types/node": "^22.0.0",
39
31
  "@types/react": "^19.0.0",
40
32
  "@types/react-dom": "^19.0.0",
41
33
  "eslint": "^9.0.0",
42
34
  "eslint-config-next": "^15.0.0",
43
- "prettier": "^3.0.0",
44
- "prettier-plugin-tailwindcss": "^0.5.0",
45
- "vitest": "^1.0.0",
46
- "@vitejs/plugin-react": "^4.0.0",
47
- "@testing-library/react": "^16.0.0",
48
- "@testing-library/jest-dom": "^6.0.0",
49
- "@testing-library/user-event": "^14.0.0",
50
- "jsdom": "^24.0.0"
35
+ "prettier": "^3.4.0"
51
36
  },
52
37
  "engines": {
53
- "node": ">=18.0.0"
38
+ "node": ">=20.0.0"
54
39
  }
55
40
  }
@@ -0,0 +1,8 @@
1
+ /** @type {import('postcss-load-config').Config} */
2
+ const config = {
3
+ plugins: {
4
+ '@tailwindcss/postcss': {},
5
+ },
6
+ };
7
+
8
+ export default config;
@@ -1,97 +1,97 @@
1
- 'use client'
2
-
3
- import { useEffect } from 'react'
4
- import { Button, Card } from '@digilogiclabs/saas-factory-ui'
5
- import { AlertTriangle, RefreshCw, Home } from 'lucide-react'
6
- import Link from 'next/link'
7
-
8
- interface ErrorProps {
9
- error: Error & { digest?: string }
10
- reset: () => void
11
- }
12
-
13
- export default function Error({ error, reset }: ErrorProps) {
14
- useEffect(() => {
15
- // Log error to error reporting service
16
- console.error('Application error:', error)
17
- }, [error])
18
-
19
- return (
20
- <div className="min-h-screen bg-gradient-to-br from-red-50 to-orange-100 dark:from-gray-900 dark:to-gray-800 flex items-center justify-center p-4">
21
- <Card className="p-8 max-w-lg w-full">
22
- <div className="flex flex-col items-center space-y-6 text-center">
23
- {/* Error icon */}
24
- <div className="w-16 h-16 bg-red-100 dark:bg-red-900 rounded-full flex items-center justify-center">
25
- <AlertTriangle className="w-8 h-8 text-red-600 dark:text-red-400" />
26
- </div>
27
-
28
- {/* Error content */}
29
- <div>
30
- <h1 className="text-2xl font-bold text-gray-900 dark:text-white mb-2">
31
- Something went wrong!
32
- </h1>
33
- <p className="text-gray-600 dark:text-gray-300 mb-4">
34
- We encountered an unexpected error. This has been logged and our team will look into it.
35
- </p>
36
-
37
- {/* Error details in development */}
38
- {process.env.NODE_ENV === 'development' && (
39
- <details className="mt-4 text-left">
40
- <summary className="cursor-pointer text-sm text-gray-500 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-200">
41
- Error details (development only)
42
- </summary>
43
- <div className="mt-2 p-3 bg-gray-100 dark:bg-gray-800 rounded text-xs font-mono text-gray-700 dark:text-gray-300 overflow-auto max-h-40">
44
- <div className="mb-2">
45
- <strong>Message:</strong> {error.message}
46
- </div>
47
- {error.digest && (
48
- <div className="mb-2">
49
- <strong>Digest:</strong> {error.digest}
50
- </div>
51
- )}
52
- {error.stack && (
53
- <div>
54
- <strong>Stack:</strong>
55
- <pre className="whitespace-pre-wrap mt-1">{error.stack}</pre>
56
- </div>
57
- )}
58
- </div>
59
- </details>
60
- )}
61
- </div>
62
-
63
- {/* Action buttons */}
64
- <div className="flex flex-col sm:flex-row gap-3 w-full">
65
- <Button
66
- onClick={reset}
67
- className="flex-1"
68
- size="lg"
69
- >
70
- <RefreshCw className="w-4 h-4 mr-2" />
71
- Try again
72
- </Button>
73
-
74
- <Link href="/" className="flex-1">
75
- <Button
76
- variant="outline"
77
- className="w-full"
78
- size="lg"
79
- >
80
- <Home className="w-4 h-4 mr-2" />
81
- Go home
82
- </Button>
83
- </Link>
84
- </div>
85
-
86
- {/* Help text */}
87
- <p className="text-sm text-gray-500 dark:text-gray-400">
88
- If this problem persists, please{' '}
89
- <Link href="/contact" className="text-blue-600 hover:underline dark:text-blue-400">
90
- contact support
91
- </Link>
92
- </p>
93
- </div>
94
- </Card>
95
- </div>
96
- )
97
- }
1
+ 'use client'
2
+
3
+ import { useEffect } from 'react'
4
+ import { Button, Card } from '@digilogiclabs/saas-factory-ui'
5
+ import { AlertTriangle, RefreshCw, Home } from 'lucide-react'
6
+ import Link from 'next/link'
7
+
8
+ interface ErrorProps {
9
+ error: Error & { digest?: string }
10
+ reset: () => void
11
+ }
12
+
13
+ export default function Error({ error, reset }: ErrorProps) {
14
+ useEffect(() => {
15
+ // Log error to error reporting service
16
+ console.error('Application error:', error)
17
+ }, [error])
18
+
19
+ return (
20
+ <div className="min-h-screen bg-background flex items-center justify-center p-4">
21
+ <Card className="p-8 max-w-lg w-full">
22
+ <div className="flex flex-col items-center space-y-6 text-center">
23
+ {/* Error icon */}
24
+ <div className="w-16 h-16 bg-destructive/10 rounded-full flex items-center justify-center">
25
+ <AlertTriangle className="w-8 h-8 text-destructive" />
26
+ </div>
27
+
28
+ {/* Error content */}
29
+ <div>
30
+ <h1 className="text-2xl font-bold text-foreground mb-2">
31
+ Something went wrong!
32
+ </h1>
33
+ <p className="text-muted-foreground mb-4">
34
+ We encountered an unexpected error. This has been logged and our team will look into it.
35
+ </p>
36
+
37
+ {/* Error details in development */}
38
+ {process.env.NODE_ENV === 'development' && (
39
+ <details className="mt-4 text-left">
40
+ <summary className="cursor-pointer text-sm text-muted-foreground hover:text-foreground">
41
+ Error details (development only)
42
+ </summary>
43
+ <div className="mt-2 p-3 bg-muted rounded text-xs font-mono text-muted-foreground overflow-auto max-h-40">
44
+ <div className="mb-2">
45
+ <strong>Message:</strong> {error.message}
46
+ </div>
47
+ {error.digest && (
48
+ <div className="mb-2">
49
+ <strong>Digest:</strong> {error.digest}
50
+ </div>
51
+ )}
52
+ {error.stack && (
53
+ <div>
54
+ <strong>Stack:</strong>
55
+ <pre className="whitespace-pre-wrap mt-1">{error.stack}</pre>
56
+ </div>
57
+ )}
58
+ </div>
59
+ </details>
60
+ )}
61
+ </div>
62
+
63
+ {/* Action buttons */}
64
+ <div className="flex flex-col sm:flex-row gap-3 w-full">
65
+ <Button
66
+ onClick={reset}
67
+ className="flex-1"
68
+ size="lg"
69
+ >
70
+ <RefreshCw className="w-4 h-4 mr-2" />
71
+ Try again
72
+ </Button>
73
+
74
+ <Link href="/" className="flex-1">
75
+ <Button
76
+ variant="outline"
77
+ className="w-full"
78
+ size="lg"
79
+ >
80
+ <Home className="w-4 h-4 mr-2" />
81
+ Go home
82
+ </Button>
83
+ </Link>
84
+ </div>
85
+
86
+ {/* Help text */}
87
+ <p className="text-sm text-muted-foreground">
88
+ If this problem persists, please{' '}
89
+ <Link href="/contact" className="text-primary hover:underline">
90
+ contact support
91
+ </Link>
92
+ </p>
93
+ </div>
94
+ </Card>
95
+ </div>
96
+ )
97
+ }
@@ -1,158 +1,97 @@
1
- /* Import SaaS Factory UI styles */
2
- @import '@digilogiclabs/saas-factory-ui/styles.css';
3
-
4
- @tailwind base;
5
- @tailwind components;
6
- @tailwind utilities;
7
-
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
+ }
8
35
 
9
- @layer base {
10
- :root {
11
- --background: 0 0% 100%;
12
- --foreground: 222.2 84% 4.9%;
13
- --card: 0 0% 100%;
14
- --card-foreground: 222.2 84% 4.9%;
15
- --popover: 0 0% 100%;
16
- --popover-foreground: 222.2 84% 4.9%;
17
- --primary: 221.2 83.2% 53.3%;
18
- --primary-foreground: 210 40% 98%;
19
- --secondary: 210 40% 96%;
20
- --secondary-foreground: 222.2 84% 4.9%;
21
- --muted: 210 40% 96%;
22
- --muted-foreground: 215.4 16.3% 46.9%;
23
- --accent: 210 40% 96%;
24
- --accent-foreground: 222.2 84% 4.9%;
25
- --destructive: 0 84.2% 60.2%;
26
- --destructive-foreground: 210 40% 98%;
27
- --border: 214.3 31.8% 91.4%;
28
- --input: 214.3 31.8% 91.4%;
29
- --ring: 221.2 83.2% 53.3%;
30
- --radius: 0.5rem;
31
- }
36
+ :root {
37
+ --brand-from: 221.2 83.2% 53.3%;
38
+ --brand-via: 232 75% 55%;
39
+ --brand-to: 243 75% 59%;
40
+ --background: 0 0% 100%;
41
+ --foreground: 222.2 84% 4.9%;
42
+ --card: 0 0% 100%;
43
+ --card-foreground: 222.2 84% 4.9%;
44
+ --popover: 0 0% 100%;
45
+ --popover-foreground: 222.2 84% 4.9%;
46
+ --primary: 221.2 83.2% 53.3%;
47
+ --primary-foreground: 210 40% 98%;
48
+ --secondary: 210 40% 96%;
49
+ --secondary-foreground: 222.2 47.4% 11.2%;
50
+ --muted: 210 40% 96%;
51
+ --muted-foreground: 215.4 16.3% 46.9%;
52
+ --accent: 210 40% 96%;
53
+ --accent-foreground: 222.2 47.4% 11.2%;
54
+ --destructive: 0 84.2% 60.2%;
55
+ --destructive-foreground: 210 40% 98%;
56
+ --border: 214.3 31.8% 91.4%;
57
+ --input: 214.3 31.8% 91.4%;
58
+ --ring: 221.2 83.2% 53.3%;
59
+ }
32
60
 
33
- .dark {
34
- --background: 222.2 84% 4.9%;
35
- --foreground: 210 40% 98%;
36
- --card: 222.2 84% 4.9%;
37
- --card-foreground: 210 40% 98%;
38
- --popover: 222.2 84% 4.9%;
39
- --popover-foreground: 210 40% 98%;
40
- --primary: 217.2 91.2% 59.8%;
41
- --primary-foreground: 222.2 84% 4.9%;
42
- --secondary: 217.2 32.6% 17.5%;
43
- --secondary-foreground: 210 40% 98%;
44
- --muted: 217.2 32.6% 17.5%;
45
- --muted-foreground: 215 20.2% 65.1%;
46
- --accent: 217.2 32.6% 17.5%;
47
- --accent-foreground: 210 40% 98%;
48
- --destructive: 0 62.8% 30.6%;
49
- --destructive-foreground: 210 40% 98%;
50
- --border: 217.2 32.6% 17.5%;
51
- --input: 217.2 32.6% 17.5%;
52
- --ring: 224.3 76.3% 94.1%;
53
- }
61
+ .dark {
62
+ --brand-from: 217.2 91.2% 59.8%;
63
+ --brand-via: 232 85% 65%;
64
+ --brand-to: 243 85% 69%;
65
+ --background: 222.2 84% 4.9%;
66
+ --foreground: 210 40% 98%;
67
+ --card: 222.2 84% 4.9%;
68
+ --card-foreground: 210 40% 98%;
69
+ --popover: 222.2 84% 4.9%;
70
+ --popover-foreground: 210 40% 98%;
71
+ --primary: 217.2 91.2% 59.8%;
72
+ --primary-foreground: 222.2 84% 4.9%;
73
+ --secondary: 217.2 32.6% 17.5%;
74
+ --secondary-foreground: 210 40% 98%;
75
+ --muted: 217.2 32.6% 17.5%;
76
+ --muted-foreground: 215 20.2% 65.1%;
77
+ --accent: 217.2 32.6% 17.5%;
78
+ --accent-foreground: 210 40% 98%;
79
+ --destructive: 0 62.8% 30.6%;
80
+ --destructive-foreground: 210 40% 98%;
81
+ --border: 217.2 32.6% 17.5%;
82
+ --input: 217.2 32.6% 17.5%;
83
+ --ring: 224.3 76.3% 48%;
54
84
  }
55
85
 
56
86
  @layer base {
57
87
  * {
58
- @apply border-border;
88
+ border-color: hsl(var(--border));
59
89
  }
60
-
61
90
  body {
62
- @apply bg-background text-foreground;
63
- }
64
- }
65
-
66
- /* Mobile-first optimizations */
67
- @media (max-width: 768px) {
68
- .mobile-optimized {
69
- touch-action: manipulation;
70
- -webkit-tap-highlight-color: transparent;
71
- }
72
-
73
- /* Better touch targets */
74
- button,
75
- a,
76
- input,
77
- select,
78
- textarea {
79
- min-height: 44px;
80
- min-width: 44px;
81
- }
82
-
83
- /* Smooth scrolling for mobile */
84
- html {
85
- scroll-behavior: smooth;
86
- -webkit-overflow-scrolling: touch;
87
- }
88
- }
89
-
90
- /* Network-aware styles */
91
- @media (prefers-reduced-data: reduce) {
92
- .high-bandwidth-content {
93
- display: none;
94
- }
95
- }
96
-
97
- /* Reduced motion preferences */
98
- @media (prefers-reduced-motion: reduce) {
99
- *,
100
- *::before,
101
- *::after {
102
- animation-duration: 0.01ms !important;
103
- animation-iteration-count: 1 !important;
104
- transition-duration: 0.01ms !important;
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;
105
96
  }
106
97
  }
107
-
108
- /* Custom animations for mobile interactions */
109
- @keyframes haptic-feedback {
110
- 0% { transform: scale(1); }
111
- 50% { transform: scale(0.95); }
112
- 100% { transform: scale(1); }
113
- }
114
-
115
- .haptic-feedback {
116
- animation: haptic-feedback 0.1s ease-in-out;
117
- }
118
-
119
- /* Offline indicator styles */
120
- .offline-indicator {
121
- position: fixed;
122
- top: 0;
123
- left: 0;
124
- right: 0;
125
- background: #f59e0b;
126
- color: white;
127
- text-align: center;
128
- padding: 8px;
129
- font-size: 14px;
130
- z-index: 9999;
131
- }
132
-
133
- /* Loading states */
134
- .loading-skeleton {
135
- background: linear-gradient(90deg, #f0f0f0 25%, #e0e0e0 50%, #f0f0f0 75%);
136
- background-size: 200% 100%;
137
- animation: loading 1.5s infinite;
138
- }
139
-
140
- @keyframes loading {
141
- 0% {
142
- background-position: 200% 0;
143
- }
144
- 100% {
145
- background-position: -200% 0;
146
- }
147
- }
148
-
149
- /* Progressive image loading */
150
- .progressive-image {
151
- filter: blur(5px);
152
- transition: filter 0.3s;
153
- }
154
-
155
- .progressive-image.loaded {
156
- filter: blur(0);
157
- }
158
-
@@ -22,8 +22,11 @@ export default function RootLayout({
22
22
  <body className={inter.className}>
23
23
  <AppProviders>
24
24
  <div className="min-h-screen flex flex-col">
25
+ <a href="#main-content" className="sr-only focus:not-sr-only focus:absolute focus:top-4 focus:left-4 focus:z-[90] focus:px-4 focus:py-2 focus:bg-primary focus:text-primary-foreground focus:rounded-lg focus:outline-none">
26
+ Skip to content
27
+ </a>
25
28
  <Header />
26
- <main className="flex-1">
29
+ <main id="main-content" className="flex-1">
27
30
  {children}
28
31
  </main>
29
32
  <Footer />