@digilogiclabs/create-saas-app 2.0.0 → 2.2.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 (348) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/README.md +975 -891
  3. package/dist/.tsbuildinfo +1 -1
  4. package/dist/generators/template-generator.d.ts +11 -0
  5. package/dist/generators/template-generator.d.ts.map +1 -1
  6. package/dist/generators/template-generator.js +389 -18
  7. package/dist/generators/template-generator.js.map +1 -1
  8. package/dist/index.js +1837 -0
  9. package/dist/index.js.map +1 -0
  10. package/dist/templates/infrastructure/kubernetes/base/template/README.md +253 -0
  11. package/dist/templates/infrastructure/kubernetes/base/template/configmap.yaml +12 -0
  12. package/dist/templates/infrastructure/kubernetes/base/template/deployment.yaml +123 -0
  13. package/dist/templates/infrastructure/kubernetes/base/template/hpa.yaml +45 -0
  14. package/dist/templates/infrastructure/kubernetes/base/template/ingress.yaml +31 -0
  15. package/dist/templates/infrastructure/kubernetes/base/template/kustomization.yaml +25 -0
  16. package/dist/templates/infrastructure/kubernetes/base/template/namespace.yaml +8 -0
  17. package/dist/templates/infrastructure/kubernetes/base/template/networkpolicy.yaml +48 -0
  18. package/dist/templates/infrastructure/kubernetes/base/template/pdb.yaml +14 -0
  19. package/dist/templates/infrastructure/kubernetes/base/template/secret.yaml +17 -0
  20. package/dist/templates/infrastructure/kubernetes/base/template/service.yaml +19 -0
  21. package/dist/templates/infrastructure/kubernetes/base/template/serviceaccount.yaml +9 -0
  22. package/dist/templates/infrastructure/kubernetes/production/template/kustomization.yaml +92 -0
  23. package/dist/templates/infrastructure/terraform/aws/template/README.md +156 -0
  24. package/dist/templates/infrastructure/terraform/aws/template/main.tf +343 -0
  25. package/dist/templates/infrastructure/terraform/aws/template/outputs.tf +66 -0
  26. package/dist/templates/infrastructure/terraform/aws/template/terraform.tfvars.example +28 -0
  27. package/dist/templates/infrastructure/terraform/aws/template/variables.tf +110 -0
  28. package/dist/templates/infrastructure/terraform/gcp/template/README.md +165 -0
  29. package/dist/templates/infrastructure/terraform/gcp/template/main.tf +397 -0
  30. package/dist/templates/infrastructure/terraform/gcp/template/outputs.tf +51 -0
  31. package/dist/templates/infrastructure/terraform/gcp/template/terraform.tfvars.example +29 -0
  32. package/dist/templates/infrastructure/terraform/gcp/template/variables.tf +115 -0
  33. package/dist/templates/shared/admin/web/app/admin/layout.tsx +34 -0
  34. package/dist/templates/shared/admin/web/components/admin-nav.tsx +48 -0
  35. package/dist/templates/shared/audit/web/lib/audit.ts +24 -0
  36. package/dist/templates/shared/auth/keycloak/web/app/api/auth/federated-logout/route.ts +173 -0
  37. package/dist/templates/shared/auth/keycloak/web/auth.config.ts +84 -0
  38. package/dist/templates/shared/auth/keycloak/web/auth.ts +26 -0
  39. package/dist/templates/shared/beta/web/app/api/beta-settings/route.ts +25 -0
  40. package/dist/templates/shared/beta/web/app/api/validate-beta-code/route.ts +67 -0
  41. package/dist/templates/shared/beta/web/lib/beta/settings.ts +31 -0
  42. package/dist/templates/shared/cache/web/lib/cache.ts +44 -0
  43. package/dist/templates/shared/config/web/lib/config.ts +112 -0
  44. package/dist/templates/shared/config/web/next.config.mjs +62 -0
  45. package/dist/templates/shared/contact/web/app/api/contact/route.ts +113 -0
  46. package/dist/templates/shared/contact/web/app/contact/page.tsx +195 -0
  47. package/dist/templates/shared/cookie-consent/web/components/cookie-consent.tsx +54 -0
  48. package/dist/templates/shared/database/postgresql/web/drizzle.config.ts +16 -0
  49. package/dist/templates/shared/database/postgresql/web/lib/db/drizzle.ts +39 -0
  50. package/dist/templates/shared/database/postgresql/web/lib/db/schema.ts +33 -0
  51. package/dist/templates/shared/database/supabase/web/lib/supabase/client.ts +12 -0
  52. package/dist/templates/shared/database/supabase/web/lib/supabase/server.ts +31 -0
  53. package/dist/templates/shared/database/supabase/web/lib/supabase/service.ts +15 -0
  54. package/dist/templates/shared/email/web/lib/email/branding.ts +18 -0
  55. package/dist/templates/shared/email/web/lib/email/client.ts +96 -0
  56. package/dist/templates/shared/error-pages/web/app/error.tsx +70 -0
  57. package/dist/templates/shared/error-pages/web/app/global-error.tsx +102 -0
  58. package/dist/templates/shared/error-pages/web/app/not-found.tsx +39 -0
  59. package/dist/templates/shared/health/web/app/api/health/route.ts +68 -0
  60. package/dist/templates/shared/legal/web/app/(legal)/privacy/page.tsx +205 -0
  61. package/dist/templates/shared/legal/web/app/(legal)/terms/page.tsx +154 -0
  62. package/dist/templates/shared/legal/web/lib/legal-config.ts +50 -0
  63. package/dist/templates/shared/loading/web/app/loading.tsx +5 -0
  64. package/dist/templates/shared/loading/web/components/skeleton.tsx +95 -0
  65. package/dist/templates/shared/middleware/web/middleware.ts +68 -0
  66. package/dist/templates/shared/observability/web/lib/observability.ts +135 -0
  67. package/dist/templates/shared/payments/web/app/api/webhooks/stripe/route.ts +109 -0
  68. package/dist/templates/shared/platform/web/lib/platform.ts +37 -0
  69. package/dist/templates/shared/redis/web/lib/rate-limit-store.ts +18 -0
  70. package/dist/templates/shared/redis/web/lib/redis.ts +48 -0
  71. package/dist/templates/shared/security/web/lib/api-security.ts +318 -0
  72. package/dist/templates/shared/seo/web/app/api/og/route.tsx +97 -0
  73. package/dist/templates/shared/seo/web/app/robots.ts +53 -0
  74. package/dist/templates/shared/seo/web/app/sitemap.ts +53 -0
  75. package/dist/templates/shared/utils/web/lib/api-response.ts +71 -0
  76. package/dist/templates/shared/utils/web/lib/utils.ts +85 -0
  77. package/dist/templates/web/ai-platform/template/.env.example +16 -0
  78. package/dist/templates/web/ai-platform/template/README.md +84 -0
  79. package/dist/templates/web/ai-platform/template/middleware.ts +55 -0
  80. package/dist/templates/web/ai-platform/template/next.config.js +14 -0
  81. package/dist/templates/web/ai-platform/template/package.json +55 -0
  82. package/dist/templates/web/ai-platform/template/src/app/api/chat/route.ts +54 -0
  83. package/dist/templates/web/ai-platform/template/src/app/chat/page.tsx +235 -0
  84. package/dist/templates/web/ai-platform/template/src/app/dashboard/page.tsx +142 -0
  85. package/dist/templates/web/ai-platform/template/src/app/globals.css +34 -0
  86. package/dist/templates/web/ai-platform/template/src/app/layout.tsx +27 -0
  87. package/dist/templates/web/ai-platform/template/src/app/page.tsx +203 -0
  88. package/dist/templates/web/ai-platform/template/src/components/providers/app-providers.tsx +27 -0
  89. package/dist/templates/web/ai-platform/template/src/lib/auth-server.ts +33 -0
  90. package/dist/templates/web/ai-platform/template/src/lib/supabase/client.ts +8 -0
  91. package/dist/templates/web/ai-platform/template/src/lib/supabase/server.ts +27 -0
  92. package/dist/templates/web/ai-platform/template/src/lib/utils.ts +6 -0
  93. package/dist/templates/web/ai-platform/template/tsconfig.json +27 -0
  94. package/dist/templates/web/iot-dashboard/template/.env.example +12 -0
  95. package/dist/templates/web/iot-dashboard/template/README.md +101 -0
  96. package/dist/templates/web/iot-dashboard/template/middleware.ts +56 -0
  97. package/dist/templates/web/iot-dashboard/template/next.config.js +14 -0
  98. package/dist/templates/web/iot-dashboard/template/package.json +49 -0
  99. package/dist/templates/web/iot-dashboard/template/src/app/dashboard/page.tsx +229 -0
  100. package/dist/templates/web/iot-dashboard/template/src/app/globals.css +20 -0
  101. package/dist/templates/web/iot-dashboard/template/src/app/layout.tsx +27 -0
  102. package/dist/templates/web/iot-dashboard/template/src/app/page.tsx +191 -0
  103. package/dist/templates/web/iot-dashboard/template/src/components/providers/app-providers.tsx +24 -0
  104. package/dist/templates/web/iot-dashboard/template/src/lib/auth-server.ts +33 -0
  105. package/dist/templates/web/iot-dashboard/template/src/lib/supabase/client.ts +8 -0
  106. package/dist/templates/web/iot-dashboard/template/src/lib/supabase/server.ts +27 -0
  107. package/dist/templates/web/iot-dashboard/template/src/lib/utils.ts +25 -0
  108. package/dist/templates/web/iot-dashboard/template/tsconfig.json +27 -0
  109. package/dist/templates/web/marketplace/template/.env.example +12 -0
  110. package/dist/templates/web/marketplace/template/README.md +66 -0
  111. package/dist/templates/web/marketplace/template/middleware.ts +56 -0
  112. package/dist/templates/web/marketplace/template/next.config.js +14 -0
  113. package/dist/templates/web/marketplace/template/package.json +51 -0
  114. package/dist/templates/web/marketplace/template/src/app/cart/page.tsx +147 -0
  115. package/dist/templates/web/marketplace/template/src/app/dashboard/page.tsx +149 -0
  116. package/dist/templates/web/marketplace/template/src/app/globals.css +20 -0
  117. package/dist/templates/web/marketplace/template/src/app/layout.tsx +27 -0
  118. package/dist/templates/web/marketplace/template/src/app/page.tsx +167 -0
  119. package/dist/templates/web/marketplace/template/src/app/products/page.tsx +129 -0
  120. package/dist/templates/web/marketplace/template/src/components/providers/app-providers.tsx +27 -0
  121. package/dist/templates/web/marketplace/template/src/lib/auth-server.ts +33 -0
  122. package/dist/templates/web/marketplace/template/src/lib/supabase/client.ts +8 -0
  123. package/dist/templates/web/marketplace/template/src/lib/supabase/server.ts +27 -0
  124. package/dist/templates/web/marketplace/template/src/lib/utils.ts +19 -0
  125. package/dist/templates/web/marketplace/template/tsconfig.json +27 -0
  126. package/dist/templates/web/micro-saas/template/.env.example +10 -0
  127. package/dist/templates/web/micro-saas/template/README.md +63 -0
  128. package/dist/templates/web/micro-saas/template/middleware.ts +53 -0
  129. package/dist/templates/web/micro-saas/template/next.config.js +14 -0
  130. package/dist/templates/web/micro-saas/template/package.json +41 -0
  131. package/dist/templates/web/micro-saas/template/src/app/dashboard/page.tsx +117 -0
  132. package/dist/templates/web/micro-saas/template/src/app/globals.css +20 -0
  133. package/dist/templates/web/micro-saas/template/src/app/layout.tsx +27 -0
  134. package/dist/templates/web/micro-saas/template/src/app/login/page.tsx +87 -0
  135. package/dist/templates/web/micro-saas/template/src/app/page.tsx +137 -0
  136. package/dist/templates/web/micro-saas/template/src/app/signup/page.tsx +108 -0
  137. package/dist/templates/web/micro-saas/template/src/components/providers/app-providers.tsx +24 -0
  138. package/dist/templates/web/micro-saas/template/src/lib/auth-server.ts +33 -0
  139. package/dist/templates/web/micro-saas/template/src/lib/supabase/client.ts +8 -0
  140. package/dist/templates/web/micro-saas/template/src/lib/supabase/server.ts +29 -0
  141. package/dist/templates/web/micro-saas/template/src/lib/utils.ts +6 -0
  142. package/dist/templates/web/micro-saas/template/tsconfig.json +27 -0
  143. package/package.json +5 -4
  144. package/src/templates/infrastructure/kubernetes/base/template/README.md +253 -0
  145. package/src/templates/infrastructure/kubernetes/base/template/configmap.yaml +12 -0
  146. package/src/templates/infrastructure/kubernetes/base/template/deployment.yaml +123 -0
  147. package/src/templates/infrastructure/kubernetes/base/template/hpa.yaml +45 -0
  148. package/src/templates/infrastructure/kubernetes/base/template/ingress.yaml +31 -0
  149. package/src/templates/infrastructure/kubernetes/base/template/kustomization.yaml +25 -0
  150. package/src/templates/infrastructure/kubernetes/base/template/namespace.yaml +8 -0
  151. package/src/templates/infrastructure/kubernetes/base/template/networkpolicy.yaml +48 -0
  152. package/src/templates/infrastructure/kubernetes/base/template/pdb.yaml +14 -0
  153. package/src/templates/infrastructure/kubernetes/base/template/secret.yaml +17 -0
  154. package/src/templates/infrastructure/kubernetes/base/template/service.yaml +19 -0
  155. package/src/templates/infrastructure/kubernetes/base/template/serviceaccount.yaml +9 -0
  156. package/src/templates/infrastructure/kubernetes/production/template/kustomization.yaml +92 -0
  157. package/src/templates/infrastructure/terraform/aws/template/README.md +156 -0
  158. package/src/templates/infrastructure/terraform/aws/template/main.tf +343 -0
  159. package/src/templates/infrastructure/terraform/aws/template/outputs.tf +66 -0
  160. package/src/templates/infrastructure/terraform/aws/template/terraform.tfvars.example +28 -0
  161. package/src/templates/infrastructure/terraform/aws/template/variables.tf +110 -0
  162. package/src/templates/infrastructure/terraform/gcp/template/README.md +165 -0
  163. package/src/templates/infrastructure/terraform/gcp/template/main.tf +397 -0
  164. package/src/templates/infrastructure/terraform/gcp/template/outputs.tf +51 -0
  165. package/src/templates/infrastructure/terraform/gcp/template/terraform.tfvars.example +29 -0
  166. package/src/templates/infrastructure/terraform/gcp/template/variables.tf +115 -0
  167. package/src/templates/shared/admin/web/app/admin/layout.tsx +34 -0
  168. package/src/templates/shared/admin/web/components/admin-nav.tsx +48 -0
  169. package/src/templates/shared/audit/web/lib/audit.ts +24 -0
  170. package/src/templates/shared/auth/keycloak/web/app/api/auth/federated-logout/route.ts +173 -0
  171. package/src/templates/shared/auth/keycloak/web/auth.config.ts +84 -0
  172. package/src/templates/shared/auth/keycloak/web/auth.ts +26 -0
  173. package/src/templates/shared/beta/web/app/api/beta-settings/route.ts +25 -0
  174. package/src/templates/shared/beta/web/app/api/validate-beta-code/route.ts +67 -0
  175. package/src/templates/shared/beta/web/lib/beta/settings.ts +31 -0
  176. package/src/templates/shared/cache/web/lib/cache.ts +44 -0
  177. package/src/templates/shared/config/web/lib/config.ts +112 -0
  178. package/src/templates/shared/config/web/next.config.mjs +62 -0
  179. package/src/templates/shared/contact/web/app/api/contact/route.ts +113 -0
  180. package/src/templates/shared/contact/web/app/contact/page.tsx +195 -0
  181. package/src/templates/shared/cookie-consent/web/components/cookie-consent.tsx +54 -0
  182. package/src/templates/shared/database/postgresql/web/drizzle.config.ts +16 -0
  183. package/src/templates/shared/database/postgresql/web/lib/db/drizzle.ts +39 -0
  184. package/src/templates/shared/database/postgresql/web/lib/db/schema.ts +33 -0
  185. package/src/templates/shared/database/supabase/web/lib/supabase/client.ts +12 -0
  186. package/src/templates/shared/database/supabase/web/lib/supabase/server.ts +31 -0
  187. package/src/templates/shared/database/supabase/web/lib/supabase/service.ts +15 -0
  188. package/src/templates/shared/email/web/lib/email/branding.ts +18 -0
  189. package/src/templates/shared/email/web/lib/email/client.ts +96 -0
  190. package/src/templates/shared/error-pages/web/app/error.tsx +70 -0
  191. package/src/templates/shared/error-pages/web/app/global-error.tsx +102 -0
  192. package/src/templates/shared/error-pages/web/app/not-found.tsx +39 -0
  193. package/src/templates/shared/health/web/app/api/health/route.ts +68 -0
  194. package/src/templates/shared/legal/web/app/(legal)/privacy/page.tsx +205 -0
  195. package/src/templates/shared/legal/web/app/(legal)/terms/page.tsx +154 -0
  196. package/src/templates/shared/legal/web/lib/legal-config.ts +50 -0
  197. package/src/templates/shared/loading/web/app/loading.tsx +5 -0
  198. package/src/templates/shared/loading/web/components/skeleton.tsx +95 -0
  199. package/src/templates/shared/middleware/web/middleware.ts +68 -0
  200. package/src/templates/shared/observability/web/lib/observability.ts +135 -0
  201. package/src/templates/shared/payments/web/app/api/webhooks/stripe/route.ts +109 -0
  202. package/src/templates/shared/platform/web/lib/platform.ts +37 -0
  203. package/src/templates/shared/redis/web/lib/rate-limit-store.ts +18 -0
  204. package/src/templates/shared/redis/web/lib/redis.ts +48 -0
  205. package/src/templates/shared/security/web/lib/api-security.ts +318 -0
  206. package/src/templates/shared/seo/web/app/api/og/route.tsx +97 -0
  207. package/src/templates/shared/seo/web/app/robots.ts +53 -0
  208. package/src/templates/shared/seo/web/app/sitemap.ts +53 -0
  209. package/src/templates/shared/utils/web/lib/api-response.ts +71 -0
  210. package/src/templates/shared/utils/web/lib/utils.ts +85 -0
  211. package/src/templates/web/ai-platform/template/.env.example +16 -0
  212. package/src/templates/web/ai-platform/template/README.md +84 -0
  213. package/src/templates/web/ai-platform/template/middleware.ts +55 -0
  214. package/src/templates/web/ai-platform/template/next.config.js +14 -0
  215. package/src/templates/web/ai-platform/template/package.json +55 -0
  216. package/src/templates/web/ai-platform/template/src/app/api/chat/route.ts +54 -0
  217. package/src/templates/web/ai-platform/template/src/app/chat/page.tsx +235 -0
  218. package/src/templates/web/ai-platform/template/src/app/dashboard/page.tsx +142 -0
  219. package/src/templates/web/ai-platform/template/src/app/globals.css +34 -0
  220. package/src/templates/web/ai-platform/template/src/app/layout.tsx +27 -0
  221. package/src/templates/web/ai-platform/template/src/app/page.tsx +203 -0
  222. package/src/templates/web/ai-platform/template/src/components/providers/app-providers.tsx +27 -0
  223. package/src/templates/web/ai-platform/template/src/lib/auth-server.ts +33 -0
  224. package/src/templates/web/ai-platform/template/src/lib/supabase/client.ts +8 -0
  225. package/src/templates/web/ai-platform/template/src/lib/supabase/server.ts +27 -0
  226. package/src/templates/web/ai-platform/template/src/lib/utils.ts +6 -0
  227. package/src/templates/web/ai-platform/template/tsconfig.json +27 -0
  228. package/src/templates/web/iot-dashboard/template/.env.example +12 -0
  229. package/src/templates/web/iot-dashboard/template/README.md +101 -0
  230. package/src/templates/web/iot-dashboard/template/middleware.ts +56 -0
  231. package/src/templates/web/iot-dashboard/template/next.config.js +14 -0
  232. package/src/templates/web/iot-dashboard/template/package.json +49 -0
  233. package/src/templates/web/iot-dashboard/template/src/app/dashboard/page.tsx +229 -0
  234. package/src/templates/web/iot-dashboard/template/src/app/globals.css +20 -0
  235. package/src/templates/web/iot-dashboard/template/src/app/layout.tsx +27 -0
  236. package/src/templates/web/iot-dashboard/template/src/app/page.tsx +191 -0
  237. package/src/templates/web/iot-dashboard/template/src/components/providers/app-providers.tsx +24 -0
  238. package/src/templates/web/iot-dashboard/template/src/lib/auth-server.ts +33 -0
  239. package/src/templates/web/iot-dashboard/template/src/lib/supabase/client.ts +8 -0
  240. package/src/templates/web/iot-dashboard/template/src/lib/supabase/server.ts +27 -0
  241. package/src/templates/web/iot-dashboard/template/src/lib/utils.ts +25 -0
  242. package/src/templates/web/iot-dashboard/template/tsconfig.json +27 -0
  243. package/src/templates/web/marketplace/template/.env.example +12 -0
  244. package/src/templates/web/marketplace/template/README.md +66 -0
  245. package/src/templates/web/marketplace/template/middleware.ts +56 -0
  246. package/src/templates/web/marketplace/template/next.config.js +14 -0
  247. package/src/templates/web/marketplace/template/package.json +51 -0
  248. package/src/templates/web/marketplace/template/src/app/cart/page.tsx +147 -0
  249. package/src/templates/web/marketplace/template/src/app/dashboard/page.tsx +149 -0
  250. package/src/templates/web/marketplace/template/src/app/globals.css +20 -0
  251. package/src/templates/web/marketplace/template/src/app/layout.tsx +27 -0
  252. package/src/templates/web/marketplace/template/src/app/page.tsx +167 -0
  253. package/src/templates/web/marketplace/template/src/app/products/page.tsx +129 -0
  254. package/src/templates/web/marketplace/template/src/components/providers/app-providers.tsx +27 -0
  255. package/src/templates/web/marketplace/template/src/lib/auth-server.ts +33 -0
  256. package/src/templates/web/marketplace/template/src/lib/supabase/client.ts +8 -0
  257. package/src/templates/web/marketplace/template/src/lib/supabase/server.ts +27 -0
  258. package/src/templates/web/marketplace/template/src/lib/utils.ts +19 -0
  259. package/src/templates/web/marketplace/template/tsconfig.json +27 -0
  260. package/src/templates/web/micro-saas/template/.env.example +10 -0
  261. package/src/templates/web/micro-saas/template/README.md +63 -0
  262. package/src/templates/web/micro-saas/template/middleware.ts +53 -0
  263. package/src/templates/web/micro-saas/template/next.config.js +14 -0
  264. package/src/templates/web/micro-saas/template/package.json +41 -0
  265. package/src/templates/web/micro-saas/template/src/app/dashboard/page.tsx +117 -0
  266. package/src/templates/web/micro-saas/template/src/app/globals.css +20 -0
  267. package/src/templates/web/micro-saas/template/src/app/layout.tsx +27 -0
  268. package/src/templates/web/micro-saas/template/src/app/login/page.tsx +87 -0
  269. package/src/templates/web/micro-saas/template/src/app/page.tsx +137 -0
  270. package/src/templates/web/micro-saas/template/src/app/signup/page.tsx +108 -0
  271. package/src/templates/web/micro-saas/template/src/components/providers/app-providers.tsx +24 -0
  272. package/src/templates/web/micro-saas/template/src/lib/auth-server.ts +33 -0
  273. package/src/templates/web/micro-saas/template/src/lib/supabase/client.ts +8 -0
  274. package/src/templates/web/micro-saas/template/src/lib/supabase/server.ts +29 -0
  275. package/src/templates/web/micro-saas/template/src/lib/utils.ts +6 -0
  276. package/src/templates/web/micro-saas/template/tsconfig.json +27 -0
  277. package/dist/cli/commands/add.d.ts +0 -6
  278. package/dist/cli/commands/add.d.ts.map +0 -1
  279. package/dist/cli/commands/add.js +0 -39
  280. package/dist/cli/commands/add.js.map +0 -1
  281. package/dist/cli/commands/create.d.ts +0 -45
  282. package/dist/cli/commands/create.d.ts.map +0 -1
  283. package/dist/cli/commands/create.js +0 -175
  284. package/dist/cli/commands/create.js.map +0 -1
  285. package/dist/cli/commands/index.d.ts +0 -4
  286. package/dist/cli/commands/index.d.ts.map +0 -1
  287. package/dist/cli/commands/index.js +0 -20
  288. package/dist/cli/commands/index.js.map +0 -1
  289. package/dist/cli/commands/update.d.ts +0 -6
  290. package/dist/cli/commands/update.d.ts.map +0 -1
  291. package/dist/cli/commands/update.js +0 -68
  292. package/dist/cli/commands/update.js.map +0 -1
  293. package/dist/cli/index.d.ts +0 -4
  294. package/dist/cli/index.d.ts.map +0 -1
  295. package/dist/cli/index.js +0 -61
  296. package/dist/cli/index.js.map +0 -1
  297. package/dist/cli/prompts/index.d.ts +0 -2
  298. package/dist/cli/prompts/index.d.ts.map +0 -1
  299. package/dist/cli/prompts/index.js +0 -18
  300. package/dist/cli/prompts/index.js.map +0 -1
  301. package/dist/cli/prompts/project-setup.d.ts +0 -5
  302. package/dist/cli/prompts/project-setup.d.ts.map +0 -1
  303. package/dist/cli/prompts/project-setup.js +0 -316
  304. package/dist/cli/prompts/project-setup.js.map +0 -1
  305. package/dist/cli/utils/git.d.ts +0 -9
  306. package/dist/cli/utils/git.d.ts.map +0 -1
  307. package/dist/cli/utils/git.js +0 -77
  308. package/dist/cli/utils/git.js.map +0 -1
  309. package/dist/cli/utils/index.d.ts +0 -5
  310. package/dist/cli/utils/index.d.ts.map +0 -1
  311. package/dist/cli/utils/index.js +0 -21
  312. package/dist/cli/utils/index.js.map +0 -1
  313. package/dist/cli/utils/logger.d.ts +0 -16
  314. package/dist/cli/utils/logger.d.ts.map +0 -1
  315. package/dist/cli/utils/logger.js +0 -55
  316. package/dist/cli/utils/logger.js.map +0 -1
  317. package/dist/cli/utils/package-manager.d.ts +0 -8
  318. package/dist/cli/utils/package-manager.d.ts.map +0 -1
  319. package/dist/cli/utils/package-manager.js +0 -92
  320. package/dist/cli/utils/package-manager.js.map +0 -1
  321. package/dist/cli/utils/spinner.d.ts +0 -7
  322. package/dist/cli/utils/spinner.d.ts.map +0 -1
  323. package/dist/cli/utils/spinner.js +0 -48
  324. package/dist/cli/utils/spinner.js.map +0 -1
  325. package/dist/cli/validators/dependencies.d.ts +0 -15
  326. package/dist/cli/validators/dependencies.d.ts.map +0 -1
  327. package/dist/cli/validators/dependencies.js +0 -108
  328. package/dist/cli/validators/dependencies.js.map +0 -1
  329. package/dist/cli/validators/index.d.ts +0 -3
  330. package/dist/cli/validators/index.d.ts.map +0 -1
  331. package/dist/cli/validators/index.js +0 -19
  332. package/dist/cli/validators/index.js.map +0 -1
  333. package/dist/cli/validators/project-name.d.ts +0 -5
  334. package/dist/cli/validators/project-name.d.ts.map +0 -1
  335. package/dist/cli/validators/project-name.js +0 -151
  336. package/dist/cli/validators/project-name.js.map +0 -1
  337. package/dist/generators/file-processor.d.ts +0 -28
  338. package/dist/generators/file-processor.d.ts.map +0 -1
  339. package/dist/generators/file-processor.js +0 -224
  340. package/dist/generators/file-processor.js.map +0 -1
  341. package/dist/generators/index.d.ts +0 -4
  342. package/dist/generators/index.d.ts.map +0 -1
  343. package/dist/generators/index.js +0 -20
  344. package/dist/generators/index.js.map +0 -1
  345. package/dist/generators/package-installer.d.ts +0 -29
  346. package/dist/generators/package-installer.d.ts.map +0 -1
  347. package/dist/generators/package-installer.js +0 -177
  348. package/dist/generators/package-installer.js.map +0 -1
@@ -0,0 +1,235 @@
1
+ 'use client'
2
+
3
+ import { useState, useRef, useEffect } from 'react'
4
+ import { Button, Card } from '@digilogiclabs/saas-factory-ui'
5
+ import { Send, Bot, User, Loader2, Sparkles } from 'lucide-react'
6
+ import { useAuth } from '@digilogiclabs/app-sdk'
7
+ import Link from 'next/link'
8
+
9
+ interface Message {
10
+ id: string
11
+ role: 'user' | 'assistant'
12
+ content: string
13
+ timestamp: Date
14
+ }
15
+
16
+ const MODELS = [
17
+ { id: 'gpt-4o', name: 'GPT-4o', provider: 'OpenAI' },
18
+ { id: 'claude-3-5-sonnet', name: 'Claude 3.5 Sonnet', provider: 'Anthropic' },
19
+ { id: 'gpt-4o-mini', name: 'GPT-4o Mini', provider: 'OpenAI' },
20
+ ]
21
+
22
+ export default function ChatPage() {
23
+ const { user, loading: authLoading } = useAuth()
24
+ const [messages, setMessages] = useState<Message[]>([])
25
+ const [input, setInput] = useState('')
26
+ const [isLoading, setIsLoading] = useState(false)
27
+ const [selectedModel, setSelectedModel] = useState(MODELS[0].id)
28
+ const messagesEndRef = useRef<HTMLDivElement>(null)
29
+
30
+ const scrollToBottom = () => {
31
+ messagesEndRef.current?.scrollIntoView({ behavior: 'smooth' })
32
+ }
33
+
34
+ useEffect(() => {
35
+ scrollToBottom()
36
+ }, [messages])
37
+
38
+ const handleSubmit = async (e: React.FormEvent) => {
39
+ e.preventDefault()
40
+ if (!input.trim() || isLoading) return
41
+
42
+ const userMessage: Message = {
43
+ id: Date.now().toString(),
44
+ role: 'user',
45
+ content: input,
46
+ timestamp: new Date(),
47
+ }
48
+
49
+ setMessages(prev => [...prev, userMessage])
50
+ setInput('')
51
+ setIsLoading(true)
52
+
53
+ try {
54
+ const response = await fetch('/api/chat', {
55
+ method: 'POST',
56
+ headers: { 'Content-Type': 'application/json' },
57
+ body: JSON.stringify({
58
+ messages: [...messages, userMessage].map(m => ({
59
+ role: m.role,
60
+ content: m.content,
61
+ })),
62
+ model: selectedModel,
63
+ }),
64
+ })
65
+
66
+ const data = await response.json()
67
+
68
+ const assistantMessage: Message = {
69
+ id: (Date.now() + 1).toString(),
70
+ role: 'assistant',
71
+ content: data.content || 'Sorry, I could not process your request.',
72
+ timestamp: new Date(),
73
+ }
74
+
75
+ setMessages(prev => [...prev, assistantMessage])
76
+ } catch (error) {
77
+ console.error('Chat error:', error)
78
+ const errorMessage: Message = {
79
+ id: (Date.now() + 1).toString(),
80
+ role: 'assistant',
81
+ content: 'Sorry, there was an error processing your request. Please try again.',
82
+ timestamp: new Date(),
83
+ }
84
+ setMessages(prev => [...prev, errorMessage])
85
+ } finally {
86
+ setIsLoading(false)
87
+ }
88
+ }
89
+
90
+ if (authLoading) {
91
+ return (
92
+ <div className="min-h-screen bg-slate-900 flex items-center justify-center">
93
+ <Loader2 className="w-8 h-8 text-purple-400 animate-spin" />
94
+ </div>
95
+ )
96
+ }
97
+
98
+ if (!user) {
99
+ return (
100
+ <div className="min-h-screen bg-slate-900 flex items-center justify-center">
101
+ <Card className="p-8 bg-white/5 border-white/10 text-center max-w-md">
102
+ <Bot className="w-16 h-16 text-purple-400 mx-auto mb-4" />
103
+ <h2 className="text-2xl font-bold text-white mb-2">Sign in to Chat</h2>
104
+ <p className="text-gray-400 mb-6">
105
+ Create an account to start chatting with AI models.
106
+ </p>
107
+ <div className="flex gap-2 justify-center">
108
+ <Link href="/login">
109
+ <Button variant="outline" className="border-white/20 text-white">Sign In</Button>
110
+ </Link>
111
+ <Link href="/signup">
112
+ <Button className="bg-purple-600 hover:bg-purple-700">Sign Up</Button>
113
+ </Link>
114
+ </div>
115
+ </Card>
116
+ </div>
117
+ )
118
+ }
119
+
120
+ return (
121
+ <div className="h-screen bg-slate-900 flex flex-col">
122
+ {/* Header */}
123
+ <header className="border-b border-white/10 bg-black/20 px-4 py-3">
124
+ <div className="max-w-4xl mx-auto flex items-center justify-between">
125
+ <div className="flex items-center gap-2">
126
+ <Link href="/" className="flex items-center gap-2 text-white">
127
+ <Bot className="w-6 h-6 text-purple-400" />
128
+ <span className="font-bold">AI Chat</span>
129
+ </Link>
130
+ </div>
131
+ <select
132
+ value={selectedModel}
133
+ onChange={(e) => setSelectedModel(e.target.value)}
134
+ className="bg-white/10 border border-white/20 rounded-lg px-3 py-1.5 text-white text-sm focus:ring-2 focus:ring-purple-500"
135
+ >
136
+ {MODELS.map((model) => (
137
+ <option key={model.id} value={model.id} className="bg-slate-800">
138
+ {model.name}
139
+ </option>
140
+ ))}
141
+ </select>
142
+ </div>
143
+ </header>
144
+
145
+ {/* Messages */}
146
+ <div className="flex-1 overflow-y-auto px-4 py-6">
147
+ <div className="max-w-4xl mx-auto space-y-6">
148
+ {messages.length === 0 && (
149
+ <div className="text-center py-20">
150
+ <Sparkles className="w-16 h-16 text-purple-400 mx-auto mb-4" />
151
+ <h2 className="text-2xl font-bold text-white mb-2">Start a Conversation</h2>
152
+ <p className="text-gray-400">Ask me anything or try one of these prompts:</p>
153
+ <div className="flex flex-wrap gap-2 justify-center mt-4">
154
+ {['Explain quantum computing', 'Write a Python function', 'Help me brainstorm'].map((prompt) => (
155
+ <button
156
+ key={prompt}
157
+ onClick={() => setInput(prompt)}
158
+ className="px-4 py-2 bg-white/5 border border-white/10 rounded-lg text-gray-300 hover:bg-white/10 transition text-sm"
159
+ >
160
+ {prompt}
161
+ </button>
162
+ ))}
163
+ </div>
164
+ </div>
165
+ )}
166
+
167
+ {messages.map((message) => (
168
+ <div
169
+ key={message.id}
170
+ className={`flex gap-4 ${message.role === 'user' ? 'justify-end' : ''}`}
171
+ >
172
+ {message.role === 'assistant' && (
173
+ <div className="w-8 h-8 rounded-lg bg-purple-500/20 flex items-center justify-center flex-shrink-0">
174
+ <Bot className="w-5 h-5 text-purple-400" />
175
+ </div>
176
+ )}
177
+ <div
178
+ className={`max-w-2xl rounded-lg px-4 py-3 ${
179
+ message.role === 'user'
180
+ ? 'bg-purple-600 text-white'
181
+ : 'bg-white/5 text-gray-200'
182
+ }`}
183
+ >
184
+ <p className="whitespace-pre-wrap">{message.content}</p>
185
+ </div>
186
+ {message.role === 'user' && (
187
+ <div className="w-8 h-8 rounded-lg bg-blue-500/20 flex items-center justify-center flex-shrink-0">
188
+ <User className="w-5 h-5 text-blue-400" />
189
+ </div>
190
+ )}
191
+ </div>
192
+ ))}
193
+
194
+ {isLoading && (
195
+ <div className="flex gap-4">
196
+ <div className="w-8 h-8 rounded-lg bg-purple-500/20 flex items-center justify-center">
197
+ <Bot className="w-5 h-5 text-purple-400" />
198
+ </div>
199
+ <div className="bg-white/5 rounded-lg px-4 py-3">
200
+ <Loader2 className="w-5 h-5 text-purple-400 animate-spin" />
201
+ </div>
202
+ </div>
203
+ )}
204
+
205
+ <div ref={messagesEndRef} />
206
+ </div>
207
+ </div>
208
+
209
+ {/* Input */}
210
+ <div className="border-t border-white/10 bg-black/20 px-4 py-4">
211
+ <form onSubmit={handleSubmit} className="max-w-4xl mx-auto flex gap-2">
212
+ <input
213
+ type="text"
214
+ value={input}
215
+ onChange={(e) => setInput(e.target.value)}
216
+ placeholder="Type your message..."
217
+ className="flex-1 bg-white/10 border border-white/20 rounded-lg px-4 py-2 text-white placeholder-gray-400 focus:ring-2 focus:ring-purple-500 focus:border-transparent"
218
+ disabled={isLoading}
219
+ />
220
+ <Button
221
+ type="submit"
222
+ disabled={!input.trim() || isLoading}
223
+ className="bg-purple-600 hover:bg-purple-700"
224
+ >
225
+ {isLoading ? (
226
+ <Loader2 className="w-5 h-5 animate-spin" />
227
+ ) : (
228
+ <Send className="w-5 h-5" />
229
+ )}
230
+ </Button>
231
+ </form>
232
+ </div>
233
+ </div>
234
+ )
235
+ }
@@ -0,0 +1,142 @@
1
+ import { Suspense } from 'react'
2
+ import { Button, Card } from '@digilogiclabs/saas-factory-ui'
3
+ import { MessageSquare, Zap, Key, CreditCard, BarChart, Settings } from 'lucide-react'
4
+ import { requireAuth } from '@/lib/auth-server'
5
+ import Link from 'next/link'
6
+
7
+ async function getUsageStats(userId: string) {
8
+ await new Promise(resolve => setTimeout(resolve, 100))
9
+ return {
10
+ apiCalls: 1234,
11
+ tokensUsed: 45678,
12
+ modelsUsed: 3,
13
+ creditsRemaining: 850,
14
+ }
15
+ }
16
+
17
+ function StatCard({ title, value, icon: Icon, description }: {
18
+ title: string
19
+ value: string | number
20
+ icon: React.ComponentType<{ className?: string }>
21
+ description?: string
22
+ }) {
23
+ return (
24
+ <Card className="p-6 bg-white/5 border-white/10">
25
+ <div className="flex items-center justify-between">
26
+ <div>
27
+ <p className="text-sm font-medium text-gray-400">{title}</p>
28
+ <p className="text-2xl font-bold text-white">{value}</p>
29
+ {description && <p className="text-xs text-gray-500 mt-1">{description}</p>}
30
+ </div>
31
+ <div className="w-12 h-12 bg-purple-500/20 rounded-lg flex items-center justify-center">
32
+ <Icon className="h-6 w-6 text-purple-400" />
33
+ </div>
34
+ </div>
35
+ </Card>
36
+ )
37
+ }
38
+
39
+ async function UsageStats({ userId }: { userId: string }) {
40
+ const stats = await getUsageStats(userId)
41
+
42
+ return (
43
+ <div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-6 mb-8">
44
+ <StatCard title="API Calls" value={stats.apiCalls.toLocaleString()} icon={Zap} description="This month" />
45
+ <StatCard title="Tokens Used" value={`${(stats.tokensUsed / 1000).toFixed(1)}K`} icon={MessageSquare} description="This month" />
46
+ <StatCard title="Models Used" value={stats.modelsUsed} icon={BarChart} />
47
+ <StatCard title="Credits" value={stats.creditsRemaining} icon={CreditCard} description="Remaining" />
48
+ </div>
49
+ )
50
+ }
51
+
52
+ function StatsSkeleton() {
53
+ return (
54
+ <div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-6 mb-8">
55
+ {[...Array(4)].map((_, i) => (
56
+ <Card key={i} className="p-6 bg-white/5 border-white/10">
57
+ <div className="animate-pulse">
58
+ <div className="h-4 bg-gray-700 rounded w-1/2 mb-2"></div>
59
+ <div className="h-8 bg-gray-700 rounded w-1/3"></div>
60
+ </div>
61
+ </Card>
62
+ ))}
63
+ </div>
64
+ )
65
+ }
66
+
67
+ export default async function DashboardPage() {
68
+ const user = await requireAuth()
69
+
70
+ return (
71
+ <div className="min-h-screen bg-slate-900">
72
+ <div className="max-w-7xl mx-auto px-4 py-8">
73
+ {/* Header */}
74
+ <div className="flex items-center justify-between mb-8">
75
+ <div>
76
+ <h1 className="text-3xl font-bold text-white">Dashboard</h1>
77
+ <p className="text-gray-400 mt-1">Welcome back, {user.name || user.email}</p>
78
+ </div>
79
+ <Link href="/chat">
80
+ <Button className="bg-purple-600 hover:bg-purple-700">
81
+ <MessageSquare className="w-4 h-4 mr-2" />
82
+ New Chat
83
+ </Button>
84
+ </Link>
85
+ </div>
86
+
87
+ {/* Stats */}
88
+ <Suspense fallback={<StatsSkeleton />}>
89
+ <UsageStats userId={user.id} />
90
+ </Suspense>
91
+
92
+ {/* Quick Actions */}
93
+ <div className="grid grid-cols-1 md:grid-cols-3 gap-6 mb-8">
94
+ <Card className="p-6 bg-white/5 border-white/10">
95
+ <div className="flex items-center mb-4">
96
+ <Key className="h-6 w-6 text-purple-400 mr-3" />
97
+ <h3 className="text-lg font-semibold text-white">API Keys</h3>
98
+ </div>
99
+ <p className="text-gray-400 mb-4">
100
+ Manage your API keys for programmatic access.
101
+ </p>
102
+ <Button className="w-full" variant="outline">Manage Keys</Button>
103
+ </Card>
104
+
105
+ <Card className="p-6 bg-white/5 border-white/10">
106
+ <div className="flex items-center mb-4">
107
+ <CreditCard className="h-6 w-6 text-purple-400 mr-3" />
108
+ <h3 className="text-lg font-semibold text-white">Billing</h3>
109
+ </div>
110
+ <p className="text-gray-400 mb-4">
111
+ View usage and manage your subscription.
112
+ </p>
113
+ <Button className="w-full" variant="outline">View Billing</Button>
114
+ </Card>
115
+
116
+ <Card className="p-6 bg-white/5 border-white/10">
117
+ <div className="flex items-center mb-4">
118
+ <Settings className="h-6 w-6 text-purple-400 mr-3" />
119
+ <h3 className="text-lg font-semibold text-white">Settings</h3>
120
+ </div>
121
+ <p className="text-gray-400 mb-4">
122
+ Configure your account preferences.
123
+ </p>
124
+ <Button className="w-full" variant="outline">Open Settings</Button>
125
+ </Card>
126
+ </div>
127
+
128
+ {/* Recent Activity */}
129
+ <Card className="p-6 bg-white/5 border-white/10">
130
+ <h3 className="text-lg font-semibold text-white mb-4">Recent Conversations</h3>
131
+ <div className="text-center py-8 text-gray-500">
132
+ <MessageSquare className="w-12 h-12 mx-auto mb-4 opacity-50" />
133
+ <p>No recent conversations. Start a new chat!</p>
134
+ <Link href="/chat">
135
+ <Button className="mt-4 bg-purple-600 hover:bg-purple-700">Start Chatting</Button>
136
+ </Link>
137
+ </div>
138
+ </Card>
139
+ </div>
140
+ </div>
141
+ )
142
+ }
@@ -0,0 +1,34 @@
1
+ @import "tailwindcss";
2
+
3
+ @theme {
4
+ --color-primary: oklch(60% 0.25 295);
5
+ --color-background: oklch(15% 0.02 256);
6
+ --color-foreground: oklch(95% 0 0);
7
+ --font-sans: 'Inter', system-ui, sans-serif;
8
+ --radius: 0.5rem;
9
+ }
10
+
11
+ body {
12
+ font-family: var(--font-sans);
13
+ background-color: var(--color-background);
14
+ color: var(--color-foreground);
15
+ }
16
+
17
+ /* Custom scrollbar for dark theme */
18
+ ::-webkit-scrollbar {
19
+ width: 8px;
20
+ height: 8px;
21
+ }
22
+
23
+ ::-webkit-scrollbar-track {
24
+ background: rgba(255, 255, 255, 0.05);
25
+ }
26
+
27
+ ::-webkit-scrollbar-thumb {
28
+ background: rgba(255, 255, 255, 0.2);
29
+ border-radius: 4px;
30
+ }
31
+
32
+ ::-webkit-scrollbar-thumb:hover {
33
+ background: rgba(255, 255, 255, 0.3);
34
+ }
@@ -0,0 +1,27 @@
1
+ import type { Metadata } from 'next'
2
+ import { Inter } from 'next/font/google'
3
+ import './globals.css'
4
+ import { AppProviders } from '@/components/providers/app-providers'
5
+
6
+ const inter = Inter({ subsets: ['latin'] })
7
+
8
+ export const metadata: Metadata = {
9
+ title: '{{titleCaseName}} - AI Platform',
10
+ description: '{{description}}',
11
+ }
12
+
13
+ export default function RootLayout({
14
+ children,
15
+ }: {
16
+ children: React.ReactNode
17
+ }) {
18
+ return (
19
+ <html lang="en" suppressHydrationWarning>
20
+ <body className={inter.className}>
21
+ <AppProviders>
22
+ {children}
23
+ </AppProviders>
24
+ </body>
25
+ </html>
26
+ )
27
+ }
@@ -0,0 +1,203 @@
1
+ 'use client'
2
+
3
+ import { Button, Card } from '@digilogiclabs/saas-factory-ui'
4
+ import { useAuth } from '@digilogiclabs/app-sdk'
5
+ import { Bot, Sparkles, Zap, MessageSquare, Code, Brain, ArrowRight, User, LogOut } from 'lucide-react'
6
+ import Link from 'next/link'
7
+
8
+ const FEATURES = [
9
+ {
10
+ icon: MessageSquare,
11
+ title: 'AI Chat',
12
+ description: 'Conversational AI with multiple model support',
13
+ color: 'blue',
14
+ },
15
+ {
16
+ icon: Code,
17
+ title: 'Code Generation',
18
+ description: 'Generate and refactor code with AI assistance',
19
+ color: 'green',
20
+ },
21
+ {
22
+ icon: Brain,
23
+ title: 'Custom Models',
24
+ description: 'Fine-tune and deploy your own AI models',
25
+ color: 'purple',
26
+ },
27
+ {
28
+ icon: Zap,
29
+ title: 'API Access',
30
+ description: 'Integrate AI capabilities into your applications',
31
+ color: 'orange',
32
+ },
33
+ ]
34
+
35
+ const MODELS = [
36
+ { name: 'GPT-4o', provider: 'OpenAI', status: 'available' },
37
+ { name: 'Claude 3.5', provider: 'Anthropic', status: 'available' },
38
+ { name: 'Gemini Pro', provider: 'Google', status: 'coming_soon' },
39
+ { name: 'Llama 3', provider: 'Meta', status: 'available' },
40
+ ]
41
+
42
+ export default function Home() {
43
+ const { user, signOut, loading } = useAuth()
44
+
45
+ const projectName = "{{titleCaseName}}"
46
+
47
+ const handleSignOut = async () => {
48
+ try {
49
+ await signOut()
50
+ } catch (err) {
51
+ console.error('Sign out error:', err)
52
+ }
53
+ }
54
+
55
+ return (
56
+ <main className="min-h-screen bg-gradient-to-br from-slate-900 via-purple-900 to-slate-900">
57
+ {/* Header */}
58
+ <header className="border-b border-white/10 bg-black/20 backdrop-blur-sm sticky top-0 z-50">
59
+ <div className="max-w-7xl mx-auto px-4 py-4">
60
+ <div className="flex items-center justify-between">
61
+ <Link href="/" className="flex items-center gap-2">
62
+ <Bot className="w-8 h-8 text-purple-400" />
63
+ <span className="text-2xl font-bold text-white">{projectName}</span>
64
+ </Link>
65
+
66
+ <nav className="hidden md:flex items-center gap-6">
67
+ <Link href="/models" className="text-gray-300 hover:text-white transition">
68
+ Models
69
+ </Link>
70
+ <Link href="/playground" className="text-gray-300 hover:text-white transition">
71
+ Playground
72
+ </Link>
73
+ <Link href="/docs" className="text-gray-300 hover:text-white transition">
74
+ Docs
75
+ </Link>
76
+ </nav>
77
+
78
+ <div className="flex items-center gap-4">
79
+ {loading ? (
80
+ <div className="text-sm text-gray-400">Loading...</div>
81
+ ) : user ? (
82
+ <div className="flex items-center gap-2">
83
+ <Link href="/dashboard">
84
+ <Button variant="outline" size="sm" className="border-white/20 text-white hover:bg-white/10">
85
+ <User className="w-4 h-4 mr-2" />
86
+ Dashboard
87
+ </Button>
88
+ </Link>
89
+ <Button variant="ghost" size="sm" onClick={handleSignOut} className="text-gray-400 hover:text-white">
90
+ <LogOut className="w-4 h-4" />
91
+ </Button>
92
+ </div>
93
+ ) : (
94
+ <div className="flex gap-2">
95
+ <Link href="/login">
96
+ <Button variant="outline" size="sm" className="border-white/20 text-white hover:bg-white/10">
97
+ Sign In
98
+ </Button>
99
+ </Link>
100
+ <Link href="/signup">
101
+ <Button size="sm" className="bg-purple-600 hover:bg-purple-700">
102
+ Get Started
103
+ </Button>
104
+ </Link>
105
+ </div>
106
+ )}
107
+ </div>
108
+ </div>
109
+ </div>
110
+ </header>
111
+
112
+ <div className="max-w-7xl mx-auto px-4 py-16">
113
+ {/* Hero */}
114
+ <div className="text-center mb-20">
115
+ <div className="inline-flex items-center px-4 py-2 rounded-full bg-purple-500/20 text-purple-300 text-sm mb-6">
116
+ <Sparkles className="w-4 h-4 mr-2" />
117
+ AI-Powered Platform
118
+ </div>
119
+ <h1 className="text-5xl md:text-7xl font-bold text-white mb-6">
120
+ Build with <span className="text-transparent bg-clip-text bg-gradient-to-r from-purple-400 to-pink-400">AI</span>
121
+ </h1>
122
+ <p className="text-xl text-gray-300 max-w-2xl mx-auto mb-8">
123
+ Access powerful AI models, build intelligent applications, and scale effortlessly.
124
+ </p>
125
+ <div className="flex gap-4 justify-center">
126
+ <Link href="/chat">
127
+ <Button size="lg" className="bg-purple-600 hover:bg-purple-700">
128
+ <MessageSquare className="w-5 h-5 mr-2" />
129
+ Try AI Chat
130
+ </Button>
131
+ </Link>
132
+ <Link href="/playground">
133
+ <Button size="lg" variant="outline" className="border-white/20 text-white hover:bg-white/10">
134
+ Open Playground
135
+ </Button>
136
+ </Link>
137
+ </div>
138
+ </div>
139
+
140
+ {/* Features */}
141
+ <div className="grid md:grid-cols-2 lg:grid-cols-4 gap-6 mb-20">
142
+ {FEATURES.map((feature) => (
143
+ <Card key={feature.title} className="p-6 bg-white/5 border-white/10 backdrop-blur-sm hover:bg-white/10 transition">
144
+ <div className={`w-12 h-12 rounded-lg flex items-center justify-center mb-4 bg-${feature.color}-500/20`}>
145
+ <feature.icon className={`w-6 h-6 text-${feature.color}-400`} />
146
+ </div>
147
+ <h3 className="text-lg font-semibold text-white mb-2">{feature.title}</h3>
148
+ <p className="text-gray-400 text-sm">{feature.description}</p>
149
+ </Card>
150
+ ))}
151
+ </div>
152
+
153
+ {/* Available Models */}
154
+ <div className="mb-20">
155
+ <div className="flex items-center justify-between mb-8">
156
+ <div>
157
+ <h2 className="text-3xl font-bold text-white mb-2">Available Models</h2>
158
+ <p className="text-gray-400">Access leading AI models from top providers</p>
159
+ </div>
160
+ <Link href="/models">
161
+ <Button variant="ghost" className="text-purple-400 hover:text-purple-300">
162
+ View All
163
+ <ArrowRight className="w-4 h-4 ml-2" />
164
+ </Button>
165
+ </Link>
166
+ </div>
167
+
168
+ <div className="grid md:grid-cols-2 lg:grid-cols-4 gap-4">
169
+ {MODELS.map((model) => (
170
+ <Card key={model.name} className="p-4 bg-white/5 border-white/10">
171
+ <div className="flex items-center justify-between mb-2">
172
+ <h3 className="font-semibold text-white">{model.name}</h3>
173
+ <span className={`text-xs px-2 py-1 rounded ${
174
+ model.status === 'available'
175
+ ? 'bg-green-500/20 text-green-400'
176
+ : 'bg-yellow-500/20 text-yellow-400'
177
+ }`}>
178
+ {model.status === 'available' ? 'Available' : 'Coming Soon'}
179
+ </span>
180
+ </div>
181
+ <p className="text-sm text-gray-400">{model.provider}</p>
182
+ </Card>
183
+ ))}
184
+ </div>
185
+ </div>
186
+
187
+ {/* CTA */}
188
+ <Card className="p-12 bg-gradient-to-r from-purple-600 to-pink-600 border-0 text-center">
189
+ <h2 className="text-3xl font-bold text-white mb-4">Ready to Build?</h2>
190
+ <p className="text-white/80 mb-8 max-w-md mx-auto">
191
+ Start building AI-powered applications today. Free tier available.
192
+ </p>
193
+ <Link href="/signup">
194
+ <Button size="lg" variant="secondary">
195
+ Get Started Free
196
+ <ArrowRight className="w-5 h-5 ml-2" />
197
+ </Button>
198
+ </Link>
199
+ </Card>
200
+ </div>
201
+ </main>
202
+ )
203
+ }
@@ -0,0 +1,27 @@
1
+ 'use client'
2
+
3
+ import { ThemeProvider } from 'next-themes'
4
+ import { DLLProvider } from '@digilogiclabs/app-sdk'
5
+
6
+ interface AppProvidersProps {
7
+ children: React.ReactNode
8
+ }
9
+
10
+ export function AppProviders({ children }: AppProvidersProps) {
11
+ return (
12
+ <ThemeProvider attribute="class" defaultTheme="dark" enableSystem>
13
+ <DLLProvider
14
+ config={{
15
+ auth: {
16
+ provider: 'supabase',
17
+ },
18
+ payments: {
19
+ provider: 'stripe',
20
+ },
21
+ }}
22
+ >
23
+ {children}
24
+ </DLLProvider>
25
+ </ThemeProvider>
26
+ )
27
+ }