{"$schema":"https://ui.shadcn.com/schema/registry-item.json","name":"meeting-notes-os","type":"registry:block","title":"Meeting Notes OS","description":"A meetings database with a template that writes its own action items.","author":"Notion Arena","categories":["docs"],"tags":["native","free","meetings","notes","template","action-items","button"],"meta":{"kind":"native","tier":"free","version":"3.0.0","updatedAt":"2026-10-08","notionPlan":"Free","emoji":"📝","delivery":["api","duplicate","guide"],"capabilities":{"interactive":false,"offlineSafe":true,"persistsLocally":false,"writesToNotion":true,"needsNetwork":false},"recipe":"meeting-notes-os","installUrl":"https://notionarena.vercel.app/api/install"},"files":[{"path":"recipes/meeting-notes-os.json","type":"registry:file","target":"notion/recipes/meeting-notes-os.json","content":"{\n  \"$schema\": \"https://notionarena.vercel.app/r/schema.json\",\n  \"notionVersion\": \"2026-03-11\",\n  \"id\": \"meeting-notes-os\",\n  \"summary\": \"A Meetings data source with a real page-body template, action items in their own data source, and a follow-up view that never loses a decision.\",\n  \"databases\": [\n    {\n      \"ref\": \"meetings\",\n      \"title\": \"Meetings\",\n      \"icon\": \"📝\",\n      \"properties\": {\n        \"Name\": {\n          \"title\": {}\n        },\n        \"Type\": {\n          \"select\": {\n            \"options\": [\n              {\n                \"name\": \"1:1\",\n                \"color\": \"green\"\n              },\n              {\n                \"name\": \"Team\",\n                \"color\": \"blue\"\n              },\n              {\n                \"name\": \"Project\",\n                \"color\": \"purple\"\n              },\n              {\n                \"name\": \"Client\",\n                \"color\": \"yellow\"\n              },\n              {\n                \"name\": \"Interview\",\n                \"color\": \"pink\"\n              },\n              {\n                \"name\": \"Workshop\",\n                \"color\": \"orange\"\n              }\n            ]\n          }\n        },\n        \"Date\": {\n          \"date\": {}\n        },\n        \"Attendees\": {\n          \"people\": {}\n        },\n        \"Status\": {\n          \"status\": {\n            \"options\": [\n              {\n                \"name\": \"Scheduled\",\n                \"color\": \"gray\",\n                \"group\": \"To-do\"\n              },\n              {\n                \"name\": \"Happening\",\n                \"color\": \"yellow\",\n                \"group\": \"In progress\"\n              },\n              {\n                \"name\": \"Notes written\",\n                \"color\": \"blue\",\n                \"group\": \"In progress\"\n              },\n              {\n                \"name\": \"Actions closed\",\n                \"color\": \"green\",\n                \"group\": \"Complete\"\n              },\n              {\n                \"name\": \"Cancelled\",\n                \"color\": \"red\",\n                \"group\": \"Complete\"\n              }\n            ]\n          }\n        },\n        \"Project\": {\n          \"relation\": {\n            \"type\": \"dual_property\",\n            \"dual_property\": {\n              \"synced_property_name\": \"Meetings\"\n            }\n          },\n          \"__relationRef\": \"projects\"\n        },\n        \"Action items\": {\n          \"relation\": {\n            \"type\": \"dual_property\",\n            \"dual_property\": {\n              \"synced_property_name\": \"Meeting\"\n            }\n          },\n          \"__relationRef\": \"actions\"\n        },\n        \"Agenda\": {\n          \"rich_text\": {}\n        },\n        \"Decisions\": {\n          \"rich_text\": {}\n        },\n        \"Recording\": {\n          \"url\": {}\n        },\n        \"Attachments\": {\n          \"files\": {}\n        },\n        \"Open actions\": {\n          \"rollup\": {\n            \"relation_property_name\": \"Action items\",\n            \"rollup_property_name\": \"Done\",\n            \"function\": \"unchecked\"\n          }\n        },\n        \"All actions\": {\n          \"rollup\": {\n            \"relation_property_name\": \"Action items\",\n            \"rollup_property_name\": \"Name\",\n            \"function\": \"count_values\"\n          }\n        },\n        \"Actions closed\": {\n          \"formula\": {\n            \"expression\": \"if(prop(\\\"All actions\\\") == 0, \\\"n/a\\\", format(prop(\\\"All actions\\\") - prop(\\\"Open actions\\\")) + \\\"/\\\" + format(prop(\\\"All actions\\\")))\"\n          }\n        },\n        \"Is overdue\": {\n          \"formula\": {\n            \"expression\": \"if(and(prop(\\\"Date\\\") < now(), prop(\\\"Status\\\") == \\\"Scheduled\\\"), \\\"🔴 Notes not written\\\", \\\"\\\")\"\n          }\n        },\n        \"Created\": {\n          \"created_time\": {}\n        }\n      },\n      \"seed\": [\n        {\n          \"name\": \"Weekly team sync\",\n          \"props\": {\n            \"Type\": \"Team\",\n            \"Status\": \"Notes written\"\n          }\n        },\n        {\n          \"name\": \"1:1 · Dana\",\n          \"props\": {\n            \"Type\": \"1:1\"\n          }\n        }\n      ]\n    },\n    {\n      \"ref\": \"actions\",\n      \"title\": \"Action Items\",\n      \"icon\": \"✅\",\n      \"properties\": {\n        \"Name\": {\n          \"title\": {}\n        },\n        \"Owner\": {\n          \"people\": {}\n        },\n        \"Due\": {\n          \"date\": {}\n        },\n        \"Done\": {\n          \"checkbox\": {}\n        },\n        \"Priority\": {\n          \"select\": {\n            \"options\": [\n              {\n                \"name\": \"High\",\n                \"color\": \"red\"\n              },\n              {\n                \"name\": \"Medium\",\n                \"color\": \"yellow\"\n              },\n              {\n                \"name\": \"Low\",\n                \"color\": \"gray\"\n              }\n            ]\n          }\n        },\n        \"Meeting\": {\n          \"relation\": {\n            \"type\": \"single_property\",\n            \"single_property\": {}\n          },\n          \"__relationRef\": \"meetings\"\n        },\n        \"Context\": {\n          \"rich_text\": {}\n        },\n        \"Due state\": {\n          \"formula\": {\n            \"expression\": \"ifs(prop(\\\"Done\\\"), \\\"✅ Done\\\", empty(prop(\\\"Due\\\")), \\\"⚪ No date\\\", prop(\\\"Due\\\") < now(), \\\"🔴 Overdue\\\", dateBetween(prop(\\\"Due\\\"), now(), \\\"days\\\") == 0, \\\"🟠 Today\\\", true, \\\"🟢 \\\" + format(dateBetween(prop(\\\"Due\\\"), now(), \\\"days\\\")) + \\\"d\\\")\"\n          }\n        }\n      },\n      \"seed\": [\n        {\n          \"name\": \"Send the revised scope to the client\",\n          \"props\": {\n            \"Priority\": \"High\",\n            \"Done\": false\n          }\n        },\n        {\n          \"name\": \"Book the offsite venue\",\n          \"props\": {\n            \"Priority\": \"Medium\"\n          }\n        }\n      ]\n    },\n    {\n      \"ref\": \"projects\",\n      \"title\": \"Projects\",\n      \"icon\": \"📁\",\n      \"properties\": {\n        \"Name\": {\n          \"title\": {}\n        },\n        \"Status\": {\n          \"status\": {}\n        },\n        \"Owner\": {\n          \"people\": {}\n        },\n        \"Due\": {\n          \"date\": {}\n        },\n        \"Meetings\": {\n          \"relation\": {\n            \"type\": \"single_property\",\n            \"single_property\": {}\n          },\n          \"__relationRef\": \"meetings\"\n        },\n        \"Meeting count\": {\n          \"rollup\": {\n            \"relation_property_name\": \"Meetings\",\n            \"rollup_property_name\": \"Name\",\n            \"function\": \"count_values\"\n          }\n        }\n      },\n      \"seed\": [\n        {\n          \"name\": \"Component registry v2\"\n        },\n        {\n          \"name\": \"Q4 launch\"\n        }\n      ]\n    }\n  ],\n  \"views\": [\n    {\n      \"on\": \"meetings\",\n      \"name\": \"Calendar\",\n      \"type\": \"calendar\",\n      \"configuration\": {\n        \"type\": \"calendar\",\n        \"calendar_by\": \"Date\"\n      }\n    },\n    {\n      \"on\": \"meetings\",\n      \"name\": \"Notes owed\",\n      \"type\": \"table\",\n      \"filter\": {\n        \"property\": \"Is overdue\",\n        \"string\": {\n          \"does_not_equal\": \"\"\n        }\n      },\n      \"sorts\": [\n        {\n          \"property\": \"Date\",\n          \"direction\": \"ascending\"\n        }\n      ]\n    },\n    {\n      \"on\": \"meetings\",\n      \"name\": \"By type\",\n      \"type\": \"board\",\n      \"configuration\": {\n        \"type\": \"board\",\n        \"group_by\": {\n          \"type\": \"select\",\n          \"property_name\": \"Type\",\n          \"sort\": {\n            \"type\": \"manual\"\n          }\n        }\n      }\n    },\n    {\n      \"on\": \"actions\",\n      \"name\": \"My open actions\",\n      \"type\": \"table\",\n      \"filter\": {\n        \"and\": [\n          {\n            \"property\": \"Done\",\n            \"checkbox\": {\n              \"equals\": false\n            }\n          },\n          {\n            \"property\": \"Owner\",\n            \"person\": {\n              \"contains\": \"me\"\n            }\n          }\n        ]\n      },\n      \"sorts\": [\n        {\n          \"property\": \"Due\",\n          \"direction\": \"ascending\"\n        }\n      ]\n    },\n    {\n      \"on\": \"actions\",\n      \"name\": \"Overdue\",\n      \"type\": \"list\",\n      \"filter\": {\n        \"property\": \"Due state\",\n        \"string\": {\n          \"contains\": \"Overdue\"\n        }\n      }\n    },\n    {\n      \"on\": \"meetings\",\n      \"name\": \"Meetings per project\",\n      \"type\": \"chart\",\n      \"configuration\": {\n        \"type\": \"chart\",\n        \"chart_type\": \"donut\",\n        \"x_axis\": {\n          \"type\": \"select\",\n          \"property_name\": \"Type\",\n          \"sort\": {\n            \"type\": \"manual\"\n          }\n        },\n        \"y_axis\": {\n          \"aggregator\": \"count\"\n        },\n        \"color_theme\": \"yellow\",\n        \"height\": \"medium\"\n      }\n    }\n  ],\n  \"pages\": [\n    {\n      \"title\": \"Meeting page template body\",\n      \"icon\": \"📄\",\n      \"blocks\": [\n        {\n          \"object\": \"block\",\n          \"type\": \"callout\",\n          \"callout\": {\n            \"rich_text\": [\n              {\n                \"type\": \"text\",\n                \"text\": {\n                  \"content\": \"This is the body Notion inserts when you apply the “Meeting” database template. \",\n                  \"link\": null\n                },\n                \"annotations\": {\n                  \"bold\": true\n                }\n              },\n              {\n                \"type\": \"text\",\n                \"text\": {\n                  \"content\": \"Every block below is a real block type: the installer can build the equivalent page directly through Append block children.\",\n                  \"link\": null\n                }\n              }\n            ],\n            \"icon\": {\n              \"type\": \"emoji\",\n              \"emoji\": \"📄\"\n            },\n            \"color\": \"blue_background\"\n          }\n        },\n        {\n          \"object\": \"block\",\n          \"type\": \"column_list\",\n          \"column_list\": {},\n          \"children\": [\n            {\n              \"object\": \"block\",\n              \"type\": \"column\",\n              \"column\": {},\n              \"children\": [\n                {\n                  \"object\": \"block\",\n                  \"type\": \"paragraph\",\n                  \"paragraph\": {\n                    \"rich_text\": [\n                      {\n                        \"type\": \"text\",\n                        \"text\": {\n                          \"content\": \"Date\",\n                          \"link\": null\n                        },\n                        \"annotations\": {\n                          \"bold\": true\n                        }\n                      }\n                    ],\n                    \"color\": \"default\"\n                  }\n                },\n                {\n                  \"object\": \"block\",\n                  \"type\": \"paragraph\",\n                  \"paragraph\": {\n                    \"rich_text\": [\n                      {\n                        \"type\": \"text\",\n                        \"text\": {\n                          \"content\": \"@Attendees\",\n                          \"link\": null\n                        }\n                      }\n                    ],\n                    \"color\": \"default\"\n                  }\n                }\n              ]\n            },\n            {\n              \"object\": \"block\",\n              \"type\": \"column\",\n              \"column\": {},\n              \"children\": [\n                {\n                  \"object\": \"block\",\n                  \"type\": \"paragraph\",\n                  \"paragraph\": {\n                    \"rich_text\": [\n                      {\n                        \"type\": \"text\",\n                        \"text\": {\n                          \"content\": \"Type\",\n                          \"link\": null\n                        },\n                        \"annotations\": {\n                          \"bold\": true\n                        }\n                      }\n                    ],\n                    \"color\": \"default\"\n                  }\n                },\n                {\n                  \"object\": \"block\",\n                  \"type\": \"paragraph\",\n                  \"paragraph\": {\n                    \"rich_text\": [\n                      {\n                        \"type\": \"text\",\n                        \"text\": {\n                          \"content\": \"Project\",\n                          \"link\": null\n                        },\n                        \"annotations\": {\n                          \"bold\": true\n                        }\n                      }\n                    ],\n                    \"color\": \"default\"\n                  }\n                }\n              ]\n            }\n          ]\n        },\n        {\n          \"object\": \"block\",\n          \"type\": \"divider\",\n          \"divider\": {}\n        },\n        {\n          \"object\": \"block\",\n          \"type\": \"heading_2\",\n          \"heading_2\": {\n            \"rich_text\": [\n              {\n                \"type\": \"text\",\n                \"text\": {\n                  \"content\": \"Agenda\",\n                  \"link\": null\n                }\n              }\n            ],\n            \"color\": \"default\",\n            \"is_toggleable\": false\n          }\n        },\n        {\n          \"object\": \"block\",\n          \"type\": \"numbered_list_item\",\n          \"numbered_list_item\": {\n            \"rich_text\": [\n              {\n                \"type\": \"text\",\n                \"text\": {\n                  \"content\": \"…\",\n                  \"link\": null\n                }\n              }\n            ],\n            \"color\": \"default\"\n          }\n        },\n        {\n          \"object\": \"block\",\n          \"type\": \"heading_2\",\n          \"heading_2\": {\n            \"rich_text\": [\n              {\n                \"type\": \"text\",\n                \"text\": {\n                  \"content\": \"Notes\",\n                  \"link\": null\n                }\n              }\n            ],\n            \"color\": \"default\",\n            \"is_toggleable\": false\n          }\n        },\n        {\n          \"object\": \"block\",\n          \"type\": \"toggle\",\n          \"toggle\": {\n            \"rich_text\": [\n              {\n                \"type\": \"text\",\n                \"text\": {\n                  \"content\": \"Topic 1\",\n                  \"link\": null\n                }\n              }\n            ],\n            \"color\": \"default\"\n          },\n          \"children\": [\n            {\n              \"object\": \"block\",\n              \"type\": \"paragraph\",\n              \"paragraph\": {\n                \"rich_text\": [\n                  {\n                    \"type\": \"text\",\n                    \"text\": {\n                      \"content\": \"Notes\",\n                      \"link\": null\n                    }\n                  }\n                ],\n                \"color\": \"default\"\n              }\n            },\n            {\n              \"object\": \"block\",\n              \"type\": \"bulleted_list_item\",\n              \"bulleted_list_item\": {\n                \"rich_text\": [\n                  {\n                    \"type\": \"text\",\n                    \"text\": {\n                      \"content\": \"Detail\",\n                      \"link\": null\n                    }\n                  }\n                ],\n                \"color\": \"default\"\n              }\n            }\n          ]\n        },\n        {\n          \"object\": \"block\",\n          \"type\": \"heading_2\",\n          \"heading_2\": {\n            \"rich_text\": [\n              {\n                \"type\": \"text\",\n                \"text\": {\n                  \"content\": \"Decisions\",\n                  \"link\": null\n                }\n              }\n            ],\n            \"color\": \"default\",\n            \"is_toggleable\": false\n          }\n        },\n        {\n          \"object\": \"block\",\n          \"type\": \"callout\",\n          \"callout\": {\n            \"rich_text\": [\n              {\n                \"type\": \"text\",\n                \"text\": {\n                  \"content\": \"Record the decision and the reason, not just the outcome. Six months from now the reason is the only part that is useful.\",\n                  \"link\": null\n                }\n              }\n            ],\n            \"icon\": {\n              \"type\": \"emoji\",\n              \"emoji\": \"📌\"\n            },\n            \"color\": \"yellow_background\"\n          }\n        },\n        {\n          \"object\": \"block\",\n          \"type\": \"bulleted_list_item\",\n          \"bulleted_list_item\": {\n            \"rich_text\": [\n              {\n                \"type\": \"text\",\n                \"text\": {\n                  \"content\": \"Decision, why, who decided\",\n                  \"link\": null\n                }\n              }\n            ],\n            \"color\": \"default\"\n          }\n        },\n        {\n          \"object\": \"block\",\n          \"type\": \"heading_2\",\n          \"heading_2\": {\n            \"rich_text\": [\n              {\n                \"type\": \"text\",\n                \"text\": {\n                  \"content\": \"Action items\",\n                  \"link\": null\n                }\n              }\n            ],\n            \"color\": \"default\",\n            \"is_toggleable\": false\n          }\n        },\n        {\n          \"object\": \"block\",\n          \"type\": \"paragraph\",\n          \"paragraph\": {\n            \"rich_text\": [\n              {\n                \"type\": \"text\",\n                \"text\": {\n                  \"content\": \"Embed the Action Items database as a linked view filtered to this meeting. Then each row you add is a real tracked action with an owner and a due date.\",\n                  \"link\": null\n                }\n              }\n            ],\n            \"color\": \"default\"\n          }\n        },\n        {\n          \"object\": \"block\",\n          \"type\": \"to_do\",\n          \"to_do\": {\n            \"rich_text\": [\n              {\n                \"type\": \"text\",\n                \"text\": {\n                  \"content\": \"Action, @owner, due date\",\n                  \"link\": null\n                }\n              }\n            ],\n            \"checked\": false,\n            \"color\": \"default\"\n          }\n        },\n        {\n          \"object\": \"block\",\n          \"type\": \"divider\",\n          \"divider\": {}\n        },\n        {\n          \"object\": \"block\",\n          \"type\": \"heading_3\",\n          \"heading_3\": {\n            \"rich_text\": [\n              {\n                \"type\": \"text\",\n                \"text\": {\n                  \"content\": \"Carry-over\",\n                  \"link\": null\n                }\n              }\n            ],\n            \"color\": \"default\",\n            \"is_toggleable\": false\n          }\n        },\n        {\n          \"object\": \"block\",\n          \"type\": \"paragraph\",\n          \"paragraph\": {\n            \"rich_text\": [\n              {\n                \"type\": \"text\",\n                \"text\": {\n                  \"content\": \"Anything unresolved from the last meeting with this group. Linked view: same Type, same Attendees, Status ≠ Actions closed.\",\n                  \"link\": null\n                }\n              }\n            ],\n            \"color\": \"default\"\n          }\n        }\n      ]\n    }\n  ]\n}"},{"path":"recipes/meeting-notes-os.manual.md","type":"registry:file","target":"notion/recipes/meeting-notes-os.manual.md","content":"## Database template: “Meeting”\n\n**Why this cannot be scripted:** The API can create a page with this body and can apply an existing template when creating a page, but it cannot author the template itself.\n\n1. Meetings → the ▾ beside New → + New template.\n2. Name it “Meeting”. Set Type and Status = Scheduled as property defaults.\n3. Paste the body shown on this page: Notion keeps the headings, toggles and to-dos as real blocks.\n4. In the Action items section, type /linked and choose Action Items, filtered to Meeting = this page (Relative link → Meeting).\n5. Template ••• → Set as default.\n\n## Button: “New meeting”\n\n**Why this cannot be scripted:** Button properties are response-only in the Notion API: the schema is returned on read, but the API ignores button settings on write and cannot create a button or configure its actions.\n\n1. On your Meetings home page: /button.\n2. Action 1: Add page to → Meetings. Apply the “Meeting” template. Set Date to Today, Type to Team.\n3. Action 2: Open page → the page created in step 1.\n4. Label it “+ New meeting” and give it an icon.\n\n## Automation: close the loop after the meeting\n\n**Why this cannot be scripted:** Database automations have no public API surface. They are configured per-database in the Notion app under ••• → Automations.\n\n1. Meetings → Automations → New automation.\n2. Trigger: Date is before Today. Condition: Status is Scheduled.\n3. Action: do not set Status to “Notes written”. Add a comment @mentioning the first attendee: “Notes owed.”\n4. Second automation: when every Action item is Done, set Status to “Actions closed”. Notion cannot express “all related rows”, so use a weekly recurring review instead.\n"}]}