create-nextdevtpl 2.6.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 (425) hide show
  1. package/README.md +29 -0
  2. package/catalog.json +385 -0
  3. package/dist/catalog.d.ts +3 -0
  4. package/dist/catalog.js +112 -0
  5. package/dist/catalog.js.map +1 -0
  6. package/dist/cli.d.ts +3 -0
  7. package/dist/cli.js +115 -0
  8. package/dist/cli.js.map +1 -0
  9. package/dist/filesystem.d.ts +10 -0
  10. package/dist/filesystem.js +86 -0
  11. package/dist/filesystem.js.map +1 -0
  12. package/dist/generate.d.ts +5 -0
  13. package/dist/generate.js +758 -0
  14. package/dist/generate.js.map +1 -0
  15. package/dist/index.d.ts +4 -0
  16. package/dist/index.js +4 -0
  17. package/dist/index.js.map +1 -0
  18. package/dist/selection.d.ts +2 -0
  19. package/dist/selection.js +111 -0
  20. package/dist/selection.js.map +1 -0
  21. package/dist/service-templates.d.ts +4 -0
  22. package/dist/service-templates.js +180 -0
  23. package/dist/service-templates.js.map +1 -0
  24. package/dist/types.d.ts +65 -0
  25. package/dist/types.js +2 -0
  26. package/dist/types.js.map +1 -0
  27. package/package.json +54 -0
  28. package/template/.dockerignore +14 -0
  29. package/template/.env.example +282 -0
  30. package/template/.gitattributes +17 -0
  31. package/template/.node-version +1 -0
  32. package/template/Dockerfile +45 -0
  33. package/template/LICENSE +21 -0
  34. package/template/README.md +267 -0
  35. package/template/biome.json +68 -0
  36. package/template/cloudflare/templates/logger.ts +162 -0
  37. package/template/cloudflare/templates/mail/server.ts +6 -0
  38. package/template/cloudflare/templates/mail/templates.ts +87 -0
  39. package/template/cloudflare/templates/mail/utils.ts +69 -0
  40. package/template/cloudflare/worker.mjs +25 -0
  41. package/template/components.json +22 -0
  42. package/template/compose.yaml +74 -0
  43. package/template/deploy/check-health.mjs +25 -0
  44. package/template/deploy/docker/README.md +14 -0
  45. package/template/deploy/server/README.md +24 -0
  46. package/template/deploy/server/build.sh +24 -0
  47. package/template/deploy/server/nextdevtpl.service +19 -0
  48. package/template/deploy/server/start.sh +19 -0
  49. package/template/deploy/vercel/README.md +16 -0
  50. package/template/deploy/verify-production-health.mjs +86 -0
  51. package/template/drizzle.config.ts +47 -0
  52. package/template/gitignore +62 -0
  53. package/template/manifest.json +35 -0
  54. package/template/messages/en.json +766 -0
  55. package/template/messages/zh.json +762 -0
  56. package/template/next.config.mjs +28 -0
  57. package/template/open-next.config.ts +3 -0
  58. package/template/package.json +125 -0
  59. package/template/pnpm-lock.yaml +15901 -0
  60. package/template/postcss.config.mjs +7 -0
  61. package/template/public/file.svg +1 -0
  62. package/template/public/globe.svg +1 -0
  63. package/template/public/logo.svg +6 -0
  64. package/template/public/next.svg +1 -0
  65. package/template/public/vercel.svg +1 -0
  66. package/template/public/window.svg +1 -0
  67. package/template/sentry.client.config.ts +10 -0
  68. package/template/sentry.edge.config.ts +10 -0
  69. package/template/sentry.server.config.ts +10 -0
  70. package/template/source.config.ts +59 -0
  71. package/template/src/adapters/ai/anthropic.ts +113 -0
  72. package/template/src/adapters/ai/index.ts +6 -0
  73. package/template/src/adapters/ai/openai-compatible.ts +88 -0
  74. package/template/src/adapters/ai/workers-ai.ts +63 -0
  75. package/template/src/adapters/index.ts +10 -0
  76. package/template/src/adapters/jobs/cloudflare-workflows.ts +46 -0
  77. package/template/src/adapters/jobs/index.ts +5 -0
  78. package/template/src/adapters/jobs/inngest/adapter.ts +29 -0
  79. package/template/src/adapters/jobs/inngest/client.ts +8 -0
  80. package/template/src/adapters/jobs/inngest/functions.ts +17 -0
  81. package/template/src/adapters/jobs/inngest/handler.ts +6 -0
  82. package/template/src/adapters/jobs/inngest/index.ts +4 -0
  83. package/template/src/adapters/mail/cloudflare-email.ts +50 -0
  84. package/template/src/adapters/mail/disabled.ts +17 -0
  85. package/template/src/adapters/mail/index.ts +7 -0
  86. package/template/src/adapters/mail/resend.ts +76 -0
  87. package/template/src/adapters/mail/smtp.ts +82 -0
  88. package/template/src/adapters/payment/creem.ts +269 -0
  89. package/template/src/adapters/payment/index.ts +2 -0
  90. package/template/src/adapters/payment/stripe.ts +302 -0
  91. package/template/src/adapters/rate-limit/cloudflare.ts +42 -0
  92. package/template/src/adapters/rate-limit/index.ts +6 -0
  93. package/template/src/adapters/rate-limit/noop.ts +27 -0
  94. package/template/src/adapters/rate-limit/upstash.ts +113 -0
  95. package/template/src/adapters/registry.ts +228 -0
  96. package/template/src/adapters/storage/index.ts +3 -0
  97. package/template/src/adapters/storage/r2-binding.ts +105 -0
  98. package/template/src/adapters/storage/s3-compatible.ts +149 -0
  99. package/template/src/app/[locale]/(admin)/admin/layout.tsx +36 -0
  100. package/template/src/app/[locale]/(admin)/admin/page.tsx +345 -0
  101. package/template/src/app/[locale]/(admin)/admin/tickets/[id]/page.tsx +261 -0
  102. package/template/src/app/[locale]/(admin)/admin/tickets/page.tsx +236 -0
  103. package/template/src/app/[locale]/(admin)/admin/users/page.tsx +557 -0
  104. package/template/src/app/[locale]/(auth)/forgot-password/page.tsx +9 -0
  105. package/template/src/app/[locale]/(auth)/layout.tsx +28 -0
  106. package/template/src/app/[locale]/(auth)/sign-in/page.tsx +9 -0
  107. package/template/src/app/[locale]/(auth)/sign-up/page.tsx +9 -0
  108. package/template/src/app/[locale]/(dashboard)/dashboard/credits/buy/buy-credits-view.tsx +170 -0
  109. package/template/src/app/[locale]/(dashboard)/dashboard/credits/buy/page.tsx +12 -0
  110. package/template/src/app/[locale]/(dashboard)/dashboard/credits/page.tsx +5 -0
  111. package/template/src/app/[locale]/(dashboard)/dashboard/loading.tsx +41 -0
  112. package/template/src/app/[locale]/(dashboard)/dashboard/page.tsx +299 -0
  113. package/template/src/app/[locale]/(dashboard)/dashboard/settings/page.tsx +38 -0
  114. package/template/src/app/[locale]/(dashboard)/dashboard/support/[id]/page.tsx +220 -0
  115. package/template/src/app/[locale]/(dashboard)/dashboard/support/new/page.tsx +183 -0
  116. package/template/src/app/[locale]/(dashboard)/dashboard/support/page.tsx +145 -0
  117. package/template/src/app/[locale]/(dashboard)/layout.tsx +35 -0
  118. package/template/src/app/[locale]/(marketing)/blog/[slug]/page.tsx +178 -0
  119. package/template/src/app/[locale]/(marketing)/blog/blog-post-card.tsx +95 -0
  120. package/template/src/app/[locale]/(marketing)/blog/page.tsx +127 -0
  121. package/template/src/app/[locale]/(marketing)/demo/plan-badges/page.tsx +36 -0
  122. package/template/src/app/[locale]/(marketing)/layout.tsx +15 -0
  123. package/template/src/app/[locale]/(marketing)/legal/[slug]/page.tsx +130 -0
  124. package/template/src/app/[locale]/(marketing)/page.tsx +94 -0
  125. package/template/src/app/[locale]/(marketing)/pseo/[slug]/page.tsx +68 -0
  126. package/template/src/app/[locale]/(marketing)/pseo/page.tsx +137 -0
  127. package/template/src/app/[locale]/docs/[[...slug]]/page.tsx +63 -0
  128. package/template/src/app/[locale]/docs/layout.tsx +39 -0
  129. package/template/src/app/[locale]/layout.tsx +80 -0
  130. package/template/src/app/[locale]/opengraph-image.tsx +20 -0
  131. package/template/src/app/[locale]/twitter-image.tsx +20 -0
  132. package/template/src/app/api/auth/[...all]/route.ts +20 -0
  133. package/template/src/app/api/health/route.ts +45 -0
  134. package/template/src/app/api/inngest/route.ts +12 -0
  135. package/template/src/app/api/jobs/credits/expire/route.ts +102 -0
  136. package/template/src/app/api/search/route.ts +17 -0
  137. package/template/src/app/api/upload/presigned/route.ts +98 -0
  138. package/template/src/app/api/webhooks/payment/route.ts +363 -0
  139. package/template/src/app/globals.css +406 -0
  140. package/template/src/app/icon.svg +6 -0
  141. package/template/src/app/image-proxy/[...path]/route.ts +137 -0
  142. package/template/src/app/layout.tsx +73 -0
  143. package/template/src/app/robots.ts +29 -0
  144. package/template/src/app/sitemap.ts +68 -0
  145. package/template/src/components/motion/reveal.tsx +49 -0
  146. package/template/src/components/seo/json-ld.tsx +87 -0
  147. package/template/src/components/seo/og-image-template.tsx +118 -0
  148. package/template/src/components/ui/accordion.tsx +66 -0
  149. package/template/src/components/ui/alert-dialog.tsx +195 -0
  150. package/template/src/components/ui/avatar.tsx +53 -0
  151. package/template/src/components/ui/badge.tsx +46 -0
  152. package/template/src/components/ui/button.tsx +65 -0
  153. package/template/src/components/ui/card.tsx +92 -0
  154. package/template/src/components/ui/checkbox.tsx +32 -0
  155. package/template/src/components/ui/collapsible.tsx +33 -0
  156. package/template/src/components/ui/dialog.tsx +124 -0
  157. package/template/src/components/ui/dropdown-menu.tsx +257 -0
  158. package/template/src/components/ui/form.tsx +233 -0
  159. package/template/src/components/ui/index.ts +2 -0
  160. package/template/src/components/ui/input.tsx +21 -0
  161. package/template/src/components/ui/label.tsx +24 -0
  162. package/template/src/components/ui/navigation-menu.tsx +167 -0
  163. package/template/src/components/ui/pagination.tsx +125 -0
  164. package/template/src/components/ui/popover.tsx +48 -0
  165. package/template/src/components/ui/progress.tsx +27 -0
  166. package/template/src/components/ui/radio-group.tsx +45 -0
  167. package/template/src/components/ui/select.tsx +190 -0
  168. package/template/src/components/ui/separator.tsx +28 -0
  169. package/template/src/components/ui/sheet.tsx +140 -0
  170. package/template/src/components/ui/switch.tsx +31 -0
  171. package/template/src/components/ui/tabs.tsx +75 -0
  172. package/template/src/components/ui/textarea.tsx +18 -0
  173. package/template/src/config/index.ts +31 -0
  174. package/template/src/config/nav.ts +238 -0
  175. package/template/src/config/payment.ts +282 -0
  176. package/template/src/config/site.ts +53 -0
  177. package/template/src/config/subscription-plan.ts +164 -0
  178. package/template/src/content/blog/en/hello-world.mdx +48 -0
  179. package/template/src/content/blog/zh/hello-world.mdx +48 -0
  180. package/template/src/content/blog/zh/nextdevtpl-linuxdo-intro.mdx +98 -0
  181. package/template/src/content/docs/en/admin-and-support.mdx +65 -0
  182. package/template/src/content/docs/en/authentication.mdx +71 -0
  183. package/template/src/content/docs/en/background-jobs.mdx +53 -0
  184. package/template/src/content/docs/en/configuration.mdx +71 -0
  185. package/template/src/content/docs/en/credits.mdx +69 -0
  186. package/template/src/content/docs/en/customization.mdx +95 -0
  187. package/template/src/content/docs/en/database.mdx +66 -0
  188. package/template/src/content/docs/en/deployment.mdx +62 -0
  189. package/template/src/content/docs/en/email.mdx +48 -0
  190. package/template/src/content/docs/en/index.mdx +48 -0
  191. package/template/src/content/docs/en/internationalization.mdx +78 -0
  192. package/template/src/content/docs/en/meta.json +22 -0
  193. package/template/src/content/docs/en/observability.mdx +69 -0
  194. package/template/src/content/docs/en/payments.mdx +64 -0
  195. package/template/src/content/docs/en/project-structure.mdx +82 -0
  196. package/template/src/content/docs/en/quick-start.mdx +113 -0
  197. package/template/src/content/docs/en/storage.mdx +51 -0
  198. package/template/src/content/docs/zh/admin-and-support.mdx +65 -0
  199. package/template/src/content/docs/zh/authentication.mdx +71 -0
  200. package/template/src/content/docs/zh/background-jobs.mdx +53 -0
  201. package/template/src/content/docs/zh/configuration.mdx +70 -0
  202. package/template/src/content/docs/zh/credits.mdx +69 -0
  203. package/template/src/content/docs/zh/customization.mdx +95 -0
  204. package/template/src/content/docs/zh/database.mdx +66 -0
  205. package/template/src/content/docs/zh/deployment.mdx +61 -0
  206. package/template/src/content/docs/zh/email.mdx +47 -0
  207. package/template/src/content/docs/zh/index.mdx +48 -0
  208. package/template/src/content/docs/zh/internationalization.mdx +78 -0
  209. package/template/src/content/docs/zh/meta.json +22 -0
  210. package/template/src/content/docs/zh/observability.mdx +68 -0
  211. package/template/src/content/docs/zh/payments.mdx +64 -0
  212. package/template/src/content/docs/zh/project-structure.mdx +82 -0
  213. package/template/src/content/docs/zh/quick-start.mdx +110 -0
  214. package/template/src/content/docs/zh/storage.mdx +51 -0
  215. package/template/src/content/legal/en/cookie-policy.mdx +78 -0
  216. package/template/src/content/legal/en/privacy.mdx +131 -0
  217. package/template/src/content/legal/en/terms.mdx +93 -0
  218. package/template/src/content/legal/zh/cookie-policy.mdx +78 -0
  219. package/template/src/content/legal/zh/privacy.mdx +131 -0
  220. package/template/src/content/legal/zh/terms.mdx +92 -0
  221. package/template/src/core/modules/contract.ts +225 -0
  222. package/template/src/core/modules/index.ts +1 -0
  223. package/template/src/core/services/ai.ts +31 -0
  224. package/template/src/core/services/common.ts +112 -0
  225. package/template/src/core/services/index.ts +8 -0
  226. package/template/src/core/services/jobs.ts +24 -0
  227. package/template/src/core/services/mail.ts +35 -0
  228. package/template/src/core/services/manifest.ts +51 -0
  229. package/template/src/core/services/payment.ts +92 -0
  230. package/template/src/core/services/rate-limit.ts +47 -0
  231. package/template/src/core/services/storage.ts +42 -0
  232. package/template/src/db/index.ts +71 -0
  233. package/template/src/db/schema/auth.ts +67 -0
  234. package/template/src/db/schema/credits.ts +94 -0
  235. package/template/src/db/schema/index.ts +5 -0
  236. package/template/src/db/schema/mail.ts +14 -0
  237. package/template/src/db/schema/subscription.ts +21 -0
  238. package/template/src/db/schema/support.ts +56 -0
  239. package/template/src/db/schema.ts +2 -0
  240. package/template/src/features/admin/components/admin-sidebar.tsx +213 -0
  241. package/template/src/features/admin/components/index.ts +2 -0
  242. package/template/src/features/admin/index.ts +3 -0
  243. package/template/src/features/admin/manifest.ts +41 -0
  244. package/template/src/features/analytics/components/analytics.tsx +62 -0
  245. package/template/src/features/analytics/components/index.ts +2 -0
  246. package/template/src/features/analytics/index.ts +3 -0
  247. package/template/src/features/analytics/manifest.ts +13 -0
  248. package/template/src/features/auth/components/auth-brand-panel.tsx +82 -0
  249. package/template/src/features/auth/components/auth-error-alert.tsx +28 -0
  250. package/template/src/features/auth/components/auth-footer.tsx +52 -0
  251. package/template/src/features/auth/components/auth-logo.tsx +30 -0
  252. package/template/src/features/auth/components/forgot-password-form.tsx +146 -0
  253. package/template/src/features/auth/components/index.ts +9 -0
  254. package/template/src/features/auth/components/sign-in-form.tsx +241 -0
  255. package/template/src/features/auth/components/sign-up-form.tsx +307 -0
  256. package/template/src/features/auth/index.ts +3 -0
  257. package/template/src/features/auth/manifest.ts +30 -0
  258. package/template/src/features/blog/components/blog-post-item.tsx +72 -0
  259. package/template/src/features/blog/components/index.ts +1 -0
  260. package/template/src/features/blog/data/mock-posts.ts +62 -0
  261. package/template/src/features/blog/index.ts +3 -0
  262. package/template/src/features/blog/manifest.ts +22 -0
  263. package/template/src/features/credits/account.ts +76 -0
  264. package/template/src/features/credits/actions.ts +427 -0
  265. package/template/src/features/credits/components/credit-balance-badge.tsx +54 -0
  266. package/template/src/features/credits/components/credit-usage-section.tsx +160 -0
  267. package/template/src/features/credits/components/index.ts +7 -0
  268. package/template/src/features/credits/components/transaction-history.tsx +346 -0
  269. package/template/src/features/credits/config.ts +70 -0
  270. package/template/src/features/credits/consume.ts +140 -0
  271. package/template/src/features/credits/core.ts +23 -0
  272. package/template/src/features/credits/errors.ts +26 -0
  273. package/template/src/features/credits/expire.ts +112 -0
  274. package/template/src/features/credits/grant.ts +168 -0
  275. package/template/src/features/credits/index.ts +6 -0
  276. package/template/src/features/credits/manifest.ts +36 -0
  277. package/template/src/features/credits/query.ts +65 -0
  278. package/template/src/features/credits/types.ts +48 -0
  279. package/template/src/features/dashboard/components/index.ts +3 -0
  280. package/template/src/features/dashboard/components/main-wrapper.tsx +100 -0
  281. package/template/src/features/dashboard/components/sidebar.tsx +341 -0
  282. package/template/src/features/dashboard/context/index.ts +2 -0
  283. package/template/src/features/dashboard/context/sidebar-context.tsx +72 -0
  284. package/template/src/features/dashboard/index.ts +4 -0
  285. package/template/src/features/dashboard/manifest.ts +28 -0
  286. package/template/src/features/mail/actions.ts +175 -0
  287. package/template/src/features/mail/index.ts +5 -0
  288. package/template/src/features/mail/manifest.ts +13 -0
  289. package/template/src/features/mail/server.ts +8 -0
  290. package/template/src/features/mail/templates/index.ts +11 -0
  291. package/template/src/features/mail/templates/primary-action-email.tsx +224 -0
  292. package/template/src/features/mail/templates/welcome-email.tsx +121 -0
  293. package/template/src/features/mail/utils.ts +190 -0
  294. package/template/src/features/marketing/components/animated-price.tsx +51 -0
  295. package/template/src/features/marketing/components/cookie-consent.tsx +255 -0
  296. package/template/src/features/marketing/components/cta-section.tsx +50 -0
  297. package/template/src/features/marketing/components/faq-section.tsx +59 -0
  298. package/template/src/features/marketing/components/feature-grid.tsx +80 -0
  299. package/template/src/features/marketing/components/footer.tsx +128 -0
  300. package/template/src/features/marketing/components/header.tsx +255 -0
  301. package/template/src/features/marketing/components/hero-section.tsx +323 -0
  302. package/template/src/features/marketing/components/how-it-works.tsx +115 -0
  303. package/template/src/features/marketing/components/index.ts +14 -0
  304. package/template/src/features/marketing/components/nav-menu.tsx +236 -0
  305. package/template/src/features/marketing/components/pricing-section.tsx +446 -0
  306. package/template/src/features/marketing/components/testimonials.tsx +59 -0
  307. package/template/src/features/marketing/components/use-cases-section.tsx +78 -0
  308. package/template/src/features/marketing/index.ts +3 -0
  309. package/template/src/features/marketing/manifest.ts +35 -0
  310. package/template/src/features/payment/actions.ts +182 -0
  311. package/template/src/features/payment/index.ts +4 -0
  312. package/template/src/features/payment/manifest.ts +18 -0
  313. package/template/src/features/payment/server.ts +7 -0
  314. package/template/src/features/payment/types.ts +202 -0
  315. package/template/src/features/pseo/components/index.ts +6 -0
  316. package/template/src/features/pseo/components/pseo-cta.tsx +51 -0
  317. package/template/src/features/pseo/components/pseo-faq.tsx +40 -0
  318. package/template/src/features/pseo/components/pseo-feature-grid.tsx +74 -0
  319. package/template/src/features/pseo/components/pseo-hero.tsx +106 -0
  320. package/template/src/features/pseo/components/pseo-related.tsx +62 -0
  321. package/template/src/features/pseo/components/pseo-use-cases.tsx +50 -0
  322. package/template/src/features/pseo/data/pseo-pages.json +534 -0
  323. package/template/src/features/pseo/index.ts +4 -0
  324. package/template/src/features/pseo/lib/pseo-data.ts +140 -0
  325. package/template/src/features/pseo/manifest.ts +22 -0
  326. package/template/src/features/settings/actions/delete-account.ts +50 -0
  327. package/template/src/features/settings/actions/index.ts +3 -0
  328. package/template/src/features/settings/actions/update-profile.ts +49 -0
  329. package/template/src/features/settings/components/billing-section.tsx +283 -0
  330. package/template/src/features/settings/components/index.ts +3 -0
  331. package/template/src/features/settings/components/profile-form.tsx +154 -0
  332. package/template/src/features/settings/components/security-section.tsx +158 -0
  333. package/template/src/features/settings/components/settings-profile-view.tsx +506 -0
  334. package/template/src/features/settings/index.ts +5 -0
  335. package/template/src/features/settings/manifest.ts +28 -0
  336. package/template/src/features/settings/schemas/index.ts +2 -0
  337. package/template/src/features/settings/schemas/update-profile.ts +21 -0
  338. package/template/src/features/shared/components/cookie-settings-dialog.tsx +282 -0
  339. package/template/src/features/shared/components/index.ts +5 -0
  340. package/template/src/features/shared/components/language-switcher.tsx +82 -0
  341. package/template/src/features/shared/components/max-width-wrapper.tsx +49 -0
  342. package/template/src/features/shared/components/mode-toggle.tsx +119 -0
  343. package/template/src/features/shared/icons/google-icon.tsx +39 -0
  344. package/template/src/features/shared/icons/index.ts +7 -0
  345. package/template/src/features/shared/index.ts +5 -0
  346. package/template/src/features/shared/manifest.ts +13 -0
  347. package/template/src/features/shared/providers.tsx +59 -0
  348. package/template/src/features/storage/actions.ts +107 -0
  349. package/template/src/features/storage/index.ts +6 -0
  350. package/template/src/features/storage/manifest.ts +22 -0
  351. package/template/src/features/storage/types.ts +143 -0
  352. package/template/src/features/storage/utils.ts +85 -0
  353. package/template/src/features/storage/validation.ts +151 -0
  354. package/template/src/features/subscription/actions/get-user-plan.ts +26 -0
  355. package/template/src/features/subscription/actions/index.ts +5 -0
  356. package/template/src/features/subscription/components/current-plan-badge.tsx +18 -0
  357. package/template/src/features/subscription/components/index.ts +6 -0
  358. package/template/src/features/subscription/components/plan-badge.tsx +98 -0
  359. package/template/src/features/subscription/index.ts +25 -0
  360. package/template/src/features/subscription/manifest.ts +13 -0
  361. package/template/src/features/subscription/services/user-plan.ts +181 -0
  362. package/template/src/features/support/actions/admin-ticket.ts +172 -0
  363. package/template/src/features/support/actions/admin-users.ts +295 -0
  364. package/template/src/features/support/actions/index.ts +22 -0
  365. package/template/src/features/support/actions/ticket.ts +12 -0
  366. package/template/src/features/support/actions/user-ticket.ts +153 -0
  367. package/template/src/features/support/components/admin-ticket-reply-form.tsx +109 -0
  368. package/template/src/features/support/components/admin-ticket-status-select.tsx +119 -0
  369. package/template/src/features/support/components/index.ts +6 -0
  370. package/template/src/features/support/components/ticket-message-form.tsx +99 -0
  371. package/template/src/features/support/components/user-role-select.tsx +107 -0
  372. package/template/src/features/support/index.ts +5 -0
  373. package/template/src/features/support/manifest.ts +53 -0
  374. package/template/src/features/support/schemas/index.ts +15 -0
  375. package/template/src/features/support/schemas/ticket.ts +81 -0
  376. package/template/src/hooks/index.ts +2 -0
  377. package/template/src/i18n/index.ts +12 -0
  378. package/template/src/i18n/request.ts +24 -0
  379. package/template/src/i18n/routing.ts +23 -0
  380. package/template/src/instrumentation.ts +19 -0
  381. package/template/src/lib/ai/index.ts +16 -0
  382. package/template/src/lib/api-logger.ts +24 -0
  383. package/template/src/lib/auth/admin.ts +54 -0
  384. package/template/src/lib/auth/api.ts +17 -0
  385. package/template/src/lib/auth/client.ts +227 -0
  386. package/template/src/lib/auth/edge.ts +84 -0
  387. package/template/src/lib/auth/errors.ts +99 -0
  388. package/template/src/lib/auth/index.ts +159 -0
  389. package/template/src/lib/auth/server.ts +46 -0
  390. package/template/src/lib/auth/session-context.tsx +96 -0
  391. package/template/src/lib/cloudflare/bindings.ts +31 -0
  392. package/template/src/lib/cookie-consent.ts +33 -0
  393. package/template/src/lib/file-utils.ts +45 -0
  394. package/template/src/lib/fingerprint/index.ts +73 -0
  395. package/template/src/lib/health/checks.ts +6 -0
  396. package/template/src/lib/health/core.ts +86 -0
  397. package/template/src/lib/health/index.ts +11 -0
  398. package/template/src/lib/health/types.ts +13 -0
  399. package/template/src/lib/index.ts +2 -0
  400. package/template/src/lib/logger/index.ts +258 -0
  401. package/template/src/lib/monitoring/index.ts +384 -0
  402. package/template/src/lib/rate-limit/anonymous.ts +85 -0
  403. package/template/src/lib/rate-limit/index.ts +111 -0
  404. package/template/src/lib/safe-action.ts +127 -0
  405. package/template/src/lib/seo/json-ld.ts +188 -0
  406. package/template/src/lib/source.ts +122 -0
  407. package/template/src/lib/utils.ts +6 -0
  408. package/template/src/middleware.ts +162 -0
  409. package/template/src/modules/index.ts +10 -0
  410. package/template/src/modules/presets.ts +8 -0
  411. package/template/src/modules/registry.ts +34 -0
  412. package/template/src/modules/selection.ts +45 -0
  413. package/template/src/services/ai.ts +49 -0
  414. package/template/src/services/index.ts +6 -0
  415. package/template/src/services/jobs.ts +3 -0
  416. package/template/src/services/mail.ts +7 -0
  417. package/template/src/services/payment.ts +3 -0
  418. package/template/src/services/rate-limit.ts +12 -0
  419. package/template/src/services/storage.ts +3 -0
  420. package/template/src/types/fumadocs-source.d.ts +14 -0
  421. package/template/src/types/index.ts +2 -0
  422. package/template/tsconfig.json +53 -0
  423. package/template/vercel.json +11 -0
  424. package/template/vitest.config.ts +51 -0
  425. package/template/wrangler.jsonc +30 -0
@@ -0,0 +1,766 @@
1
+ {
2
+ "HomePage": {
3
+ "title": "NextDevTpl",
4
+ "subtitle": "Production-Ready Next.js SaaS Template",
5
+ "description": "Ship your SaaS product faster with a production-ready full-stack template."
6
+ },
7
+ "Hero": {
8
+ "badge": "New: AI Model Integration",
9
+ "eyebrow": "Next.js 16 · Drizzle · Better Auth · Inngest",
10
+ "title1": "Ship the SaaS.",
11
+ "titleHighlight": "Not the scaffolding.",
12
+ "subtitle": "A production-grade Next.js template with auth, payments, credits, background jobs, i18n, and an admin panel — wired end-to-end. Spend week one on your product, not month six of plumbing.",
13
+ "getStarted": "Start building",
14
+ "seeDemo": "See how it works",
15
+ "trustLine": "Trusted by developers worldwide",
16
+ "stats": {
17
+ "cards": "Projects Built",
18
+ "users": "Developers",
19
+ "rating": "Satisfaction"
20
+ },
21
+ "meta": {
22
+ "modules": "feature modules",
23
+ "tests": "tests, all passing",
24
+ "errors": "type / lint errors",
25
+ "license": "self-hostable, MIT"
26
+ },
27
+ "panel": {
28
+ "title": "Production · readout",
29
+ "region": "/usr/app · us-east-1",
30
+ "p95": "P95 latency",
31
+ "uptime": "Uptime",
32
+ "jobs": "Jobs / min",
33
+ "signups": "Signups · last 14d",
34
+ "pillOk": "Deploy passing",
35
+ "pillStack": "Vercel · Neon · R2"
36
+ }
37
+ },
38
+ "Features": {
39
+ "label": "Core Features",
40
+ "title": "Everything You Need to Launch",
41
+ "subtitle": "Every essential SaaS feature, pre-built and production-ready, so you can focus on what makes your product unique.",
42
+ "items": {
43
+ "ai": {
44
+ "title": "Auth & Security",
45
+ "description": "Better Auth with email/password, Google and GitHub OAuth, email verification, and role-based access control out of the box."
46
+ },
47
+ "multiSource": {
48
+ "title": "Payment & Subscription",
49
+ "description": "Creem integration for subscriptions and one-time purchases. Four plan tiers with automatic billing cycle management."
50
+ },
51
+ "outline": {
52
+ "title": "Credits System",
53
+ "description": "Double-entry bookkeeping with FIFO batch expiration. Grant, consume, and track credits with full transaction history."
54
+ },
55
+ "export": {
56
+ "title": "Async Processing",
57
+ "description": "Inngest-powered background jobs that bypass serverless timeouts. Built-in task queue with status polling and progress tracking."
58
+ },
59
+ "batch": {
60
+ "title": "Internationalization",
61
+ "description": "Full i18n support via next-intl with locale-prefixed routes. Ship in multiple languages from day one."
62
+ },
63
+ "multilingual": {
64
+ "title": "Admin Dashboard",
65
+ "description": "Built-in admin panel for user management, support tickets, and platform statistics. Role-based access with admin-only routes."
66
+ }
67
+ }
68
+ },
69
+ "HowItWorks": {
70
+ "label": "How It Works",
71
+ "title": "From Zero to Production in Three Steps",
72
+ "subtitle": "Get your SaaS up and running in minutes, not months.",
73
+ "steps": {
74
+ "upload": {
75
+ "title": "Clone & Configure",
76
+ "description": "Clone the repository, install dependencies with pnpm, and set your environment variables. Database, auth, and payments are ready to connect."
77
+ },
78
+ "generate": {
79
+ "title": "Customize & Build",
80
+ "description": "Replace the example features with your own business logic. The modular architecture keeps everything organized by feature domain."
81
+ },
82
+ "export": {
83
+ "title": "Deploy & Launch",
84
+ "description": "Deploy to Vercel, your own server, or any Node.js host. Push your Drizzle schema, configure webhooks, and go live."
85
+ }
86
+ },
87
+ "completion": {
88
+ "title": "That's it!",
89
+ "description": "Your SaaS is live. Focus on growing your product and acquiring customers."
90
+ }
91
+ },
92
+ "UseCases": {
93
+ "label": "Use Cases",
94
+ "title": "Build Any SaaS Product",
95
+ "subtitle": "NextDevTpl provides the foundation for a wide range of SaaS applications.",
96
+ "items": {
97
+ "students": {
98
+ "title": "AI Products",
99
+ "subtitle": "AI-Powered Applications",
100
+ "description": "Build AI wrappers, content generators, or intelligent assistants. The credits system and async processing handle LLM calls and usage metering out of the box.",
101
+ "examples": [
102
+ "AI content tools",
103
+ "Chatbot platforms",
104
+ "Image generators"
105
+ ]
106
+ },
107
+ "professionals": {
108
+ "title": "Productivity Tools",
109
+ "subtitle": "Workflow & Collaboration",
110
+ "description": "Create project management, note-taking, or team collaboration tools. Auth, roles, and subscription tiers are already wired up.",
111
+ "examples": ["Task managers", "Document editors", "Scheduling apps"]
112
+ },
113
+ "language": {
114
+ "title": "Creator Platforms",
115
+ "subtitle": "Content & Community",
116
+ "description": "Launch platforms for creators, educators, or communities. Payment processing, user dashboards, and file storage are ready to use.",
117
+ "examples": ["Course platforms", "Newsletter tools", "Membership sites"]
118
+ },
119
+ "knowledge": {
120
+ "title": "Internal Tools",
121
+ "subtitle": "Business Operations",
122
+ "description": "Build internal dashboards, admin panels, or data management tools. The admin module and role-based access provide a solid starting point.",
123
+ "examples": ["Admin dashboards", "CRM systems", "Reporting tools"]
124
+ }
125
+ }
126
+ },
127
+ "Testimonials": {
128
+ "label": "Testimonials",
129
+ "title": "What Developers Say",
130
+ "subtitle": "Developers around the world are using NextDevTpl to ship their SaaS products faster.",
131
+ "items": [
132
+ {
133
+ "content": "I went from idea to paying customers in under a week. The auth, payments, and credits system saved me at least a month of development time.",
134
+ "author": "Sarah Lin",
135
+ "role": "Indie Hacker · AI Tools"
136
+ },
137
+ {
138
+ "content": "The Inngest integration for background jobs is a game-changer. I no longer worry about serverless timeouts when processing large tasks for my users.",
139
+ "author": "Michael Zhang",
140
+ "role": "Full-Stack Developer"
141
+ },
142
+ {
143
+ "content": "Having i18n baked in from the start made expanding to international markets seamless. We launched in English and Chinese simultaneously.",
144
+ "author": "Emily Chen",
145
+ "role": "Startup Founder"
146
+ },
147
+ {
148
+ "content": "The credits system with double-entry bookkeeping is incredibly well-designed. It took me five minutes to wire up usage metering for my API product.",
149
+ "author": "David Wang",
150
+ "role": "Senior Engineer · API Platform"
151
+ },
152
+ {
153
+ "content": "The modular feature architecture is exactly what I needed. Each domain is self-contained, so onboarding new developers to the codebase is effortless.",
154
+ "author": "Lisa Li",
155
+ "role": "Tech Lead · SaaS Startup"
156
+ },
157
+ {
158
+ "content": "I've tried dozens of SaaS boilerplates. This one stands out because it doesn't cut corners — the admin panel, support tickets, and subscription management all work end-to-end.",
159
+ "author": "Kevin Zhao",
160
+ "role": "Solo Developer · Productivity Tools"
161
+ }
162
+ ]
163
+ },
164
+ "FAQ": {
165
+ "label": "FAQ",
166
+ "title": "Questions You Might Have",
167
+ "subtitle": "Common questions and answers about NextDevTpl.",
168
+ "items": [
169
+ {
170
+ "question": "What is NextDevTpl?",
171
+ "answer": "NextDevTpl is a production-ready Next.js SaaS starter template. It includes authentication, payment processing, a credits system, background job processing, internationalization, an admin dashboard, and more — everything you need to launch a SaaS product quickly."
172
+ },
173
+ {
174
+ "question": "What tech stack does it use?",
175
+ "answer": "Next.js 16 (App Router), React 19, TypeScript, Tailwind CSS 4, Shadcn/UI, Drizzle ORM with PostgreSQL, Better Auth for authentication, Creem for payments, Inngest for async processing, next-intl for i18n, and Biome for linting and formatting."
176
+ },
177
+ {
178
+ "question": "How is the credits system designed?",
179
+ "answer": "The credits system uses double-entry bookkeeping with FIFO batch expiration. Every credit movement creates a transaction with debit and credit accounts. Credits can be granted via subscriptions, purchases, or admin actions, and consumed by any feature you build."
180
+ },
181
+ {
182
+ "question": "Can I customize the subscription plans?",
183
+ "answer": "Absolutely. The subscription plan configuration is centralized in a single config file. You can adjust plan names, pricing, credit allocations, feature limits, and billing cycles to match your product's needs."
184
+ },
185
+ {
186
+ "question": "Does it support background processing?",
187
+ "answer": "Yes. Inngest handles all background jobs, solving the serverless timeout problem. Tasks run asynchronously with status polling and progress tracking built in. You can easily add your own Inngest functions for any long-running work."
188
+ },
189
+ {
190
+ "question": "Is it ready for production?",
191
+ "answer": "Yes. The template includes rate limiting, error monitoring (Sentry), structured logging (Pino + Axiom), secure file storage (Cloudflare R2), and graceful degradation for optional services. It's designed to run on a VPS or any Node.js hosting platform."
192
+ }
193
+ ]
194
+ },
195
+ "Auth": {
196
+ "common": {
197
+ "or": "or",
198
+ "google": "Google",
199
+ "github": "GitHub"
200
+ },
201
+ "signIn": {
202
+ "title": "Welcome back",
203
+ "subtitle": "Please enter your credentials to sign in.",
204
+ "emailLabel": "Email address",
205
+ "emailPlaceholder": "jane@example.com",
206
+ "passwordLabel": "Password",
207
+ "forgotPassword": "Forgot my password",
208
+ "loading": "Signing in...",
209
+ "submit": "Continue",
210
+ "success": "Signed in successfully!",
211
+ "resendVerification": "Resend verification email",
212
+ "resendCooldown": "Resend in {seconds}s",
213
+ "noAccount": "Don\u0027t have an account?",
214
+ "signUpLink": "Sign up",
215
+ "errors": {
216
+ "google": "Google sign-in failed. Please try again.",
217
+ "github": "GitHub sign-in failed. Please try again.",
218
+ "missingFields": "Please enter email and password.",
219
+ "invalidCredentials": "Invalid email or password.",
220
+ "emailNotVerified": "Please verify your email before signing in. Check your inbox for the verification link."
221
+ }
222
+ },
223
+ "signUp": {
224
+ "title": "Create an account",
225
+ "subtitle": "Enter your details to get started.",
226
+ "nameLabel": "Full name",
227
+ "namePlaceholder": "Jane Doe",
228
+ "emailLabel": "Email address",
229
+ "emailPlaceholder": "jane@example.com",
230
+ "passwordLabel": "Password",
231
+ "passwordPlaceholder": "At least 8 characters",
232
+ "confirmPasswordLabel": "Confirm password",
233
+ "confirmPasswordPlaceholder": "Re-enter your password",
234
+ "loading": "Creating account...",
235
+ "submit": "Create account",
236
+ "success": "Account created successfully!",
237
+ "haveAccount": "Already have an account?",
238
+ "signInLink": "Sign in",
239
+ "errors": {
240
+ "google": "Google sign-up failed. Please try again.",
241
+ "github": "GitHub sign-up failed. Please try again.",
242
+ "missingFields": "Please fill in all fields.",
243
+ "passwordTooShort": "Password must be at least 8 characters.",
244
+ "passwordMismatch": "Passwords do not match.",
245
+ "emailInUse": "Sign-up failed. This email may already be in use."
246
+ },
247
+ "verifyEmail": {
248
+ "title": "Check your email",
249
+ "description": "We've sent a verification link to {email}. Please click the link to verify your account.",
250
+ "hint": "Didn't receive the email? Check your spam folder.",
251
+ "resend": "Resend verification email",
252
+ "resendCooldown": "Resend in {seconds}s",
253
+ "backToSignIn": "Back to sign in"
254
+ }
255
+ },
256
+ "footer": {
257
+ "copyright": "\u00a9 {year} {name}. All rights reserved.",
258
+ "privacy": "Privacy Policy",
259
+ "terms": "Terms of Service",
260
+ "cookies": "Cookie Settings"
261
+ },
262
+ "brand": {
263
+ "headline": "The head start your SaaS deserved.",
264
+ "sub": "Auth, payments, credits, background jobs, i18n, and an admin panel \u2014 wired end-to-end. You ship the product; the plumbing is done.",
265
+ "points": {
266
+ "ship": "Production-ready in days, not months",
267
+ "own": "MIT-licensed, self-hostable, no lock-in",
268
+ "stack": "Next.js 16 \u00b7 Drizzle \u00b7 Better Auth \u00b7 Inngest"
269
+ },
270
+ "stat": {
271
+ "k": "18",
272
+ "v": "feature modules, wired end-to-end"
273
+ }
274
+ }
275
+ },
276
+ "CTA": {
277
+ "badge": "Start free, no credit card required",
278
+ "title": "Ready to Launch Your SaaS?",
279
+ "subtitle": "Get started with a production-ready template and ship your product in days, not months. Everything you need is already built in.",
280
+ "getStarted": "Get Started Free",
281
+ "seeDemo": "Live Demo"
282
+ },
283
+ "DashboardPages": {
284
+ "dashboard": {
285
+ "title": "Dashboard",
286
+ "subtitle": "Welcome back! Here's an overview of your account.",
287
+ "stats": {
288
+ "credits": {
289
+ "title": "Credits",
290
+ "description": "Available balance"
291
+ },
292
+ "plan": {
293
+ "title": "Plan",
294
+ "description": "Current subscription"
295
+ },
296
+ "earned": {
297
+ "title": "Total earned",
298
+ "description": "All-time credits in"
299
+ },
300
+ "spent": {
301
+ "title": "Total spent",
302
+ "description": "All-time credits out"
303
+ }
304
+ },
305
+ "actions": {
306
+ "credits": "Get credits",
307
+ "settings": "Account settings",
308
+ "support": "Get support"
309
+ },
310
+ "transactions": {
311
+ "title": "Recent activity",
312
+ "viewAll": "View all",
313
+ "empty": "No transactions yet — your activity will appear here."
314
+ },
315
+ "planCard": {
316
+ "free": "Free plan",
317
+ "renews": "Renews {date}",
318
+ "cancels": "Cancels {date}",
319
+ "manage": "Manage subscription",
320
+ "upgrade": "Upgrade plan"
321
+ }
322
+ }
323
+ },
324
+ "CreditTransactions": {
325
+ "anonymous_migration": "Migrated {cardCount} items from anonymous session",
326
+ "anonymous_migration_bonus": "New user bonus: Saved {cardCount} items for free"
327
+ },
328
+ "Header": {
329
+ "dashboard": "Dashboard",
330
+ "login": "Login",
331
+ "getStarted": "Get Started",
332
+ "docs": "Docs"
333
+ },
334
+ "Navigation": {
335
+ "products": "Products",
336
+ "docs": "Docs",
337
+ "pseo": "PSEO",
338
+ "pricing": "Pricing",
339
+ "blog": "Blog",
340
+ "about": "About",
341
+ "productsMenu": {
342
+ "core": {
343
+ "title": "Core",
344
+ "auth": "Authentication",
345
+ "authDesc": "Multi-provider auth with session management",
346
+ "payments": "Payments",
347
+ "paymentsDesc": "Subscriptions and one-time purchases",
348
+ "credits": "Credits",
349
+ "creditsDesc": "Double-entry bookkeeping with FIFO expiration"
350
+ },
351
+ "dx": {
352
+ "title": "DX Platform",
353
+ "jobs": "Background Jobs",
354
+ "jobsDesc": "Async processing with Inngest",
355
+ "i18n": "Internationalization",
356
+ "i18nDesc": "Multi-language with next-intl",
357
+ "ai": "AI Integration",
358
+ "aiDesc": "Multi-model LLM abstraction"
359
+ },
360
+ "infra": {
361
+ "title": "Infrastructure",
362
+ "admin": "Admin Panel",
363
+ "adminDesc": "User and ticket management",
364
+ "storage": "File Storage",
365
+ "storageDesc": "S3/R2 cloud storage",
366
+ "monitoring": "Monitoring",
367
+ "monitoringDesc": "Logging and error tracking"
368
+ }
369
+ }
370
+ },
371
+ "Common": {
372
+ "getStarted": "Get Started",
373
+ "login": "Log in",
374
+ "dashboard": "Dashboard",
375
+ "products": "Products",
376
+ "pricing": "Pricing",
377
+ "blog": "Blog",
378
+ "docs": "Documentation",
379
+ "features": "Features",
380
+ "changelog": "Changelog",
381
+ "relativeTime": {
382
+ "justNow": "Just now",
383
+ "minutesAgo": "{count, plural, one {# minute ago} other {# minutes ago}}",
384
+ "hoursAgo": "{count, plural, one {# hour ago} other {# hours ago}}",
385
+ "daysAgo": "{count, plural, one {# day ago} other {# days ago}}",
386
+ "monthsAgo": "{count, plural, one {# month ago} other {# months ago}}",
387
+ "yearsAgo": "{count, plural, one {# year ago} other {# years ago}}"
388
+ }
389
+ },
390
+ "Cookie": {
391
+ "title": "Cookie Settings",
392
+ "description": "We use cookies to ensure you get the best experience on our website. By continuing to use this site, you agree to our",
393
+ "privacyPolicy": "Privacy Policy",
394
+ "acceptAll": "Accept all",
395
+ "rejectAll": "Essential only",
396
+ "managePreferences": "Manage preferences",
397
+ "back": "Back",
398
+ "preferencesTitle": "Cookie Preferences",
399
+ "dialog": {
400
+ "title": "Manage cookie preferences",
401
+ "heading": "Your Privacy Choices",
402
+ "description": "In this panel you can review and change your cookie preferences at any time. Turn optional categories off if you do not want us to use them, or choose essential only to keep strictly necessary cookies enabled.",
403
+ "acceptCurrentSelection": "Accept current selection"
404
+ },
405
+ "card": {
406
+ "title": "Cookie Settings",
407
+ "description": "Manage your cookie settings here.",
408
+ "savePreferences": "Save preferences"
409
+ },
410
+ "essential": {
411
+ "title": "Essential Cookies",
412
+ "description": "These cookies are necessary for the website to function and cannot be disabled."
413
+ },
414
+ "functional": {
415
+ "title": "Functional Cookies",
416
+ "description": "These cookies enable personalized features and functionality."
417
+ },
418
+ "analytics": {
419
+ "title": "Analytics Cookies",
420
+ "description": "Help us understand how visitors interact with our website to improve user experience."
421
+ },
422
+ "performance": {
423
+ "title": "Performance Cookies",
424
+ "description": "These cookies help us understand how visitors interact with the website."
425
+ },
426
+ "marketing": {
427
+ "title": "Marketing Cookies",
428
+ "description": "Used to show you relevant ads and marketing content."
429
+ },
430
+ "alwaysEnabled": "Always enabled",
431
+ "saveSettings": "Save settings"
432
+ },
433
+ "Pricing": {
434
+ "label": "Pricing",
435
+ "title": "Simple, transparent pricing",
436
+ "subtitle": "Pay by credits — <strong>never expire</strong>, so unused credits aren't wasted. Use credits for any metered feature in your app. Save 40% with yearly billing.",
437
+ "creditsUpfront": "all at once",
438
+ "creditsPerYear": "credits / year",
439
+ "monthly": "Monthly",
440
+ "yearly": "Yearly",
441
+ "save": "Save",
442
+ "mostPopular": "Best Value",
443
+ "currentPlan": "Current Plan",
444
+ "alreadySubscribed": "Already Subscribed",
445
+ "manageSubscription": "Manage Subscription",
446
+ "booksNote": "≈ {count} units of usage",
447
+ "cardsNote": "≈ {count} operations",
448
+ "plans": {
449
+ "free": {
450
+ "name": "Free",
451
+ "description": "Try the platform with no commitment",
452
+ "cta": "Get Started",
453
+ "creditsAmount": "200",
454
+ "creditsLabel": "credits",
455
+ "creditsNote": "one-time",
456
+ "features": {
457
+ "creditsNeverExpire": "Credits never expire",
458
+ "credits": "200 credits (one-time)",
459
+ "input": "Core features access",
460
+ "characters": "Standard usage limits",
461
+ "fileSize": "Max 5MB file size",
462
+ "export": "Data export",
463
+ "history": "History saved forever"
464
+ }
465
+ },
466
+ "starter": {
467
+ "name": "Starter",
468
+ "description": "Great for getting started",
469
+ "cta": "Subscribe",
470
+ "creditsAmount": "3,000",
471
+ "creditsLabel": "credits / month",
472
+ "booksCount": "8",
473
+ "features": {
474
+ "creditsNeverExpire": "Credits never expire",
475
+ "credits": "3,000 credits / month",
476
+ "input": "Core features access",
477
+ "characters": "Standard usage limits",
478
+ "fileSize": "Max 20MB file size",
479
+ "export": "Data export",
480
+ "history": "History saved forever",
481
+ "support": "Email support"
482
+ }
483
+ },
484
+ "pro": {
485
+ "name": "Pro",
486
+ "description": "Best value for growing projects",
487
+ "cta": "Subscribe",
488
+ "creditsAmount": "8,000",
489
+ "creditsLabel": "credits / month",
490
+ "booksCount": "23",
491
+ "features": {
492
+ "creditsNeverExpire": "Credits never expire",
493
+ "credits": "8,000 credits / month",
494
+ "input": "All features unlocked",
495
+ "characters": "Extended usage limits",
496
+ "fileSize": "Max 50MB file size",
497
+ "queue": "Priority processing queue",
498
+ "export": "Data export",
499
+ "history": "History saved forever",
500
+ "customCards": "Custom integrations (coming soon)",
501
+ "support": "Priority support"
502
+ }
503
+ },
504
+ "ultra": {
505
+ "name": "Ultra",
506
+ "description": "For power users and teams",
507
+ "cta": "Subscribe",
508
+ "creditsAmount": "16,000",
509
+ "creditsLabel": "credits / month",
510
+ "booksCount": "46",
511
+ "features": {
512
+ "creditsNeverExpire": "Credits never expire",
513
+ "credits": "16,000 credits / month",
514
+ "input": "All features unlocked",
515
+ "characters": "Maximum usage limits",
516
+ "fileSize": "Max 100MB file size",
517
+ "queue": "Highest priority queue",
518
+ "export": "Data export",
519
+ "history": "History saved forever",
520
+ "customCards": "Custom integrations (coming soon)",
521
+ "aiAssist": "Advanced API access (coming soon)",
522
+ "support": "Dedicated support"
523
+ }
524
+ }
525
+ }
526
+ },
527
+ "Subscription": {
528
+ "plans": {
529
+ "free": "Free",
530
+ "starter": "Starter",
531
+ "pro": "Pro",
532
+ "ultra": "Ultra"
533
+ }
534
+ },
535
+ "Dashboard": {
536
+ "nav": {
537
+ "dashboard": "Dashboard",
538
+ "credits": "Credits",
539
+ "settings": "Settings",
540
+ "support": "Support",
541
+ "newTicket": "New Ticket"
542
+ },
543
+ "sidebar": {
544
+ "settings": "Settings",
545
+ "logout": "Log out"
546
+ },
547
+ "pages": {
548
+ "dashboard": "Dashboard",
549
+ "support": "Support",
550
+ "newTicket": "New Ticket",
551
+ "ticketDetails": "Ticket Details",
552
+ "settings": "Settings",
553
+ "credits": "Credits"
554
+ }
555
+ },
556
+ "Settings": {
557
+ "tabs": {
558
+ "account": "Account",
559
+ "security": "Security",
560
+ "billing": "Billing",
561
+ "usage": "Usage"
562
+ },
563
+ "general": {
564
+ "title": "General",
565
+ "description": "Update your personal information and account settings.",
566
+ "save": "Save",
567
+ "name": "Name",
568
+ "namePlaceholder": "Enter your name",
569
+ "nameDescription": "Name is required and must be at least 2 characters.",
570
+ "email": "Email",
571
+ "emailDescription": "To change your email, please contact support."
572
+ },
573
+ "avatar": {
574
+ "title": "Avatar",
575
+ "description": "Upload a profile picture to personalize your account.",
576
+ "uploading": "Uploading...",
577
+ "supportedFormats": "Supports JPG, PNG, GIF, WebP, max {size}MB"
578
+ },
579
+ "language": {
580
+ "title": "Language Settings",
581
+ "description": "Select your preferred language for the interface.",
582
+ "placeholder": "Select language"
583
+ },
584
+ "deleteAccount": {
585
+ "title": "Delete Account",
586
+ "description": "Permanently delete your account and all associated data. This action cannot be undone.",
587
+ "button": "Delete Account",
588
+ "warning": "This action is irreversible. Please proceed with caution.",
589
+ "confirmTitle": "Delete this account?",
590
+ "confirmDescription": "Your account and all associated data will be permanently deleted. This action cannot be undone.",
591
+ "cancel": "Cancel",
592
+ "confirm": "Yes, delete account",
593
+ "error": "Failed to delete account. Please try again later."
594
+ },
595
+ "security": {
596
+ "changePassword": {
597
+ "title": "Change Password",
598
+ "description": "Update your password to keep your account secure.",
599
+ "currentPassword": "Current Password",
600
+ "currentPasswordPlaceholder": "Enter current password",
601
+ "newPassword": "New Password",
602
+ "newPasswordPlaceholder": "Enter new password",
603
+ "confirmPassword": "Confirm New Password",
604
+ "confirmPasswordPlaceholder": "Confirm new password",
605
+ "submit": "Update Password",
606
+ "updating": "Updating..."
607
+ },
608
+ "errors": {
609
+ "missingFields": "Please fill in all password fields.",
610
+ "passwordTooShort": "New password must be at least 8 characters.",
611
+ "passwordMismatch": "New passwords do not match.",
612
+ "samePassword": "New password must be different from current password.",
613
+ "wrongPassword": "Current password is incorrect."
614
+ },
615
+ "success": "Password updated successfully."
616
+ },
617
+ "errors": {
618
+ "unsupportedFileType": "Unsupported file type. Supported: {types}",
619
+ "fileTooLarge": "File too large. Maximum size: {size}MB",
620
+ "uploadFailed": "Failed to get upload URL",
621
+ "fileUploadFailed": "File upload failed",
622
+ "avatarUploadError": "Avatar upload failed",
623
+ "validationFailed": "Validation failed"
624
+ },
625
+ "success": {
626
+ "avatarUpdated": "Avatar updated successfully"
627
+ },
628
+ "billing": {
629
+ "currentPlan": {
630
+ "title": "Current Plan",
631
+ "description": "Manage your subscription and billing cycle.",
632
+ "freePlan": "Free Plan",
633
+ "current": "Current",
634
+ "basicFeatures": "Basic features with limited credits",
635
+ "premiumFeatures": "Full access to all premium features",
636
+ "upgradePlan": "Upgrade Plan",
637
+ "managePlan": "Manage Plan",
638
+ "monthlyCredits": "Monthly Credits",
639
+ "renewalDate": "Renewal Date",
640
+ "notApplicable": "N/A",
641
+ "price": "Price",
642
+ "perMonth": "month",
643
+ "perYear": "year",
644
+ "cancelSubscription": "Cancel Subscription",
645
+ "cancelPending": "Cancels on {date}",
646
+ "cancelDialog": {
647
+ "title": "Cancel Subscription?",
648
+ "description": "Your subscription will remain active until the end of your current billing period ({date}). After that, your plan will revert to Free.",
649
+ "keepBenefits": "You'll keep all your current plan benefits until {date}",
650
+ "confirm": "Yes, Cancel Subscription",
651
+ "cancel": "Keep Subscription"
652
+ }
653
+ },
654
+ "paymentMethods": {
655
+ "title": "Payment Methods",
656
+ "description": "Add or manage your payment methods for subscriptions and purchases.",
657
+ "addMethod": "Add Payment Method",
658
+ "noMethods": "No payment methods added",
659
+ "noMethodsHint": "Add a payment method to upgrade your plan or purchase credits"
660
+ },
661
+ "history": {
662
+ "title": "Billing History",
663
+ "description": "View and download your past invoices.",
664
+ "date": "Date",
665
+ "historyDescription": "Description",
666
+ "amount": "Amount",
667
+ "status": "Status",
668
+ "invoice": "Invoice",
669
+ "noHistory": "No billing history",
670
+ "noHistoryHint": "Your invoices will appear here after your first purchase"
671
+ }
672
+ },
673
+ "usage": {
674
+ "title": "Compute Credit Usage",
675
+ "description": "Credits used for AI dialogue, image and etc.",
676
+ "availableCredits": "Available Credits",
677
+ "creditsAvailable": "credits available",
678
+ "getMoreCredits": {
679
+ "title": "Get More Credits",
680
+ "description": "Subscribe to a plan to get monthly credits and unlock advanced features",
681
+ "viewPlans": "View Subscription Plans"
682
+ },
683
+ "expiringSoon": {
684
+ "title": "Credits Expiring Soon",
685
+ "message": "{count} credits will expire on {date}"
686
+ },
687
+ "transactions": {
688
+ "title": "Transaction History",
689
+ "description": "View all your credit transactions including grants and consumption",
690
+ "date": "Date",
691
+ "type": "Type",
692
+ "transactionDescription": "Description",
693
+ "transactionAmount": "Amount",
694
+ "noTransactions": "No transactions yet",
695
+ "noTransactionsHint": "Your credit transactions will appear here",
696
+ "loading": "Loading...",
697
+ "showing": "Showing {from} to {to} of {total} transactions",
698
+ "rowsPerPage": "Rows per page",
699
+ "pageOf": "Page {page} of {total}",
700
+ "types": {
701
+ "registration_bonus": "Registration Bonus",
702
+ "admin_grant": "Admin Grant",
703
+ "monthly_grant": "Monthly Grant",
704
+ "purchase": "Purchase",
705
+ "consumption": "Usage",
706
+ "expiration": "Expired",
707
+ "refund": "Refund"
708
+ },
709
+ "descriptions": {
710
+ "registration_bonus": "New user registration bonus",
711
+ "monthly_grant": "{plan} monthly subscription credits",
712
+ "yearly_grant": "{plan} yearly subscription credits ({monthly} x 12)",
713
+ "consumption": "Credit consumption",
714
+ "expiration": "Credits expired",
715
+ "admin_grant": "Admin granted credits",
716
+ "refund": "Credits refund"
717
+ }
718
+ }
719
+ }
720
+ },
721
+ "Support": {
722
+ "enterMessage": "Please enter a message",
723
+ "messageSent": "Message sent",
724
+ "sendFailed": "Failed to send, please retry",
725
+ "replyUser": "Reply to user",
726
+ "addReply": "Add reply",
727
+ "inputPlaceholder": "Enter your message...",
728
+ "characters": "characters",
729
+ "send": "Send",
730
+ "enterReplyContent": "Please enter reply content",
731
+ "replySuccess": "Reply sent",
732
+ "replyFailed": "Reply failed, please retry",
733
+ "ticketClosedNotice": "This ticket is closed, no new replies can be added",
734
+ "inputReplyPlaceholder": "Enter your reply...",
735
+ "sendReply": "Send reply",
736
+ "statusUpdateFailed": "Status update failed",
737
+ "updating": "Updating...",
738
+ "selectNewStatus": "Select new status",
739
+ "roleUpdateFailed": "Role update failed",
740
+ "admin": "Admin",
741
+ "user": "User"
742
+ },
743
+ "AdminSidebar": {
744
+ "badge": "ADMIN",
745
+ "roleBadge": "Admin",
746
+ "returnToUser": "Return to dashboard",
747
+ "lightMode": "Light mode",
748
+ "darkMode": "Dark mode",
749
+ "followSystem": "Follow system",
750
+ "signOut": "Sign out",
751
+ "nav": {
752
+ "controlPanel": "Control Panel",
753
+ "dashboard": "Dashboard",
754
+ "userManagement": "User Management",
755
+ "ticketManagement": "Ticket Management"
756
+ }
757
+ },
758
+ "Footer": {
759
+ "description": "Production-ready Next.js SaaS template with auth, payments, credits, i18n, and more.",
760
+ "product": "Product",
761
+ "legal": "Legal",
762
+ "copyright": "© {year} {name}. All rights reserved.",
763
+ "twitter": "Twitter",
764
+ "github": "GitHub"
765
+ }
766
+ }