一个高度规范化、模块化的 Next.js 模板,专为快速搭建现代化小游戏网站而设计。本项目集成了最新的前端技术栈,并从一开始就考虑了国际化和最佳开发实践。
- 🚀 最新技术栈:
- Next.js 15+ (App Router)
- React 19+
- TypeScript
- 🎨 UI & 样式:
- Tailwind CSS
- Shadcn UI - 可定制的精美组件
- 🌍 国际化 (i18n):
- 使用
next-intl集成,专为 App Router 设计。 - 默认支持英文,可轻松扩展其他语言。
- 使用
- 🔧 开发工具与规范:
- ESLint (遵循最新配置标准)
- 详细的开发规范文档,覆盖各个技术方面。
- 遵循声明式和函数式编程范式。
- 🧩 模块化设计: 易于扩展和维护,方便快速迭代和定制。
- 📱 响应式设计: 移动优先,确保在各种设备上的良好体验。
- ⚡ 性能优化: 注重 Web Vitals,提供流畅的用户体验。
- Next.js 15+ (App Router)
- React 19+
- TypeScript
- Tailwind CSS
- Shadcn UI
- ESLint
next-intl(国际化,专为 App Router)nuqs(URL 状态管理)@stagewise/toolbar-next(AI 辅助开发工具栏)
要使用此模板创建新的游戏站点项目:
-
使用此模板创建新仓库:
- 点击 GitHub 上的 "Use this template" 按钮。
- 或者,直接克隆此仓库 (请替换为您的实际仓库地址):
git clone https://your-repository-url/gamesite-template.git your-new-game-project cd your-new-game-project
-
安装依赖:
npm install # or yarn install # or pnpm install
-
运行开发服务器:
npm run dev # or yarn dev # or pnpm dev
项目将在
http://localhost:3000(遵循规范默认为 3000) 上运行。 -
开始定制:
- 修改
app/page.tsx开始构建您的主页。 - 根据您的需求添加或修改 Shadcn UI 组件。
- 参考
.cursor/rules/下的开发规范进行编码。
- 修改
gamesite-template/
├── .cursor/rules/ # 详细的开发规范文档
├── app/ # Next.js App Router 核心目录
│ ├── [locale]/ # 国际化路由根目录 (e.g., en/, es/)
│ │ ├── layout.tsx # 带语言环境的根布局
│ │ ├── page.tsx # 带语言环境的首页
│ │ └── (other-routes)/ # 其他国际化路由
│ └── layout.tsx # (可选)非国际化根布局或模板
│ └── page.tsx # (可选)非国际化首页或着陆页
├── components/ # 全局共享组件
│ └── ui/ # Shadcn UI 组件存放处 (默认)
├── messages/ # 国际化翻译文件 (e.g., en.json, es.json)
├── public/ # 静态资源
├── lib/ # 工具函数 (例如: utils.ts 包含 cn 函数)
├── middleware.ts # Next.js 中间件 (用于 next-intl 路由)
├── i18n.ts # next-intl 配置文件
├── .gitignore
├── eslint.config.mjs # ESLint 配置文件 (Flat Config)
├── next.config.ts # Next.js 配置文件
├── package.json
├── postcss.config.mjs # PostCSS 配置文件
├── README.md # 项目说明 (就是您现在看到的文件)
└── tsconfig.json # TypeScript 配置文件
为确保代码质量和开发效率,本项目制定了一系列详细的开发规范。请在开发前仔细阅读:
- 通用编码风格指南
- Next.js 开发指南
- React 开发指南
- TypeScript 开发指南
- ESLint 配置指南
- 国际化 (i18n) 指南
- Tailwind CSS 使用指南
- Shadcn UI 使用指南
- Next.js 15 异步 API 处理指南
- Next.js Hydration 错误调试指南
- About Us 和 Contact Us 页面内容完善:
- About Us 页面: 创建了完整的公司介绍页面,包含欢迎介绍、使命说明、服务特色列表、承诺声明和社区邀请等内容,展示了 GameSite 的品牌形象和价值主张。
- Contact Us 页面: 实现了简洁明了的联系方式页面,按照用户要求不使用表格形式,而是采用文字说明的方式,包含4种不同类型的联系邮箱(一般咨询、技术支持、商务合作、法律事务)、响应时间说明和联系前建议,方便用户根据不同需求选择合适的联系方式。
- 在
messages/en.json中添加了详细的翻译内容,保持与其他法律页面一致的专业风格和结构。 - 两个页面均采用响应式设计,支持明暗主题切换,与网站整体设计风格保持一致。
- 完整合规页面体系实现:
- 隐私政策页面: 创建了符合GDPR、CCPA等国际法规要求的详细隐私政策,包含信息收集、使用、共享、用户权利、数据安全等完整条款。
- Cookie政策页面: 实现了专业的Cookie使用说明,涵盖Cookie类型、用途、管理方式、法律依据等内容,确保符合欧盟ePrivacy指令要求。
- 服务条款页面: 建立了完整的用户协议体系,包含服务描述、用户责任、知识产权、责任限制、争议解决等法律条款。
- 版权侵权通知程序页面: 实现了完整的DMCA版权侵权通知流程说明,包括概述、下架通知、反通知程序、重复侵权者政策等。
- 所有页面均采用响应式设计,支持明暗主题切换,内容专业且易读,确保网站法律合规性和用户体验。
- 在
messages/en.json中添加了数千行详细的翻译内容,提供完整的法律条款说明。
- ESLint错误修复与代码质量提升:
- 修复了所有TypeScript ESLint错误,确保项目能够成功构建。
- 将所有
any类型替换为正确的类型定义:locale as (typeof routing.locales)[number]。 - 移除了未使用的导入:
CardHeader、CardTitle(sidebar组件)和GameData(多个页面组件)。 - 修复了未使用的变量:将
catch (error)改为catch以避免未使用变量警告。 - 确保代码符合项目的ESLint规范,提高代码质量和可维护性。
- 游戏图标系统实现:
- 创建了
public/images/game-icons/目录用于存储游戏图标文件。 - 将用户提供的
snow_rider_3d.jpg图标移动到专用图标文件夹。 - 更新了
default-game.json和italian-brainrot-clicker.json中的图标链接,从占位符URL改为实际的本地图标路径。 - 创建了
lib/utils/game-icons.ts工具函数,提供图标路径管理、默认占位符处理等功能。 - 在图标文件夹中添加了详细的README文档,说明文件命名规范、使用方法和注意事项。
- 建立了完整的图标管理体系,支持多种图片格式(jpg, jpeg, png, webp),便于后续添加更多游戏图标。
- 创建了
- 侧边栏配置模板化:
- 创建了
lib/data/sidebar-config.json配置文件,统一管理侧边栏的所有内容(顶部按钮和游戏分类)。 - 在
lib/types.ts中添加了SidebarConfig、SidebarButton、SidebarCategory类型定义。 - 创建了
lib/data/sidebar.ts数据获取函数和app/api/sidebar-config/route.tsAPI 路由。 - 重构了
components/layout/sidebar.tsx,使其从JSON配置文件动态加载内容,提高了模板的可配置性和可维护性。
- 创建了
- 修复 Hydration 错误与页面间距优化:
- 解决了 React Hydration Mismatch 错误,主要涉及
InteractiveRating组件中localStorage的使用和next-themes的主题状态不一致问题。 - 在
InteractiveRating组件中添加了mounted状态,确保服务端和客户端初始渲染一致,只有在客户端挂载后才从localStorage加载数据。 - 为
ThemeProvider添加了suppressHydrationWarning属性来解决主题相关的 hydration 问题。 - 在
Sidebar组件中为主题切换按钮添加了mounted状态和disabled属性,防止在客户端挂载前的交互。 - 优化了页面内容间距:在主容器中添加
px-4 md:px-6类提供左右内边距,调整内容卡片的桌面端内边距,解决内容过于拥挤的视觉问题。
- 解决了 React Hydration Mismatch 错误,主要涉及
- 集成 Stagewise AI 开发工具栏:
- 安装了
@stagewise/toolbar-next包。 - 在根布局
app/[locale]/layout.tsx中集成了StagewiseToolbar组件。 - 确保工具栏仅在开发模式 (
process.env.NODE_ENV === 'development') 下加载和显示。
- 安装了
- 添加 Contact Us 页面:
- 创建了
app/[locale]/contact-us/page.tsx页面组件。 - 在
messages/en.json中添加了相应的翻译文本。
- 创建了
- 页脚免责声明内容与标题调整:
- 修改了
messages/en.json,将免责声明的标题与内容分离,确保内容不重复显示。 - 更新了
components/layout/footer.tsx以使用新的翻译键,现在免责声明标题明确为 "Disclaimer:"。
- 修改了
- 页脚免责声明居中对齐:
- 调整了
components/layout/footer.tsx中免责声明的文本对齐方式,使其在所有屏幕尺寸下均居中显示,以提升视觉协调性。
- 调整了
- 页脚布局再次优化:
- 进一步调整了
components/layout/footer.tsx的布局。免责声明现在单独占据一行,文本居中(大屏幕左对齐)。所有其他页脚链接(关于我们、联系我们、用户协议等)在其下方横向居中排列成一行(或根据空间自动换行)。
- 进一步调整了
- 页脚布局调整:
- 调整了
components/layout/footer.tsx的布局,使其在桌面视图下更偏向横向均衡分布。免责声明区域占据约三分之二宽度,链接区域占据约三分之一宽度,并修复了免责声明文本的显示问题。
- 调整了
- Next.js 15 异步 API 修复:
- 修复了在
about-us,privacy-policy,cookie-policy, 和terms-of-use页面的generateMetadata函数中,因直接访问params.locale而未首先await params导致的错误。所有相关页面已遵循nextjs15-async-apis.mdc指南进行更新。
- 修复了在
- 页脚样式调整与多语言支持移除 (初期):
- 将页脚 (
components/layout/footer.tsx) 的背景颜色从深红色改回浅色系 (中性色),使其与网站整体背景更协调。 - 移除了中文语言支持:删除了
messages/zh.json,并更新了i18n/routing.ts中的locales配置,目前仅支持英文 (en)。
- 将页脚 (
- 页脚增强与合规页面创建:
- 创建了 "About Us", "Privacy Policy", "Cookie Policy", "Terms of Use" 的占位符页面 (
app/[locale]/[page_slug]/page.tsx)。 - 更新了
messages/en.json和messages/zh.json以包含新页面和页脚链接的翻译。 - 重构了
components/layout/footer.tsx组件,使其包含免责声明、上述新页面的链接,以及 "Contact Us" 和 "Copyright Infringement Notice Procedure" 的链接(这些链接目前也指向占位符路径)。页脚样式已更新以接近参考图片。
- 创建了 "About Us", "Privacy Policy", "Cookie Policy", "Terms of Use" 的占位符页面 (
- 国际化配置统一与冗余文件清理:
- 将
i18n.ts和middleware.ts的路由配置导入路径从根目录的routing.ts修改为i18n/routing.ts。 - 删除了根目录下多余的
routing.ts文件,统一了国际化路由配置源。
- 将
- 路由修复与国际化初步配置:
- 修复了"其他游戏"部分中默认游戏链接指向错误路径 (
/games/home) 的问题,现在正确指向根目录 (/)。 - 在
components/game/play-other-games.tsx中,将next/link替换为从新建的i18n/navigation.ts导出的本地化Link组件。 - 根据
i18n-guidelines.mdc创建了i18n/routing.ts和i18n/navigation.ts文件,为后续完整的国际化配置打下基础。
- 修复了"其他游戏"部分中默认游戏链接指向错误路径 (
- 修复与数据更新:
- 解决了在动态游戏页面 (
app/[locale]/games/[slug]/page.tsx) 中因 Next.js 15 未await params访问params.slug导致的运行时错误,遵循了nextjs15-async-apis指南。 - 更新了
italian-brainrot-clicker.json游戏数据文件,将其gameUrl修改为新的嵌入链接。
- 解决了在动态游戏页面 (
- 组件与依赖修复:
- 解决了
app/[locale]/layout.tsx中因toaster组件缺失导致的模块找不到错误。将已废弃的toaster组件替换为 Shadcn UI 推荐的sonner组件,并更新了相关导入。 - 安装了缺失的
@vercel/speed-insights和@vercel/analytics依赖包。 - 重新创建了
components/theme-provider.tsx文件,该文件是next-themes的必要封装,并修正了其内部的类型导入问题。
- 解决了
- 动态游戏路由与页面实现:
- 创建了动态路由
app/[locale]/games/[slug]/page.tsx用于展示单个游戏的详细信息。 - 实现了
generateStaticParams以支持在构建时为lib/data/games/目录下的游戏预渲染页面。 GamePage组件 (games/[slug]/page.tsx) 现在会根据 URL中的slug加载并显示对应游戏的完整信息,其 UI 布局和组件与主页保持一致(包括游戏展示、元数据、概述等)。- 在单个游戏页面上,"Play Other Games" 部分会正确显示所有其他游戏(包括默认主页游戏),并排除当前正在查看的游戏。
- 重构了代码,将共享的 TypeScript 接口 (
GameData,PlayableGame) 移至lib/types.ts,并将数据获取函数 (getGameBySlug,getDefaultGameData,getAllGames) 移至lib/data/games.ts,提高了代码的模块化和可维护性。
- 创建了动态路由
- 动态游戏数据加载与内容更新 (增强):
- 主页 (
app/[locale]/page.tsx) 现在默认加载并显示lib/data/default-game.json的内容。 getAllGames函数已更新,现在会统一加载lib/data/default-game.json以及lib/data/games/目录下的所有游戏,形成一个完整的游戏列表。- 首页的 "Play Other Games" 部分现在会显示 `
- 主页 (
- 侧边栏样式更新:
- 重构了
components/layout/sidebar.tsx组件,使用 Shadcn UI 的Card组件替换了原有的<aside>元素和自定义样式,使其外观与其他卡片元素(如游戏列表)更加统一和美观。 - 更新了侧边栏中的明暗主题切换按钮,使其能够通过
next-themes的useThemehook 实际切换应用的主题。 - 调整了侧边栏高度约束,移除
min-h-full类,使侧边栏卡片与右侧主游戏板块实现自然的等高对齐,提升页面视觉和谐性。 - 在布局中为侧边栏添加了顶部间距(
pt-4),确保侧边栏与导航栏保持适当距离,并与主内容区域的间距保持一致。 - 最终调整侧边栏布局:恢复
min-h-full类使侧边栏填满可用高度,同时在包含侧边栏和主内容的容器上添加垂直间距(py-4),确保与header和footer保持适当距离,实现更美观的页面布局。 - 优化页面布局以支持 Google AdSense:在页面右侧添加了固定宽度容器(
w-48),与左侧广告位对称,为 Google AdSense 预留展示空间。同时移除了主内容区域的右侧内边距,使内容与游戏卡片右侧对齐,实现更合理的空间分配。 - 改善页面视觉对齐:调整了主页面游戏卡片的位置,移除其底部边距并调整主容器的顶部内边距,使游戏卡片与左侧侧边栏的顶部位置对齐,提升整体页面的视觉和谐性。
- 实现等高对齐:为主页面容器和内容包装器添加
min-h-full类,确保右侧游戏卡片区域与左侧侧边栏实现真正的等高对齐,创造更加和谐统一的页面布局效果。 - 重新设计侧边栏布局:参考用户提供的设计图,重构侧边栏结构为三个区域:顶部的 "NEW GAMES" 和 "HOT GAMES" 大按钮、中间的 Light/Dark 主题切换器、底部的游戏分类列表,同时保持白色卡片背景,提升用户体验和视觉层次。
- 重构了