Updated
Colophon
This site is a publishing server. The web page you are reading is one of its interfaces.
Stack
Vue 3 (JavaScript, Vite) islands on server-rendered pages
↓
Ruby on Rails system of record, HTML, JSON, text, feeds, API
↓
PostgreSQL content, relationships, full-text search
Redis cache, Sidekiq queues, Action Cable, rate limiting
Python / Node workers feed normalisation, transcripts, analysis (as needed)
Rails renders a complete document for every public URL. Vue mounts small islands — the search palette, the live Thoughts stream, keyboard navigation, the theme toggle, chapter jumping in the player — only where they add something. Turn JavaScript off and the site still reads.
Objects and connections
Notes, Thoughts, Projects, episodes, Goodies, pages and topics share one vocabulary: topics and tags, typed relationships between any two objects, revision history, and one search table. Links inside a body automatically become “mentions” relationships, so every page can show what points at it.
Open-web features
- Atom and JSON Feed for everything and for each section; a feed per topic; RSS 2.0 with the podcast namespace for the show.
- Every object as
.json,.txtand, for long-form,.mdwith front matter.Acceptheaders work too. - A read-only JSON API at /api/v1 that describes itself.
llms.txt,humans.txt,robots.txt, a sitemap, JSON-LD, OpenGraph, microformats2 (h-entry,h-card,h-feed).- A Webmention receiver. Verified mentions appear under the page they point at.
- Stable permalinks. A URL only goes away if I take the post down.
Design
The site is set like the chart from a sleep study: a warm graphite ground that darkens down the page, warm white text, one amber accent. The chart at the top of every page is a hypnogram of this site’s own publishing dates. Anybody sets the name and the headings, Public Sans the reading text, and IBM Plex Mono every label, date and line of code. There is no serif anywhere on the site. All three are self-hosted. The edition number counts everything ever published. Light mode is warm paper; add ?theme=light to any URL to force it. Type does not move: hover changes colour and nothing else, and the one chart reveal stands down under prefers-reduced-motion.
Keyboard
/ search, ⌘K palette, j/k through lists, t theme, g n notes, ? help.
Terminal
See /cli. curl waltspence.com/now.txt is the short version.
Source
The site’s code is on GitHub. Content is CC BY-SA 4.0 unless a page says otherwise.