|
13 | 13 |
|
14 | 14 | <br> |
15 | 15 |
|
16 | | -### Sync issues both ways. GitHub ↔ Notion. Bumba Notion PM is a Node.js library that makes a Notion database the project management surface for any GitHub repository — with real bidirectional sync, rate-limited Notion API plumbing, and a CLI to wire it up in minutes. Issues created in GitHub appear in Notion. Tasks created in Notion appear in GitHub. Status, labels, assignees, links — all synchronized. ### |
| 16 | +### Sync issues both ways. GitHub ↔ Notion. Bumba Notion PM is a Node.js library for using a Notion database as a project management surface for GitHub repositories. It includes bidirectional issue sync, rate-limited Notion API helpers, built-in PM database schemas, and a CLI for setup and common workflows. ### |
17 | 17 |
|
18 | 18 | --- |
19 | 19 |
|
20 | | -### 🔴 Bidirectional sync, no compromises ### |
| 20 | +### 🔴 Bidirectional sync, practical guardrails ### |
21 | 21 |
|
22 | 22 | - **GitHub → Notion**: Open and recently-closed issues become Notion pages with status, labels, and a back-link to the issue. |
23 | 23 | - **Notion → GitHub**: Tasks created in Notion get filed as GitHub issues. The Notion page is updated with the new issue number and URL. |
24 | | -- **Round-trip safe**: Once linked, a row's `GitHub Number` is the stable identity. Edit on either side; sync reconciles. |
| 24 | +- **Round-trip identity**: Once linked, a row's `GitHub Number` is used as the stable identity for future syncs. |
25 | 25 | - **Three modes**: `bidirectional` (default), `github-to-notion`, `notion-to-github` — switch per-run. |
26 | 26 |
|
27 | 27 | --- |
28 | 28 |
|
29 | | -### 🟡 Built for the Notion API, not against it ### |
| 29 | +### 🟡 Built around the Notion API ### |
30 | 30 |
|
31 | | -- **Rate-limited HTTP client** sized to Notion's 3 req/s budget — never get 429'd in a hot loop again. |
| 31 | +- **Rate-limited HTTP client** sized around Notion's documented request budget to reduce accidental 429s. |
32 | 32 | - **Exponential backoff with jitter** on transient errors. Honors `Retry-After` when present. |
33 | 33 | - **Typed errors**: `AuthError`, `RateLimitError`, `NotFoundError`, `ValidationError` — `instanceof` your way out of guesswork. |
34 | | -- **Drop-in @notionhq/client shape** — every method the official SDK exposes, but rate-limited. |
| 34 | +- **Familiar @notionhq/client shape** — common SDK surfaces wrapped with rate limiting and retry behavior. |
35 | 35 |
|
36 | 36 | --- |
37 | 37 |
|
38 | | -### 🟢 Zero-friction onboarding ### |
| 38 | +### 🟢 Lower-friction onboarding ### |
39 | 39 |
|
40 | | -- **Interactive setup wizard**: `npx bumba-notion-pm init` walks new users through token, parent page, and connection verification in under 2 minutes. |
41 | | -- **Built-in PM schemas**: Tasks, Sprints, Epics, and Projects databases ready to spin up — no Notion-side hand-crafting. |
| 40 | +- **Interactive setup wizard**: `npx bumba-notion-pm init` walks through token, parent page, and connection verification. |
| 41 | +- **Built-in PM schemas**: Tasks, Sprints, Epics, and Projects database templates are available when you want a quick starting point. |
42 | 42 | - **Block factory**: `heading`, `paragraph`, `bulletList`, `todoList`, `callout`, `code` — readable, composable, no manual JSON. |
43 | 43 | - **Single-command database creation**: `bumba-notion-pm create-db -k tasks -t "My Tasks"`. |
44 | 44 |
|
|
48 | 48 |
|
49 | 49 | - **Bring your own MCP server**: drop in a Notion MCP server and Bumba will auto-detect and route through it. |
50 | 50 | - **Detection across transports**: HTTP, IPC socket, Claude Desktop config, or explicit env. |
51 | | -- **Graceful fallback**: if MCP isn't there or fails mid-call, the bridge transparently falls back to the direct Notion API. Zero MCP infrastructure required to use the library. |
| 51 | +- **Graceful fallback**: if MCP isn't configured or fails mid-call, the bridge can fall back to the direct Notion API. No MCP infrastructure is required to use the library. |
52 | 52 | - **Three modes**: `auto` (default), `mcp-only` (strict), `api-only` (skip detection). |
53 | 53 |
|
54 | 54 | <br> |
@@ -159,7 +159,7 @@ npx bumba-notion-pm sync -r owner/name -d <database-id> |
159 | 159 | npx bumba-notion-pm create-db -k tasks -t "Engineering Tasks" |
160 | 160 | ``` |
161 | 161 |
|
162 | | -The database ships with `Status`, `Priority`, `Assignee`, `Due Date`, `GitHub Issue`, `GitHub Number`, `Labels`, and `Last Synced` — all the columns the bridge needs, no manual configuration. |
| 162 | +The database ships with `Status`, `Priority`, `Assignee`, `Due Date`, `GitHub Issue`, `GitHub Number`, `Labels`, and `Last Synced` — the core columns the bridge expects. |
163 | 163 |
|
164 | 164 | <br> |
165 | 165 |
|
@@ -195,14 +195,14 @@ console.log(page.url); |
195 | 195 |
|
196 | 196 | <br> |
197 | 197 |
|
198 | | -### 🟡 Rate-limited Notion calls (handled for you) ### |
| 198 | +### 🟡 Rate-limited Notion calls ### |
199 | 199 |
|
200 | 200 | ```javascript |
201 | 201 | const { NotionClient } = require('bumba-notion-pm'); |
202 | 202 |
|
203 | 203 | const client = new NotionClient(); // reads NOTION_API_KEY |
204 | 204 |
|
205 | | -// Drop-in replacement for @notionhq/client. Every call goes through the limiter. |
| 205 | +// Familiar @notionhq/client-style calls. Requests go through the limiter. |
206 | 206 | await client.databases.query({ database_id: '...' }); |
207 | 207 | await client.pages.create({ parent: { page_id: '...' }, properties: { ... } }); |
208 | 208 | await client.blocks.children.append({ block_id: '...', children: [...] }); |
|
0 commit comments