├── .env.example ├── .eslintrc.json ├── .gitignore ├── .npmrc ├── .vscode └── settings.json ├── README.md ├── README_ja.md ├── README_zh.md ├── app ├── BaiDuAnalytics.tsx ├── GoogleAdsense.tsx ├── GoogleAnalytics.tsx ├── PlausibleAnalytics.tsx ├── [locale] │ ├── about │ │ └── page.tsx │ ├── blogs │ │ ├── BlogCard.tsx │ │ ├── [slug] │ │ │ └── page.tsx │ │ └── page.tsx │ ├── layout.tsx │ ├── page.tsx │ ├── privacy-policy │ │ └── page.tsx │ ├── terms-of-service │ │ └── page.tsx │ └── unsubscribe │ │ └── page.tsx ├── actions │ └── newsletter.ts ├── api │ └── newsletter │ │ └── route.ts ├── robots.ts └── sitemap.ts ├── blogs ├── en │ └── 1.demo.mdx ├── ja │ └── 1.demo.mdx └── zh │ ├── 1.demo.mdx │ └── 2.demo2.mdx ├── components.json ├── components ├── LanguageDetectionAlert.tsx ├── LocaleSwitcher.tsx ├── TailwindIndicator.tsx ├── ThemeToggle.tsx ├── WebsiteLogo.tsx ├── footer │ ├── Footer.tsx │ └── Newsletter.tsx ├── header │ ├── Header.tsx │ ├── HeaderLinks.tsx │ └── MobileMenu.tsx ├── home │ └── index.tsx ├── icons │ ├── expanding-arrow.tsx │ ├── eye.tsx │ ├── index.tsx │ ├── loading-circle.tsx │ ├── loading-dots.module.css │ ├── loading-dots.tsx │ ├── loading-spinner.module.css │ ├── loading-spinner.tsx │ ├── moon.tsx │ └── sun.tsx ├── mdx │ ├── Aside.tsx │ ├── Callout.tsx │ ├── MDXComponents.tsx │ └── MdxCard.tsx ├── social-icons │ ├── icons.tsx │ └── index.tsx └── ui │ ├── alert.tsx │ ├── button.tsx │ ├── dropdown-menu.tsx │ ├── select.tsx │ ├── toast.tsx │ └── toaster.tsx ├── config └── site.ts ├── content ├── about │ ├── en.mdx │ ├── ja.mdx │ └── zh.mdx ├── privacy-policy │ ├── en.mdx │ ├── ja.mdx │ └── zh.mdx └── terms-of-service │ ├── en.mdx │ ├── ja.mdx │ └── zh.mdx ├── gtag.js ├── hooks └── use-toast.ts ├── i18n ├── messages │ ├── en.json │ ├── ja.json │ └── zh.json ├── request.ts └── routing.ts ├── lib ├── email.ts ├── getBlogs.ts ├── logger.ts ├── metadata.ts └── utils.ts ├── log └── .db69a462fcd0bc6ae6d0cc5220e6aa21ec198c81-audit.json ├── middleware.ts ├── next-env.d.ts ├── next.config.mjs ├── package.json ├── pnpm-lock.yaml ├── postcss.config.js ├── public ├── ads.txt ├── favicon.ico ├── logo.png ├── logo.svg ├── og.png ├── og.webp ├── placeholder.svg └── zs.jpeg ├── stores └── localeStore.ts ├── styles ├── globals.css └── loading.css ├── tailwind.config.ts ├── tsconfig.json └── types ├── blog.ts └── siteConfig.ts /.env.example: -------------------------------------------------------------------------------- 1 | # ----------------------------------------------------------------------------- 2 | # Site info 3 | # ----------------------------------------------------------------------------- 4 | NEXT_PUBLIC_SITE_URL=http://localhost:3000 5 | NEXT_PUBLIC_LOCALE_DETECTION=false 6 | 7 | # ----------------------------------------------------------------------------- 8 | # Analytics 9 | # Google Analytics: https://analytics.google.com/analytics/web/ 10 | # Baidu Tongji: https://tongji.baidu.com/ 11 | # Plausible: https://plausible.io/ 12 | # ----------------------------------------------------------------------------- 13 | NEXT_PUBLIC_GOOGLE_ID= 14 | NEXT_PUBLIC_BAIDU_TONGJI= 15 | NEXT_PUBLIC_PLAUSIBLE_DOMAIN= 16 | NEXT_PUBLIC_PLAUSIBLE_SRC= 17 | 18 | #------------------------------------------------------------------------ 19 | # Ads 20 | # Google Adsense: https://www.google.com/adsense/ 21 | #------------------------------------------------------------------------ 22 | NEXT_PUBLIC_GOOGLE_ADSENSE_ID= 23 | 24 | #------------------------------------------------------------------------ 25 | # Resend: https://resend.com/ 26 | #------------------------------------------------------------------------ 27 | RESEND_API_KEY= 28 | ADMIN_EMAIL= 29 | RESEND_AUDIENCE_ID= 30 | 31 | #------------------------------------------------------------------------ 32 | # Upstash: https://upstash.com/ 33 | #------------------------------------------------------------------------ 34 | UPSTASH_REDIS_REST_URL= 35 | UPSTASH_REDIS_REST_TOKEN= 36 | UPSTASH_REDIS_NEWSLETTER_RATE_LIMIT_KEY=newsletter-rate-limit 37 | DAY_MAX_SUBMISSIONS= -------------------------------------------------------------------------------- /.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "next/core-web-vitals" 3 | } 4 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | ### Node template 2 | .idea 3 | .DS_Store 4 | dist 5 | 6 | # Logs 7 | logs 8 | *.log 9 | npm-debug.log* 10 | yarn-debug.log* 11 | yarn-error.log* 12 | lerna-debug.log* 13 | .temp 14 | yarn.lock 15 | 16 | # Diagnostic reports (https://nodejs.org/api/report.html) 17 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json 18 | 19 | # Runtime data 20 | pids 21 | *.pid 22 | *.seed 23 | *.pid.lock 24 | 25 | # Directory for instrumented libs generated by jscoverage/JSCover 26 | lib-cov 27 | 28 | # Coverage directory used by tools like istanbul 29 | coverage 30 | *.lcov 31 | 32 | # nyc test coverage 33 | .nyc_output 34 | 35 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) 36 | .grunt 37 | 38 | # Bower dependency directory (https://bower.io/) 39 | bower_components 40 | 41 | # node-waf configuration 42 | .lock-wscript 43 | 44 | # Compiled binary addons (https://nodejs.org/api/addons.html) 45 | build/Release 46 | 47 | # Dependency directories 48 | node_modules/ 49 | jspm_packages/ 50 | 51 | # Snowpack dependency directory (https://snowpack.dev/) 52 | web_modules/ 53 | 54 | # TypeScript cache 55 | *.tsbuildinfo 56 | 57 | # Optional npm cache directory 58 | .npm 59 | 60 | # Optional eslint cache 61 | .eslintcache 62 | 63 | # Microbundle cache 64 | .rpt2_cache/ 65 | .rts2_cache_cjs/ 66 | .rts2_cache_es/ 67 | .rts2_cache_umd/ 68 | 69 | # Optional REPL history 70 | .node_repl_history 71 | 72 | # Output of 'npm pack' 73 | *.tgz 74 | 75 | # Yarn Integrity file 76 | .yarn-integrity 77 | 78 | # dotenv environment variables file 79 | .env 80 | .env.local 81 | .env.test 82 | 83 | # parcel-bundler cache (https://parceljs.org/) 84 | .cache 85 | .parcel-cache 86 | 87 | # Next.js build output 88 | .next 89 | out 90 | 91 | # Nuxt.js build / generate output 92 | .nuxt 93 | dist 94 | 95 | # Gatsby files 96 | .cache/ 97 | # Comment in the assets line in if your project uses Gatsby and not Next.js 98 | # https://nextjs.org/blog/next-9-1#public-directory-support 99 | # assets 100 | 101 | # vuepress build output 102 | .vuepress/dist 103 | 104 | # Serverless directories 105 | .serverless/ 106 | 107 | # FuseBox cache 108 | .fusebox/ 109 | 110 | # DynamoDB Local files 111 | .dynamodb/ 112 | 113 | # TernJS port file 114 | .tern-port 115 | 116 | # Stores VSCode versions used for testing VSCode extensions 117 | .vscode-test 118 | 119 | # yarn v2 120 | .yarn/cache 121 | .yarn/unplugged 122 | .yarn/build-state.yml 123 | .yarn/install-state.gz 124 | .pnp.* 125 | 126 | /.vuepress/dist/ 127 | 128 | # sitemap 129 | */sitemap*.xml 130 | */robots.txt -------------------------------------------------------------------------------- /.npmrc: -------------------------------------------------------------------------------- 1 | # if use pnpm 2 | enable-pre-post-scripts=true 3 | public-hoist-pattern[]=*@nextui-org/* 4 | registry=https://registry.npmmirror.com/ 5 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "css.validate": false, 3 | "editor.formatOnSave": true, 4 | "editor.tabSize": 2, 5 | "editor.codeActionsOnSave": { 6 | "source.fixAll.eslint": "explicit", 7 | "source.organizeImports": "explicit" 8 | }, 9 | "headwind.runOnSave": false, 10 | "typescript.preferences.importModuleSpecifier": "non-relative", 11 | "eslint.validate": ["javascript", "javascriptreact", "typescript"], 12 | "typescript.tsdk": "node_modules/typescript/lib", 13 | "commentTranslate.source": "Bing", 14 | "cSpell.words": [ 15 | "contentlayer", 16 | "lemonsqueezy" 17 | ] 18 | } 19 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 🌍 *[English](README.md) ∙ [简体中文](README_zh.md) ∙ [日本語](README_ja.md)* 2 | 3 | # Next Forge - Multilingual Next.js 15 Starter 4 | 5 | A feature-rich Next.js 15 multilingual starter template to help you quickly build globally-ready websites. 6 | 7 | - [👉 Source Code](https://github.com/weijunext/nextjs-15-starter) 8 | - [👉 Live Demo](https://nextforge.dev/) 9 | 10 | 🚀 Looking for a full-featured SaaS Starter Kit? [Check out the complete version](https://nexty.dev) 11 | 12 | ## ✨ Features 13 | 14 | - 🌐 Built-in i18n support (English, Chinese, Japanese) 15 | - 🎨 Modern UI design with Tailwind CSS 16 | - 🌙 Dark/Light theme toggle 17 | - 📱 Responsive layout 18 | - 📝 MDX blog system 19 | - 🔍 SEO optimization 20 | - 📊 Integrated analytics tools 21 | - Google Analytics 22 | - Baidu Analytics 23 | - Google Adsense 24 | - Vercel Analytics 25 | 26 | ## 🚀 Quick Start 27 | 28 | 1. Clone the repository: 29 | ```bash 30 | git clone https://github.com/weijunext/nextjs-15-starter.git 31 | ``` 32 | 33 | 2. Install dependencies: 34 | ```bash 35 | npm install 36 | # or 37 | yarn 38 | # or 39 | pnpm install 40 | ``` 41 | 42 | 3. Copy environment variables: 43 | ```bash 44 | cp .env.example .env 45 | ``` 46 | 47 | 4. Start the development server: 48 | ```bash 49 | npm run dev 50 | ``` 51 | 52 | Visit http://localhost:3000 to view your application. 53 | 54 | ## ⚙️ Configuration 55 | 56 | 1. Basic Setup 57 | - Edit `config/site.ts` for website information 58 | - Update icons and logo in `public/` 59 | - Configure `app/sitemap.ts` for sitemap 60 | - Update `app/robots.ts` for robots.txt 61 | 62 | 2. i18n Setup 63 | - Add/modify language files in `i18n/messages/` 64 | - Configure supported languages in `i18n/routing.ts` 65 | - Set up i18n routing in `middleware.ts` 66 | - Create pages under `app/[locale]/` 67 | - Use the `Link` component from `i18n/routing.ts` instead of Next.js default 68 | 69 | ## 📝 Content Management 70 | 71 | ### Blog Posts 72 | Create MDX files in `blogs/[locale]` with the following format: 73 | 74 | ```markdown 75 | --- 76 | title: Post Title 77 | description: Post Description 78 | image: /image.png 79 | slug: /url-path 80 | tags: tag1,tag2 81 | date: 2025-02-20 82 | visible: published 83 | pin: true 84 | --- 85 | 86 | Post content... 87 | ``` 88 | 89 | Reference `types/blog.ts` for supported fields. 90 | 91 | ### Static Pages 92 | Manage static page content in `content/[page]/[locale].mdx`. 93 | 94 | ## 🔍 SEO Optimization 95 | 96 | Built-in comprehensive SEO features: 97 | - Server-side rendering and static generation 98 | - Automatic sitemap.xml generation 99 | - robots.txt configuration 100 | - Optimized metadata 101 | - Open Graph support 102 | - Multilingual SEO support 103 | 104 | ## 📊 Analytics 105 | 106 | Enable analytics by adding IDs in `.env`: 107 | ``` 108 | NEXT_PUBLIC_GOOGLE_ANALYTICS= 109 | NEXT_PUBLIC_BAIDU_TONGJI= 110 | NEXT_PUBLIC_GOOGLE_ADSENSE= 111 | ``` 112 | 113 | ## 🛠️ Tech Stack 114 | 115 | - Next.js 15 116 | - TypeScript 117 | - Tailwind CSS 118 | - Shadcn/ui 119 | - next-intl 120 | - MDX 121 | - Zustand 122 | - Vercel 123 | 124 | ## One-Click Deploy 125 | 126 | [![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https://github.com/weijunext/nextjs-15-starter&project-name=&repository-name=nextjs-15-starter&demo-title=Nextjs15Starter&demo-description=Nextjs%2015%20starter.&demo-url=https://nextforge.dev&demo-image=https://nextforge.dev/og.png) 127 | 128 | ## 📄 License 129 | 130 | MIT 131 | 132 | ## 🤝 Contributing 133 | 134 | Issues and Pull Requests are welcome! 135 | 136 | ## About the Author 137 | 138 | Next.js full-stack specialist providing expert services in project development, performance optimization, and SEO improvement. 139 | 140 | For consulting and training opportunities, reach out at weijunext@gmail.com 141 | 142 | - [Github](https://github.com/weijunext) 143 | - [Bento](https://bento.me/weijunext) 144 | - [Twitter/X](https://twitter.com/judewei_dev) 145 | 146 | Buy Me A Coffee 147 | 148 | [![ko-fi](https://ko-fi.com/img/githubbutton_sm.svg)](https://ko-fi.com/G2G6TWWMG) -------------------------------------------------------------------------------- /README_ja.md: -------------------------------------------------------------------------------- 1 | # Next Forge - 多言語対応 Next.js 15 スターター 2 | 3 | グローバル対応のウェブサイトを素早く構築するための、機能豊富なNext.js 15多言語スターターテンプレートです。 4 | 5 | - [👉 ソースコード](https://github.com/weijunext/nextjs-15-starter) 6 | - [👉 デモサイト](https://nextforge.dev/) 7 | 8 | 🚀 多機能で使いやすいフルスタックの起動テンプレートをお探しですか? ぜひ、当社の[アドバンス版](https://nexty.dev)をお試しください。 9 | 10 | ## ✨ 主な機能 11 | 12 | - 🌐 多言語対応(英語・中国語・日本語) 13 | - 🎨 Tailwind CSSによるモダンなUI 14 | - 🌙 ダーク/ライトテーマ切り替え 15 | - 📱 レスポンシブデザイン 16 | - 📝 MDXブログシステム 17 | - 🔍 SEO最適化 18 | - 📊 アナリティクスツール統合 19 | - Google Analytics 20 | - Baidu Analytics 21 | - Google Adsense 22 | - Vercel Analytics 23 | 24 | ## 🚀 クイックスタート 25 | 26 | 1. リポジトリのクローン: 27 | ```bash 28 | git clone https://github.com/weijunext/nextjs-15-starter.git 29 | ``` 30 | 31 | 2. 依存関係のインストール: 32 | ```bash 33 | npm install 34 | # または 35 | yarn 36 | # または 37 | pnpm install 38 | ``` 39 | 40 | 3. 環境変数の設定: 41 | ```bash 42 | cp .env.example .env 43 | ``` 44 | 45 | 4. 開発サーバーの起動: 46 | ```bash 47 | npm run dev 48 | ``` 49 | 50 | http://localhost:3000 にアクセスして確認できます。 51 | 52 | ## ⚙️ 設定方法 53 | 54 | 1. 基本設定 55 | - `config/site.ts`でウェブサイト情報を編集 56 | - `public/`内のアイコンとロゴを更新 57 | - `app/sitemap.ts`でサイトマップを設定 58 | - `app/robots.ts`でrobots.txtを更新 59 | 60 | 2. 多言語設定 61 | - `i18n/messages/`内の言語ファイルを追加/編集 62 | - `i18n/routing.ts`でサポートする言語を設定 63 | - `middleware.ts`で多言語ルーティングを設定 64 | - `app/[locale]/`配下にページを作成 65 | - Next.jsデフォルトの代わりに`i18n/routing.ts`の`Link`コンポーネントを使用 66 | 67 | ## 📝 コンテンツ管理 68 | 69 | ### ブログ投稿 70 | `blogs/[locale]`にMDXファイルを以下のフォーマットで作成: 71 | 72 | ```markdown 73 | --- 74 | title: 投稿タイトル 75 | description: 投稿の説明 76 | image: /image.png 77 | slug: /url-path 78 | tags: tag1,tag2 79 | date: 2025-02-20 80 | visible: published 81 | pin: true 82 | --- 83 | 84 | 投稿内容... 85 | ``` 86 | 87 | 対応フィールドについては`types/blog.ts`を参照してください。 88 | 89 | ### 静的ページ 90 | `content/[page]/[locale].mdx`で静的ページのコンテンツを管理します。 91 | 92 | ## 🔍 SEO最適化 93 | 94 | 包括的なSEO機能を搭載: 95 | - サーバーサイドレンダリングと静的生成 96 | - sitemap.xml自動生成 97 | - robots.txt設定 98 | - 最適化されたメタデータ 99 | - OGP対応 100 | - 多言語SEOサポート 101 | 102 | ## 📊 アナリティクス 103 | 104 | `.env`にIDを追加して有効化: 105 | ``` 106 | NEXT_PUBLIC_GOOGLE_ANALYTICS= 107 | NEXT_PUBLIC_BAIDU_TONGJI= 108 | NEXT_PUBLIC_GOOGLE_ADSENSE= 109 | ``` 110 | 111 | ## 🛠️ 技術スタック 112 | 113 | - Next.js 15 114 | - TypeScript 115 | - Tailwind CSS 116 | - Shadcn/ui 117 | - next-intl 118 | - MDX 119 | - Zustand 120 | - Vercel 121 | 122 | ## ワンクリックデプロイ 123 | 124 | [![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https://github.com/weijunext/nextjs-15-starter&project-name=&repository-name=nextjs-15-starter&demo-title=Nextjs15Starter&demo-description=Nextjs%2015%20starter.&demo-url=https://nextforge.dev&demo-image=https://nextforge.dev/og.png) 125 | 126 | ## 📄 ライセンス 127 | 128 | MIT 129 | 130 | ## 🤝 コントリビューション 131 | 132 | Issue、PRは大歓迎です! 133 | 134 | ## 作者について 135 | 136 | Next.jsのフルスタックスペシャリストとして、プロジェクト開発、パフォーマンス最適化、SEO改善のエキスパートサービスを提供しています。 137 | 138 | コンサルティングやトレーニングについては、 weijunext@gmail.com までご連絡ください。 139 | 140 | - [Github](https://github.com/weijunext) 141 | - [Bento](https://bento.me/weijunext) 142 | - [Twitter/X](https://twitter.com/judewei_dev) 143 | 144 | Buy Me A Coffee 145 | 146 | [![ko-fi](https://ko-fi.com/img/githubbutton_sm.svg)](https://ko-fi.com/G2G6TWWMG) -------------------------------------------------------------------------------- /README_zh.md: -------------------------------------------------------------------------------- 1 | 🌍 *[English](README.md) ∙ [简体中文](README_zh.md) ∙ [日本语](README_ja.md)* 2 | 3 | # Next Forge - 多语言 Next.js 15 启动模板 4 | 5 | 一个轻量的 Next.js 15 多语言启动模板,帮助你快速构建面向全球的网站。 6 | 7 | - [👉 源码地址](https://github.com/weijunext/nextjs-15-starter) 8 | - [👉 在线预览](https://nextforge.dev/) 9 | 10 | 🚀 如果你正在寻找功能完备的全栈启动模板,请了解我们的[高级版](https://nexty.dev) 11 | 12 | ## ✨ 特性 13 | 14 | - 🌐 内置多语言支持 (中文、英文、日语) 15 | - 🎨 基于 Tailwind CSS 的现代 UI 设计 16 | - 🌙 深色/浅色主题切换 17 | - 📱 响应式布局 18 | - 📝 MDX 博客系统 19 | - 🔍 SEO 优化 20 | - 📊 集成多个统计分析工具 21 | - Google Analytics 22 | - Baidu Analytics 23 | - Google Adsense 24 | - Vercel Analytics 25 | 26 | ## 🚀 快速开始 27 | 28 | 1. 克隆项目: 29 | ```bash 30 | git clone https://github.com/weijunext/nextjs-15-starter.git 31 | ``` 32 | 33 | 2. 安装依赖: 34 | ```bash 35 | npm install 36 | # 或 37 | yarn 38 | # 或 39 | pnpm install 40 | ``` 41 | 42 | 3. 复制环境变量文件: 43 | ```bash 44 | cp .env.example .env 45 | ``` 46 | 47 | 4. 启动开发服务器: 48 | ```bash 49 | npm run dev 50 | ``` 51 | 52 | 访问 http://localhost:3000 查看你的应用。 53 | 54 | ## ⚙️ 配置 55 | 56 | 1. 基础配置 57 | - 修改 `config/site.ts` 配置网站信息 58 | - 修改 `public/` 下的图标和 logo 59 | - 更新 `app/sitemap.ts` 配置站点地图 60 | - 更新 `app/robots.ts` 配置 robots.txt 61 | 62 | 2. 多语言配置 63 | - 在 `i18n/messages/` 下添加或修改语言文件 64 | - 在 `i18n/routing.ts` 中配置支持的语言 65 | - 在 `middleware.ts` 中配置多语言路由 66 | - 在 `app/[locale]/` 目录下创建页面 67 | - 多语言页面使用 `i18n/routing.ts` 导出的 `Link` 组件替代 next.js 的 68 | 69 | ## 📝 内容管理 70 | 71 | ### 博客文章 72 | 在 `blogs/[locale]` 目录下创建 MDX 文件,支持以下格式: 73 | 74 | ```markdown 75 | --- 76 | title: 文章标题 77 | description: 文章描述 78 | image: /image.png 79 | slug: /url-path 80 | tags: tag1,tag2 81 | date: 2025-02-20 82 | visible: published 83 | pin: true 84 | --- 85 | 86 | 文章内容... 87 | ``` 88 | 89 | 可参考类型定义 `types/blog.ts` 确认支持的字段。 90 | 91 | ### 静态页面 92 | 在 `content/[page]/[locale].mdx` 下管理静态页面内容。 93 | 94 | ## 🔍 SEO 优化 95 | 96 | 模板内置了完整的 SEO 优化方案: 97 | - 服务端渲染和静态生成 98 | - 自动生成 sitemap.xml 99 | - 配置 robots.txt 100 | - 优化的 metadata 101 | - 支持 Open Graph 102 | - 多语言 SEO 支持 103 | 104 | ## 📊 统计分析 105 | 106 | 在 `.env` 文件中配置相应的 ID 即可启用: 107 | ``` 108 | NEXT_PUBLIC_GOOGLE_ANALYTICS= 109 | NEXT_PUBLIC_BAIDU_TONGJI= 110 | NEXT_PUBLIC_GOOGLE_ADSENSE= 111 | ``` 112 | 113 | ## 🛠️ 技术栈 114 | 115 | - Next.js 15 116 | - TypeScript 117 | - Tailwind CSS 118 | - Shadcn/ui 119 | - next-intl 120 | - MDX 121 | - Zustand 122 | - Vercel 123 | 124 | 125 | ## 一键部署 126 | 127 | [![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https://github.com/weijunext/nextjs-15-starter&project-name=&repository-name=nextjs-15-starter&demo-title=Nextjs15Starter&demo-description=Nextjs%2015%20starter.&demo-url=https://nextforge.dev&demo-image=https://nextforge.dev/og.png) 128 | 129 | 130 | ## 📄 许可证 131 | 132 | MIT 133 | 134 | ## 🤝 贡献 135 | 136 | 欢迎提交 Issue 和 Pull Request! 137 | 138 | ## 关于作者 139 | 140 | 专注于 Next.js 全栈开发,欢迎探讨开发、咨询与培训等合作机会,联系微信:bigye_chengpu 141 | 142 | - [Github](https://github.com/weijunext) 143 | - [Twitter/X](https://twitter.com/weijunext) 144 | - [博客 - J实验室](https://weijunext.com) 145 | - [Medium](https://medium.com/@weijunext) 146 | - [掘金](https://juejin.cn/user/26044008768029) 147 | - [知乎](https://www.zhihu.com/people/mo-mo-mo-89-12-11) 148 | 149 | Buy Me A Coffee 150 | 151 | [![ko-fi](https://ko-fi.com/img/githubbutton_sm.svg)](https://ko-fi.com/G2G6TWWMG) 152 | 153 | 赞赏作者 154 | 155 | 156 | -------------------------------------------------------------------------------- /app/BaiDuAnalytics.tsx: -------------------------------------------------------------------------------- 1 | "use client"; 2 | 3 | import Script from "next/script"; 4 | 5 | const BaiDuAnalytics = () => { 6 | return ( 7 | <> 8 | {process.env.NEXT_PUBLIC_BAIDU_TONGJI ? ( 9 | <> 10 |