一个基于 Next.js、Supabase、HeroUI 和 Tailwind CSS 构建的现代化想法记录平台。
- ✅ 用户注册和登录
- ✅ 发布想法(支持 Markdown 格式)
- ✅ 想法状态管理(准备做、正在做、做完了、放弃了)
- ✅ 可见性控制(公开/私有)
- ✅ 点赞和点踩功能
- ✅ 嵌套评论系统(支持回复评论)
- ✅ 多种排序方式(发布时间、更新时间、点赞数、评论数)
- ✅ 个人资料编辑
- ✅ 查看自己的所有想法
- ✅ 超级管理员面板
- ✅ 系统统计概览
- ✅ 查看最近的想法和用户
- 前端框架: Next.js 15.1.3 (App Router)
- UI 库: HeroUI 2.8.5
- 样式: Tailwind CSS 3
- 后端: Supabase (PostgreSQL + Auth + RLS)
- 语言: TypeScript
- React: 18.3.1
- Markdown 渲染: react-markdown
- 日期处理: date-fns
- 图标: lucide-react
git clone <repository-url>
cd featurenpm install创建 .env.local 文件(参考 .env.example):
NEXT_PUBLIC_SUPABASE_URL=your-supabase-project-url
NEXT_PUBLIC_SUPABASE_ANON_KEY=your-supabase-anon-key- 在 Supabase 创建新项目
- 在 SQL Editor 中执行
supabase/schema.sql文件中的 SQL 语句 - 这将创建:
featureschema(自定义 schema)- 所需的表、视图、触发器和 RLS 策略
注意:本项目使用 feature schema 而非默认的 public schema。
首次部署后,你需要手动将某个用户设置为超级管理员:
- 注册一个账户
- 在 Supabase Dashboard 的 Table Editor 中找到
profiles表 - 找到你的用户记录,将
role字段从user改为super_admin
npm run dev访问 http://localhost:3000 查看应用。
├── app/ # Next.js App Router 页面
│ ├── admin/ # 管理员面板
│ ├── auth/ # 认证页面(登录/注册)
│ ├── ideas/ # 想法相关页面
│ ├── profile/ # 个人资料页面
│ ├── layout.tsx # 根布局
│ ├── page.tsx # 首页
│ └── providers.tsx # 全局 Providers
├── components/ # React 组件
│ ├── comment-section.tsx # 评论组件
│ ├── idea-actions.tsx # 想法操作组件
│ ├── idea-card.tsx # 想法卡片
│ ├── markdown-renderer.tsx # Markdown 渲染器
│ ├── navbar.tsx # 导航栏
│ ├── status-badge.tsx # 状态徽章
│ └── vote-buttons.tsx # 投票按钮
├── lib/ # 工具库
│ ├── supabase/ # Supabase 客户端
│ └── utils.ts # 工具函数
├── types/ # TypeScript 类型定义
│ └── database.types.ts # 数据库类型
├── supabase/ # Supabase 配置
│ └── schema.sql # 数据库模式
├── middleware.ts # Next.js 中间件(路由保护)
└── tailwind.config.ts # Tailwind 配置
使用自定义 schema: feature
- feature.profiles: 用户资料(扩展 auth.users)
- feature.ideas: 想法内容
- feature.idea_votes: 投票记录
- feature.comments: 评论(支持嵌套)
- feature.ideas_with_stats: 包含统计信息的想法视图(点赞数、评论数等)
所有表都启用了行级安全策略(RLS),确保:
- 用户只能编辑自己的内容
- 私有想法只有作者可见
- 公开内容所有人可见
# 本地构建测试
npm run build
# 启动生产服务器
npm start- 将代码推送到 GitHub
- 在 Vercel 导入项目
- 配置环境变量:
NEXT_PUBLIC_SUPABASE_URLNEXT_PUBLIC_SUPABASE_ANON_KEY
- 部署(自动检测 Next.js 配置)
参考 SOLUTION_FINAL.md 中的 Docker 配置。
本项目是标准的 Next.js 应用,可以部署到任何支持 Node.js 的平台。
注意: 项目使用 Next.js 15.1.3 以确保与 HeroUI 的兼容性。
- 如需数据库更改,更新
supabase/schema.sql - 更新
types/database.types.ts中的类型定义 - 创建或修改组件和页面
- 确保遵循 RLS 策略
- 使用 TypeScript 进行类型安全
- 组件使用 Server Components(除非需要客户端交互)
- 遵循 Next.js 13+ App Router 最佳实践
Q: 如何更改用户角色?
A: 在 Supabase Dashboard 的 profiles 表中手动修改 role 字段。
Q: 为什么看不到管理员面板?
A: 确保你的用户 role 设置为 super_admin。
Q: 如何自定义状态选项?
A: 修改 lib/utils.ts 中的 STATUS_LABELS 和 STATUS_COLORS,同时更新数据库约束。
MIT
欢迎提交 Issue 和 Pull Request!