How to adapt the system for your project's size, governance model, and tooling.
4. Integrating with GitHub / GitLab
5. Community Engagement Tracking
7. Sponsorship & Funding Tracking
8. Scaling to a Large Maintainer Team
If you're the only maintainer, strip the system down to essentials:
Keep these databases:
Skip or defer:
Simplify statuses:
Time-saving tip: Use the Issues database as your single inbox. Add a "Type" filter to switch between bugs, features, and tasks. Skip the triage ceremony — just sort by Priority and work top-down.
If your project spans multiple repositories (e.g., a core library, a CLI tool, documentation site, and SDK):
1. Add a "Repository" Select property to both Issues and Contributions databases.
2. Options: core-lib, cli-tool, docs-site, typescript-sdk, etc.
3. Create filtered views per repository on each database.
4. The Contributors and Releases databases stay shared across all repos.
Pros: Single source of truth. Easy cross-repo queries. One dashboard.
Cons: Database gets large. Hard to set per-repo permissions.
1. Create a separate workspace page per repository.
2. Duplicate the full system for each repo (Issues, Contributions, Releases).
3. Keep a single shared Contributors database at the top level.
4. Add cross-repo relations for Contributors.
Pros: Clean separation. Per-repo permissions. Independent release cycles.
Cons: Harder to see the big picture. Duplicate maintenance.
Recommendation: Start with Option A. Split to Option B when you exceed ~200 total issues or have repos with independent release cycles.
if(prop("Approval Votes") >= 3, "Approved", "Needs Votes").| Role | Can Triage | Can Review | Can Merge | Can Release | Can Vote on RFCs |
|---|---|---|---|---|---|
| New Contributor | No | No | No | No | No |
| Contributor | No | Yes (as co-reviewer) | No | No | No |
| Regular | Yes | Yes | No | No | Yes |
| Core | Yes | Yes | Yes | No | Yes |
| Maintainer | Yes | Yes | Yes | Yes | Yes |
1. Add a "GitHub URL" URL property to Issues and Contributions databases.
2. Copy the GitHub issue/PR link when creating the Notion entry.
3. Update status manually when it changes on GitHub.
4. Time cost: ~2 minutes per issue/PR. Acceptable for projects with <50 active items.
Use GitHub webhooks + a small server to sync automatically:
Trigger events to sync:
issues.opened → Create a new entry in Notion Issues databaseissues.closed → Update Status to "Closed" in Notionpull_request.opened → Create entry in Contributions databasepull_request.merged → Update Status to "Merged"pull_request.review_submitted → Update review countField mapping:
| GitHub Field | Notion Property |
|---|---|
| issue.title | Title |
| issue.number | Issue ID (format as ISS-XXX) |
| issue.labels | Labels (Multi-select) |
| issue.assignee | Assignee (find matching Contributor by GitHub Handle) |
| issue.milestone | Milestone |
| pull_request.title | Title |
| pull_request.user | Author (find matching Contributor) |
| pull_request.additions | Lines Added |
| pull_request.deletions | Lines Removed |
For a no-code approach:
1. Zapier trigger: "New Issue in GitHub Repository"
2. Zapier action: "Create Database Item in Notion"
3. Map fields as above.
4. Create separate Zaps for issues, PRs, and status changes.
Add these properties to track community health beyond code contributions:
| Property | Type | Purpose |
|---|---|---|
| Discord Handle | Text | Track who's active in community chat |
| Blog Posts | Number | Count of blog posts about your project |
| Conference Talks | Number | Talks given at conferences/meetups |
| Forum Posts | Number | Helpful answers in forums/discussions |
| Community Score | Formula | Weighted score of all engagement types |
Community Score Formula:
prop("Contributions") * 3 + prop("Forum Posts") * 1 + prop("Blog Posts") * 5 + prop("Conference Talks") * 10
If your project has meetups, office hours, or conference presence:
| Property | Type |
|---|---|
| Event Name | Title |
| Date | Date |
| Type | Select (Meetup / Conference / Office Hours / Hackathon) |
| Attendees | Number |
| Speakers | Relation → Contributors |
| Recording URL | URL |
| Notes | Text |
Web Framework:
area/routing, area/middleware, area/templating, area/auth, area/database, area/websocket
CLI Tool:
area/parser, area/output, area/config, area/plugins, area/completion
Library:
area/core, area/types, area/utils, area/compat, area/extensions
| Label | Purpose | View Filter |
|---|---|---|
needs-triage | Not yet reviewed by a maintainer | Triage Queue view |
needs-reproduction | Bug but can't reproduce yet | Blocked Items view |
needs-rfc | Requires a design document before implementation | Design Review view |
breaking-change | Will break backward compatibility | Release Planning view |
good-first-issue | Suitable for new contributors | Community Onboarding view |
help-wanted | Maintainers welcome external contributions | Community view |
blocked | Waiting on external dependency | Blocked Items view |
wontfix | Intentional behavior or out of scope | Closed view |
If your project receives sponsorships or funding, add a "Sponsors" database:
| Property | Type |
|---|---|
| Sponsor Name | Title |
| Tier | Select (Individual / Bronze / Silver / Gold / Platinum) |
| Amount (Monthly) | Number |
| Start Date | Date |
| End Date | Date |
| Status | Select (Active / Paused / Cancelled) |
| Logo URL | URL |
| Contact Email | |
| Notes | Text |
Sponsorship Dashboard Metrics:
Link sponsor funds to roadmap items with a "Funded By" relation to show which features are sponsor-driven.
1. Review your "Good First Issues" list monthly. If it's empty, new contributors have no on-ramp. Intentionally create beginner-friendly issues.
2. Track time-to-first-review. Slow review times kill contributor motivation. Target <24 hours for first-time contributors, <48 hours for regulars.
3. Archive closed issues quarterly. Move issues closed >90 days ago to an archive database. Keeps your active databases fast.
4. Celebrate milestones. When a contributor reaches a new level (New → Regular → Core), acknowledge it publicly. Community recognition drives retention.
5. Keep the Contribution Guide updated. Review pages/contribution-guide.md every release. Outdated contribution guides are the #1 source of frustrated contributors.
*Questions? Contact support@datanest.dev*
Step-by-step instructions for importing and configuring the Open Source Project Manager in Notion.
databases/ folder1. In Notion, create a new page called "[Your Project Name] — Project Manager".
2. Add an icon (suggested: 🔧 or your project logo) and a cover image.
3. This page will be the parent container for all databases and sub-pages.
Import in this order so that relations can reference already-imported databases.
contributors.csv1. Inside your workspace page, click "/" → "Import" → "CSV".
2. Select databases/contributors.csv.
3. Rename the database to "Contributors".
4. Set property types:
| Column | Notion Property Type |
|---|---|
| Name | Title |
| GitHub Handle | Text |
| Role | Select |
| Contributions | Number |
| Expertise | Multi-select |
| Status | Select |
| Joined Date | Date |
| Last Active | Date |
| Location | Text |
| Timezone | Select |
| Bio | Text |
| Onboarding Complete | Checkbox |
5. Select colors for Role:
6. Select colors for Status:
releases.csv1. Import databases/releases.csv inside the workspace page.
2. Rename to "Releases".
3. Set property types:
| Column | Notion Property Type |
|---|---|
| Version | Title |
| Type | Select |
| Status | Select |
| Target Date | Date |
| Published Date | Date |
| Blockers | Number |
| Resolved Blockers | Number |
| Downloads | Number |
| Changelog Summary | Text |
| Release Manager | Text (will become Relation) |
| Branch | Text |
| Notes | Text |
4. Select colors for Status:
5. Select colors for Type:
roadmap.csv1. Import databases/roadmap.csv.
2. Rename to "Roadmap".
3. Set property types:
| Column | Notion Property Type |
|---|---|
| Title | Title |
| Quarter | Select |
| Status | Select |
| Effort | Select |
| Priority | Select |
| Target Release | Text (will become Relation) |
| Category | Select |
| Owner | Text (will become Relation) |
| Dependencies | Text (will become self-Relation) |
| Description | Text |
| Success Metric | Text |
| Notes | Text |
4. Select colors for Status:
5. Effort color coding:
issues.csv1. Import databases/issues.csv.
2. Rename to "Issues".
3. Set property types:
| Column | Notion Property Type |
|---|---|
| Issue ID | Text |
| Title | Title |
| Type | Select |
| Priority | Select |
| Status | Select |
| Labels | Multi-select |
| Milestone | Select |
| Votes | Number |
| Assignee | Text (will become Relation) |
| Linked PR | Text (will become Relation) |
| Reported By | Text |
| Created Date | Date |
| Closed Date | Date |
| Environment | Select |
| Description | Text |
4. Status colors:
5. Priority colors:
contributions.csv1. Import databases/contributions.csv.
2. Rename to "Contributions".
3. Set property types:
| Column | Notion Property Type |
|---|---|
| PR ID | Text |
| Title | Title |
| Type | Select |
| Status | Select |
| Author | Text (will become Relation) |
| Reviewer | Text (will become Relation) |
| Linked Issue | Text (will become Relation) |
| CI Status | Select |
| Lines Added | Number |
| Lines Removed | Number |
| Files Changed | Number |
| Created Date | Date |
| Merged Date | Date |
| Review Rounds | Number |
| Labels | Multi-select |
| Description | Text |
4. Status colors:
5. CI Status colors:
1. Open the Contributions database.
2. Add a new Relation property → select "Contributors" → name it "Author (Linked)".
3. Link each contribution to its author.
4. Add another Relation to "Contributors" → name it "Reviewer (Linked)".
1. Add a Relation property → select "Issues" → name it "Linked Issue (Linked)".
2. Link contributions to the issues they address.
1. Open the Issues database.
2. Add a Relation to "Contributors" → name it "Assignee (Linked)".
3. Link each assigned issue to its assignee.
1. Open the Roadmap database.
2. Add a Relation to "Releases" → name it "Target Release (Linked)".
3. Link roadmap items to their target release.
1. Add a Relation to "Contributors" → name it "Owner (Linked)".
2. Link roadmap items to their owner.
1. Add a Relation to "Roadmap" (itself) → name it "Depends On".
2. This creates a self-referencing relation for dependency tracking.
1. Open the Releases database.
2. Add a Relation to "Contributors" → name it "Release Manager (Linked)".
1. "Total PRs" — Rollup on the Author relation from Contributions → Count all.
2. "Open PRs" — Rollup on Author relation → Count where Status NOT IN (Merged, Closed).
3. "Issues Assigned" — Rollup on the Assignee relation from Issues → Count all.
1. "Roadmap Items" — Rollup on the Target Release relation from Roadmap → Count all.
2. "Completed Items" — Rollup on Target Release → Count where Status = "Completed".
1. "PR Count" — Rollup on the Linked Issue relation from Contributions → Count all. Shows how many PRs address this issue.
5.1 Board — "Issue Triage"
5.2 Table — "All Issues"
5.3 Table — "Good First Issues"
5.4 Board — "By Milestone"
5.5 Board — "PR Pipeline"
5.6 Table — "Needs Review"
5.7 Calendar — "PR Timeline"
5.8 Table — "Release Pipeline"
5.9 Board — "Release Status"
5.10 Table — "Active Contributors"
5.11 Board — "By Role"
5.12 Board — "Quarterly Roadmap"
5.13 Board — "By Category"
1. Copy content from pages/project-dashboard.md → create a "Project Dashboard" page.
2. Copy content from pages/contribution-guide.md → create a "Contribution Guide" page.
3. Copy content from pages/release-playbook.md → create a "Release Playbook" page.
For each page, replace any database references with Linked Database Views pointing to your actual databases.
1. Open the Issues database → New template → paste content from templates/issue-template.md.
2. Open the Releases database → New template → paste content from templates/release-checklist-template.md.
3. Create a standalone page for templates/contributor-onboarding-template.md — link it from the Contribution Guide.
See formulas/FORMULAS.md for complete formulas. Key formulas to add:
1. Issues: Priority Score, Issue Age
2. Contributions: PR Age, Is Stale
3. Releases: Release Readiness %, Days Until Release
4. Contributors: Contributor Level
5. Roadmap: Roadmap Progress %
Self-relation on Roadmap shows empty options: Make sure you're relating the Roadmap database to itself. Notion supports self-referencing relations — the dropdown should show items from the same database.
Rollups show "No results": Ensure the underlying relation has linked entries. Rollups compute over the related items; if nothing is linked, the result is empty.
CSV import creates text instead of Select: After import, click the property header → "Edit property" → change to Select. Notion will convert the text values into Select options.
*Need help? Contact support@datanest.dev*