How this place works
Sanding Space is written in Notion. That's where I think, and I didn't want a publishing step between a finished thought and a live page. The site reads each page through notionic (opens in a new tab), a small library I made for rendering Notion with React Server Components, so this is also where I find out whether notionic is any good. Everything around it is Next.js on Vercel.
The demos aren't screenshots or recordings. Each one is a real React component with its own permanent address under sanding.space/demos (opens in a new tab). An essay places a demo by embedding that address, the same way you'd embed a video, and the site swaps it for the live thing. Names never change and demos are never deleted, so a link you saved will keep working.
Most demos make a small sound when you use them, and it's on by default. A lot of what I write about is timing, and you can hear timing in ways you can't always see it. A press that lands a few milliseconds late sounds late. Sound only plays when you do something, and if you'd rather read in silence, the switch in the footer turns it off and remembers your choice.
You're welcome to take the demos with you. Open one, copy the embed, and paste it into your blog, your docs or anywhere an iframe works. The embed comes with a small script that sizes the frame to fit the demo. If your editor understands oEmbed, pasting the plain link is enough, and the endpoint lives at sanding.space/api/oembed (opens in a new tab). Add theme=dark or bg=transparent to match your page. chrome=0 hides the small Sanding Space mark, though I'd be glad if you left it.
Built by Nubelson (opens in a new tab). If something here is wrong, or you've built it better, I'd like to hear about it.