议程策划人
协作式议程规划器——创建时间安排的计划,通过链接共享,并使用基于角色的权限和评论进行协作。
堆栈
| 图层 | 技术 |
|---|---|
| 前端 | Next.js 14(应用路由器),TypeScript,顺风CSS |
| 后端 | Go、chi路由器、原始SQL |
| 数据库 | PostgreSQL 16 |
| Auth | Supabase(电子邮件/密码+OAuth) |
| MCP服务器 | TypeScript, @modelcontextprotocol/sdk |
特性
- 创建和管理带有时间段项目(日期、开始/结束时间、地点、描述)的议程
- 周条导航——圆点表示有项目的日子
- 通过令牌链接与共享议程
view,comment,或edit许可 - 基于角色的成员:
viewer,commenter,editor - 对每个议程项目的内联评论
- MCP服务器——通过工具调用连接Claude或任何兼容MCP的代理来管理议程
本地开发
先决条件
- Docker+Docker组合
- Node.js 20+
- 转到1.22+
设置
git clone https://github.com/YOUR_USERNAME/agenda-planner.git
cd agenda-planner
cp .env.example .env编辑 .env 使用您的Supabase凭据(SUPABASE_URL, SUPABASE_ANON_KEY, SUPABASE_JWT_SECRET).
docker compose up- 前端:http://localhost:3000
- 后端API:http://localhost:8080
迁移在首次启动数据库时自动运行。
数据库(Supabase)
要使用Supabase作为数据库而不是本地Docker PostgreSQL:
- Supabase仪表板→ SQL 编辑器→ run
infra/migrations/001_init.sql - 集
DATABASE_URL到您的Supabase连接字符串:
postgresql://postgres:[PASSWORD]@db.your-project.supabase.co:5432/postgres?sslmode=requireMCP 服务器
让Claude(或任何兼容MCP的代理)通过工具调用管理议程。
工具: list_agendas, create_agenda, get_agenda, create_item, update_item, delete_item, list_comments, create_comment, delete_comment
cd mcp && npm install
SUPABASE_URL=... SUPABASE_ANON_KEY=... SUPABASE_EMAIL=... SUPABASE_PASSWORD=... npx tsx scripts/get-token.ts添加 ~/.claude/settings.json:
{
"mcpServers": {
"agenda-planner": {
"command": "npx",
"args": ["tsx", "/absolute/path/to/mcp/src/index.ts"],
"env": {
"AGENDA_API_URL": "http://localhost:8080",
"SUPABASE_URL": "https://your-project.supabase.co",
"SUPABASE_ANON_KEY": "your-anon-key",
"SUPABASE_REFRESH_TOKEN": "your-refresh-token"
}
}
}
}项目结构
├── backend/ # Go REST API
│ ├── cmd/api/ # Entry point
│ └── internal/
│ ├── handlers/ # HTTP handlers
│ ├── middleware/ # JWT auth
│ ├── models/ # Domain structs + DTOs
│ └── db/ # Connection pool
├── frontend/ # Next.js app
│ ├── app/ # App Router pages
│ ├── components/ # WeekStrip, CommentThread, ShareModal, TopNav
│ └── lib/ # API client, Supabase client
├── mcp/ # MCP server
│ ├── src/ # index.ts + api-client.ts
│ └── scripts/ # get-token.ts
├── infra/migrations/ # SQL schema
└── docker-compose.ymlAPI
所有端点都需要 Authorization: Bearer 除了 /share/:token.
| 方法 | 路径 | 描述 |
|---|---|---|
POST | /auth/sync | Upster Supabase用户 |
GET | /agendas | 列出你的议程 |
POST | /agendas | 创建议程 |
GET | /agendas/:id | 获取包含项目的议程 |
PATCH | /agendas/:id | 更新议程 |
DELETE | /agendas/:id | 删除议程(仅限所有者) |
POST | /agendas/:id/items | 添加项目 |
PATCH | /agendas/:id/items/:itemId | 更新项目 |
DELETE | /agendas/:id/items/:itemId | 删除项目 |
POST | /agendas/:id/share | 创建共享令牌 |
GET | /share/:token | 解析共享(无身份验证) |
GET | /agendas/:id/members | 列出成员 |
PATCH | /agendas/:id/members/:userId | 更新成员角色 |
GET | /items/:itemId/comments | 列出评论 |
POST | /items/:itemId/comments | 添加评论 |
DELETE | /comments/:commentId | 删除评论 |
