In Notion, create a parent blog page, name it and then add a table database. We'll need the following table columns for this blog setup to work:
Page (type: title): powers the post headline and meta title.
Date (date): powers the display date and meta published_time property.
Description (text): powers the preview text on the homepage and the meta description property.
Slug (text): powers the url slug.
Published (checkbox): checks if a blog post should be displayed when deployed.
Cover Image (files & media): optional - adds a cover image for a post on the frontpage and becomes the featured image on social (og:image, twitter card image).
Copy and paste the Integration Token in the .env.local file: NOTION_TOKEN=____
On the Notion page, click the "Share" button in the top right and share the database with the Notion Integration you just created
In a browser, go to the Notion page and grab the Database ID from the URL. Its the part of the URL after your workspace name and the slash and before the question mark. The ID is 32 characters long, containing numbers and letters.
Paste your Database ID in the .env.local file: NOTION_DATABASE_ID=___
Run blog locally!
After all that setup, run npm run dev and it should fetch all your posts from your Notion table database.
Notes
The Notion API was just released and its in Beta, so not all the things you can do in Notion will come through the API. So far, only text-like blocks are currently available. View the Notion API documentation for more info.