一个基于 Next.js 16 构建的现代化社交媒体应用,类似于 Threads,支持用户发布帖子、加入社区、互动交流等功能。
- 用户认证:登录、注册、引导流程
- 帖子管理:创建、查看、删除帖子,支持回复功能
- 社区系统:创建社区、加入社区、管理社区成员
- 用户资料:个人资料查看和编辑
- 活动中心:查看互动活动
- 搜索功能:搜索用户和社区
- 文件上传:支持图片上传
- 现代化架构:Next.js 16 App Router, React 19, TypeScript
- 响应式设计:Tailwind CSS 构建的响应式界面
- 数据库集成:MongoDB + Mongoose
- 认证系统:Clerk 认证解决方案
- UI 组件:Radix UI + Lucide React 图标
- 表单处理:React Hook Form + Zod 验证
- 文件上传:UploadThing 集成
- 服务器操作:Next.js Server Actions
- Next.js 16
- React 19
- TypeScript
- Tailwind CSS
- Radix UI
- Lucide React
- React Hook Form
- Zod
- Next.js API Routes
- MongoDB (Mongoose)
- Clerk Authentication
- UploadThing
- Node.js 18+
- MongoDB 数据库
- Clerk 账户
- UploadThing 账户
-
克隆项目
git clone https://github.com/yourusername/threads.git cd threads -
安装依赖
npm install
-
配置环境变量 创建
.env.local文件并添加以下内容:# MongoDB MONGODB_URI=your_mongodb_connection_string # Clerk NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY=your_clerk_publishable_key CLERK_SECRET_KEY=your_clerk_secret_key CLERK_SIGN_IN_URL=/sign-in CLERK_SIGN_UP_URL=/sign-up CLERK_AFTER_SIGN_IN_URL=/ CLERK_AFTER_SIGN_UP_URL=/onboarding # UploadThing UPLOADTHING_SECRET=your_uploadthing_secret UPLOADTHING_APP_ID=your_uploadthing_app_id
-
运行开发服务器
npm run dev
-
构建生产版本
npm run build npm start
├── app/ # Next.js App Router 路由和页面
│ ├── (auth)/ # 认证相关页面
│ ├── (root)/ # 主应用页面
│ ├── api/ # API 路由
│ └── globals.css # 全局样式
├── components/ # UI 组件
│ ├── cards/ # 卡片组件
│ ├── forms/ # 表单组件
│ ├── shared/ # 共享组件
│ └── ui/ # 基础 UI 组件
├── constants/ # 常量定义
├── lib/ # 工具库
│ ├── actions/ # 服务器操作
│ ├── models/ # MongoDB 模型
│ ├── validations/ # 数据验证
│ └── mongoose.ts # MongoDB 连接
├── public/ # 静态资源
└── package.json # 项目配置
-
基础 UI 组件 (
components/ui/)- 纯 UI 组件,无业务逻辑
- 可复用的原子组件
- 示例:按钮、输入框、标签等
-
卡片组件 (
components/cards/)- 展示型组件,用于显示数据
- 包含用户卡片、帖子卡片、社区卡片
-
表单组件 (
components/forms/)- 处理用户输入的组件
- 包含表单验证和提交逻辑
-
共享组件 (
components/shared/)- 应用中多处使用的组件
- 包含导航栏、侧边栏、分页等
- 从页面开始:查看
app/目录下的页面组件,了解整体结构 - 分析共享组件:查看
components/shared/中的导航和布局组件 - 理解卡片组件:查看
components/cards/中的数据展示组件 - 研究表单组件:查看
components/forms/中的用户输入处理 - 探索基础 UI:查看
components/ui/中的基础构建块
- 功能:显示用户个人资料信息
- 参数:accountId, authUserId, name, username, imgUrl, bio
- 使用场景:用户个人资料页面顶部
- 功能:显示帖子列表,支持不同类型的帖子筛选
- 参数:currentUserId, accountId, accountType
- 使用场景:用户资料页面和社区页面
- 功能:创建新帖子的表单
- 使用场景:首页和创建帖子页面
- 功能:显示社区信息卡片
- 参数:community 对象
- 使用场景:社区列表页面
服务器操作位于 lib/actions/ 目录,用于处理后端逻辑:
- user.action.ts:用户相关操作(获取用户信息、更新用户资料、获取用户帖子等)
- thread.action.ts:帖子相关操作(创建帖子、获取帖子、删除帖子、添加评论等)
- community.action.ts:社区相关操作(创建社区、获取社区、管理成员等)
数据模型位于 lib/models/ 目录:
- user.model.ts:用户模型,包含用户基本信息、帖子和社区关联
- thread.model.ts:帖子模型,包含帖子内容、作者、社区、回复等
- community.model.ts:社区模型,包含社区信息、创建者、成员和帖子
- 使用 TypeScript 类型定义
- 组件使用 PascalCase 命名
- 文件使用 kebab-case 命名
- 使用 Tailwind CSS 进行样式设计
- 服务器操作使用
"use server"指令
- 在
app/目录创建新的路由 - 在
components/目录创建相关组件 - 在
lib/actions/目录添加服务器操作 - 在
lib/models/目录更新数据模型(如需)
- 使用
npm run dev启动开发服务器 - 访问
http://localhost:3000查看应用 - 使用浏览器开发者工具调试前端
- 查看终端输出调试后端 API
- 连接 GitHub 仓库到 Vercel
- 配置环境变量(同
.env.local) - 点击部署按钮
- 构建项目:
npm run build - 启动应用:
npm start - 确保环境变量正确配置
MIT License
欢迎提交 Issue 和 Pull Request!
如有问题,请通过 GitHub Issues 联系。