Keen readers might have already noticed that this site is actually a Notion wiki. I reserve a page tree in my workspace for the public site and give public access to everyone and keep other pages private. Currently Notion doesn't offer custom domain hosting so I set up a reverse nginx proxy on a VPS to forward all the pages under followthe.trailing.space subdomain to notion.so domain. You can try on your own with this configuration, adapted from https://github.com/lobre/docker-notion-proxy/blob/master/nginx.tmpl

server {
    listen 80;
    server_name {{ getenv "HOST" "example.com" }};

    location / {
        {{ if getenv "REDIRECT" }}
        rewrite ^/$ {{ getenv "PROTO" "http" }}://{{ getenv "HOST" "example.com" }}/{{ getenv "REDIRECT" }};
        {{ end }}

        proxy_pass <https://www.notion.so>;

        proxy_set_header Host www.notion.so;
        proxy_set_header Referer <https://www.notion.so>;

        proxy_set_header User-Agent $http_user_agent;
        proxy_set_header X-Real-IP $remote_addr;

				set $forwarded_accept_header $http_accept_encoding;
				if ($request_uri ~* ".*\\.js") {
					set $forwarded_accept_header "";
					gzip on;
				}
				proxy_set_header Accept-Encoding $forwarded_accept_header;

        proxy_set_header Accept-Language $http_accept_language;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        sub_filter <https://www.notion.so> {{ getenv "PROTO" "http" }}://{{ getenv "HOST" "example.com" }};
        sub_filter_once off;
        sub_filter_types application/javascript;

        sub_filter_last_modified on;

        proxy_ssl_server_name on;

        proxy_buffer_size          128k;
			  proxy_buffers              4 256k;
			  proxy_busy_buffers_size    256k;
    }
}

Of course trusting a third party service to manage your personal information and potentially long living content is a big risk and much has been written on this topic. But so far, I have not found any CMS system offering a better content authoring experience than Notion. The killer feature for me is the URL scheme: each page has a uniquely identifiable ID-based URL, no matter where it is in the tree hierarchy and whether I'll move that page anywhere else later on. This flexibility allows me to start small, start sloppy and improve things later. To prepare for the inevitable migration to a different platform in the future, I regularly upload the site to archive.org for automatic web archiving and also I have a script that exports the whole wiki as a bunch of Markdown documents for backup.

Good is better than best. For now.

Things I want to add/improve