Notion Block Renderer with Next.js SSR and Static Generation
A demo showcasing a custom Notion block renderer built from scratch for Next.js. Every Notion block is rendered on the server and during static generation using proper semantic HTML tags, ensuring accurate structure, accessibility, and SEO friendly output.

Rich text
Text 
Bold, Italicize, Underline, Link, code , break, s p a c i ng,
Color Text
Default, Gray, Brown, Orange, Yellow, Green, Blue, Purple, Pink, Red.
Background Text
Default, Gray, Brown, Orange, Yellow, Green, Blue, Purple, Pink, Red.
Inline Equation
Emojis
Basic Blocks
Paragraph
Paragraph
purple color Paragraph
purple background Paragraph
Heading Blocks
Heading 1
pink color Heading 1
pink Background Heading 1
Heading 2
Heading 3
Bulleted list
- Boil fresh water
- Add coffee grounds to your filter or French press
- Pour hot water over the coffee
- Let it brew (about 4 minutes for French press)
Numbered list
- 1.a.i.Boil fresh water
- 2.b.ii.Add coffee grounds to your filter or French press
- 3.c.iii.Pour hot water over the coffee
- 4.d.iv.Let it brew (about 4 minutes for French press)
- 5.e.v.Press or filter the coffee
- 6.f.vi.Pour into your favorite mug
- 7.g.vii.Add milk or sugar if desired
- 8.h.viii.Enjoy your coffee break!
To-do
To-do item (unchecked)
To-do item (checked)
color to do (checked)
background to do (checked)
green color
blue color
purple color
pink color
red color
default color
gray color
brown color
Toggle
Toggle
hi share this template
Toggle block with no nested blocks ( Appears with a faded toggle icon )
Toggle Block with Background
If a background is applied to the toggle block, all nested blocks will inherit that background, unless a specific background is set on a nested block or rich text.
Toggle Block with Color
Similarly, if a color is applied to the toggle block, all nested content will inherit that color — unless a nested block or text span has its own color applied.
Callout
Callout
Gray text
Purple
Pink
Red
Callout without Icon
Callout with nested blocks including callout text
Callout with only nested blocks
Quote
Quote of the day!
brown color
brown background
Quote with nested blocks
To be or not to be, that is the question.
— William Shakespeare
Quote with nested blocks
Heading 1 inside Quote
Some supporting paragraph text.
A bullet list item Another oneEven a nested quote block!
Quote Text Color
Stay hungry, stay foolish.
(The left border color of the quote block inherits from the block’s text color.)
Table
Table with Heading Row
| Name | Role | |
|---|---|---|
| Alice | Developer | |
| Bob | Designer | |
Table with Heading Column
| Task | Status |
|---|---|
| Create a website | In Progress |
| Add features | Completed |
Table with Both Headings
| Category | Feature | Details |
|---|---|---|
| Performance | Fast Build Times | Built with Next.js, Turbopack, and Tailwind CSS for an optimized and beautiful UI. |
| Design | Custom Templates | Beautiful and responsive |
Table Without Heading Row or Heading Column
| Cell | Cell | Cell | Cell |
| Cell | Cell | Cell | Cell |
| Cell | Cell | Cell | Cell |
| Cell | Cell | Cell | Cell |
Large overflow Table
| Column 1 | Column 2 | Column 3 | Column 4 | Column 5 | Column 6 | Column 7 | Column 8 |
| Row 1, Cell 1 | Row 1, Cell 2 | Row 1, Cell 3 | Row 1, Cell 4 | Row 1, Cell 5 | Row 1, Cell 6 | Row 1, Cell 7 | Row 1, Cell 8 |
Table Blocks in Column
| Column 1 | Column 2 | Column 3 | Column 4 | Column 5 | Column 6 | Column 7 | Column 8 |
| Row 1, Cell 1 | Row 1, Cell 2 | Row 1, Cell 3 | Row 1, Cell 4 | Row 1, Cell 5 | Row 1, Cell 6 | Row 1, Cell 7 | Row 1, Cell 8 |
| Column 1 | Column 2 | Column 3 | Column 4 | Column 5 | Column 6 | Column 7 | Column 8 |
| Row 1, Cell 1 | Row 1, Cell 2 | Row 1, Cell 3 | Row 1, Cell 4 | Row 1, Cell 5 | Row 1, Cell 6 | Row 1, Cell 7 | Row 1, Cell 8 |
Divider
Link to page
Media Blocks
Image
Uploaded File Images via Notion

Unsplash Notion image URL
Video
YouTube Videos
Facebook Video
Audio
Code
Code block with with notion rich text
JavaScript code block
function debounce(func, delay) { let timer; return function (...args) { clearTimeout(timer); timer = setTimeout(() => func.apply(this, args), delay); }; }
// Example usage:
const fetchData = () => { console.log("Fetching data..."); };
const debouncedFetch = debounce(fetchData, 1000);
document.getElementById("search").addEventListener("input", debouncedFetch);
File
dummy.pdf
Web Bookmark
Build custom agents, search across all your apps, and automate busywork. The AI workspace where teams get more done, faster.


Portfolio/blog template where Notion is used as a headless CMS, enabling full control of pages, routes, SEO, Open Graphs, header/footer links, social links, favicon, and sitemap.


Advanced Blocks
Table of contents
Block equation
Pythagorean Theorem
Quadratic Formula
Breadcrumb
Synced block
Synced from “First blog post”
This is a demo blog post used to show how blog pages look in this portfolio template.
You can replace this content with your own blog.
Columns
2 Columns
Column 1
Column 2
3 Columns with Custom Widths
Column 1
Column 2
Column 3
4 Columns
Column 1
Column 2
Column 3
Column 4
5 Columns
Column 1
Column 2
Column 3
Column 4
Column 5
Nested columns? Yes! You can even place a Columns block inside a column, just like Notion allows.
Column 1
Column 1
Column 2
Column 2
Code - Mermaid
flowchart LR
id1>This is the text in the box]
%% A simple Mermaid diagram
graph TD;
A[Hello, World!] --> B{Sum};
B -->|5| C[5];
B -->|10| D[10];
C --> E[Result];
D --> E;Embed
X Post (Tweet)
Figma
Facebook Post
Facebook Reels
Facebook Video
Spotify
CodePen
CodeSandbox
Gist from GitHub
Google Maps
Google Form Embed
Mention inline
Mention Page
Designing a Personal Website That Actually Converts ( First blog )
Mention a Link
Default link mention
vercelNext.js by Vercel - The React Framework
NotionThe AI workspace that works for you. | Notion
Unsplash Image mention
YouTube Video mention
@braindamageOST GOBLIN Full Album 孤單又燦爛的神-鬼怪
marcosmusicAndré Gagnon - Comme au premier jour This video starts at 0:16
Tweet embed mention
Sujal VanjareSujal Vanjare on Twitter / X
Mention a Date
@ → with end date
@ with only start date
@ with only start date with relative date type change
@ (GMT+5) with time
@ (GMT+9) with time zone
@ today mention
@ →
@ (GMT+5) remind me tomorrow
Mention a User
@Sujal Vanjare




