A
records for your domain and no CNAME
alias for www
yourdomain-com-notion-proxy
[!TIP] A bit outdated but detailed description on how to add your domain to Cloudflare and create a worker is here.
Search for "Step 1: Set up your Cloudflare account".
If someone wishes to create an up-to-date tutorial for NoteHost, please submit a pull request 😉
Go into your working directory and run:
npx notehost init <domain>
Follow the prompts to confirm your domain name and enter the requested information. You can change these settings later via the configuration file.
NoteHost will create a directory with the name of your domain. In this directory you will see the following files:
.
├── build-page-script-js-string.sh helper script, details below
├── package.json test & deploy your website, see realtime logs
├── tsconfig.json types config
├── wrangler.toml your Cloudflare worker config
└── src
├── _page-script-js-string.ts generated by helper script
├── index.ts runs reverse proxy
├── page-script.js your custom JS page script
└── site-config.ts your domain and website config
Go into this directory and run
npm install
Make sure that wrangler is authenticated with your Cloudflare account
npx wrangler login
wrangler.toml
and make sure that the name
field matches your worker name in Cloudflaresite-config.ts
and set all the necessary options: domain, metadata, slugs, subdomain redirects, etc. All settings should be self explanatory, I hope 😊import { NoteHostSiteConfig, googleTag } from 'notehost'
import { PAGE_SCRIPT_JS_STRING } from './_page-script-js-string'
// Set this to your Google Tag ID from Google Analytics
const GOOGLE_TAG_ID = ''
export const SITE_CONFIG: NoteHostSiteConfig = {
domain: 'yourdomain.com',
// Metatags, optional
// For main page link preview
siteName: 'My Notion Website',
siteDescription: 'Build your own website with Notion. This is a demo site.',
siteImage: 'https://imagehosting.com/images/preview.jpg',
// URL to custom favicon.ico
siteIcon: 'https://imagehosting.com/images/favicon.ico',
// Social media links, optional
twitterHandle: '@mytwitter',
// Additional safety: avoid serving extraneous Notion content from your website
// Use the value from your Notion settings => Workspace => Settings => Domain
notionDomain: 'mydomain',
// Map slugs (short page names) to Notion page IDs
// Empty slug is your main page
slugToPage: {
'': 'NOTION_PAGE_ID',
about: 'NOTION_PAGE_ID',
contact: 'NOTION_PAGE_ID',
// Hint: you can use '/' in slug name to create subpages
'about/people': 'NOTION_PAGE_ID',
},
// Rewrite meta tags for specific pages
// Use the Notion page ID as the key
pageMetadata: {
'NOTION_PAGE_ID': {
title: 'My Custom Page Title',
description: 'My custom page description',
image: 'https://imagehosting.com/images/page_preview.jpg',
author: 'My Name',
},
},
// Subdomain redirects are optional
// But it is recommended to have one for www
subDomains: {
www: {
redirect: 'https://yourdomain.com',
},
},
// The 404 (not found) page is optional
// If you don't have one, the default 404 page will be used
fof: {
page: 'NOTION_PAGE_ID',
slug: '404', // default
},
// Google Font name, you can choose from https://fonts.google.com
googleFont: 'Roboto',
// Custom CSS/JS for head and body of a Notion page
customHeadCSS: `
.notion-topbar {
background: lightblue
}`,
customHeadJS: googleTag(GOOGLE_TAG_ID),
customBodyJS: PAGE_SCRIPT_JS_STRING,
}
npm run deploy
🎉 Enjoy your Notion website on your own domain! 🎉
[!IMPORTANT] You need to run deploy every time you update
page-script.js
orsite-config.ts
.
The file src/page-script.js
contains an example of a page script that you can run on your Notion pages.
This example script removes tooltips from images and hides optional properties in database cards.
🔥 This script is run in the web browser! 🔥
You can use document
, window
and all the functionality of a web browser to control the contents and behavior of your Notion pages.
Also, because this is a JS file, you can edit it in your code editor with syntax highlighting and intellisense!
To incorporate this script into a Notion page, NoteHost must transform the file's contents into a string. Consequently, the build-page-script-js-string.sh
script is executed whenever you run npm run deploy
.
So just add your JS magic to page-script.js
, run deploy and everything else will happen automagically 😎
You can see realtime logs from your website by running
npm run logs
Based on Fruition, which is no longer maintained 😕
Lots of thanks to @DudeThatsErin and her code snippet.