sketch/design — System Design Interview Board

io.github.tGhattas由 GitHub 帳號 tGhattas 發布v0.1.2更新於 Oct 30, 2026

Hand-drawn whiteboard for system design mock interviews; your AI watches, asks and gives feedback.

概覽

AI 產生的概覽

本機手繪白板,讓 AI 扮演系統設計面試官:觀察你的架構圖、以語音提問並給出評分回饋。

可以做什麼
  • 進行面試工作階段:設定題目、計時與階段,循環等待候選人說話或白板變動,再以簡短口語化訊息回應。
  • 讀取白板:取得結構化的元件、連線、區域、便條與變更,或整塊白板的 PNG 圖片。
  • 標註設計:在元件上釘面試官評論氣泡、高亮並縮放定位,也可清除這些標註。
  • 在白板上作畫:以同樣的手繪風格加入元件、連線、便條和區域。
  • 推進與收尾:切換階段追蹤器、匯出完整聊天與語音紀錄,並以 1-5 分回饋卡結束面試。
適用情境
適合練習系統設計模擬面試:你在白板上畫設計,讓 AI 追問需求、規模估算、API、資料模型、瓶頸與取捨,最後給出評分回饋。不接 AI 時也可當作一般手繪白板使用。
執行需求
需要 Node.js 18+,透過 npx 啟動本機程序(npm 套件 sysdesign-board)。需要支援 MCP 的 AI 應用,如 Claude Desktop、Claude Code、Codex CLI、ChatGPT 或其他用戶端。白板在瀏覽器開啟,預設埠 4321,可用 SYSDESIGN_PORT 變更。語音輸入需 Chrome、Edge 或 Safari 並允許麥克風。不需 API 金鑰或帳號。
安裝前請注意
白板描述、白板圖片、聊天訊息和語音紀錄會傳送給你所連接的 AI 應用,受該服務商隱私政策約束。瀏覽器語音辨識會把音訊傳給 Google(Chrome)或 Apple(Safari)。選用的 ChatGPT 通道會把 /mcp 端點公開到網際網路,其含權杖的網址應視同密碼。面試官可在你的白板上作畫與標註;工作階段資料保存在本機,直到你清空白板或刪除資料目錄。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 sketch/design — System Design Interview Board,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。

其他 MCP 客戶端

參照 儲存庫 中的啟動說明。

README

sketch/design — the system design interview board

A hand-drawn whiteboard for system design mock interviews, plus an MCP server that turns Claude or ChatGPT into your interviewer. It sees your board, listens to you, talks back, pins questions on your components, and ends with scored feedback.

[A mock interview in progress: a URL shortener diagram, an interviewer question pinned on Redis, and the voice/text chat]

  • Pencil-style canvas: a paper or chalkboard theme, with shapes that look drawn by hand (rough.js + perfect-freehand)
  • 27 system design components: load balancer, API gateway, CDN, cache, SQL and NoSQL databases, object store, queue, Kafka-style stream, pub/sub, workers, serverless functions, auth, monitoring, ML and more
  • Arrows that stay attached to components, with labels, curved or elbow routes, and dashed lines for async flows. Hover a component and drag its blue dot to connect it.
  • Interview panel: the problem, a timer, a phase tracker, chat, voice in (speech-to-text) and voice out (the interviewer's replies are read aloud)
  • The interviewer can read your diagram as structured data, look at a picture of it, pin comments on components, highlight things, sketch reference designs, and grade you at the end
  • Runs entirely on your machine. The AI runs in your own Claude or ChatGPT app, on your existing subscription, with no API keys.

Install

Requires Node.js 18+.

Your AI appHow to connectBilled to
Claude DesktopDouble-click sysdesign-board-x.y.z.mcpb from Releases, or run npx -y sysdesign-board installClaude Pro / Max
Claude Codeclaude mcp add sysdesign-board -- npx -y sysdesign-boardClaude Pro / Max
Codex CLIAdd it to ~/.codex/config.toml (below)ChatGPT Plus / Pro
ChatGPT (desktop / web)Developer Mode connector through a tunnel (below)ChatGPT Plus / Pro
Cursor, Windsurf, VS Code, othersThe standard MCP JSON (below)Your plan there

The .mcpb one-click file is Claude Desktop only. Every other app runs the same npm package.

Claude Desktop

Option A: one-click. Download the .mcpb file from Releases and double-click it. Claude Desktop shows an install dialog.

Option B: command line. First quit Claude Desktop completely (macOS: ⌘Q; Windows: tray icon → Quit). Claude rewrites its config file from memory when it quits, which would drop the new entry. Then run:

bash
npx -y sysdesign-board install

Reopen Claude Desktop.

Option C: edit the config yourself (again, with Claude Desktop quit). The file is at:

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
  • Windows: %APPDATA%\Claude\claude_desktop_config.json
  • Linux (unofficial builds): ~/.config/Claude/claude_desktop_config.json
json
{  "mcpServers": {    "sysdesign-board": { "command": "npx", "args": ["-y", "sysdesign-board"] }  }}

On Windows, use "command": "cmd", "args": ["/c", "npx", "-y", "sysdesign-board"]. If Claude can't find npx (common with nvm, Volta or asdf), use the absolute path from which npx (macOS/Linux) or where npx (Windows).

Claude Code

Either add the server directly:

bash
claude mcp add sysdesign-board -- npx -y sysdesign-board

Or install the plugin, which also adds an interview skill, from this repo's marketplace. Run these inside Claude Code:

/plugin marketplace add tGhattas/sysdesign-board/plugin install sysdesign-board@sysdesign-board

Codex CLI

Add this to ~/.codex/config.toml (Windows: %USERPROFILE%\.codex\config.toml):

toml
[mcp_servers.sysdesign-board]command = "npx"args = ["-y", "sysdesign-board"]tool_timeout_sec = 120

ChatGPT app

ChatGPT connects to MCP servers over public HTTPS, so you run the board locally and expose only its /mcp endpoint through a tunnel. The board itself, its API and its WebSocket refuse any request that doesn't come from localhost.

  1. Start the board, and keep this running:
    bash
    npx -y sysdesign-board serve
  2. In another terminal, open a tunnel (here with cloudflared):
    bash
    cloudflared tunnel --url http://localhost:4321
  3. Get your private connector token:
    bash
    npx -y sysdesign-board token
  4. In ChatGPT, go to Settings → Apps & Connectors → Advanced, enable Developer Mode, then Create a connector with the URL https://<your-tunnel>.trycloudflare.com/mcp?token=<token> and no authentication.

Treat that URL like a password. To change the token, delete ~/.sysdesign-board/token, or set SYSDESIGN_TOKEN yourself.

Any other MCP client

json
{ "command": "npx", "args": ["-y", "sysdesign-board"] }

Use it

Start a new chat and say:

Start a system design interview with me on my sketch board.

Or use the interview prompt from your app's prompt or slash menu. The board opens at http://localhost:4321.

  • Draw your design. Talk with the 🎤 mic (your message is sent when you pause) or type in the panel.
  • The interviewer keeps listening between replies. It is woken by what you say, and when you stop drawing for a few seconds.
  • Click I'm done when you're finished to get a feedback card with scores.

The board also works without any AI: run npx -y sysdesign-board serve and open http://localhost:4321.

Tools the interviewer gets

ToolWhat it does
start_interviewSets the problem, level and duration, opens the board, and speaks the opening line
wait_for_candidateWaits for your speech or messages, or for board changes once you stop drawing
saySends a chat message, read aloud
get_boardStructured diagram: components, connections (with labels; dashed means async), zones, notes, and what changed
get_board_imageA PNG of the whole board (for handwriting and sketches)
annotate / clear_annotationsPin or remove "INTERVIEWER" comment bubbles on components
highlightMakes components glow, optionally zooming to them
draw_on_boardAdds components, connections, notes and zones in the same sketchy style
set_phaseRequirements → Estimation → API & Data → High-level → Deep dive → Wrap-up
end_interviewFeedback card with 1–5 scores, strengths and improvements
get_transcript, open_boardHousekeeping

Voice

  • Speech-to-text uses the browser's Web Speech API. Use Chrome, Edge or Safari; Firefox doesn't support it.
  • Text-to-speech uses your system voices. Toggle it with "Voice replies" in the panel. The mic pauses while the interviewer speaks, so it doesn't transcribe itself.
  • The native voice modes inside the ChatGPT and Claude apps can't be piped into another page. Those voice models are only available through paid APIs.

Keyboard

V select · H hand / hold Space · R rect · D diamond · O ellipse · A arrow · L line · P pen · T text · N sticky note · F zone · E eraser · K laser · C components · I interview panel · Q tool lock · G grid snap · ⌘/Ctrl Z undo · ⌘/Ctrl D duplicate · ⇧1 fit · ? all shortcuts

Privacy Policy

The full policy is in PRIVACY.md. In short:

  • What it handles: your board, the interview chat and voice transcripts, your settings, and a local access token.
  • Where it's stored: only on your machine, in the browser's local storage for the board page and in ~/.sysdesign-board/. The author runs no server, and there are no accounts, analytics or telemetry.
  • What leaves your computer:
    • When the AI interviewer calls a tool, the AI app you connected receives the board description, a picture of the board, your messages and your transcripts, under that provider's privacy policy.
    • The mic uses your browser's speech recognition. Chrome sends the audio to Google; Safari uses Apple's speech service.
    • npx downloads the package from npm.
    • With the optional tunnel, /mcp requests pass through the tunnel provider.
  • Security:
    • The board, its API and its WebSocket only answer localhost requests from localhost pages. Other websites and tunnels are refused, which also blocks DNS-rebinding attacks.
    • The HTTP endpoint (/mcp) always requires the token.
  • Sharing and retention: nothing is sold or shared. Data stays until you clear the board or delete ~/.sysdesign-board/.
  • Contact: open an issue.

Troubleshooting

  • The server doesn't appear in Claude Desktop. Claude was probably running when the config was edited and saved over it. Quit it fully, run npx -y sysdesign-board install, then reopen.
  • "npx: command not found" in Claude's logs. Use an absolute path to npx (see Option C), or run npx -y sysdesign-board install, which writes absolute paths for you.
  • Port 4321 is taken. Set SYSDESIGN_PORT (or --port=5000). In the .mcpb extension it's a setting.
  • The mic does nothing. Open the board in Chrome, Edge or Safari and allow microphone access.
  • Several apps connected at once? That's fine. The first one hosts the board and the others share it.

CLI

sysdesign-board            MCP server over stdio (what AI apps launch)sysdesign-board serve      Board + HTTP MCP endpoint onlysysdesign-board install    Add to Claude Desktop (quit it first)  [--npx | --local]sysdesign-board token      Print the HTTP MCP token / URL

Development

bash
git clone <this repo> && cd sysdesign-boardnpm installnpm run dev

npm run dev starts the hub on :4321 with reload, and Vite on :5173. Other scripts:

CommandWhat it does
npm run buildBuilds the board UI and bundles the server into one file
npm run build:mcpbPacks build/sysdesign-board-<version>.mcpb
npm run typecheckType-checks the web and server code
node scripts/mcp-smoke.mjsDrives every MCP tool against a running board
npm run lock:pluginRefreshes the Claude plugin's package-lock.json (run after the new version is on npm)

Releasing a new version:

  1. Run npm version <x.y.z> --no-git-tag-version. This also updates server.json and the plugin's version and pinned dependency.
  2. Run npm publish.
  3. Run npm run lock:plugin. The lockfile needs the published package's checksum, so this comes after publishing.
  4. Commit, then tag and push.
  5. Make a GitHub release with npm run build:mcpb.
  6. Run mcp-publisher publish for the MCP Registry.

The code lives in three folders:

  • web/: the board (React UI plus the canvas engine in web/src/engine.ts; renderer and component glyphs in web/src/render/)
  • server/: the hub (HTTP, WebSocket and persistence), the MCP tools and the CLI
  • shared/: the data model, component catalog and geometry

License

MIT

來源:README.md,提交 2b61d36

工具

13

open_board

Open the board

Open the sketch board in the user’s browser and return its URL.

無需輸入參數。

start_interview

Start a system design interview

Start a new interview session on the board: sets the problem statement, timer and phase, opens the board, and posts your opening message (spoken aloud to the candidate).

輸入參數leveltitle必填problem必填clear_boardopening_messageduration_minutes

wait_for_candidate

Listen to the candidate

Block until the candidate says something (typed or by voice), the board changes and then settles, or the timeout passes. Returns what they said, what changed on the board, and interview timing. Call this in a loop between your replies.

輸入參數timeout_seconds

say

Speak to the candidate

Send a message to the candidate. It appears in the board chat and is read aloud. Keep it short and conversational (no markdown).

輸入參數text必填speak

get_board

Read the board

Structured description of the board: components (type, label, id, position, zone), connections (from -> to, label, dashed=async), zones, notes and text, freehand strokes, plus what changed since you last looked.

輸入參數include_json

get_board_image

Look at the board

A PNG picture of the whole board as the candidate sees it (handwriting, sketches, layout). Use when get_board mentions freehand strokes or you need visual context.

無需輸入參數。

annotate

Pin a comment on the board

Pin an interviewer comment bubble on the board, pointing at a component (by id or label) or at a position. Great for "what if this fails?" style probes.

輸入參數xytext必填target

highlight

Point at components

Make components glow on the candidate’s board (e.g. while asking about them). Optionally scroll/zoom their view to them.

輸入參數focussecondstargets必填

draw_on_board

Draw on the board

Add components, connections, sticky notes and zones in the same sketchy style (marked as drawn by the interviewer). Use sparingly — the candidate should drive. Component kinds: user (User), browser (Web App), mobile (Mobile App), dns (DNS), cdn (CDN), lb (Load Balancer), gateway (API Gateway), firewall (Rate Limiter), server (App Server), service (Service), worker (Worker), lambda (Function), cron (Scheduler), sql (SQL DB), nosql (NoSQL DB), cache (Cache), storage (Object Store), search (Search Index), warehouse (Data Warehouse), queue (Queue), stream (Event Stream), pubsub (Pub/Sub), notify (Notifications), auth (Auth), monitor (Monitoring), ml (ML Model), external (External API). Connections reference a component by its ref/label (new or existing) or id. Positions are optional (auto-laid out to the right of existing content).

輸入參數noteszonescomponentsconnections

clear_annotations

Remove interviewer comments

Remove your pinned comments (all, or specific ids).

輸入參數ids

set_phase

Move to an interview phase

Update the phase tracker the candidate sees: requirements (Requirements), estimation (Estimation), api (API & Data), high-level (High-level), deep-dive (Deep dive), wrap-up (Wrap-up).

輸入參數phase必填

end_interview

End the interview with feedback

Close the session and show a feedback card on the board. Scores are 1-5.

輸入參數scores必填signalsummary必填strengths必填improvements必填

get_transcript

Conversation transcript

Full chat/voice transcript of the current session.

無需輸入參數。

版本歷史

1
  1. v0.1.2最新Oct 21, 2026

評分

已滿足適用檢查項的 90%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通25 分
  • 已宣告認證方式10 分

    請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。

  • 已列出工具必需15 分
  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分