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.
- package/README.md +29 -0
- package/catalog.json +385 -0
- package/dist/catalog.d.ts +3 -0
- package/dist/catalog.js +112 -0
- package/dist/catalog.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.js +115 -0
- package/dist/cli.js.map +1 -0
- package/dist/filesystem.d.ts +10 -0
- package/dist/filesystem.js +86 -0
- package/dist/filesystem.js.map +1 -0
- package/dist/generate.d.ts +5 -0
- package/dist/generate.js +758 -0
- package/dist/generate.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -0
- package/dist/selection.d.ts +2 -0
- package/dist/selection.js +111 -0
- package/dist/selection.js.map +1 -0
- package/dist/service-templates.d.ts +4 -0
- package/dist/service-templates.js +180 -0
- package/dist/service-templates.js.map +1 -0
- package/dist/types.d.ts +65 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/package.json +54 -0
- package/template/.dockerignore +14 -0
- package/template/.env.example +282 -0
- package/template/.gitattributes +17 -0
- package/template/.node-version +1 -0
- package/template/Dockerfile +45 -0
- package/template/LICENSE +21 -0
- package/template/README.md +267 -0
- package/template/biome.json +68 -0
- package/template/cloudflare/templates/logger.ts +162 -0
- package/template/cloudflare/templates/mail/server.ts +6 -0
- package/template/cloudflare/templates/mail/templates.ts +87 -0
- package/template/cloudflare/templates/mail/utils.ts +69 -0
- package/template/cloudflare/worker.mjs +25 -0
- package/template/components.json +22 -0
- package/template/compose.yaml +74 -0
- package/template/deploy/check-health.mjs +25 -0
- package/template/deploy/docker/README.md +14 -0
- package/template/deploy/server/README.md +24 -0
- package/template/deploy/server/build.sh +24 -0
- package/template/deploy/server/nextdevtpl.service +19 -0
- package/template/deploy/server/start.sh +19 -0
- package/template/deploy/vercel/README.md +16 -0
- package/template/deploy/verify-production-health.mjs +86 -0
- package/template/drizzle.config.ts +47 -0
- package/template/gitignore +62 -0
- package/template/manifest.json +35 -0
- package/template/messages/en.json +766 -0
- package/template/messages/zh.json +762 -0
- package/template/next.config.mjs +28 -0
- package/template/open-next.config.ts +3 -0
- package/template/package.json +125 -0
- package/template/pnpm-lock.yaml +15901 -0
- package/template/postcss.config.mjs +7 -0
- package/template/public/file.svg +1 -0
- package/template/public/globe.svg +1 -0
- package/template/public/logo.svg +6 -0
- package/template/public/next.svg +1 -0
- package/template/public/vercel.svg +1 -0
- package/template/public/window.svg +1 -0
- package/template/sentry.client.config.ts +10 -0
- package/template/sentry.edge.config.ts +10 -0
- package/template/sentry.server.config.ts +10 -0
- package/template/source.config.ts +59 -0
- package/template/src/adapters/ai/anthropic.ts +113 -0
- package/template/src/adapters/ai/index.ts +6 -0
- package/template/src/adapters/ai/openai-compatible.ts +88 -0
- package/template/src/adapters/ai/workers-ai.ts +63 -0
- package/template/src/adapters/index.ts +10 -0
- package/template/src/adapters/jobs/cloudflare-workflows.ts +46 -0
- package/template/src/adapters/jobs/index.ts +5 -0
- package/template/src/adapters/jobs/inngest/adapter.ts +29 -0
- package/template/src/adapters/jobs/inngest/client.ts +8 -0
- package/template/src/adapters/jobs/inngest/functions.ts +17 -0
- package/template/src/adapters/jobs/inngest/handler.ts +6 -0
- package/template/src/adapters/jobs/inngest/index.ts +4 -0
- package/template/src/adapters/mail/cloudflare-email.ts +50 -0
- package/template/src/adapters/mail/disabled.ts +17 -0
- package/template/src/adapters/mail/index.ts +7 -0
- package/template/src/adapters/mail/resend.ts +76 -0
- package/template/src/adapters/mail/smtp.ts +82 -0
- package/template/src/adapters/payment/creem.ts +269 -0
- package/template/src/adapters/payment/index.ts +2 -0
- package/template/src/adapters/payment/stripe.ts +302 -0
- package/template/src/adapters/rate-limit/cloudflare.ts +42 -0
- package/template/src/adapters/rate-limit/index.ts +6 -0
- package/template/src/adapters/rate-limit/noop.ts +27 -0
- package/template/src/adapters/rate-limit/upstash.ts +113 -0
- package/template/src/adapters/registry.ts +228 -0
- package/template/src/adapters/storage/index.ts +3 -0
- package/template/src/adapters/storage/r2-binding.ts +105 -0
- package/template/src/adapters/storage/s3-compatible.ts +149 -0
- package/template/src/app/[locale]/(admin)/admin/layout.tsx +36 -0
- package/template/src/app/[locale]/(admin)/admin/page.tsx +345 -0
- package/template/src/app/[locale]/(admin)/admin/tickets/[id]/page.tsx +261 -0
- package/template/src/app/[locale]/(admin)/admin/tickets/page.tsx +236 -0
- package/template/src/app/[locale]/(admin)/admin/users/page.tsx +557 -0
- package/template/src/app/[locale]/(auth)/forgot-password/page.tsx +9 -0
- package/template/src/app/[locale]/(auth)/layout.tsx +28 -0
- package/template/src/app/[locale]/(auth)/sign-in/page.tsx +9 -0
- package/template/src/app/[locale]/(auth)/sign-up/page.tsx +9 -0
- package/template/src/app/[locale]/(dashboard)/dashboard/credits/buy/buy-credits-view.tsx +170 -0
- package/template/src/app/[locale]/(dashboard)/dashboard/credits/buy/page.tsx +12 -0
- package/template/src/app/[locale]/(dashboard)/dashboard/credits/page.tsx +5 -0
- package/template/src/app/[locale]/(dashboard)/dashboard/loading.tsx +41 -0
- package/template/src/app/[locale]/(dashboard)/dashboard/page.tsx +299 -0
- package/template/src/app/[locale]/(dashboard)/dashboard/settings/page.tsx +38 -0
- package/template/src/app/[locale]/(dashboard)/dashboard/support/[id]/page.tsx +220 -0
- package/template/src/app/[locale]/(dashboard)/dashboard/support/new/page.tsx +183 -0
- package/template/src/app/[locale]/(dashboard)/dashboard/support/page.tsx +145 -0
- package/template/src/app/[locale]/(dashboard)/layout.tsx +35 -0
- package/template/src/app/[locale]/(marketing)/blog/[slug]/page.tsx +178 -0
- package/template/src/app/[locale]/(marketing)/blog/blog-post-card.tsx +95 -0
- package/template/src/app/[locale]/(marketing)/blog/page.tsx +127 -0
- package/template/src/app/[locale]/(marketing)/demo/plan-badges/page.tsx +36 -0
- package/template/src/app/[locale]/(marketing)/layout.tsx +15 -0
- package/template/src/app/[locale]/(marketing)/legal/[slug]/page.tsx +130 -0
- package/template/src/app/[locale]/(marketing)/page.tsx +94 -0
- package/template/src/app/[locale]/(marketing)/pseo/[slug]/page.tsx +68 -0
- package/template/src/app/[locale]/(marketing)/pseo/page.tsx +137 -0
- package/template/src/app/[locale]/docs/[[...slug]]/page.tsx +63 -0
- package/template/src/app/[locale]/docs/layout.tsx +39 -0
- package/template/src/app/[locale]/layout.tsx +80 -0
- package/template/src/app/[locale]/opengraph-image.tsx +20 -0
- package/template/src/app/[locale]/twitter-image.tsx +20 -0
- package/template/src/app/api/auth/[...all]/route.ts +20 -0
- package/template/src/app/api/health/route.ts +45 -0
- package/template/src/app/api/inngest/route.ts +12 -0
- package/template/src/app/api/jobs/credits/expire/route.ts +102 -0
- package/template/src/app/api/search/route.ts +17 -0
- package/template/src/app/api/upload/presigned/route.ts +98 -0
- package/template/src/app/api/webhooks/payment/route.ts +363 -0
- package/template/src/app/globals.css +406 -0
- package/template/src/app/icon.svg +6 -0
- package/template/src/app/image-proxy/[...path]/route.ts +137 -0
- package/template/src/app/layout.tsx +73 -0
- package/template/src/app/robots.ts +29 -0
- package/template/src/app/sitemap.ts +68 -0
- package/template/src/components/motion/reveal.tsx +49 -0
- package/template/src/components/seo/json-ld.tsx +87 -0
- package/template/src/components/seo/og-image-template.tsx +118 -0
- package/template/src/components/ui/accordion.tsx +66 -0
- package/template/src/components/ui/alert-dialog.tsx +195 -0
- package/template/src/components/ui/avatar.tsx +53 -0
- package/template/src/components/ui/badge.tsx +46 -0
- package/template/src/components/ui/button.tsx +65 -0
- package/template/src/components/ui/card.tsx +92 -0
- package/template/src/components/ui/checkbox.tsx +32 -0
- package/template/src/components/ui/collapsible.tsx +33 -0
- package/template/src/components/ui/dialog.tsx +124 -0
- package/template/src/components/ui/dropdown-menu.tsx +257 -0
- package/template/src/components/ui/form.tsx +233 -0
- package/template/src/components/ui/index.ts +2 -0
- package/template/src/components/ui/input.tsx +21 -0
- package/template/src/components/ui/label.tsx +24 -0
- package/template/src/components/ui/navigation-menu.tsx +167 -0
- package/template/src/components/ui/pagination.tsx +125 -0
- package/template/src/components/ui/popover.tsx +48 -0
- package/template/src/components/ui/progress.tsx +27 -0
- package/template/src/components/ui/radio-group.tsx +45 -0
- package/template/src/components/ui/select.tsx +190 -0
- package/template/src/components/ui/separator.tsx +28 -0
- package/template/src/components/ui/sheet.tsx +140 -0
- package/template/src/components/ui/switch.tsx +31 -0
- package/template/src/components/ui/tabs.tsx +75 -0
- package/template/src/components/ui/textarea.tsx +18 -0
- package/template/src/config/index.ts +31 -0
- package/template/src/config/nav.ts +238 -0
- package/template/src/config/payment.ts +282 -0
- package/template/src/config/site.ts +53 -0
- package/template/src/config/subscription-plan.ts +164 -0
- package/template/src/content/blog/en/hello-world.mdx +48 -0
- package/template/src/content/blog/zh/hello-world.mdx +48 -0
- package/template/src/content/blog/zh/nextdevtpl-linuxdo-intro.mdx +98 -0
- package/template/src/content/docs/en/admin-and-support.mdx +65 -0
- package/template/src/content/docs/en/authentication.mdx +71 -0
- package/template/src/content/docs/en/background-jobs.mdx +53 -0
- package/template/src/content/docs/en/configuration.mdx +71 -0
- package/template/src/content/docs/en/credits.mdx +69 -0
- package/template/src/content/docs/en/customization.mdx +95 -0
- package/template/src/content/docs/en/database.mdx +66 -0
- package/template/src/content/docs/en/deployment.mdx +62 -0
- package/template/src/content/docs/en/email.mdx +48 -0
- package/template/src/content/docs/en/index.mdx +48 -0
- package/template/src/content/docs/en/internationalization.mdx +78 -0
- package/template/src/content/docs/en/meta.json +22 -0
- package/template/src/content/docs/en/observability.mdx +69 -0
- package/template/src/content/docs/en/payments.mdx +64 -0
- package/template/src/content/docs/en/project-structure.mdx +82 -0
- package/template/src/content/docs/en/quick-start.mdx +113 -0
- package/template/src/content/docs/en/storage.mdx +51 -0
- package/template/src/content/docs/zh/admin-and-support.mdx +65 -0
- package/template/src/content/docs/zh/authentication.mdx +71 -0
- package/template/src/content/docs/zh/background-jobs.mdx +53 -0
- package/template/src/content/docs/zh/configuration.mdx +70 -0
- package/template/src/content/docs/zh/credits.mdx +69 -0
- package/template/src/content/docs/zh/customization.mdx +95 -0
- package/template/src/content/docs/zh/database.mdx +66 -0
- package/template/src/content/docs/zh/deployment.mdx +61 -0
- package/template/src/content/docs/zh/email.mdx +47 -0
- package/template/src/content/docs/zh/index.mdx +48 -0
- package/template/src/content/docs/zh/internationalization.mdx +78 -0
- package/template/src/content/docs/zh/meta.json +22 -0
- package/template/src/content/docs/zh/observability.mdx +68 -0
- package/template/src/content/docs/zh/payments.mdx +64 -0
- package/template/src/content/docs/zh/project-structure.mdx +82 -0
- package/template/src/content/docs/zh/quick-start.mdx +110 -0
- package/template/src/content/docs/zh/storage.mdx +51 -0
- package/template/src/content/legal/en/cookie-policy.mdx +78 -0
- package/template/src/content/legal/en/privacy.mdx +131 -0
- package/template/src/content/legal/en/terms.mdx +93 -0
- package/template/src/content/legal/zh/cookie-policy.mdx +78 -0
- package/template/src/content/legal/zh/privacy.mdx +131 -0
- package/template/src/content/legal/zh/terms.mdx +92 -0
- package/template/src/core/modules/contract.ts +225 -0
- package/template/src/core/modules/index.ts +1 -0
- package/template/src/core/services/ai.ts +31 -0
- package/template/src/core/services/common.ts +112 -0
- package/template/src/core/services/index.ts +8 -0
- package/template/src/core/services/jobs.ts +24 -0
- package/template/src/core/services/mail.ts +35 -0
- package/template/src/core/services/manifest.ts +51 -0
- package/template/src/core/services/payment.ts +92 -0
- package/template/src/core/services/rate-limit.ts +47 -0
- package/template/src/core/services/storage.ts +42 -0
- package/template/src/db/index.ts +71 -0
- package/template/src/db/schema/auth.ts +67 -0
- package/template/src/db/schema/credits.ts +94 -0
- package/template/src/db/schema/index.ts +5 -0
- package/template/src/db/schema/mail.ts +14 -0
- package/template/src/db/schema/subscription.ts +21 -0
- package/template/src/db/schema/support.ts +56 -0
- package/template/src/db/schema.ts +2 -0
- package/template/src/features/admin/components/admin-sidebar.tsx +213 -0
- package/template/src/features/admin/components/index.ts +2 -0
- package/template/src/features/admin/index.ts +3 -0
- package/template/src/features/admin/manifest.ts +41 -0
- package/template/src/features/analytics/components/analytics.tsx +62 -0
- package/template/src/features/analytics/components/index.ts +2 -0
- package/template/src/features/analytics/index.ts +3 -0
- package/template/src/features/analytics/manifest.ts +13 -0
- package/template/src/features/auth/components/auth-brand-panel.tsx +82 -0
- package/template/src/features/auth/components/auth-error-alert.tsx +28 -0
- package/template/src/features/auth/components/auth-footer.tsx +52 -0
- package/template/src/features/auth/components/auth-logo.tsx +30 -0
- package/template/src/features/auth/components/forgot-password-form.tsx +146 -0
- package/template/src/features/auth/components/index.ts +9 -0
- package/template/src/features/auth/components/sign-in-form.tsx +241 -0
- package/template/src/features/auth/components/sign-up-form.tsx +307 -0
- package/template/src/features/auth/index.ts +3 -0
- package/template/src/features/auth/manifest.ts +30 -0
- package/template/src/features/blog/components/blog-post-item.tsx +72 -0
- package/template/src/features/blog/components/index.ts +1 -0
- package/template/src/features/blog/data/mock-posts.ts +62 -0
- package/template/src/features/blog/index.ts +3 -0
- package/template/src/features/blog/manifest.ts +22 -0
- package/template/src/features/credits/account.ts +76 -0
- package/template/src/features/credits/actions.ts +427 -0
- package/template/src/features/credits/components/credit-balance-badge.tsx +54 -0
- package/template/src/features/credits/components/credit-usage-section.tsx +160 -0
- package/template/src/features/credits/components/index.ts +7 -0
- package/template/src/features/credits/components/transaction-history.tsx +346 -0
- package/template/src/features/credits/config.ts +70 -0
- package/template/src/features/credits/consume.ts +140 -0
- package/template/src/features/credits/core.ts +23 -0
- package/template/src/features/credits/errors.ts +26 -0
- package/template/src/features/credits/expire.ts +112 -0
- package/template/src/features/credits/grant.ts +168 -0
- package/template/src/features/credits/index.ts +6 -0
- package/template/src/features/credits/manifest.ts +36 -0
- package/template/src/features/credits/query.ts +65 -0
- package/template/src/features/credits/types.ts +48 -0
- package/template/src/features/dashboard/components/index.ts +3 -0
- package/template/src/features/dashboard/components/main-wrapper.tsx +100 -0
- package/template/src/features/dashboard/components/sidebar.tsx +341 -0
- package/template/src/features/dashboard/context/index.ts +2 -0
- package/template/src/features/dashboard/context/sidebar-context.tsx +72 -0
- package/template/src/features/dashboard/index.ts +4 -0
- package/template/src/features/dashboard/manifest.ts +28 -0
- package/template/src/features/mail/actions.ts +175 -0
- package/template/src/features/mail/index.ts +5 -0
- package/template/src/features/mail/manifest.ts +13 -0
- package/template/src/features/mail/server.ts +8 -0
- package/template/src/features/mail/templates/index.ts +11 -0
- package/template/src/features/mail/templates/primary-action-email.tsx +224 -0
- package/template/src/features/mail/templates/welcome-email.tsx +121 -0
- package/template/src/features/mail/utils.ts +190 -0
- package/template/src/features/marketing/components/animated-price.tsx +51 -0
- package/template/src/features/marketing/components/cookie-consent.tsx +255 -0
- package/template/src/features/marketing/components/cta-section.tsx +50 -0
- package/template/src/features/marketing/components/faq-section.tsx +59 -0
- package/template/src/features/marketing/components/feature-grid.tsx +80 -0
- package/template/src/features/marketing/components/footer.tsx +128 -0
- package/template/src/features/marketing/components/header.tsx +255 -0
- package/template/src/features/marketing/components/hero-section.tsx +323 -0
- package/template/src/features/marketing/components/how-it-works.tsx +115 -0
- package/template/src/features/marketing/components/index.ts +14 -0
- package/template/src/features/marketing/components/nav-menu.tsx +236 -0
- package/template/src/features/marketing/components/pricing-section.tsx +446 -0
- package/template/src/features/marketing/components/testimonials.tsx +59 -0
- package/template/src/features/marketing/components/use-cases-section.tsx +78 -0
- package/template/src/features/marketing/index.ts +3 -0
- package/template/src/features/marketing/manifest.ts +35 -0
- package/template/src/features/payment/actions.ts +182 -0
- package/template/src/features/payment/index.ts +4 -0
- package/template/src/features/payment/manifest.ts +18 -0
- package/template/src/features/payment/server.ts +7 -0
- package/template/src/features/payment/types.ts +202 -0
- package/template/src/features/pseo/components/index.ts +6 -0
- package/template/src/features/pseo/components/pseo-cta.tsx +51 -0
- package/template/src/features/pseo/components/pseo-faq.tsx +40 -0
- package/template/src/features/pseo/components/pseo-feature-grid.tsx +74 -0
- package/template/src/features/pseo/components/pseo-hero.tsx +106 -0
- package/template/src/features/pseo/components/pseo-related.tsx +62 -0
- package/template/src/features/pseo/components/pseo-use-cases.tsx +50 -0
- package/template/src/features/pseo/data/pseo-pages.json +534 -0
- package/template/src/features/pseo/index.ts +4 -0
- package/template/src/features/pseo/lib/pseo-data.ts +140 -0
- package/template/src/features/pseo/manifest.ts +22 -0
- package/template/src/features/settings/actions/delete-account.ts +50 -0
- package/template/src/features/settings/actions/index.ts +3 -0
- package/template/src/features/settings/actions/update-profile.ts +49 -0
- package/template/src/features/settings/components/billing-section.tsx +283 -0
- package/template/src/features/settings/components/index.ts +3 -0
- package/template/src/features/settings/components/profile-form.tsx +154 -0
- package/template/src/features/settings/components/security-section.tsx +158 -0
- package/template/src/features/settings/components/settings-profile-view.tsx +506 -0
- package/template/src/features/settings/index.ts +5 -0
- package/template/src/features/settings/manifest.ts +28 -0
- package/template/src/features/settings/schemas/index.ts +2 -0
- package/template/src/features/settings/schemas/update-profile.ts +21 -0
- package/template/src/features/shared/components/cookie-settings-dialog.tsx +282 -0
- package/template/src/features/shared/components/index.ts +5 -0
- package/template/src/features/shared/components/language-switcher.tsx +82 -0
- package/template/src/features/shared/components/max-width-wrapper.tsx +49 -0
- package/template/src/features/shared/components/mode-toggle.tsx +119 -0
- package/template/src/features/shared/icons/google-icon.tsx +39 -0
- package/template/src/features/shared/icons/index.ts +7 -0
- package/template/src/features/shared/index.ts +5 -0
- package/template/src/features/shared/manifest.ts +13 -0
- package/template/src/features/shared/providers.tsx +59 -0
- package/template/src/features/storage/actions.ts +107 -0
- package/template/src/features/storage/index.ts +6 -0
- package/template/src/features/storage/manifest.ts +22 -0
- package/template/src/features/storage/types.ts +143 -0
- package/template/src/features/storage/utils.ts +85 -0
- package/template/src/features/storage/validation.ts +151 -0
- package/template/src/features/subscription/actions/get-user-plan.ts +26 -0
- package/template/src/features/subscription/actions/index.ts +5 -0
- package/template/src/features/subscription/components/current-plan-badge.tsx +18 -0
- package/template/src/features/subscription/components/index.ts +6 -0
- package/template/src/features/subscription/components/plan-badge.tsx +98 -0
- package/template/src/features/subscription/index.ts +25 -0
- package/template/src/features/subscription/manifest.ts +13 -0
- package/template/src/features/subscription/services/user-plan.ts +181 -0
- package/template/src/features/support/actions/admin-ticket.ts +172 -0
- package/template/src/features/support/actions/admin-users.ts +295 -0
- package/template/src/features/support/actions/index.ts +22 -0
- package/template/src/features/support/actions/ticket.ts +12 -0
- package/template/src/features/support/actions/user-ticket.ts +153 -0
- package/template/src/features/support/components/admin-ticket-reply-form.tsx +109 -0
- package/template/src/features/support/components/admin-ticket-status-select.tsx +119 -0
- package/template/src/features/support/components/index.ts +6 -0
- package/template/src/features/support/components/ticket-message-form.tsx +99 -0
- package/template/src/features/support/components/user-role-select.tsx +107 -0
- package/template/src/features/support/index.ts +5 -0
- package/template/src/features/support/manifest.ts +53 -0
- package/template/src/features/support/schemas/index.ts +15 -0
- package/template/src/features/support/schemas/ticket.ts +81 -0
- package/template/src/hooks/index.ts +2 -0
- package/template/src/i18n/index.ts +12 -0
- package/template/src/i18n/request.ts +24 -0
- package/template/src/i18n/routing.ts +23 -0
- package/template/src/instrumentation.ts +19 -0
- package/template/src/lib/ai/index.ts +16 -0
- package/template/src/lib/api-logger.ts +24 -0
- package/template/src/lib/auth/admin.ts +54 -0
- package/template/src/lib/auth/api.ts +17 -0
- package/template/src/lib/auth/client.ts +227 -0
- package/template/src/lib/auth/edge.ts +84 -0
- package/template/src/lib/auth/errors.ts +99 -0
- package/template/src/lib/auth/index.ts +159 -0
- package/template/src/lib/auth/server.ts +46 -0
- package/template/src/lib/auth/session-context.tsx +96 -0
- package/template/src/lib/cloudflare/bindings.ts +31 -0
- package/template/src/lib/cookie-consent.ts +33 -0
- package/template/src/lib/file-utils.ts +45 -0
- package/template/src/lib/fingerprint/index.ts +73 -0
- package/template/src/lib/health/checks.ts +6 -0
- package/template/src/lib/health/core.ts +86 -0
- package/template/src/lib/health/index.ts +11 -0
- package/template/src/lib/health/types.ts +13 -0
- package/template/src/lib/index.ts +2 -0
- package/template/src/lib/logger/index.ts +258 -0
- package/template/src/lib/monitoring/index.ts +384 -0
- package/template/src/lib/rate-limit/anonymous.ts +85 -0
- package/template/src/lib/rate-limit/index.ts +111 -0
- package/template/src/lib/safe-action.ts +127 -0
- package/template/src/lib/seo/json-ld.ts +188 -0
- package/template/src/lib/source.ts +122 -0
- package/template/src/lib/utils.ts +6 -0
- package/template/src/middleware.ts +162 -0
- package/template/src/modules/index.ts +10 -0
- package/template/src/modules/presets.ts +8 -0
- package/template/src/modules/registry.ts +34 -0
- package/template/src/modules/selection.ts +45 -0
- package/template/src/services/ai.ts +49 -0
- package/template/src/services/index.ts +6 -0
- package/template/src/services/jobs.ts +3 -0
- package/template/src/services/mail.ts +7 -0
- package/template/src/services/payment.ts +3 -0
- package/template/src/services/rate-limit.ts +12 -0
- package/template/src/services/storage.ts +3 -0
- package/template/src/types/fumadocs-source.d.ts +14 -0
- package/template/src/types/index.ts +2 -0
- package/template/tsconfig.json +53 -0
- package/template/vercel.json +11 -0
- package/template/vitest.config.ts +51 -0
- package/template/wrangler.jsonc +30 -0
|
@@ -0,0 +1,762 @@
|
|
|
1
|
+
{
|
|
2
|
+
"HomePage": {
|
|
3
|
+
"title": "NextDevTpl",
|
|
4
|
+
"subtitle": "生产就绪的 Next.js SaaS 模板",
|
|
5
|
+
"description": "开箱即用的全栈 SaaS 模板,快速启动你的下一个项目。"
|
|
6
|
+
},
|
|
7
|
+
"Hero": {
|
|
8
|
+
"badge": "全新:支持 AI 模型集成",
|
|
9
|
+
"eyebrow": "Next.js 16 · Drizzle · Better Auth · Inngest",
|
|
10
|
+
"title1": "先把 SaaS 做出来。",
|
|
11
|
+
"titleHighlight": "别再纠结脚手架。",
|
|
12
|
+
"subtitle": "一套生产级的 Next.js 模板——认证、支付、积分、后台任务、国际化、管理后台,全部端到端接好。把第一周花在你的产品上,而不是第六个月的基建上。",
|
|
13
|
+
"getStarted": "开始构建",
|
|
14
|
+
"seeDemo": "看看怎么用",
|
|
15
|
+
"trustLine": "深受全球开发者喜爱",
|
|
16
|
+
"stats": {
|
|
17
|
+
"cards": "已创建项目",
|
|
18
|
+
"users": "开发者",
|
|
19
|
+
"rating": "满意度"
|
|
20
|
+
},
|
|
21
|
+
"meta": {
|
|
22
|
+
"modules": "个功能模块",
|
|
23
|
+
"tests": "个测试,全绿",
|
|
24
|
+
"errors": "类型 / lint 错误",
|
|
25
|
+
"license": "可自托管 · MIT"
|
|
26
|
+
},
|
|
27
|
+
"panel": {
|
|
28
|
+
"title": "生产环境 · 读数",
|
|
29
|
+
"region": "/usr/app · us-east-1",
|
|
30
|
+
"p95": "P95 延迟",
|
|
31
|
+
"uptime": "可用性",
|
|
32
|
+
"jobs": "任务 / 分",
|
|
33
|
+
"signups": "注册 · 近 14 天",
|
|
34
|
+
"pillOk": "部署通过",
|
|
35
|
+
"pillStack": "Vercel · Neon · R2"
|
|
36
|
+
}
|
|
37
|
+
},
|
|
38
|
+
"Features": {
|
|
39
|
+
"label": "核心功能",
|
|
40
|
+
"title": "开箱即用的完整功能",
|
|
41
|
+
"subtitle": "从认证到支付,从国际化到管理后台,每个模块都经过精心打磨,让你专注于业务本身。",
|
|
42
|
+
"items": {
|
|
43
|
+
"ai": {
|
|
44
|
+
"title": "认证与安全",
|
|
45
|
+
"description": "集成 Better Auth,支持邮箱密码、Google、GitHub OAuth 登录,开箱即用的会话管理与权限控制。"
|
|
46
|
+
},
|
|
47
|
+
"multiSource": {
|
|
48
|
+
"title": "支付与订阅",
|
|
49
|
+
"description": "集成 Creem 支付,支持订阅和一次性购买,内置 Webhook 处理和订阅生命周期管理。"
|
|
50
|
+
},
|
|
51
|
+
"outline": {
|
|
52
|
+
"title": "积分系统",
|
|
53
|
+
"description": "基于双重记账法的积分系统,支持 FIFO 批次过期、积分发放、消耗追踪和余额管理。"
|
|
54
|
+
},
|
|
55
|
+
"export": {
|
|
56
|
+
"title": "异步处理",
|
|
57
|
+
"description": "集成 Inngest 后台任务引擎,支持异步处理、任务队列和状态轮询,突破请求超时限制。"
|
|
58
|
+
},
|
|
59
|
+
"batch": {
|
|
60
|
+
"title": "国际化",
|
|
61
|
+
"description": "集成 next-intl 多语言支持,内置中英双语翻译,轻松扩展更多语言。"
|
|
62
|
+
},
|
|
63
|
+
"multilingual": {
|
|
64
|
+
"title": "管理后台",
|
|
65
|
+
"description": "完整的管理后台,支持用户管理、工单系统、数据统计,一键掌控全局。"
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
},
|
|
69
|
+
"HowItWorks": {
|
|
70
|
+
"label": "使用流程",
|
|
71
|
+
"title": "三步启动你的 SaaS",
|
|
72
|
+
"subtitle": "从模板到上线,只需要几步简单操作。",
|
|
73
|
+
"steps": {
|
|
74
|
+
"upload": {
|
|
75
|
+
"title": "克隆 & 配置",
|
|
76
|
+
"description": "克隆模板仓库,配置环境变量(数据库、认证密钥等),运行 pnpm install 安装依赖。"
|
|
77
|
+
},
|
|
78
|
+
"generate": {
|
|
79
|
+
"title": "定制 & 开发",
|
|
80
|
+
"description": "根据你的业务需求定制功能模块,修改品牌信息、配色、定价方案,添加自定义业务逻辑。"
|
|
81
|
+
},
|
|
82
|
+
"export": {
|
|
83
|
+
"title": "部署 & 上线",
|
|
84
|
+
"description": "一键部署到 Vercel 或自有服务器,连接 Neon PostgreSQL 数据库,配置域名即可上线。"
|
|
85
|
+
}
|
|
86
|
+
},
|
|
87
|
+
"completion": {
|
|
88
|
+
"title": "就是这么简单",
|
|
89
|
+
"description": "你的 SaaS 产品已准备就绪,随时可以上线运营。"
|
|
90
|
+
}
|
|
91
|
+
},
|
|
92
|
+
"UseCases": {
|
|
93
|
+
"label": "适用场景",
|
|
94
|
+
"title": "适合各种 SaaS 产品",
|
|
95
|
+
"subtitle": "NextDevTpl 模板适用于多种类型的 SaaS 产品和业务场景。",
|
|
96
|
+
"items": {
|
|
97
|
+
"students": {
|
|
98
|
+
"title": "AI 产品",
|
|
99
|
+
"subtitle": "快速构建 AI 应用",
|
|
100
|
+
"description": "利用内置的异步任务处理和积分系统,快速构建 AI 驱动的 SaaS 产品,支持长时间运行的 AI 任务。",
|
|
101
|
+
"examples": ["AI 内容生成", "AI 数据分析", "AI 辅助工具"]
|
|
102
|
+
},
|
|
103
|
+
"professionals": {
|
|
104
|
+
"title": "效率工具",
|
|
105
|
+
"subtitle": "打造专业工具",
|
|
106
|
+
"description": "完善的认证、订阅和积分系统,让你专注于核心工具逻辑的开发,快速推出你的效率工具产品。",
|
|
107
|
+
"examples": ["项目管理工具", "文档协作平台", "自动化工作流"]
|
|
108
|
+
},
|
|
109
|
+
"language": {
|
|
110
|
+
"title": "创作者平台",
|
|
111
|
+
"subtitle": "支持内容创作",
|
|
112
|
+
"description": "内置文件上传、存储管理和用户系统,适合构建创作者经济平台,支持内容发布和变现。",
|
|
113
|
+
"examples": ["在线课程平台", "知识付费社区", "数字内容市场"]
|
|
114
|
+
},
|
|
115
|
+
"knowledge": {
|
|
116
|
+
"title": "内部工具",
|
|
117
|
+
"subtitle": "企业内部系统",
|
|
118
|
+
"description": "完整的管理后台、权限控制和工单系统,适合快速搭建企业内部管理工具和运营平台。",
|
|
119
|
+
"examples": ["CRM 客户管理", "运营数据看板", "内部审批系统"]
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
},
|
|
123
|
+
"Testimonials": {
|
|
124
|
+
"label": "用户评价",
|
|
125
|
+
"title": "听听开发者们怎么说",
|
|
126
|
+
"subtitle": "来自不同领域的开发者正在使用 NextDevTpl 模板快速构建产品。",
|
|
127
|
+
"items": [
|
|
128
|
+
{
|
|
129
|
+
"content": "用这个模板两周就上线了一个 AI 写作工具,认证、支付、积分系统全都不用自己写,节省了至少一个月的开发时间。",
|
|
130
|
+
"author": "林小雨",
|
|
131
|
+
"role": "独立开发者"
|
|
132
|
+
},
|
|
133
|
+
{
|
|
134
|
+
"content": "之前自己搭 SaaS 框架花了三个月,用了这个模板后发现认证、订阅、积分这些通用模块的完成度远超预期,代码质量也很高。",
|
|
135
|
+
"author": "张明远",
|
|
136
|
+
"role": "全栈工程师"
|
|
137
|
+
},
|
|
138
|
+
{
|
|
139
|
+
"content": "国际化方案开箱即用,中英双语直接可用,扩展其他语言也很方便。对需要做多语言市场的 SaaS 产品来说非常省心。",
|
|
140
|
+
"author": "陈思琪",
|
|
141
|
+
"role": "产品经理"
|
|
142
|
+
},
|
|
143
|
+
{
|
|
144
|
+
"content": "Inngest 异步任务的集成方案非常优雅,完美解决了 Vercel 60 秒超时的问题。我的 AI 产品不再需要担心长任务处理了。",
|
|
145
|
+
"author": "王浩然",
|
|
146
|
+
"role": "技术负责人"
|
|
147
|
+
},
|
|
148
|
+
{
|
|
149
|
+
"content": "积分系统的双重记账法实现得很专业,FIFO 批次过期逻辑也考虑到了。直接拿来用,不需要自己设计积分消费方案。",
|
|
150
|
+
"author": "李雨桐",
|
|
151
|
+
"role": "后端开发者"
|
|
152
|
+
},
|
|
153
|
+
{
|
|
154
|
+
"content": "管理后台已经有了用户管理和工单系统,对小团队来说已经足够用了。部署到自有服务器也很简单,文档写得很清楚。",
|
|
155
|
+
"author": "赵一鸣",
|
|
156
|
+
"role": "创业者"
|
|
157
|
+
}
|
|
158
|
+
]
|
|
159
|
+
},
|
|
160
|
+
"FAQ": {
|
|
161
|
+
"label": "常见问题",
|
|
162
|
+
"title": "你可能想了解的",
|
|
163
|
+
"subtitle": "关于 NextDevTpl 模板的常见问题与解答。",
|
|
164
|
+
"items": [
|
|
165
|
+
{
|
|
166
|
+
"question": "NextDevTpl 是什么?",
|
|
167
|
+
"answer": "NextDevTpl 是一个基于 Next.js 16、React 19、TypeScript 的生产就绪 SaaS 模板。内置认证(Better Auth)、支付(Creem)、积分系统、异步任务处理(Inngest)、国际化、管理后台等完整功能,帮助开发者快速启动 SaaS 项目。"
|
|
168
|
+
},
|
|
169
|
+
{
|
|
170
|
+
"question": "需要哪些技术基础?",
|
|
171
|
+
"answer": "你需要熟悉 React、TypeScript 和 Next.js 的基础知识。模板使用 Tailwind CSS 做样式,Drizzle ORM 做数据库操作,了解这些技术栈会帮助你更快上手。"
|
|
172
|
+
},
|
|
173
|
+
{
|
|
174
|
+
"question": "可以部署到哪些平台?",
|
|
175
|
+
"answer": "模板可以部署到 Vercel(推荐)、自有服务器或任何支持 Node.js 的平台。数据库推荐使用 Neon PostgreSQL(Serverless),文件存储使用 Cloudflare R2。"
|
|
176
|
+
},
|
|
177
|
+
{
|
|
178
|
+
"question": "积分系统是怎样的?",
|
|
179
|
+
"answer": "模板内置基于双重记账法的积分系统,支持积分发放、消耗、FIFO 批次过期、余额查询等完整功能。注册用户会获得免费积分,你可以根据业务需求自定义积分规则和定价方案。"
|
|
180
|
+
},
|
|
181
|
+
{
|
|
182
|
+
"question": "如何定制支付方案?",
|
|
183
|
+
"answer": "模板集成 Creem 支付,支持订阅和一次性购买。你可以在配置文件中自定义套餐名称、价格、积分额度和功能权限。Webhook 处理和订阅生命周期管理已经内置。"
|
|
184
|
+
},
|
|
185
|
+
{
|
|
186
|
+
"question": "支持哪些认证方式?",
|
|
187
|
+
"answer": "模板集成 Better Auth,支持邮箱密码注册登录、Google OAuth 和 GitHub OAuth。你可以轻松扩展其他 OAuth 提供商。会话管理、密码重置、邮箱验证等功能开箱即用。"
|
|
188
|
+
}
|
|
189
|
+
]
|
|
190
|
+
},
|
|
191
|
+
"Auth": {
|
|
192
|
+
"common": {
|
|
193
|
+
"or": "或",
|
|
194
|
+
"google": "Google",
|
|
195
|
+
"github": "GitHub"
|
|
196
|
+
},
|
|
197
|
+
"signIn": {
|
|
198
|
+
"title": "欢迎回来",
|
|
199
|
+
"subtitle": "请输入你的账号信息以继续登录。",
|
|
200
|
+
"emailLabel": "邮箱",
|
|
201
|
+
"emailPlaceholder": "you@example.com",
|
|
202
|
+
"passwordLabel": "密码",
|
|
203
|
+
"forgotPassword": "忘记密码",
|
|
204
|
+
"loading": "登录中...",
|
|
205
|
+
"submit": "继续",
|
|
206
|
+
"success": "登录成功!",
|
|
207
|
+
"resendVerification": "重新发送验证邮件",
|
|
208
|
+
"resendCooldown": "{seconds}秒后可重新发送",
|
|
209
|
+
"noAccount": "还没有账号?",
|
|
210
|
+
"signUpLink": "注册",
|
|
211
|
+
"errors": {
|
|
212
|
+
"google": "Google 登录失败,请重试",
|
|
213
|
+
"github": "GitHub 登录失败,请重试",
|
|
214
|
+
"missingFields": "请填写邮箱和密码",
|
|
215
|
+
"invalidCredentials": "邮箱或密码错误",
|
|
216
|
+
"emailNotVerified": "请先验证邮箱后再登录。请查看收件箱中的验证链接。"
|
|
217
|
+
}
|
|
218
|
+
},
|
|
219
|
+
"signUp": {
|
|
220
|
+
"title": "创建账号",
|
|
221
|
+
"subtitle": "填写信息即可开始使用。",
|
|
222
|
+
"nameLabel": "姓名",
|
|
223
|
+
"namePlaceholder": "张三",
|
|
224
|
+
"emailLabel": "邮箱",
|
|
225
|
+
"emailPlaceholder": "you@example.com",
|
|
226
|
+
"passwordLabel": "密码",
|
|
227
|
+
"passwordPlaceholder": "至少 8 个字符",
|
|
228
|
+
"confirmPasswordLabel": "确认密码",
|
|
229
|
+
"confirmPasswordPlaceholder": "再次输入密码",
|
|
230
|
+
"loading": "正在创建...",
|
|
231
|
+
"submit": "创建账号",
|
|
232
|
+
"success": "注册成功!",
|
|
233
|
+
"haveAccount": "已有账号?",
|
|
234
|
+
"signInLink": "登录",
|
|
235
|
+
"errors": {
|
|
236
|
+
"google": "Google 注册失败,请重试",
|
|
237
|
+
"github": "GitHub 注册失败,请重试",
|
|
238
|
+
"missingFields": "请填写所有字段",
|
|
239
|
+
"passwordTooShort": "密码至少需要 8 个字符",
|
|
240
|
+
"passwordMismatch": "两次输入的密码不一致",
|
|
241
|
+
"emailInUse": "注册失败,该邮箱可能已被使用"
|
|
242
|
+
},
|
|
243
|
+
"verifyEmail": {
|
|
244
|
+
"title": "请查收邮件",
|
|
245
|
+
"description": "我们已向 {email} 发送了一封验证邮件,请点击邮件中的链接完成验证。",
|
|
246
|
+
"hint": "没有收到邮件?请检查垃圾邮件文件夹。",
|
|
247
|
+
"resend": "重新发送验证邮件",
|
|
248
|
+
"resendCooldown": "{seconds}秒后可重新发送",
|
|
249
|
+
"backToSignIn": "返回登录"
|
|
250
|
+
}
|
|
251
|
+
},
|
|
252
|
+
"footer": {
|
|
253
|
+
"copyright": "© {year} {name}。保留所有权利。",
|
|
254
|
+
"privacy": "隐私政策",
|
|
255
|
+
"terms": "服务条款",
|
|
256
|
+
"cookies": "Cookie 设置"
|
|
257
|
+
},
|
|
258
|
+
"brand": {
|
|
259
|
+
"headline": "你的 SaaS,值得这条起跑线。",
|
|
260
|
+
"sub": "认证、支付、积分、后台任务、国际化、管理后台——全部端到端接好。你只管做产品,基建已经就绪。",
|
|
261
|
+
"points": {
|
|
262
|
+
"ship": "几天上线,而不是几个月",
|
|
263
|
+
"own": "MIT 协议,可自托管,不锁定",
|
|
264
|
+
"stack": "Next.js 16 · Drizzle · Better Auth · Inngest"
|
|
265
|
+
},
|
|
266
|
+
"stat": {
|
|
267
|
+
"k": "18",
|
|
268
|
+
"v": "个功能模块,端到端接好"
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
},
|
|
272
|
+
"CTA": {
|
|
273
|
+
"badge": "免费开始,无需信用卡",
|
|
274
|
+
"title": "准备好启动你的 SaaS 了吗?",
|
|
275
|
+
"subtitle": "注册即可获得免费积分,立即体验完整功能。用生产就绪的模板快速构建你的下一个产品。",
|
|
276
|
+
"getStarted": "免费注册",
|
|
277
|
+
"seeDemo": "查看演示"
|
|
278
|
+
},
|
|
279
|
+
"DashboardPages": {
|
|
280
|
+
"dashboard": {
|
|
281
|
+
"title": "控制台",
|
|
282
|
+
"subtitle": "欢迎回来!这里是你的概览。",
|
|
283
|
+
"stats": {
|
|
284
|
+
"credits": {
|
|
285
|
+
"title": "积分余额",
|
|
286
|
+
"description": "可用余额"
|
|
287
|
+
},
|
|
288
|
+
"plan": {
|
|
289
|
+
"title": "订阅计划",
|
|
290
|
+
"description": "当前订阅"
|
|
291
|
+
},
|
|
292
|
+
"earned": {
|
|
293
|
+
"title": "累计获得",
|
|
294
|
+
"description": "历史总收入"
|
|
295
|
+
},
|
|
296
|
+
"spent": {
|
|
297
|
+
"title": "累计消费",
|
|
298
|
+
"description": "历史总支出"
|
|
299
|
+
}
|
|
300
|
+
},
|
|
301
|
+
"actions": {
|
|
302
|
+
"credits": "获取积分",
|
|
303
|
+
"settings": "账号设置",
|
|
304
|
+
"support": "获取支持"
|
|
305
|
+
},
|
|
306
|
+
"transactions": {
|
|
307
|
+
"title": "最近动态",
|
|
308
|
+
"viewAll": "查看全部",
|
|
309
|
+
"empty": "还没有交易记录——你的积分动态会显示在这里。"
|
|
310
|
+
},
|
|
311
|
+
"planCard": {
|
|
312
|
+
"free": "免费计划",
|
|
313
|
+
"renews": "{date} 续期",
|
|
314
|
+
"cancels": "{date} 到期取消",
|
|
315
|
+
"manage": "管理订阅",
|
|
316
|
+
"upgrade": "升级计划"
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
},
|
|
320
|
+
"CreditTransactions": {
|
|
321
|
+
"anonymous_migration": "迁移 {cardCount} 条匿名生成的数据",
|
|
322
|
+
"anonymous_migration_bonus": "新用户福利:免费保存 {cardCount} 条数据"
|
|
323
|
+
},
|
|
324
|
+
"Common": {
|
|
325
|
+
"getStarted": "开始使用",
|
|
326
|
+
"login": "登录",
|
|
327
|
+
"dashboard": "控制台",
|
|
328
|
+
"products": "产品",
|
|
329
|
+
"pricing": "定价",
|
|
330
|
+
"blog": "博客",
|
|
331
|
+
"docs": "文档",
|
|
332
|
+
"features": "功能",
|
|
333
|
+
"changelog": "更新日志",
|
|
334
|
+
"relativeTime": {
|
|
335
|
+
"justNow": "刚刚",
|
|
336
|
+
"minutesAgo": "{count} 分钟前",
|
|
337
|
+
"hoursAgo": "{count} 小时前",
|
|
338
|
+
"daysAgo": "{count} 天前",
|
|
339
|
+
"monthsAgo": "{count} 个月前",
|
|
340
|
+
"yearsAgo": "{count} 年前"
|
|
341
|
+
}
|
|
342
|
+
},
|
|
343
|
+
"Cookie": {
|
|
344
|
+
"title": "Cookie 设置",
|
|
345
|
+
"description": "我们使用 Cookie 来确保您在我们网站上获得最佳体验。继续使用本网站即表示您同意我们的",
|
|
346
|
+
"privacyPolicy": "隐私政策",
|
|
347
|
+
"acceptAll": "接受全部",
|
|
348
|
+
"rejectAll": "仅必要",
|
|
349
|
+
"managePreferences": "管理偏好",
|
|
350
|
+
"back": "返回",
|
|
351
|
+
"preferencesTitle": "Cookie 偏好设置",
|
|
352
|
+
"dialog": {
|
|
353
|
+
"title": "管理 Cookie 偏好",
|
|
354
|
+
"heading": "您的隐私选择",
|
|
355
|
+
"description": "您可以在此面板中随时查看并修改 Cookie 偏好。若不希望我们使用可选类别,请关闭对应开关;若只接受必要 Cookie,也可以直接选择“仅必要”。",
|
|
356
|
+
"acceptCurrentSelection": "接受当前选择"
|
|
357
|
+
},
|
|
358
|
+
"card": {
|
|
359
|
+
"title": "Cookie 设置",
|
|
360
|
+
"description": "在这里管理您的 Cookie 设置。",
|
|
361
|
+
"savePreferences": "保存偏好"
|
|
362
|
+
},
|
|
363
|
+
"essential": {
|
|
364
|
+
"title": "必要 Cookie",
|
|
365
|
+
"description": "这些 Cookie 是网站正常运行所必需的,无法关闭。"
|
|
366
|
+
},
|
|
367
|
+
"functional": {
|
|
368
|
+
"title": "功能性 Cookie",
|
|
369
|
+
"description": "这些 Cookie 用于启用个性化功能与体验。"
|
|
370
|
+
},
|
|
371
|
+
"analytics": {
|
|
372
|
+
"title": "分析 Cookie",
|
|
373
|
+
"description": "帮助我们了解访问者如何与网站互动,以便改进用户体验。"
|
|
374
|
+
},
|
|
375
|
+
"performance": {
|
|
376
|
+
"title": "性能 Cookie",
|
|
377
|
+
"description": "这些 Cookie 帮助我们了解访问者如何与网站互动。"
|
|
378
|
+
},
|
|
379
|
+
"marketing": {
|
|
380
|
+
"title": "营销 Cookie",
|
|
381
|
+
"description": "用于向您展示相关广告和营销内容。"
|
|
382
|
+
},
|
|
383
|
+
"alwaysEnabled": "始终启用",
|
|
384
|
+
"saveSettings": "保存设置"
|
|
385
|
+
},
|
|
386
|
+
"Pricing": {
|
|
387
|
+
"label": "定价",
|
|
388
|
+
"title": "简单透明的定价",
|
|
389
|
+
"subtitle": "按积分付费,<strong>永久有效</strong>,没用完也不浪费。年付立省 40%。",
|
|
390
|
+
"creditsUpfront": "一次性到账",
|
|
391
|
+
"creditsPerYear": "积分 / 年",
|
|
392
|
+
"monthly": "月付",
|
|
393
|
+
"yearly": "年付",
|
|
394
|
+
"save": "省",
|
|
395
|
+
"mostPopular": "性价比最高",
|
|
396
|
+
"currentPlan": "当前套餐",
|
|
397
|
+
"alreadySubscribed": "已订阅",
|
|
398
|
+
"manageSubscription": "管理订阅",
|
|
399
|
+
"booksNote": "≈ {count} 万次 API 调用",
|
|
400
|
+
"cardsNote": "≈ {count} 积分",
|
|
401
|
+
"plans": {
|
|
402
|
+
"free": {
|
|
403
|
+
"name": "免费版",
|
|
404
|
+
"description": "无负担体验基础功能",
|
|
405
|
+
"cta": "免费开始",
|
|
406
|
+
"creditsAmount": "200",
|
|
407
|
+
"creditsLabel": "积分",
|
|
408
|
+
"creditsNote": "一次性",
|
|
409
|
+
"features": {
|
|
410
|
+
"creditsNeverExpire": "积分永久有效,不清零",
|
|
411
|
+
"credits": "200 积分(一次性)",
|
|
412
|
+
"input": "基础功能访问",
|
|
413
|
+
"characters": "标准处理额度",
|
|
414
|
+
"fileSize": "最大 5MB 文件",
|
|
415
|
+
"export": "数据导出",
|
|
416
|
+
"history": "历史数据永久保存"
|
|
417
|
+
}
|
|
418
|
+
},
|
|
419
|
+
"starter": {
|
|
420
|
+
"name": "入门版",
|
|
421
|
+
"description": "适合个人开发者和小项目",
|
|
422
|
+
"cta": "订阅",
|
|
423
|
+
"creditsAmount": "3,000",
|
|
424
|
+
"creditsLabel": "积分 / 月",
|
|
425
|
+
"booksCount": "8",
|
|
426
|
+
"features": {
|
|
427
|
+
"creditsNeverExpire": "积分永久有效,不清零",
|
|
428
|
+
"credits": "每月 3,000 积分",
|
|
429
|
+
"input": "全部基础功能",
|
|
430
|
+
"characters": "标准处理额度",
|
|
431
|
+
"fileSize": "最大 20MB 文件",
|
|
432
|
+
"export": "数据导出",
|
|
433
|
+
"history": "历史数据永久保存",
|
|
434
|
+
"support": "邮件支持"
|
|
435
|
+
}
|
|
436
|
+
},
|
|
437
|
+
"pro": {
|
|
438
|
+
"name": "专业版",
|
|
439
|
+
"description": "性价比最高,适合成长中的产品",
|
|
440
|
+
"cta": "订阅",
|
|
441
|
+
"creditsAmount": "8,000",
|
|
442
|
+
"creditsLabel": "积分 / 月",
|
|
443
|
+
"booksCount": "23",
|
|
444
|
+
"features": {
|
|
445
|
+
"creditsNeverExpire": "积分永久有效,不清零",
|
|
446
|
+
"credits": "每月 8,000 积分",
|
|
447
|
+
"input": "全部高级功能",
|
|
448
|
+
"characters": "更大处理额度",
|
|
449
|
+
"fileSize": "最大 50MB 文件",
|
|
450
|
+
"queue": "优先处理队列",
|
|
451
|
+
"export": "数据导出",
|
|
452
|
+
"history": "历史数据永久保存",
|
|
453
|
+
"customCards": "自定义功能扩展",
|
|
454
|
+
"support": "优先支持"
|
|
455
|
+
}
|
|
456
|
+
},
|
|
457
|
+
"ultra": {
|
|
458
|
+
"name": "旗舰版",
|
|
459
|
+
"description": "适合高频使用和企业团队",
|
|
460
|
+
"cta": "订阅",
|
|
461
|
+
"creditsAmount": "16,000",
|
|
462
|
+
"creditsLabel": "积分 / 月",
|
|
463
|
+
"booksCount": "46",
|
|
464
|
+
"features": {
|
|
465
|
+
"creditsNeverExpire": "积分永久有效,不清零",
|
|
466
|
+
"credits": "每月 16,000 积分",
|
|
467
|
+
"input": "全部高级功能",
|
|
468
|
+
"characters": "最大处理额度",
|
|
469
|
+
"fileSize": "最大 100MB 文件",
|
|
470
|
+
"queue": "最高优先队列",
|
|
471
|
+
"export": "数据导出",
|
|
472
|
+
"history": "历史数据永久保存",
|
|
473
|
+
"customCards": "自定义功能扩展",
|
|
474
|
+
"aiAssist": "高级 AI 功能",
|
|
475
|
+
"support": "专属支持"
|
|
476
|
+
}
|
|
477
|
+
}
|
|
478
|
+
}
|
|
479
|
+
},
|
|
480
|
+
"Header": {
|
|
481
|
+
"dashboard": "控制台",
|
|
482
|
+
"login": "登录",
|
|
483
|
+
"getStarted": "免费开始",
|
|
484
|
+
"docs": "文档"
|
|
485
|
+
},
|
|
486
|
+
"Navigation": {
|
|
487
|
+
"products": "产品",
|
|
488
|
+
"docs": "文档",
|
|
489
|
+
"pseo": "PSEO",
|
|
490
|
+
"pricing": "定价",
|
|
491
|
+
"blog": "博客",
|
|
492
|
+
"about": "关于",
|
|
493
|
+
"productsMenu": {
|
|
494
|
+
"core": {
|
|
495
|
+
"title": "核心功能",
|
|
496
|
+
"auth": "认证系统",
|
|
497
|
+
"authDesc": "多方式登录与会话管理",
|
|
498
|
+
"payments": "支付集成",
|
|
499
|
+
"paymentsDesc": "订阅和一次性支付",
|
|
500
|
+
"credits": "积分系统",
|
|
501
|
+
"creditsDesc": "双重记账法与 FIFO 批次过期"
|
|
502
|
+
},
|
|
503
|
+
"dx": {
|
|
504
|
+
"title": "开发体验",
|
|
505
|
+
"jobs": "异步处理",
|
|
506
|
+
"jobsDesc": "Inngest 后台任务引擎",
|
|
507
|
+
"i18n": "国际化",
|
|
508
|
+
"i18nDesc": "next-intl 多语言支持",
|
|
509
|
+
"ai": "AI 集成",
|
|
510
|
+
"aiDesc": "多模型 LLM 抽象层"
|
|
511
|
+
},
|
|
512
|
+
"infra": {
|
|
513
|
+
"title": "基础设施",
|
|
514
|
+
"admin": "管理后台",
|
|
515
|
+
"adminDesc": "用户与工单管理",
|
|
516
|
+
"storage": "文件存储",
|
|
517
|
+
"storageDesc": "S3/R2 云存储",
|
|
518
|
+
"monitoring": "监控日志",
|
|
519
|
+
"monitoringDesc": "日志与错误追踪"
|
|
520
|
+
}
|
|
521
|
+
}
|
|
522
|
+
},
|
|
523
|
+
"Subscription": {
|
|
524
|
+
"plans": {
|
|
525
|
+
"free": "免费版",
|
|
526
|
+
"starter": "入门版",
|
|
527
|
+
"pro": "专业版",
|
|
528
|
+
"ultra": "旗舰版"
|
|
529
|
+
}
|
|
530
|
+
},
|
|
531
|
+
"Dashboard": {
|
|
532
|
+
"nav": {
|
|
533
|
+
"dashboard": "控制面板",
|
|
534
|
+
"credits": "积分",
|
|
535
|
+
"settings": "设置",
|
|
536
|
+
"support": "支持",
|
|
537
|
+
"newTicket": "新建工单"
|
|
538
|
+
},
|
|
539
|
+
"sidebar": {
|
|
540
|
+
"settings": "设置",
|
|
541
|
+
"logout": "退出登录"
|
|
542
|
+
},
|
|
543
|
+
"pages": {
|
|
544
|
+
"dashboard": "控制台",
|
|
545
|
+
"support": "支持",
|
|
546
|
+
"newTicket": "新建工单",
|
|
547
|
+
"ticketDetails": "工单详情",
|
|
548
|
+
"settings": "设置",
|
|
549
|
+
"credits": "积分"
|
|
550
|
+
}
|
|
551
|
+
},
|
|
552
|
+
"Settings": {
|
|
553
|
+
"tabs": {
|
|
554
|
+
"account": "账户",
|
|
555
|
+
"security": "安全",
|
|
556
|
+
"billing": "账单",
|
|
557
|
+
"usage": "用量"
|
|
558
|
+
},
|
|
559
|
+
"general": {
|
|
560
|
+
"title": "基本信息",
|
|
561
|
+
"description": "更新您的个人信息和账户设置。",
|
|
562
|
+
"save": "保存",
|
|
563
|
+
"name": "姓名",
|
|
564
|
+
"namePlaceholder": "请输入您的姓名",
|
|
565
|
+
"nameDescription": "姓名为必填项,至少需要 2 个字符。",
|
|
566
|
+
"email": "邮箱",
|
|
567
|
+
"emailDescription": "如需更改邮箱,请联系客服。"
|
|
568
|
+
},
|
|
569
|
+
"avatar": {
|
|
570
|
+
"title": "头像",
|
|
571
|
+
"description": "上传头像以个性化您的账户。",
|
|
572
|
+
"uploading": "上传中...",
|
|
573
|
+
"supportedFormats": "支持 JPG、PNG、GIF、WebP,最大 {size}MB"
|
|
574
|
+
},
|
|
575
|
+
"language": {
|
|
576
|
+
"title": "语言设置",
|
|
577
|
+
"description": "选择您偏好的界面语言。",
|
|
578
|
+
"placeholder": "选择语言"
|
|
579
|
+
},
|
|
580
|
+
"deleteAccount": {
|
|
581
|
+
"title": "删除账户",
|
|
582
|
+
"description": "永久删除您的账户及所有相关数据。此操作无法撤销。",
|
|
583
|
+
"button": "删除账户",
|
|
584
|
+
"warning": "此操作不可逆,请谨慎操作。",
|
|
585
|
+
"confirmTitle": "确认删除当前账户?",
|
|
586
|
+
"confirmDescription": "您的账户及所有相关数据将被永久删除,此操作无法撤销。",
|
|
587
|
+
"cancel": "取消",
|
|
588
|
+
"confirm": "确认删除",
|
|
589
|
+
"error": "删除账户失败,请稍后重试。"
|
|
590
|
+
},
|
|
591
|
+
"security": {
|
|
592
|
+
"changePassword": {
|
|
593
|
+
"title": "修改密码",
|
|
594
|
+
"description": "更新密码以确保账户安全。",
|
|
595
|
+
"currentPassword": "当前密码",
|
|
596
|
+
"currentPasswordPlaceholder": "输入当前密码",
|
|
597
|
+
"newPassword": "新密码",
|
|
598
|
+
"newPasswordPlaceholder": "输入新密码",
|
|
599
|
+
"confirmPassword": "确认新密码",
|
|
600
|
+
"confirmPasswordPlaceholder": "再次输入新密码",
|
|
601
|
+
"submit": "更新密码",
|
|
602
|
+
"updating": "更新中..."
|
|
603
|
+
},
|
|
604
|
+
"errors": {
|
|
605
|
+
"missingFields": "请填写所有密码字段。",
|
|
606
|
+
"passwordTooShort": "新密码至少需要 8 个字符。",
|
|
607
|
+
"passwordMismatch": "两次输入的新密码不一致。",
|
|
608
|
+
"samePassword": "新密码不能与当前密码相同。",
|
|
609
|
+
"wrongPassword": "当前密码不正确。"
|
|
610
|
+
},
|
|
611
|
+
"success": "密码修改成功。"
|
|
612
|
+
},
|
|
613
|
+
"errors": {
|
|
614
|
+
"unsupportedFileType": "不支持的文件类型。支持:{types}",
|
|
615
|
+
"fileTooLarge": "文件过大。最大支持:{size}MB",
|
|
616
|
+
"uploadFailed": "获取上传 URL 失败",
|
|
617
|
+
"fileUploadFailed": "文件上传失败",
|
|
618
|
+
"avatarUploadError": "头像上传失败",
|
|
619
|
+
"validationFailed": "验证失败"
|
|
620
|
+
},
|
|
621
|
+
"success": {
|
|
622
|
+
"avatarUpdated": "头像更新成功"
|
|
623
|
+
},
|
|
624
|
+
"billing": {
|
|
625
|
+
"currentPlan": {
|
|
626
|
+
"title": "当前套餐",
|
|
627
|
+
"description": "管理您的订阅和账单周期。",
|
|
628
|
+
"freePlan": "免费版",
|
|
629
|
+
"current": "当前",
|
|
630
|
+
"basicFeatures": "基础功能,积分有限",
|
|
631
|
+
"premiumFeatures": "完整访问所有高级功能",
|
|
632
|
+
"upgradePlan": "升级套餐",
|
|
633
|
+
"managePlan": "管理套餐",
|
|
634
|
+
"monthlyCredits": "每月积分",
|
|
635
|
+
"renewalDate": "续费日期",
|
|
636
|
+
"notApplicable": "无",
|
|
637
|
+
"price": "价格",
|
|
638
|
+
"perMonth": "月",
|
|
639
|
+
"perYear": "年",
|
|
640
|
+
"cancelSubscription": "取消订阅",
|
|
641
|
+
"cancelPending": "将于 {date} 到期取消",
|
|
642
|
+
"cancelDialog": {
|
|
643
|
+
"title": "确认取消订阅?",
|
|
644
|
+
"description": "订阅将在当前计费周期结束时({date})自动取消,届时套餐将恢复为免费版。",
|
|
645
|
+
"keepBenefits": "在 {date} 之前,您仍可享受当前套餐的全部权益",
|
|
646
|
+
"confirm": "确认取消",
|
|
647
|
+
"cancel": "保留订阅"
|
|
648
|
+
}
|
|
649
|
+
},
|
|
650
|
+
"paymentMethods": {
|
|
651
|
+
"title": "支付方式",
|
|
652
|
+
"description": "添加或管理您的支付方式,用于订阅和购买。",
|
|
653
|
+
"addMethod": "添加支付方式",
|
|
654
|
+
"noMethods": "暂无支付方式",
|
|
655
|
+
"noMethodsHint": "添加支付方式以升级套餐或购买积分"
|
|
656
|
+
},
|
|
657
|
+
"history": {
|
|
658
|
+
"title": "账单历史",
|
|
659
|
+
"description": "查看和下载您的历史发票。",
|
|
660
|
+
"date": "日期",
|
|
661
|
+
"historyDescription": "描述",
|
|
662
|
+
"amount": "金额",
|
|
663
|
+
"status": "状态",
|
|
664
|
+
"invoice": "发票",
|
|
665
|
+
"noHistory": "暂无账单记录",
|
|
666
|
+
"noHistoryHint": "首次购买后,发票将显示在此处"
|
|
667
|
+
}
|
|
668
|
+
},
|
|
669
|
+
"usage": {
|
|
670
|
+
"title": "积分使用情况",
|
|
671
|
+
"description": "用于各项服务的积分消耗概览。",
|
|
672
|
+
"availableCredits": "可用积分",
|
|
673
|
+
"creditsAvailable": "积分可用",
|
|
674
|
+
"getMoreCredits": {
|
|
675
|
+
"title": "获取更多积分",
|
|
676
|
+
"description": "订阅套餐以获取每月积分并解锁高级功能",
|
|
677
|
+
"viewPlans": "查看订阅套餐"
|
|
678
|
+
},
|
|
679
|
+
"expiringSoon": {
|
|
680
|
+
"title": "积分即将过期",
|
|
681
|
+
"message": "{count} 积分将于 {date} 过期"
|
|
682
|
+
},
|
|
683
|
+
"transactions": {
|
|
684
|
+
"title": "交易记录",
|
|
685
|
+
"description": "查看所有积分交易,包括发放和消耗",
|
|
686
|
+
"date": "日期",
|
|
687
|
+
"type": "类型",
|
|
688
|
+
"transactionDescription": "描述",
|
|
689
|
+
"transactionAmount": "数量",
|
|
690
|
+
"noTransactions": "暂无交易记录",
|
|
691
|
+
"noTransactionsHint": "您的积分交易将显示在此处",
|
|
692
|
+
"loading": "加载中...",
|
|
693
|
+
"showing": "显示第 {from} 至 {to} 条,共 {total} 条交易",
|
|
694
|
+
"rowsPerPage": "每页显示",
|
|
695
|
+
"pageOf": "第 {page} 页,共 {total} 页",
|
|
696
|
+
"types": {
|
|
697
|
+
"registration_bonus": "注册奖励",
|
|
698
|
+
"admin_grant": "管理员发放",
|
|
699
|
+
"monthly_grant": "每月发放",
|
|
700
|
+
"purchase": "购买",
|
|
701
|
+
"consumption": "消耗",
|
|
702
|
+
"expiration": "已过期",
|
|
703
|
+
"refund": "退款"
|
|
704
|
+
},
|
|
705
|
+
"descriptions": {
|
|
706
|
+
"registration_bonus": "新用户注册奖励",
|
|
707
|
+
"monthly_grant": "{plan} 月度订阅积分",
|
|
708
|
+
"yearly_grant": "{plan} 年度订阅积分 ({monthly} x 12)",
|
|
709
|
+
"consumption": "服务消耗",
|
|
710
|
+
"expiration": "积分已过期",
|
|
711
|
+
"admin_grant": "管理员发放积分",
|
|
712
|
+
"refund": "积分退款"
|
|
713
|
+
}
|
|
714
|
+
}
|
|
715
|
+
}
|
|
716
|
+
},
|
|
717
|
+
"Support": {
|
|
718
|
+
"enterMessage": "请输入消息内容",
|
|
719
|
+
"messageSent": "消息发送成功",
|
|
720
|
+
"sendFailed": "发送失败,请重试",
|
|
721
|
+
"replyUser": "回复用户",
|
|
722
|
+
"addReply": "添加回复",
|
|
723
|
+
"inputPlaceholder": "输入您的消息...",
|
|
724
|
+
"characters": "字符",
|
|
725
|
+
"send": "发送",
|
|
726
|
+
"enterReplyContent": "请输入回复内容",
|
|
727
|
+
"replySuccess": "回复成功",
|
|
728
|
+
"replyFailed": "回复失败,请重试",
|
|
729
|
+
"ticketClosedNotice": "此工单已关闭,无法添加新回复",
|
|
730
|
+
"inputReplyPlaceholder": "输入您的回复...",
|
|
731
|
+
"sendReply": "发送回复",
|
|
732
|
+
"statusUpdateFailed": "状态更新失败",
|
|
733
|
+
"updating": "更新中...",
|
|
734
|
+
"selectNewStatus": "选择新状态",
|
|
735
|
+
"roleUpdateFailed": "角色更新失败",
|
|
736
|
+
"admin": "管理员",
|
|
737
|
+
"user": "普通用户"
|
|
738
|
+
},
|
|
739
|
+
"AdminSidebar": {
|
|
740
|
+
"badge": "管理",
|
|
741
|
+
"roleBadge": "管理员",
|
|
742
|
+
"returnToUser": "返回用户端",
|
|
743
|
+
"lightMode": "浅色模式",
|
|
744
|
+
"darkMode": "深色模式",
|
|
745
|
+
"followSystem": "跟随系统",
|
|
746
|
+
"signOut": "退出登录",
|
|
747
|
+
"nav": {
|
|
748
|
+
"controlPanel": "管理中心",
|
|
749
|
+
"dashboard": "控制面板",
|
|
750
|
+
"userManagement": "用户管理",
|
|
751
|
+
"ticketManagement": "工单管理"
|
|
752
|
+
}
|
|
753
|
+
},
|
|
754
|
+
"Footer": {
|
|
755
|
+
"description": "生产就绪的 Next.js SaaS 模板,内置认证、支付、积分、国际化等功能。",
|
|
756
|
+
"product": "产品",
|
|
757
|
+
"legal": "法律",
|
|
758
|
+
"copyright": "© {year} {name}。保留所有权利。",
|
|
759
|
+
"twitter": "Twitter",
|
|
760
|
+
"github": "GitHub"
|
|
761
|
+
}
|
|
762
|
+
}
|