This is a plug and play library for Sveltekit
projects to create blogs quickly in your website's subdirectory using Notion
as a CMS.
Notion template
into your workspace.(Link)
, Notion's documentation on how to create an internal connection [(link)
] (https://developers.notion.com/docs/create-a-notion-integration)bash https://www.notion.so/[this-is-your-database-id]?v=8f9bdbecf08d4ec9bc35c990860c780d
import { PUBLIC_NOTION_DATABASE_ID, PUBLIC_NOTION_TOKEN } from "$env/static/public";
import { initNotionBlog } from "sveltekit-notion-blog";
export const prerender = true;
initNotionBlog({
tokens: {
databaseId: PUBLIC_NOTION_DATABASE_ID, //from .env
notionToken: PUBLIC_NOTION_TOKEN, //from .env
},
settings: {
blogTitle: "Notion Blog",
blogDescription: "A blog powered by Notion"
}
});
Add this to your vite.config.ts
import { sveltekit } from '@sveltejs/kit/vite';
import { defineConfig } from 'vite';
export default defineConfig({
plugins: [sveltekit()],
ssr: {
noExternal: ['@fontsource-variable/inter']
}
});
npm i sveltekit-notion-blog
+page.svelte
and +page.server.ts
files in this directory and call the getAllPosts method in the +page.server.ts
import type { PageServerLoad } from './$types';
import { getAllPosts } from "sveltekit-notion-blog";
export const load: PageServerLoad = () => getAllPosts();
+page.svelte
, import the ```PostsList`` component <script lang="ts">
import type { PageData } from './$types';
import { PostsList } from "sveltekit-notion-blog";
export let data: PageData;
</script>
<div class="max-w-4xl m-auto">
<PostsList {data} />
</div>
Create a new directory inside the blog directory named [slug] and create +page.svelte
and +page.server.ts
files in this directory.
In the +page.server.ts
call the getBlogPageBySlug method
import type { ServerLoadEvent } from '@sveltejs/kit';
import { getBlogPageBySlug } from 'sveltekit-notion-blog';
export const load = (event: ServerLoadEvent) => getBlogPageBySlug(event);
+page.svelte
<script lang="ts">
import { BlogPost } from 'sveltekit-notion-blog';
import type { PageData } from './$types';
export let data: PageData;
</script>
<BlogPost {data} />