diff --git a/.env.example b/.env.example
new file mode 100644
index 0000000..7567aac
--- /dev/null
+++ b/.env.example
@@ -0,0 +1,214 @@
+# MoonTV 环境变量配置示例
+# 复制此文件为 .env.local 并根据需要修改
+
+# =============================================================================
+# 基础配置
+# =============================================================================
+
+# 站点访问密码(必填)
+# 用于保护站点访问,防止公开访问
+PASSWORD=your_secure_password_here
+
+# 站点名称
+# 在页面标题和界面中显示的名称
+SITE_NAME=MoonTV
+
+# 站点公告
+# 显示在页面顶部的公告信息
+ANNOUNCEMENT=本网站仅提供影视信息搜索服务,所有内容均来自第三方网站。本站不存储任何视频资源,不对任何内容的准确性、合法性、完整性负责。
+
+# =============================================================================
+# 存储配置
+# =============================================================================
+
+# 存储类型
+# 可选值: localstorage, redis, d1, upstash
+# localstorage: 本地存储,单用户,数据不持久化
+# redis: Redis 数据库,多用户,数据持久化
+# d1: Cloudflare D1 数据库,多用户,数据持久化
+# upstash: Upstash Redis,多用户,数据持久化
+NEXT_PUBLIC_STORAGE_TYPE=localstorage
+
+# =============================================================================
+# Redis 配置 (当 NEXT_PUBLIC_STORAGE_TYPE=redis 时使用)
+# =============================================================================
+
+# Redis 连接 URL
+# 格式: redis://username:password@host:port/database
+# 示例: redis://localhost:6379/0
+REDIS_URL=redis://localhost:6379/0
+
+# Redis 密码 (如果 Redis 需要认证)
+# REDIS_PASSWORD=your_redis_password
+
+# Redis 数据库编号 (可选,默认为 0)
+# REDIS_DB=0
+
+# =============================================================================
+# Upstash Redis 配置 (当 NEXT_PUBLIC_STORAGE_TYPE=upstash 时使用)
+# =============================================================================
+
+# Upstash Redis 连接 URL
+# 从 Upstash 控制台获取
+UPSTASH_URL=https://your-instance.upstash.io
+
+# Upstash Redis 访问令牌
+# 从 Upstash 控制台获取
+UPSTASH_TOKEN=your_upstash_token
+
+# =============================================================================
+# Cloudflare D1 配置 (当 NEXT_PUBLIC_STORAGE_TYPE=d1 时使用)
+# =============================================================================
+
+# D1 数据库绑定名称
+# 在 Cloudflare Pages 中配置的绑定名称
+# 通常为 "DB"
+
+# =============================================================================
+# 用户管理配置
+# =============================================================================
+
+# 管理员用户名 (当使用非 localstorage 存储时)
+# 用于创建第一个管理员账户
+USERNAME=admin
+
+# 是否开放用户注册
+# 可选值: true, false
+# 仅在非 localstorage 部署时生效
+NEXT_PUBLIC_ENABLE_REGISTER=false
+
+# =============================================================================
+# 搜索配置
+# =============================================================================
+
+# 搜索接口可拉取的最大页数
+# 范围: 1-50
+# 建议值: 5-10
+NEXT_PUBLIC_SEARCH_MAX_PAGE=5
+
+# =============================================================================
+# 代理配置
+# =============================================================================
+
+# 默认的浏览器端图片代理
+# 用于解决图片跨域问题
+# 示例: https://images.weserv.nl/
+NEXT_PUBLIC_IMAGE_PROXY=
+
+# 默认的浏览器端豆瓣数据代理
+# 用于解决豆瓣 API 跨域问题
+# 示例: https://api.allorigins.win/raw?url=
+NEXT_PUBLIC_DOUBAN_PROXY=
+
+# =============================================================================
+# 开发环境配置
+# =============================================================================
+
+# 开发环境标识
+# 可选值: development, production, test
+NODE_ENV=development
+
+# 调试模式
+# 可选值: true, false
+DEBUG=false
+
+# 日志级别
+# 可选值: error, warn, info, debug
+LOG_LEVEL=info
+
+# =============================================================================
+# 性能配置
+# =============================================================================
+
+# 接口缓存时间 (秒)
+# 建议值: 3600-7200 (1-2小时)
+CACHE_TIME=7200
+
+# 最大并发请求数
+# 建议值: 5-10
+MAX_CONCURRENT_REQUESTS=5
+
+# =============================================================================
+# 安全配置
+# =============================================================================
+
+# 会话超时时间 (毫秒)
+# 建议值: 3600000-86400000 (1小时-24小时)
+SESSION_TIMEOUT=3600000
+
+# 最大登录尝试次数
+# 建议值: 3-5
+MAX_LOGIN_ATTEMPTS=3
+
+# 登录锁定时间 (毫秒)
+# 建议值: 900000-3600000 (15分钟-1小时)
+LOGIN_LOCKOUT_TIME=900000
+
+# =============================================================================
+# 第三方服务配置
+# =============================================================================
+
+# 豆瓣 API 配置
+# 如果需要使用豆瓣官方 API
+# DOUBAN_API_KEY=your_douban_api_key
+# DOUBAN_API_SECRET=your_douban_api_secret
+
+# 图片存储服务配置
+# 如果需要使用云存储服务
+# IMAGE_STORAGE_PROVIDER=aws_s3
+# AWS_ACCESS_KEY_ID=your_aws_access_key
+# AWS_SECRET_ACCESS_KEY=your_aws_secret_key
+# AWS_REGION=us-east-1
+# AWS_S3_BUCKET=your_bucket_name
+
+# =============================================================================
+# 监控和分析配置
+# =============================================================================
+
+# 是否启用性能监控
+# 可选值: true, false
+ENABLE_MONITORING=false
+
+# 是否启用错误追踪
+# 可选值: true, false
+ENABLE_ERROR_TRACKING=false
+
+# 是否启用用户行为分析
+# 可选值: true, false
+ENABLE_ANALYTICS=false
+
+# =============================================================================
+# 部署环境特定配置
+# =============================================================================
+
+# Vercel 部署配置
+# VERCEL_URL=your-vercel-url.vercel.app
+
+# Cloudflare Pages 部署配置
+# CF_PAGES_URL=your-project.pages.dev
+
+# Docker 部署配置
+# DOCKER_IMAGE_TAG=latest
+# DOCKER_CONTAINER_NAME=moontv
+
+# =============================================================================
+# 注意事项
+# =============================================================================
+
+# 1. 请根据实际部署环境修改相应的配置
+# 2. 敏感信息(如密码、密钥)请使用环境变量或密钥管理服务
+# 3. 生产环境请设置强密码和适当的访问控制
+# 4. 定期更新依赖包以修复安全漏洞
+# 5. 监控应用性能和错误日志
+# 6. 备份重要数据
+
+# =============================================================================
+# 配置验证
+# =============================================================================
+
+# 启动应用前请确保以下配置正确:
+# - PASSWORD 已设置(必填)
+# - 如果使用 Redis,REDIS_URL 已正确配置
+# - 如果使用 Upstash,UPSTASH_URL 和 UPSTASH_TOKEN 已配置
+# - 如果使用 D1,已在 Cloudflare Pages 中配置绑定
+# - 其他可选配置根据实际需求设置
\ No newline at end of file
diff --git a/.github/release.yml b/.github/release.yml
new file mode 100644
index 0000000..896a898
--- /dev/null
+++ b/.github/release.yml
@@ -0,0 +1,158 @@
+# GitHub Release 配置文件
+# 用于自动化版本发布管理
+
+# 发布标题模板
+name-template: 'v$RESOLVED_VERSION'
+# 发布标签模板
+tag-template: 'v$RESOLVED_VERSION'
+
+# 发布说明模板
+body-template: |
+ ## 🎉 新版本发布
+
+ **版本号**: $RESOLVED_VERSION
+ **发布日期**: $RELEASE_DATE
+
+ ### ✨ 新功能
+ $CHANGES
+
+ ### 🐛 修复
+ $FIXES
+
+ ### 🔧 改进
+ $IMPROVEMENTS
+
+ ### 📝 文档更新
+ $DOCS
+
+ ### 🚀 部署说明
+
+ #### Docker 部署
+ ```bash
+ docker pull ghcr.io/senshinya/moontv:v$RESOLVED_VERSION
+ docker run -d --name moontv -p 3000:3000 --env PASSWORD=your_password ghcr.io/senshinya/moontv:v$RESOLVED_VERSION
+ ```
+
+ #### 环境变量更新
+ 请查看 [README.md](README.md) 了解最新的环境变量配置。
+
+ ### 📋 完整更新日志
+ 查看 [CHANGELOG.md](CHANGELOG.md) 了解详细的更新历史。
+
+ ### 🔗 相关链接
+ - [项目主页](https://github.com/senshinya/moontv)
+ - [在线演示](https://moontv.vercel.app)
+ - [问题反馈](https://github.com/senshinya/moontv/issues)
+ - [功能建议](https://github.com/senshinya/moontv/discussions)
+
+# 发布配置
+prerelease: false
+draft: false
+
+# 文件包含规则
+include:
+ - 'dist/**/*'
+ - 'build/**/*'
+ - '*.tar.gz'
+ - '*.zip'
+
+# 排除规则
+exclude:
+ - 'node_modules/**/*'
+ - '*.log'
+ - '.git/**/*'
+ - '.github/**/*'
+ - 'tests/**/*'
+ - 'docs/**/*'
+
+# 标签配置
+categories:
+ - title: '🚀 新功能'
+ labels:
+ - 'feature'
+ - 'enhancement'
+ - title: '🐛 修复'
+ labels:
+ - 'fix'
+ - 'bugfix'
+ - title: '🔧 改进'
+ labels:
+ - 'improvement'
+ - 'refactor'
+ - title: '📝 文档'
+ labels:
+ - 'documentation'
+ - 'docs'
+ - title: '🧪 测试'
+ labels:
+ - 'test'
+ - 'testing'
+ - title: '🔨 构建'
+ labels:
+ - 'build'
+ - 'ci'
+ - 'deploy'
+
+# 模板配置
+template: |
+ ## 🎯 发布概述
+
+ 本次发布包含以下主要更新:
+
+ ### ✨ 新功能
+ - 新增观看历史记录功能,支持断点续播
+ - 集成豆瓣热门推荐系统
+ - 支持 PWA 安装和离线缓存
+ - 新增多用户权限管理系统
+
+ ### 🐛 问题修复
+ - 修复播放进度记录丢失问题
+ - 优化视频播放器兼容性
+ - 修复移动端响应式布局问题
+
+ ### 🔧 性能优化
+ - 优化搜索接口响应速度
+ - 改进缓存策略,减少重复请求
+ - 优化数据库查询性能
+
+ ### 📱 用户体验
+ - 新增深色模式支持
+ - 优化移动端操作体验
+ - 改进错误提示和加载状态
+
+ ## 🚀 快速开始
+
+ 1. **Docker 部署**(推荐)
+ ```bash
+ docker pull ghcr.io/senshinya/moontv:v$RESOLVED_VERSION
+ docker run -d --name moontv -p 3000:3000 --env PASSWORD=your_password ghcr.io/senshinya/moontv:v$RESOLVED_VERSION
+ ```
+
+ 2. **Vercel 部署**
+ - Fork 本仓库
+ - 在 Vercel 中导入项目
+ - 设置环境变量 PASSWORD
+ - 自动部署完成
+
+ 3. **Cloudflare Pages 部署**
+ - Fork 本仓库
+ - 在 Cloudflare Pages 中导入项目
+ - 设置构建命令:`pnpm run pages:build`
+ - 配置环境变量
+
+ ## 📋 环境变量
+
+ | 变量 | 说明 | 默认值 |
+ |------|------|--------|
+ | PASSWORD | 访问密码 | 必填 |
+ | NEXT_PUBLIC_STORAGE_TYPE | 存储类型 | localstorage |
+ | USERNAME | 管理员账号 | 空 |
+
+ 更多环境变量请查看 [README.md](README.md)
+
+ ## 🔗 相关资源
+
+ - [项目文档](https://github.com/senshinya/moontv#readme)
+ - [问题反馈](https://github.com/senshinya/moontv/issues)
+ - [功能讨论](https://github.com/senshinya/moontv/discussions)
+ - [贡献指南](https://github.com/senshinya/moontv/blob/main/CONTRIBUTING.md)
\ No newline at end of file
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
new file mode 100644
index 0000000..f85eb63
--- /dev/null
+++ b/.github/workflows/release.yml
@@ -0,0 +1,276 @@
+name: Release
+
+on:
+ push:
+ tags:
+ - 'v*'
+
+jobs:
+ release:
+ runs-on: ubuntu-latest
+ permissions:
+ contents: write
+ packages: write
+ discussions: write
+ issues: write
+
+ steps:
+ - name: Checkout code
+ uses: actions/checkout@v4
+ with:
+ fetch-depth: 0
+ token: ${{ secrets.GITHUB_TOKEN }}
+
+ - name: Setup Node.js
+ uses: actions/setup-node@v4
+ with:
+ node-version: '18'
+ cache: 'npm'
+
+ - name: Setup pnpm
+ uses: pnpm/action-setup@v2
+ with:
+ version: 8
+
+ - name: Install dependencies
+ run: pnpm install --frozen-lockfile
+
+ - name: Build project
+ run: pnpm run build
+ env:
+ PASSWORD: ${{ secrets.PASSWORD }}
+
+ - name: Create Release
+ uses: softprops/action-gh-release@v1
+ with:
+ files: |
+ .next/**/*
+ public/**/*
+ package.json
+ README.md
+ CHANGELOG.md
+ LICENSE
+ config.json
+ next.config.js
+ tailwind.config.ts
+ tsconfig.json
+ Dockerfile
+ vercel.json
+ generate_release_notes: true
+ draft: false
+ prerelease: false
+ title: '🎉 Release ${{ github.ref_name }}'
+ body: |
+ ## 🎉 新版本发布
+
+ **版本号**: ${{ github.ref_name }}
+ **发布日期**: ${{ github.event.head_commit.timestamp }}
+
+ ### 🚀 快速开始
+
+ #### Docker 部署(推荐)
+ ```bash
+ docker pull ghcr.io/senshinya/moontv:${{ github.ref_name }}
+ docker run -d --name moontv -p 3000:3000 --env PASSWORD=your_password ghcr.io/senshinya/moontv:${{ github.ref_name }}
+ ```
+
+ #### Vercel 部署
+ - Fork 本仓库
+ - 在 Vercel 中导入项目
+ - 设置环境变量 PASSWORD
+ - 自动部署完成
+
+ #### Cloudflare Pages 部署
+ - Fork 本仓库
+ - 在 Cloudflare Pages 中导入项目
+ - 设置构建命令:`pnpm run pages:build`
+ - 配置环境变量
+
+ ### 📋 环境变量
+
+ | 变量 | 说明 | 默认值 |
+ |------|------|--------|
+ | PASSWORD | 访问密码 | 必填 |
+ | NEXT_PUBLIC_STORAGE_TYPE | 存储类型 | localstorage |
+ | USERNAME | 管理员账号 | 空 |
+
+ 更多环境变量请查看 [README.md](README.md)
+
+ ### 🔗 相关资源
+
+ - [项目文档](https://github.com/senshinya/moontv#readme)
+ - [问题反馈](https://github.com/senshinya/moontv/issues)
+ - [功能讨论](https://github.com/senshinya/moontv/discussions)
+ - [贡献指南](https://github.com/senshinya/moontv/blob/main/CONTRIBUTING.md)
+
+ ### 📝 更新日志
+
+ 查看 [CHANGELOG.md](CHANGELOG.md) 了解详细的更新历史。
+
+ ---
+
+ **注意**: 本项目仅供学习和个人使用,请遵守当地法律法规。
+
+ - name: Build and Push Docker Image
+ uses: docker/build-push-action@v5
+ with:
+ context: .
+ push: true
+ tags: |
+ ghcr.io/senshinya/moontv:${{ github.ref_name }}
+ ghcr.io/senshinya/moontv:latest
+ cache-from: type=gha
+ cache-to: type=gha,mode=max
+ platforms: linux/amd64,linux/arm64
+
+ - name: Update Release with Docker Info
+ uses: softprops/action-gh-release@v1
+ with:
+ body: |
+ ## 🎉 新版本发布
+
+ **版本号**: ${{ github.ref_name }}
+ **发布日期**: ${{ github.event.head_commit.timestamp }}
+
+ ### 🐳 Docker 镜像
+
+ Docker 镜像已自动构建并推送到 GitHub Container Registry:
+
+ ```bash
+ # 拉取指定版本
+ docker pull ghcr.io/senshinya/moontv:${{ github.ref_name }}
+
+ # 拉取最新版本
+ docker pull ghcr.io/senshinya/moontv:latest
+
+ # 运行容器
+ docker run -d --name moontv -p 3000:3000 --env PASSWORD=your_password ghcr.io/senshinya/moontv:${{ github.ref_name }}
+ ```
+
+ ### 🚀 其他部署方式
+
+ #### Vercel 部署
+ - Fork 本仓库
+ - 在 Vercel 中导入项目
+ - 设置环境变量 PASSWORD
+ - 自动部署完成
+
+ #### Cloudflare Pages 部署
+ - Fork 本仓库
+ - 在 Cloudflare Pages 中导入项目
+ - 设置构建命令:`pnpm run pages:build`
+ - 配置环境变量
+
+ ### 📋 环境变量
+
+ | 变量 | 说明 | 默认值 |
+ |------|------|--------|
+ | PASSWORD | 访问密码 | 必填 |
+ | NEXT_PUBLIC_STORAGE_TYPE | 存储类型 | localstorage |
+ | USERNAME | 管理员账号 | 空 |
+
+ 更多环境变量请查看 [README.md](README.md)
+
+ ### 🔗 相关资源
+
+ - [项目文档](https://github.com/senshinya/moontv#readme)
+ - [问题反馈](https://github.com/senshinya/moontv/issues)
+ - [功能讨论](https://github.com/senshinya/moontv/discussions)
+ - [贡献指南](https://github.com/senshinya/moontv/blob/main/CONTRIBUTING.md)
+
+ ### 📝 更新日志
+
+ 查看 [CHANGELOG.md](CHANGELOG.md) 了解详细的更新历史。
+
+ ---
+
+ **注意**: 本项目仅供学习和个人使用,请遵守当地法律法规。
+ update_existing_release: true
+
+ - name: Create Discussion
+ uses: actions/github-script@v7
+ with:
+ script: |
+ const { data: discussions } = await github.rest.discussions.create({
+ owner: context.repo.owner,
+ repo: context.repo.repo,
+ title: `🎉 ${context.ref_name} 版本发布讨论`,
+ body: `## 🎉 ${context.ref_name} 版本发布成功!
+
+ 新版本已成功发布,包含以下更新:
+
+ ### 🚀 主要特性
+ - 观看历史记录功能
+ - 多源聚合搜索
+ - PWA 支持
+ - 深色模式
+ - 多用户系统
+
+ ### 🐳 Docker 部署
+ \`\`\`bash
+ docker pull ghcr.io/senshinya/moontv:${context.ref_name}
+ docker run -d --name moontv -p 3000:3000 --env PASSWORD=your_password ghcr.io/senshinya/moontv:${context.ref_name}
+ \`\`\`
+
+ ### 📋 环境变量
+ | 变量 | 说明 | 默认值 |
+ |------|------|--------|
+ | PASSWORD | 访问密码 | 必填 |
+ | NEXT_PUBLIC_STORAGE_TYPE | 存储类型 | localstorage |
+ | USERNAME | 管理员账号 | 空 |
+
+ ### 🔗 相关链接
+ - [Release 页面](https://github.com/${context.repo.owner}/${context.repo.repo}/releases/tag/${context.ref_name})
+ - [项目文档](https://github.com/${context.repo.owner}/${context.repo.repo}#readme)
+ - [问题反馈](https://github.com/${context.repo.owner}/${context.repo.repo}/issues)
+
+ ---
+
+ 欢迎在此讨论新版本的使用体验、问题反馈和功能建议!
+
+ **注意**: 本项目仅供学习和个人使用,请遵守当地法律法规。`,
+ category: 'ANNOUNCEMENT'
+ });
+
+ console.log(`Discussion created: ${discussions.html_url}`);
+
+ - name: Comment on Issues
+ uses: actions/github-script@v7
+ with:
+ script: |
+ // 查找与当前版本相关的 issue
+ const { data: issues } = await github.rest.issues.listForRepo({
+ owner: context.repo.owner,
+ repo: context.repo.repo,
+ state: 'open',
+ labels: ['enhancement', 'bug', 'feature']
+ });
+
+ // 在相关 issue 下添加评论
+ for (const issue of issues) {
+ if (issue.title.toLowerCase().includes('release') ||
+ issue.title.toLowerCase().includes('version') ||
+ issue.body?.toLowerCase().includes('release') ||
+ issue.body?.toLowerCase().includes('version')) {
+
+ await github.rest.issues.createComment({
+ owner: context.repo.owner,
+ repo: context.repo.repo,
+ issue_number: issue.number,
+ body: `🎉 好消息!${context.ref_name} 版本已经发布,可能解决了您提到的问题。
+
+ 请查看 [Release 页面](https://github.com/${context.repo.owner}/${context.repo.repo}/releases/tag/${context.ref_name}) 了解详细更新内容。
+
+ 如果问题仍然存在,请提供更多详细信息,我们会继续关注。`
+ });
+
+ console.log(`Commented on issue #${issue.number}`);
+ }
+ }
+
+ - name: Notify Success
+ run: |
+ echo "🎉 Release ${{ github.ref_name }} 发布成功!"
+ echo "📦 Docker 镜像: ghcr.io/senshinya/moontv:${{ github.ref_name }}"
+ echo "🔗 Release 页面: https://github.com/${{ github.repository }}/releases/tag/${{ github.ref_name }}"
+ echo "📝 更新日志: https://github.com/${{ github.repository }}/blob/main/CHANGELOG.md"
\ No newline at end of file
diff --git a/CHANGELOG.md b/CHANGELOG.md
new file mode 100644
index 0000000..09f3d1d
--- /dev/null
+++ b/CHANGELOG.md
@@ -0,0 +1,94 @@
+# 更新日志
+
+本文档记录了 MoonTV 项目的所有重要更改。
+
+## [未发布]
+
+### 计划中
+- 弹幕系统支持
+- 字幕文件支持
+- 下载功能
+- 社交分享功能
+- 用户评分系统
+
+## [0.1.0] - 2025-01-XX
+
+### ✨ 新功能
+- 🎬 多源聚合搜索系统,集成20+个免费资源站点
+- 📺 观看历史记录功能,支持断点续播和多设备同步
+- ❤️ 收藏系统,支持个性化片单管理
+- 👥 多用户系统,支持用户注册、登录和权限管理
+- 🌗 深色模式支持,自动跟随系统主题切换
+- 📱 PWA 支持,可安装到桌面,支持离线缓存
+- 🎯 豆瓣集成,提供热门电影、电视剧、综艺推荐
+- 🔍 智能搜索,支持分类筛选和结果去重
+
+### 🎨 用户界面
+- 响应式设计,完美适配桌面和移动端
+- 现代化 UI 设计,基于 Tailwind CSS 构建
+- 流畅的动画效果,使用 Framer Motion
+- 移动端底部导航栏,优化触摸操作体验
+- 视频卡片进度条显示,直观展示观看进度
+
+### 🚀 技术特性
+- 基于 Next.js 14 App Router 构建
+- TypeScript 4.x 类型安全
+- 多种存储后端支持:localStorage、Redis、Cloudflare D1、Upstash
+- 视频播放器集成:ArtPlayer + HLS.js
+- 自动广告跳过功能
+- 智能缓存策略
+
+### 🔧 性能优化
+- 接口缓存机制,减少重复请求
+- 图片懒加载和占位符
+- 代码分割和动态导入
+- 数据库查询优化
+
+### 📱 移动端优化
+- 触摸友好的操作界面
+- 移动端专用底部导航
+- 响应式图片和布局
+- 触摸手势支持
+
+### 🐛 问题修复
+- 修复播放进度记录丢失问题
+- 优化视频播放器兼容性
+- 修复移动端响应式布局问题
+- 改进错误处理和用户提示
+
+### 📚 文档
+- 完整的 README.md 文档
+- 详细的部署指南
+- 环境变量配置说明
+- Docker 部署最佳实践
+
+## 部署说明
+
+### 支持的平台
+- ✅ Docker(推荐)
+- ✅ Vercel
+- ✅ Cloudflare Pages
+- ✅ 自托管服务器
+
+### 存储后端
+- ✅ localStorage(默认,单用户)
+- ✅ Redis(多用户,数据同步)
+- ✅ Cloudflare D1(多用户,数据同步)
+- ✅ Upstash Redis(多用户,数据同步)
+
+### 环境要求
+- Node.js 18+
+- pnpm 8+
+- 现代浏览器支持
+
+## 贡献指南
+
+我们欢迎所有形式的贡献!请查看 [CONTRIBUTING.md](CONTRIBUTING.md) 了解如何参与项目开发。
+
+## 许可证
+
+本项目采用 [MIT 许可证](LICENSE)。
+
+---
+
+**注意**: 本项目仅供学习和个人使用,请遵守当地法律法规,不要用于商业用途或公开服务。
\ No newline at end of file
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
new file mode 100644
index 0000000..9fc39be
--- /dev/null
+++ b/CONTRIBUTING.md
@@ -0,0 +1,376 @@
+# 贡献指南
+
+感谢您对 MoonTV 项目的关注!我们欢迎所有形式的贡献,包括但不限于:
+
+- 🐛 报告 Bug
+- 💡 提出新功能建议
+- 📝 改进文档
+- 🔧 提交代码修复
+- 🎨 改进用户界面
+- 🧪 编写测试用例
+
+## 🚀 快速开始
+
+### 环境要求
+
+- Node.js 18+
+- pnpm 8+
+- Git
+
+### 本地开发设置
+
+1. **Fork 项目**
+ ```bash
+ # 在 GitHub 上 Fork 本仓库
+ # 然后克隆到本地
+ git clone https://github.com/YOUR_USERNAME/moontv.git
+ cd moontv
+ ```
+
+2. **安装依赖**
+ ```bash
+ pnpm install
+ ```
+
+3. **环境配置**
+ ```bash
+ # 复制环境变量文件
+ cp .env.example .env.local
+
+ # 编辑环境变量
+ nano .env.local
+ ```
+
+4. **启动开发服务器**
+ ```bash
+ pnpm dev
+ ```
+
+5. **访问应用**
+ 打开浏览器访问 `http://localhost:3000`
+
+## 📋 开发规范
+
+### 代码风格
+
+我们使用以下工具来保持代码质量:
+
+- **ESLint** - 代码质量检查
+- **Prettier** - 代码格式化
+- **TypeScript** - 类型安全
+- **Husky** - Git hooks
+
+### 代码检查
+
+```bash
+# 检查代码质量
+pnpm lint
+
+# 自动修复代码问题
+pnpm lint:fix
+
+# 类型检查
+pnpm typecheck
+
+# 运行测试
+pnpm test
+```
+
+### Git 提交规范
+
+我们使用 [Conventional Commits](https://www.conventionalcommits.org/) 规范:
+
+```bash
+# 功能开发
+git commit -m "feat: 添加观看历史记录功能"
+
+# Bug 修复
+git commit -m "fix: 修复播放进度记录丢失问题"
+
+# 文档更新
+git commit -m "docs: 更新 README.md 部署说明"
+
+# 代码重构
+git commit -m "refactor: 重构数据库存储层"
+
+# 性能优化
+git commit -m "perf: 优化搜索接口响应速度"
+
+# 测试相关
+git commit -m "test: 添加播放记录 API 测试用例"
+```
+
+### 分支管理
+
+- `main` - 主分支,用于生产环境
+- `develop` - 开发分支,用于功能集成
+- `feature/*` - 功能分支,用于开发新功能
+- `bugfix/*` - 修复分支,用于修复 Bug
+- `hotfix/*` - 热修复分支,用于紧急修复
+
+## 🎯 贡献流程
+
+### 1. 报告 Bug
+
+在提交 Bug 报告之前,请:
+
+1. 搜索现有的 [Issues](https://github.com/senshinya/moontv/issues)
+2. 检查是否已有相关报告
+3. 使用 Bug 报告模板
+
+**Bug 报告模板:**
+
+```markdown
+## Bug 描述
+简要描述 Bug 的现象
+
+## 重现步骤
+1. 打开应用
+2. 执行操作 A
+3. 执行操作 B
+4. 观察结果
+
+## 预期行为
+描述期望的正确行为
+
+## 实际行为
+描述实际发生的错误行为
+
+## 环境信息
+- 操作系统:Windows 11 / macOS 14 / Ubuntu 22.04
+- 浏览器:Chrome 120 / Firefox 121 / Safari 17
+- 设备:桌面 / 移动端
+- 存储类型:localStorage / Redis / D1 / Upstash
+
+## 截图/日志
+如果适用,请提供截图或错误日志
+
+## 其他信息
+任何其他相关信息
+```
+
+### 2. 功能建议
+
+在提出功能建议之前,请:
+
+1. 搜索现有的 [Discussions](https://github.com/senshinya/moontw/discussions)
+2. 检查是否已有相关讨论
+3. 使用功能建议模板
+
+**功能建议模板:**
+
+```markdown
+## 功能描述
+简要描述您希望添加的功能
+
+## 使用场景
+描述在什么情况下这个功能会很有用
+
+## 实现建议
+如果有的话,提供实现思路或技术建议
+
+## 替代方案
+描述是否已有其他方式可以实现类似功能
+
+## 优先级
+- [ ] 高 - 核心功能,影响用户体验
+- [ ] 中 - 有用功能,但不是必需的
+- [ ] 低 - 锦上添花的功能
+
+## 其他信息
+任何其他相关信息
+```
+
+### 3. 代码贡献
+
+#### 提交 Pull Request
+
+1. **创建功能分支**
+ ```bash
+ git checkout -b feature/your-feature-name
+ ```
+
+2. **开发功能**
+ - 编写代码
+ - 添加测试用例
+ - 更新文档
+
+3. **代码检查**
+ ```bash
+ pnpm lint
+ pnpm typecheck
+ pnpm test
+ ```
+
+4. **提交代码**
+ ```bash
+ git add .
+ git commit -m "feat: 添加新功能描述"
+ ```
+
+5. **推送分支**
+ ```bash
+ git push origin feature/your-feature-name
+ ```
+
+6. **创建 Pull Request**
+ - 在 GitHub 上创建 PR
+ - 使用 PR 模板
+ - 等待代码审查
+
+#### Pull Request 模板
+
+```markdown
+## 变更描述
+简要描述本次 PR 的变更内容
+
+## 变更类型
+- [ ] Bug 修复
+- [ ] 新功能
+- [ ] 文档更新
+- [ ] 代码重构
+- [ ] 性能优化
+- [ ] 测试相关
+- [ ] 其他
+
+## 测试
+- [ ] 本地测试通过
+- [ ] 添加了新的测试用例
+- [ ] 所有测试用例通过
+
+## 检查清单
+- [ ] 代码符合项目规范
+- [ ] 更新了相关文档
+- [ ] 添加了必要的注释
+- [ ] 没有引入新的警告
+- [ ] 测试覆盖率没有降低
+
+## 相关 Issue
+关联的 Issue 编号:#123
+
+## 截图
+如果涉及 UI 变更,请提供截图
+
+## 其他信息
+任何其他相关信息
+```
+
+## 🧪 测试指南
+
+### 运行测试
+
+```bash
+# 运行所有测试
+pnpm test
+
+# 监听模式运行测试
+pnpm test:watch
+
+# 生成测试覆盖率报告
+pnpm test:coverage
+```
+
+### 编写测试
+
+我们使用 Jest 作为测试框架:
+
+```typescript
+import { render, screen } from '@testing-library/react';
+import { VideoCard } from '@/components/VideoCard';
+
+describe('VideoCard', () => {
+ it('应该正确显示视频标题', () => {
+ const mockProps = {
+ id: 'test-id',
+ title: '测试视频',
+ poster: '/test-poster.jpg',
+ year: '2024',
+ source: 'test-source',
+ source_name: '测试源'
+ };
+
+ render(