C

Comprehensive Notion Module

Powerful skill for capture, conversations, decisions, into. Includes structured workflows, validation checks, and reusable patterns for productivity.

SkillClipticsproductivityv1.0.0MIT
0 views0 copies

Comprehensive Notion Module

A comprehensive skill for building Notion-powered workflows — covering database design, page templates, relation structures, formula properties, API integration, and automation for personal productivity and team knowledge management.

When to Use This Skill

Choose Comprehensive Notion Module when you need to:

  • Design Notion databases with relations and rollups
  • Create page templates for recurring workflows
  • Build connected databases for project management
  • Integrate Notion with external tools via API
  • Set up team knowledge bases with structured organization

Consider alternatives when:

  • You need Obsidian vault management (use an Obsidian skill)
  • You need Google Workspace integration (use a Google skill)
  • You need project management beyond Notion (use a PM skill)

Quick Start

# Create a Notion database via API claude "Create a Notion database for tracking feature requests with properties: Title, Status, Priority, Requester, Votes, and Linked Issues."
const { Client } = require("@notionhq/client"); const notion = new Client({ auth: process.env.NOTION_API_KEY }); async function createFeatureRequestDB(parentPageId) { const db = await notion.databases.create({ parent: { page_id: parentPageId }, title: [{ type: "text", text: { content: "Feature Requests" } }], properties: { "Title": { title: {} }, "Status": { select: { options: [ { name: "New", color: "gray" }, { name: "Under Review", color: "yellow" }, { name: "Planned", color: "blue" }, { name: "In Progress", color: "orange" }, { name: "Shipped", color: "green" }, { name: "Won't Do", color: "red" }, ], }, }, "Priority": { select: { options: [ { name: "Critical", color: "red" }, { name: "High", color: "orange" }, { name: "Medium", color: "yellow" }, { name: "Low", color: "gray" }, ], }, }, "Requester": { people: {} }, "Votes": { number: { format: "number" } }, "Created": { created_time: {} }, }, }); console.log(`Database created: ${db.id}`); return db; }

Core Concepts

Database Design Patterns

PatternStructureUse Case
Simple trackerSingle DB with select propertiesTodo lists, reading lists
Related databasesMultiple DBs with relationsCRM, project management
Hub-and-spokeCentral DB linked to satellite DBsContent calendar
Kanban boardDB with board view + status selectSprint planning
Knowledge baseNested pages with DB backlinksWiki, documentation

Relations and Rollups

// Create related databases: Projects ↔ Tasks async function createRelatedDatabases(parentPageId) { // Projects database const projectsDb = await notion.databases.create({ parent: { page_id: parentPageId }, title: [{ text: { content: "Projects" } }], properties: { "Name": { title: {} }, "Status": { select: { options: [ { name: "Active", color: "green" }, { name: "Completed", color: "blue" }, ]}}, "Due Date": { date: {} }, }, }); // Tasks database with relation to Projects const tasksDb = await notion.databases.create({ parent: { page_id: parentPageId }, title: [{ text: { content: "Tasks" } }], properties: { "Name": { title: {} }, "Project": { relation: { database_id: projectsDb.id } }, "Status": { checkbox: {} }, "Assignee": { people: {} }, "Due Date": { date: {} }, }, }); // Add rollup to Projects (count of completed tasks) await notion.databases.update({ database_id: projectsDb.id, properties: { "Tasks": { relation: { database_id: tasksDb.id } }, "Completed Tasks": { rollup: { relation_property_name: "Tasks", rollup_property_name: "Status", function: "checked", }, }, }, }); }

Formula Properties

## Common Notion Formulas ### Days Until Due if(prop("Due Date") != null, dateBetween(prop("Due Date"), now(), "days"), null ) ### Priority Score (weighted) (if(prop("Priority") == "Critical", 4, if(prop("Priority") == "High", 3, if(prop("Priority") == "Medium", 2, 1))) * prop("Votes")) ### Status Emoji if(prop("Status") == "Shipped", "✅", if(prop("Status") == "In Progress", "🔵", if(prop("Status") == "Blocked", "🔴", "⚪"))) ### Overdue Check if(prop("Due Date") != null and prop("Due Date") < now() and !prop("Done"), "⚠️ OVERDUE", "")

Configuration

ParameterDescriptionExample
api_keyNotion integration tokenprocess.env.NOTION_API_KEY
workspace_idNotion workspace identifier"workspace-uuid"
parent_pageParent page for new databases"page-uuid"
template_styleDatabase template style"kanban" / "table"

Best Practices

  1. Design your database schema before creating it — Notion databases are easy to create but messy to restructure. Plan your properties, relations, and views on paper first. Changing a relation property after adding 200 records is tedious.

  2. Use relations instead of duplicating data — If you store a client name as text in both a Projects and Invoices database, they'll inevitably get out of sync. Create a Clients database and relate to it from both.

  3. Create saved views for common filters — Don't force users to filter manually each time. Create saved views: "My Tasks" (filtered to assignee=me), "Overdue" (filtered to due date < today), "This Sprint" (filtered to sprint property).

  4. Use templates for recurring page structures — Meeting notes, project briefs, and weekly reports should use Notion templates that pre-populate the structure. This ensures consistency and saves setup time.

  5. Keep the database property count under 15 — Databases with 30+ properties are overwhelming and slow. If you need that many fields, consider splitting into related databases.

Common Issues

Notion API rate limits slow down bulk operations — Notion limits API requests to ~3 per second. For bulk imports, add delays between requests and implement retry logic with exponential backoff.

Relations break when databases are moved — Moving a database to a different page can orphan relation properties. Plan your workspace structure before creating cross-database relations.

Formula properties can't reference related database fields — Notion formulas can only access properties on the current database. To compute values from related records, use rollups (sum, count, average) instead of formulas.

Community

Reviews

Write a review

No reviews yet. Be the first to review this template!

Similar Templates