Our approach
Every page on this site is pre-built before you visit it. There is no server generating pages on the fly, no database to query, and no loading spinner while content renders in your browser. When you click a link, you get a finished page immediately. This makes the site fast, reliable, and cheap to run — which means we do not need advertising revenue to keep it online.
Pages and content
Articles are written as plain text files with simple formatting. A tool called Eleventy takes those files and turns them into the web pages you see. The entire site — all 300+ pages — builds in about six seconds. We publish by pushing a button, and the new version is live within a minute.
Design
The look and feel is built with standard web styles — no design framework or theme. Every colour, font size, and spacing value is defined once and reused everywhere, so the site looks consistent whether you are reading an article, browsing the library, or filling out a form. The typefaces (Playfair Display, Lora, Source Serif 4, and DM Sans) are served by Bunny Fonts, a privacy-friendly alternative to Google Fonts that does not track visitors.
Interactive features
All interactive features — search, text-to-speech, voice search, annotations, the events calendar, reading settings, and form dictation — are written in plain browser code with no external framework. They load only when needed and work offline once cached. Total size across all features: about 200 KB, smaller than most single images.
Search
Search is powered by Pagefind, which builds a search index alongside the site. When you search, your query is matched against a small index file already on the page — no request is sent to a search engine or third-party service.
Hosting
The site is hosted on Cloudflare Pages, which serves pages from data centres around the world. This means the site loads fast regardless of where you are. Cloudflare also provides protection against attacks and automatically encrypts all connections.
Forms
Contact forms, submissions, tips, and feedback are handled by Web3Forms. When you submit a form, your message is delivered to our email inbox. Nothing is stored in a database. Spam is filtered by hCaptcha, a privacy-respecting alternative to Google's reCAPTCHA.
Newsletter
The newsletter is managed by Buttondown. We have disabled open tracking and click tracking — we do not know whether you opened a particular email or clicked a particular link. You can unsubscribe at any time from any email.
Analytics
We use Umami, a privacy-first analytics tool. It tells us how many people visit the site and which pages are popular, but it does not use cookies, does not collect personal information, and cannot identify individual visitors. Our analytics dashboard is public — you can see exactly what we see.
Comments
Cusdis provides the comment system. You do not need an account to leave a comment. Comments are moderated before they appear.
Translation
GTranslate provides machine translation into nine languages via a small widget. Translation is performed by Google Translate.
Voice features
The read-aloud, voice search, and dictation features all use your browser's built-in speech capabilities. No audio is recorded or sent to us. Depending on your browser, speech processing may happen on your device or through your browser maker's servers (Apple, Google, or Microsoft).
Navigation speed
Links are prefetched on hover using instant.page (~3 KB, self-hosted). For most pages, navigation is handled SPA-style — when you click a link, only the main content area is swapped without a full page reload. This makes transitions feel nearly instant and allows background features like the music player to continue uninterrupted.
Glossary tooltips
When you hover over a glossary term in an article or library page, a tooltip shows the definition. This is powered by Tippy.js and Popper.js, both self-hosted (~45 KB combined). No requests are made to external servers, and no data is collected.
Music player
The Freethought Music player uses the YouTube IFrame API to play curated playlists in the background. The API script is loaded from Google's servers. Playback state is saved in localStorage so music can resume across page navigation.
Offline support
The site can work without an internet connection. Once you have visited a page, it is cached in your browser and available offline. On mobile, you can install the site as an app from your browser's menu.
Content management
Editors use Pages CMS, a browser-based tool that reads and writes directly to the site's source files. There is no separate database or content management server.
Source code
The full source code is open and free to use under the MIT licence. Anyone can fork it and build their own publication. See open source for details.