@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,70 @@
1
+ 'use client';
2
+
3
+ /**
4
+ * Error boundary page.
5
+ *
6
+ * Catches runtime errors in the app and shows a recovery UI.
7
+ * Shows error details in development mode only.
8
+ */
9
+ export default function Error({
10
+ error,
11
+ reset,
12
+ }: {
13
+ error: Error & { digest?: string };
14
+ reset: () => void;
15
+ }) {
16
+ return (
17
+ <main className="flex min-h-screen items-center justify-center bg-white px-4 dark:bg-gray-950">
18
+ <div className="text-center">
19
+ <div className="mx-auto mb-4 flex h-16 w-16 items-center justify-center rounded-full bg-red-100 dark:bg-red-900/30">
20
+ <svg
21
+ className="h-8 w-8 text-red-600 dark:text-red-400"
22
+ fill="none"
23
+ viewBox="0 0 24 24"
24
+ strokeWidth="1.5"
25
+ stroke="currentColor"
26
+ >
27
+ <path
28
+ strokeLinecap="round"
29
+ strokeLinejoin="round"
30
+ d="M12 9v3.75m-9.303 3.376c-.866 1.5.217 3.374 1.948 3.374h14.71c1.73 0 2.813-1.874 1.948-3.374L13.949 3.378c-.866-1.5-3.032-1.5-3.898 0L2.697 16.126ZM12 15.75h.007v.008H12v-.008Z"
31
+ />
32
+ </svg>
33
+ </div>
34
+ <h1 className="text-2xl font-semibold text-gray-900 dark:text-white">
35
+ Something went wrong
36
+ </h1>
37
+ <p className="mt-2 max-w-md text-gray-600 dark:text-gray-400">
38
+ An unexpected error occurred. Please try again.
39
+ </p>
40
+ {error.digest && (
41
+ <p className="mt-1 text-xs text-gray-400 dark:text-gray-500">
42
+ Error ID: {error.digest}
43
+ </p>
44
+ )}
45
+
46
+ {process.env.NODE_ENV === 'development' && (
47
+ <pre className="mx-auto mt-4 max-w-lg overflow-auto rounded-lg bg-gray-100 p-4 text-left text-xs text-red-600 dark:bg-gray-900 dark:text-red-400">
48
+ {error.message}
49
+ {error.stack && `\n\n${error.stack}`}
50
+ </pre>
51
+ )}
52
+
53
+ <div className="mt-8 flex items-center justify-center gap-4">
54
+ <button
55
+ onClick={reset}
56
+ className="rounded-lg bg-blue-600 px-5 py-2.5 text-sm font-medium text-white transition-colors hover:bg-blue-700"
57
+ >
58
+ Try Again
59
+ </button>
60
+ <a
61
+ href="/"
62
+ className="rounded-lg border border-gray-300 px-5 py-2.5 text-sm font-medium text-gray-700 transition-colors hover:bg-gray-50 dark:border-gray-700 dark:text-gray-300 dark:hover:bg-gray-800"
63
+ >
64
+ Go Home
65
+ </a>
66
+ </div>
67
+ </div>
68
+ </main>
69
+ );
70
+ }
@@ -0,0 +1,102 @@
1
+ 'use client';
2
+
3
+ /**
4
+ * Root error boundary.
5
+ *
6
+ * This is the last-resort error handler that catches errors in the root layout.
7
+ * It must render its own <html> and <body> tags since it replaces the entire page.
8
+ * Uses inline styles only — no framework CSS is available at this level.
9
+ */
10
+ export default function GlobalError({
11
+ error,
12
+ reset,
13
+ }: {
14
+ error: Error & { digest?: string };
15
+ reset: () => void;
16
+ }) {
17
+ return (
18
+ <html lang="en">
19
+ <body
20
+ style={{
21
+ margin: 0,
22
+ minHeight: '100vh',
23
+ display: 'flex',
24
+ alignItems: 'center',
25
+ justifyContent: 'center',
26
+ fontFamily:
27
+ '-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif',
28
+ backgroundColor: '#fafafa',
29
+ color: '#111',
30
+ }}
31
+ >
32
+ <div style={{ textAlign: 'center', padding: '2rem' }}>
33
+ <div
34
+ style={{
35
+ width: 64,
36
+ height: 64,
37
+ margin: '0 auto 1rem',
38
+ borderRadius: '50%',
39
+ backgroundColor: '#fee2e2',
40
+ display: 'flex',
41
+ alignItems: 'center',
42
+ justifyContent: 'center',
43
+ fontSize: 32,
44
+ }}
45
+ >
46
+ !
47
+ </div>
48
+ <h1 style={{ fontSize: '1.5rem', fontWeight: 600, margin: 0 }}>
49
+ Something went wrong
50
+ </h1>
51
+ <p style={{ color: '#666', marginTop: '0.5rem' }}>
52
+ A critical error occurred. Please try reloading the page.
53
+ </p>
54
+ {error.digest && (
55
+ <p style={{ color: '#999', fontSize: '0.75rem', marginTop: '0.25rem' }}>
56
+ Error ID: {error.digest}
57
+ </p>
58
+ )}
59
+ <div
60
+ style={{
61
+ marginTop: '2rem',
62
+ display: 'flex',
63
+ gap: '1rem',
64
+ justifyContent: 'center',
65
+ }}
66
+ >
67
+ <button
68
+ onClick={reset}
69
+ style={{
70
+ padding: '0.625rem 1.25rem',
71
+ backgroundColor: '#2563eb',
72
+ color: 'white',
73
+ border: 'none',
74
+ borderRadius: '0.5rem',
75
+ cursor: 'pointer',
76
+ fontSize: '0.875rem',
77
+ fontWeight: 500,
78
+ }}
79
+ >
80
+ Try Again
81
+ </button>
82
+ <a
83
+ href="/"
84
+ style={{
85
+ padding: '0.625rem 1.25rem',
86
+ backgroundColor: 'white',
87
+ color: '#374151',
88
+ border: '1px solid #d1d5db',
89
+ borderRadius: '0.5rem',
90
+ textDecoration: 'none',
91
+ fontSize: '0.875rem',
92
+ fontWeight: 500,
93
+ }}
94
+ >
95
+ Go Home
96
+ </a>
97
+ </div>
98
+ </div>
99
+ </body>
100
+ </html>
101
+ );
102
+ }
@@ -0,0 +1,39 @@
1
+ import Link from 'next/link';
2
+
3
+ /**
4
+ * Custom 404 page.
5
+ *
6
+ * Shown when a route is not found. Uses Tailwind CSS for styling.
7
+ * Customize the links and messaging to match your app.
8
+ */
9
+ export default function NotFound() {
10
+ return (
11
+ <main className="flex min-h-screen items-center justify-center bg-white px-4 dark:bg-gray-950">
12
+ <div className="text-center">
13
+ <p className="bg-gradient-to-r from-blue-500 to-purple-600 bg-clip-text text-8xl font-bold text-transparent">
14
+ 404
15
+ </p>
16
+ <h1 className="mt-4 text-2xl font-semibold text-gray-900 dark:text-white">
17
+ Page not found
18
+ </h1>
19
+ <p className="mt-2 max-w-md text-gray-600 dark:text-gray-400">
20
+ The page you&apos;re looking for doesn&apos;t exist or has been moved.
21
+ </p>
22
+ <div className="mt-8 flex items-center justify-center gap-4">
23
+ <Link
24
+ href="/"
25
+ className="rounded-lg bg-blue-600 px-5 py-2.5 text-sm font-medium text-white transition-colors hover:bg-blue-700"
26
+ >
27
+ Go Home
28
+ </Link>
29
+ <Link
30
+ href="/dashboard"
31
+ className="rounded-lg border border-gray-300 px-5 py-2.5 text-sm font-medium text-gray-700 transition-colors hover:bg-gray-50 dark:border-gray-700 dark:text-gray-300 dark:hover:bg-gray-800"
32
+ >
33
+ Dashboard
34
+ </Link>
35
+ </div>
36
+ </div>
37
+ </main>
38
+ );
39
+ }
@@ -0,0 +1,68 @@
1
+ import { NextResponse } from 'next/server';
2
+
3
+ export const dynamic = 'force-dynamic';
4
+
5
+ interface ServiceHealth {
6
+ status: 'up' | 'down' | 'unknown';
7
+ responseTime?: number;
8
+ error?: string;
9
+ }
10
+
11
+ /**
12
+ * GET /api/health
13
+ *
14
+ * Non-destructive health check for monitoring (Uptime Kuma, Coolify, K8s probes).
15
+ * Returns 200 if healthy, 503 if degraded/unhealthy.
16
+ */
17
+ export async function GET() {
18
+ const services: Record<string, ServiceHealth> = {};
19
+ const details: string[] = [];
20
+
21
+ // Check database connectivity
22
+ try {
23
+ const start = Date.now();
24
+ // Replace with your database check — e.g. a simple SELECT 1
25
+ const dbUrl = process.env.DATABASE_URL;
26
+ services.database = dbUrl
27
+ ? { status: 'up', responseTime: Date.now() - start }
28
+ : { status: 'down', error: 'DATABASE_URL not configured' };
29
+ } catch {
30
+ services.database = { status: 'down', error: 'Database connection failed' };
31
+ }
32
+
33
+ // Check Redis connectivity
34
+ try {
35
+ const start = Date.now();
36
+ const redisUrl = process.env.REDIS_URL;
37
+ services.cache = redisUrl
38
+ ? { status: 'up', responseTime: Date.now() - start }
39
+ : { status: 'unknown', error: 'REDIS_URL not configured (optional)' };
40
+ } catch {
41
+ services.cache = { status: 'down', error: 'Cache connection failed' };
42
+ }
43
+
44
+ // Check email service
45
+ services.email = process.env.RESEND_API_KEY
46
+ ? { status: 'up' }
47
+ : { status: 'unknown', error: 'RESEND_API_KEY not configured' };
48
+
49
+ // Determine overall status
50
+ const dbDown = services.database?.status === 'down';
51
+ let status: 'healthy' | 'degraded' | 'unhealthy';
52
+
53
+ if (dbDown) {
54
+ status = 'unhealthy';
55
+ details.push('Database is down — critical service unavailable');
56
+ } else if (Object.values(services).some((s) => s.status === 'down')) {
57
+ status = 'degraded';
58
+ details.push('Some services degraded');
59
+ } else {
60
+ status = 'healthy';
61
+ details.push('All systems operational');
62
+ }
63
+
64
+ return NextResponse.json(
65
+ { status, timestamp: new Date().toISOString(), services, details },
66
+ { status: status === 'healthy' ? 200 : 503 }
67
+ );
68
+ }
@@ -0,0 +1,205 @@
1
+ import { Metadata } from 'next';
2
+ import { LEGAL_CONFIG } from '@/lib/legal-config';
3
+
4
+ export const metadata: Metadata = {
5
+ title: `Privacy Policy | ${LEGAL_CONFIG.appName}`,
6
+ description: `Privacy Policy for ${LEGAL_CONFIG.appName}. Learn how we collect, use, and protect your data.`,
7
+ alternates: {
8
+ canonical: `${LEGAL_CONFIG.appUrl}/privacy`,
9
+ },
10
+ };
11
+
12
+ export default function PrivacyPage() {
13
+ const {
14
+ appName,
15
+ companyName,
16
+ appUrl,
17
+ supportEmail,
18
+ privacyEmail,
19
+ effectiveDate,
20
+ thirdPartyServices,
21
+ usesAnalyticsCookies,
22
+ dataRetentionPeriod,
23
+ } = LEGAL_CONFIG;
24
+
25
+ return (
26
+ <main className="min-h-screen bg-white dark:bg-gray-950">
27
+ <div className="mx-auto max-w-3xl px-4 py-16 sm:px-6 lg:px-8">
28
+ <h1 className="mb-2 text-3xl font-bold tracking-tight text-gray-900 dark:text-white">
29
+ Privacy Policy
30
+ </h1>
31
+ <p className="mb-8 text-sm text-gray-500 dark:text-gray-400">
32
+ Effective: {effectiveDate}
33
+ </p>
34
+
35
+ <div className="prose prose-gray dark:prose-invert max-w-none">
36
+ <section>
37
+ <h2>1. Information We Collect</h2>
38
+ <p>We collect information you provide directly:</p>
39
+ <ul>
40
+ <li>
41
+ <strong>Account data:</strong> name, email, profile information
42
+ </li>
43
+ <li>
44
+ <strong>Usage data:</strong> pages visited, features used,
45
+ interactions
46
+ </li>
47
+ <li>
48
+ <strong>Device data:</strong> browser type, IP address, operating
49
+ system
50
+ </li>
51
+ </ul>
52
+ </section>
53
+
54
+ <section>
55
+ <h2>2. How We Use Your Information</h2>
56
+ <ul>
57
+ <li>Provide and improve the service</li>
58
+ <li>Send transactional emails (account, security, updates)</li>
59
+ <li>Analyze usage patterns to improve user experience</li>
60
+ <li>Prevent fraud and enforce our terms</li>
61
+ <li>Comply with legal obligations</li>
62
+ </ul>
63
+ </section>
64
+
65
+ <section>
66
+ <h2>3. Information Sharing</h2>
67
+ <p>
68
+ We do not sell your personal data. We may share information with:
69
+ </p>
70
+ <ul>
71
+ <li>
72
+ <strong>Service providers:</strong> who help us operate{' '}
73
+ {appName}
74
+ </li>
75
+ <li>
76
+ <strong>Legal authorities:</strong> when required by law or to
77
+ protect rights
78
+ </li>
79
+ </ul>
80
+ {thirdPartyServices.length > 0 && (
81
+ <>
82
+ <p>Third-party services we use:</p>
83
+ <ul>
84
+ {thirdPartyServices.map((service) => (
85
+ <li key={service}>{service}</li>
86
+ ))}
87
+ </ul>
88
+ </>
89
+ )}
90
+ </section>
91
+
92
+ <section>
93
+ <h2>4. Cookies</h2>
94
+ <p>We use cookies for:</p>
95
+ <ul>
96
+ <li>
97
+ <strong>Essential cookies:</strong> authentication, security,
98
+ preferences
99
+ </li>
100
+ {usesAnalyticsCookies && (
101
+ <li>
102
+ <strong>Analytics cookies:</strong> understanding how users
103
+ interact with {appName}
104
+ </li>
105
+ )}
106
+ </ul>
107
+ <p>
108
+ You can control cookies through your browser settings. Disabling
109
+ essential cookies may limit functionality.
110
+ </p>
111
+ </section>
112
+
113
+ <section>
114
+ <h2>5. Your Rights</h2>
115
+ <p>You have the right to:</p>
116
+ <ul>
117
+ <li>
118
+ <strong>Access:</strong> request a copy of your personal data
119
+ </li>
120
+ <li>
121
+ <strong>Rectification:</strong> correct inaccurate data
122
+ </li>
123
+ <li>
124
+ <strong>Erasure:</strong> request deletion of your data
125
+ </li>
126
+ <li>
127
+ <strong>Portability:</strong> receive your data in a portable
128
+ format
129
+ </li>
130
+ <li>
131
+ <strong>Objection:</strong> object to certain processing of your
132
+ data
133
+ </li>
134
+ </ul>
135
+ <p>
136
+ To exercise these rights, contact{' '}
137
+ <a href={`mailto:${privacyEmail}`}>{privacyEmail}</a>.
138
+ </p>
139
+ </section>
140
+
141
+ <section>
142
+ <h2>6. Data Security</h2>
143
+ <p>
144
+ We implement industry-standard security measures including
145
+ encryption in transit (TLS), encrypted storage, and access
146
+ controls. No method of transmission is 100% secure, but we strive
147
+ to protect your data.
148
+ </p>
149
+ </section>
150
+
151
+ <section>
152
+ <h2>7. Data Retention</h2>
153
+ <p>
154
+ We retain your data for as long as your account is active. After
155
+ deletion, data is retained for {dataRetentionPeriod} for legal and
156
+ operational purposes, then permanently deleted.
157
+ </p>
158
+ </section>
159
+
160
+ <section>
161
+ <h2>8. Children&apos;s Privacy</h2>
162
+ <p>
163
+ {appName} is not directed at children under 13. We do not
164
+ knowingly collect data from children. If you believe a child has
165
+ provided us data, contact us for removal.
166
+ </p>
167
+ </section>
168
+
169
+ <section>
170
+ <h2>9. International Transfers</h2>
171
+ <p>
172
+ Your data may be processed in countries outside your own. We
173
+ ensure appropriate safeguards are in place for such transfers in
174
+ compliance with applicable data protection laws.
175
+ </p>
176
+ </section>
177
+
178
+ <section>
179
+ <h2>10. Changes to This Policy</h2>
180
+ <p>
181
+ We may update this policy periodically. We will notify you of
182
+ material changes via email or prominent notice on {appName}.
183
+ Continued use after changes constitutes acceptance.
184
+ </p>
185
+ </section>
186
+
187
+ <section>
188
+ <h2>11. Contact</h2>
189
+ <p>
190
+ For privacy questions or data requests, contact us at{' '}
191
+ <a href={`mailto:${privacyEmail}`}>{privacyEmail}</a>.
192
+ </p>
193
+ <p>
194
+ {companyName}
195
+ <br />
196
+ {appUrl}
197
+ <br />
198
+ {supportEmail}
199
+ </p>
200
+ </section>
201
+ </div>
202
+ </div>
203
+ </main>
204
+ );
205
+ }
@@ -0,0 +1,154 @@
1
+ import { Metadata } from 'next';
2
+ import { LEGAL_CONFIG } from '@/lib/legal-config';
3
+
4
+ export const metadata: Metadata = {
5
+ title: `Terms of Service | ${LEGAL_CONFIG.appName}`,
6
+ description: `Terms of Service for ${LEGAL_CONFIG.appName}. Read our terms and conditions.`,
7
+ alternates: {
8
+ canonical: `${LEGAL_CONFIG.appUrl}/terms`,
9
+ },
10
+ };
11
+
12
+ export default function TermsPage() {
13
+ const {
14
+ appName,
15
+ companyName,
16
+ appUrl,
17
+ supportEmail,
18
+ effectiveDate,
19
+ minimumAge,
20
+ jurisdiction,
21
+ hasPayments,
22
+ platformFeePercent,
23
+ } = LEGAL_CONFIG;
24
+
25
+ return (
26
+ <main className="min-h-screen bg-white dark:bg-gray-950">
27
+ <div className="mx-auto max-w-3xl px-4 py-16 sm:px-6 lg:px-8">
28
+ <h1 className="mb-2 text-3xl font-bold tracking-tight text-gray-900 dark:text-white">
29
+ Terms of Service
30
+ </h1>
31
+ <p className="mb-8 text-sm text-gray-500 dark:text-gray-400">
32
+ Effective: {effectiveDate}
33
+ </p>
34
+
35
+ <div className="prose prose-gray dark:prose-invert max-w-none">
36
+ <section>
37
+ <h2>1. Acceptance of Terms</h2>
38
+ <p>
39
+ By accessing or using {appName} ({appUrl}), you agree to be bound
40
+ by these Terms of Service. If you do not agree, do not use the
41
+ service.
42
+ </p>
43
+ </section>
44
+
45
+ {minimumAge > 0 && (
46
+ <section>
47
+ <h2>2. Age Requirement</h2>
48
+ <p>
49
+ You must be at least {minimumAge} years old to use {appName}. By
50
+ using this service, you represent that you meet this age
51
+ requirement.
52
+ </p>
53
+ </section>
54
+ )}
55
+
56
+ <section>
57
+ <h2>{minimumAge > 0 ? '3' : '2'}. User Accounts</h2>
58
+ <p>
59
+ You are responsible for maintaining the confidentiality of your
60
+ account credentials and for all activities under your account.
61
+ Notify us immediately of any unauthorized use.
62
+ </p>
63
+ </section>
64
+
65
+ <section>
66
+ <h2>{minimumAge > 0 ? '4' : '3'}. Acceptable Use</h2>
67
+ <p>You agree not to:</p>
68
+ <ul>
69
+ <li>Violate any applicable laws or regulations</li>
70
+ <li>
71
+ Upload harmful, offensive, or infringing content
72
+ </li>
73
+ <li>Attempt to access other users&apos; accounts</li>
74
+ <li>
75
+ Use automated tools to scrape or interfere with the service
76
+ </li>
77
+ <li>Impersonate any person or entity</li>
78
+ </ul>
79
+ </section>
80
+
81
+ {hasPayments && (
82
+ <section>
83
+ <h2>{minimumAge > 0 ? '5' : '4'}. Payments &amp; Fees</h2>
84
+ <p>
85
+ Payments are processed securely through Stripe. All fees are
86
+ listed at the time of purchase.
87
+ {Number(platformFeePercent) > 0 &&
88
+ ` ${appName} charges a ${platformFeePercent}% platform fee on applicable transactions.`}
89
+ </p>
90
+ <p>
91
+ Refund policies are described at the point of sale. You are
92
+ responsible for any applicable taxes on your purchases.
93
+ </p>
94
+ </section>
95
+ )}
96
+
97
+ <section>
98
+ <h2>Intellectual Property</h2>
99
+ <p>
100
+ {appName} and its original content, features, and functionality
101
+ are owned by {companyName}. You retain ownership of content you
102
+ submit but grant us a license to display it as part of the
103
+ service.
104
+ </p>
105
+ </section>
106
+
107
+ <section>
108
+ <h2>Termination</h2>
109
+ <p>
110
+ We may suspend or terminate your account for violations of these
111
+ terms. You may delete your account at any time. Upon termination,
112
+ your right to use the service ceases immediately.
113
+ </p>
114
+ </section>
115
+
116
+ <section>
117
+ <h2>Limitation of Liability</h2>
118
+ <p>
119
+ {appName} is provided &quot;as is&quot; without warranties of any
120
+ kind. {companyName} shall not be liable for any indirect,
121
+ incidental, or consequential damages arising from your use of the
122
+ service.
123
+ </p>
124
+ </section>
125
+
126
+ <section>
127
+ <h2>Governing Law</h2>
128
+ <p>
129
+ These terms are governed by the laws of {jurisdiction}. Any
130
+ disputes shall be resolved in the courts of {jurisdiction}.
131
+ </p>
132
+ </section>
133
+
134
+ <section>
135
+ <h2>Changes to Terms</h2>
136
+ <p>
137
+ We may update these terms at any time. Continued use after changes
138
+ constitutes acceptance. We will notify registered users of
139
+ material changes via email.
140
+ </p>
141
+ </section>
142
+
143
+ <section>
144
+ <h2>Contact</h2>
145
+ <p>
146
+ Questions about these terms? Contact us at{' '}
147
+ <a href={`mailto:${supportEmail}`}>{supportEmail}</a>.
148
+ </p>
149
+ </section>
150
+ </div>
151
+ </div>
152
+ </main>
153
+ );
154
+ }
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Legal page configuration.
3
+ *
4
+ * Update these values to match your app's legal details.
5
+ * Used by the Terms of Service and Privacy Policy pages.
6
+ */
7
+ export const LEGAL_CONFIG = {
8
+ /** App display name */
9
+ appName: 'My App',
10
+
11
+ /** Company or entity name */
12
+ companyName: 'My Company',
13
+
14
+ /** Production URL (no trailing slash) */
15
+ appUrl: process.env.NEXT_PUBLIC_APP_URL || 'http://localhost:3000',
16
+
17
+ /** Support email address */
18
+ supportEmail: 'support@example.com',
19
+
20
+ /** Privacy-specific contact email */
21
+ privacyEmail: 'privacy@example.com',
22
+
23
+ /** Date the terms/privacy were last updated */
24
+ effectiveDate: 'January 1, 2026',
25
+
26
+ /** Minimum age requirement (0 to disable) */
27
+ minimumAge: 18,
28
+
29
+ /** Jurisdiction / governing law */
30
+ jurisdiction: 'the United States',
31
+
32
+ /** Whether the app processes payments */
33
+ hasPayments: true,
34
+
35
+ /** Platform fee percentage (if applicable) */
36
+ platformFeePercent: '0',
37
+
38
+ /** Whether the app uses cookies beyond essentials */
39
+ usesAnalyticsCookies: true,
40
+
41
+ /** Third-party services used (listed in privacy policy) */
42
+ thirdPartyServices: [
43
+ 'Stripe (payment processing)',
44
+ 'Cloudflare (CDN and security)',
45
+ 'Resend (transactional email)',
46
+ ],
47
+
48
+ /** Data retention period */
49
+ dataRetentionPeriod: '3 years after account deletion',
50
+ } as const;