协作日程规划工具

一款协作式日程规划工具,支持创建时间槽计划、通过链接分享以及基于角色的权限和评论协作。

  • by PuvaanRaaj
  • TypeScript
  • 本地部署
  • 1 星标
  • 更新于
在 GitHub 查看 PuvaanRaaj/agenda-planner

使用说明

议程策划人

协作式议程规划器——创建时间安排的计划,通过链接共享,并使用基于角色的权限和评论进行协作。

堆栈

图层 技术
前端 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:

  1. Supabase仪表板→ SQL 编辑器→ run infra/migrations/001_init.sql
  2. 集 DATABASE_URL 到您的Supabase连接字符串:
    postgresql://postgres:[PASSWORD]@db.your-project.supabase.co:5432/postgres?sslmode=require
    

MCP 服务器

让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.yml

API

所有端点都需要 Authorization: Bearer <supabase_jwt> 除了 /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 删除评论