Synaplan
기업을 위한 오픈소스 AI 플랫폼
스크럼 마스터와 애자일 팀을 위한 무료 툴킷
Free toolkit for Scrum masters and agile teams — sprint planning, daily scrum, retrospectives, estimation, delivery metrics and team health. Runs in your browser; no sign-up.
비즈니스TypeScript · JavaScriptGitHub @amrelharony온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기Single-user agile toolkit: 100+ tools, agent-controllable via in-app chat + MCP, cross-device cloud sync.
README 전체를 불러오는 중입니다.
README 전문 보기 ↗A free, public toolkit for Scrum masters and agile teams — sprint planning,
daily scrum, retrospectives, estimation, delivery metrics, team health,
prioritization and decision frameworks, whiteboarding — plus the free
"Agile at Work" comic book. About 80 tools are in the main navigation; some
30 more for neighbouring work (AI/LLM product management, security, SRE and
incident response, strategy frameworks) sit on a "More tools" shelf
(/more-tools) that any visitor can switch on.
Every tool works without an account: a visitor's work stays in their browser. The owner's sign-in adds cross-device cloud sync, the in-app agent and MCP.
Built with Next.js 14 (App Router), Zustand, Supabase, and Tailwind.
Five integrated subsystems, layered:
Access model — Public, browser-only tools; owner-only server.
AUTHORIZED_EMAILS, signed in with Google, with a verified email
(isOwnerUser in src/lib/auth/authorize.ts).
Owner-only: cloud and history sync, the agent's server path, MCP,
personal access tokens, the kudos/squads/sessions APIs and realtime
multiplayer./api/* route answers JSON 401 unauthenticated,
403 not_authorized | wrong_provider | email_unverified or
503 auth_unavailable | auth_unreachable (with retry-after) — never a
redirect. The pages in OWNER_ONLY_PAGES
(src/lib/auth/owner-routes.ts:
/settings/access-tokens, /settings/squads) redirect to sign-in or
/not-authorized. A non-owner's session cookies are expired, so they
carry on as a visitor.GET /api/auth/owner
(200 {owner:true}, else 401/403/503 JSON) confirms the owner before
anything owner-only starts. RLS on every user table is
auth.uid() = user_id.Cross-device cloud sync (owner) — Local-first. Every Zustand store and every
workspace entity (sprints, stories, whiteboard objects, etc.) writes to
localStorage first; a debounced pusher mirrors to Supabase. Realtime
subscriptions fan remote writes back to other open tabs. LWW on
updated_at for conflicts. Soft-deletes via deleted=true tombstones
for concurrent-device reconciliation.
See src/lib/sync/engine.ts.
Tool action registry — A typed action surface where every tool
exposes read/write/intent verbs through a singleton registry. The
registry produces tool schemas for both Claude tool-use and MCP
tools/list. ~102 actions wired today, growing.
See src/lib/actions/registry.ts.
In-app chat agent (owner) — A right-side sheet (Cmd/Ctrl+J) powered by GLM
(Zhipu) via OpenAI-compatible chat completions. Server proxy at
/api/agent/stream or browser-direct BYOK using the per-tool key in
the LLM settings store. Write actions pause for inline approval;
"approve all this session" opt-in available.
See src/app/api/agent/stream/route.ts.
MCP server (owner) — HTTP/SSE transport at /api/mcp for remote agents
(Claude Desktop, Claude Code, OpenClaw), plus a thin stdio relay
package (mcp-server/) that forwards to the deployed app. PAT auth
with scrypt-hashed bearer tokens. Per-token rate-limit bucket.
See src/app/api/mcp/route.ts.
npm install
cp .env.example .env.local # fill in the values listed below
npm run dev # http://localhost:3000
Required environment variables (.env.local):
NEXT_PUBLIC_SUPABASE_URL=https://<project>.supabase.co
NEXT_PUBLIC_SUPABASE_ANON_KEY=eyJ...
SUPABASE_SERVICE_ROLE_KEY=eyJ... # server-only, for PAT resolution
[email protected] # comma-separated, lowercased
ANTHROPIC_API_KEY=sk-ant-... # optional; falls back to per-tool BYOK
The Supabase project needs migrations 0001–0006 applied:
npx supabase db push
| Command | Purpose |
|---|---|
npm run dev | Next.js dev server with HMR. |
npm run build | Production build. |
npm run start | Run the production build locally. |
npm run lint | ESLint over the project. |
npm run test | Vitest in watch mode. |
npm run test:run | Vitest one-shot (CI uses this). |
npm run pdf:worker | Copy the pdf.js worker to public/ (after bumping pdfjs-dist). |
Vercel-native. Auto-deploys from master to production.
Environment variables for production (set in the Vercel dashboard):
.env.local vars above.SUPABASE_SERVICE_ROLE_KEY is sensitive — store it as an Encrypted
Environment Variable.fra1 to keep the Edge middleware close to
the Supabase project (see vercel.json).Vercel Authentication ("Require Log In" under Deployment Protection)
must be off for the production domain — the site is public and the
owner-only surface is enforced by the in-app middleware. Keep it on for
Preview deployments (see the checklist below). Only master and preview/*
branches deploy at all (git.deploymentEnabled in vercel.json); see
RUNBOOK.md, "Vercel builds and cost".
The public "Owner sign in" button lets anyone start a Google sign-in, so:
signup_disabled instead of an
account. Confirm anonymous sign-ins are off.The comics live at /comics, and every story is /comics?ep=NN. See
RUNBOOK.md, "The Agile at Work comics".
After bumping pdfjs-dist, run npm run pdf:worker so the public worker the
whiteboard's PDF import loads matches the library version.
Mint a Personal Access Token at /settings/access-tokens, then either:
Claude Desktop (stdio relay):
{
"mcpServers": {
"agile-toolkit": {
"command": "agile-toolkit-mcp",
"env": {
"AGILE_TOOLKIT_PAT": "pat_...",
"AGILE_TOOLKIT_URL": "https://your-deployment.vercel.app"
}
}
}
}
Any HTTP/SSE MCP client:
curl -X POST https://your-deployment.vercel.app/api/mcp \
-H "Authorization: Bearer pat_..." \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"tools/list","id":1}'
Rate limit: 120 requests/minute per PAT.
/api/* route and the
OWNER_ONLY_PAGES require the owner (allowlisted Google account with a
verified email). API failures are JSON 401/403/503, never redirects.auth.uid() = user_id via RLS./.well-known/security.txt; /robots.txt keeps /api/,
/auth/, /settings/, /guest/ and /not-authorized out of the index.