一个轻量级的在线留言墙应用,用户可以匿名或署名发布留言,所有留言以卡片墙形式展示。
- 前端框架:Next.js 15 + TypeScript
- 样式方案:Tailwind CSS v4
- 数据库:Supabase(PostgreSQL)
- 测试框架:Vitest + React Testing Library
- 部署托管:Vercel
- 📝 匿名/署名发布留言
- 📱 响应式布局,适配桌面和移动端
- ❤️ 点赞功能(防重复点赞)
- 🔄 分页加载更多
- 🎨 随机头像生成
- 📌 置顶留言支持
git clone https://github.com/gqy20/note_wall.git
cd note_wallnpm install复制 .env.example 为 .env.local,填入 Supabase 凭据:
cp .env.example .env.localNEXT_PUBLIC_SUPABASE_URL=your_supabase_url
NEXT_PUBLIC_SUPABASE_ANON_KEY=your_supabase_anon_key
在 Supabase SQL Editor 中执行 supabase/migrations/001_create_messages_table.sql,或使用 CLI:
supabase link --project-ref your_project_ref
supabase db pushnpm run dev访问 http://localhost:3000 查看效果。
# 运行测试
npm test
# 单次运行
npm run test:run- 将代码推送到 GitHub
- 在 Vercel 中导入项目
- 配置环境变量(
NEXT_PUBLIC_SUPABASE_URL、NEXT_PUBLIC_SUPABASE_ANON_KEY) - 自动构建部署
或使用 CLI:
vercelsrc/
├── app/ # Next.js App Router
│ ├── layout.tsx # 根布局
│ ├── page.tsx # 首页
│ └── globals.css # 全局样式
├── components/ # UI 组件
│ ├── MessageWall.tsx # 留言墙主组件
│ ├── MessageCard.tsx # 留言卡片
│ └── MessageForm.tsx # 发布表单
├── services/
│ └── messageService.ts # Supabase 数据服务
├── lib/
│ └── supabase.ts # Supabase 客户端
├── types/
│ └── message.ts # 类型定义
└── __tests__/ # 测试文件
├── services/ # 服务层测试
└── components/ # 组件测试
MIT