You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
David 245c3f108f Use emacsclient as the editor for new posts 6 months ago
css Initial commit 8 months ago
et-book Initial commit 8 months ago
img Initial commit 8 months ago
pollen-local Initial commit 8 months ago
posts Added Genre ramblings post 7 months ago
util Use emacsclient as the editor for new posts 6 months ago
.gitignore Initial commit 8 months ago Initial commit 8 months ago Initial commit 8 months ago
Makefile Fixed some dumb stuff in the Makefile 8 months ago Initial commit 8 months ago Initial commit 8 months ago
feed.xml.pp Fixed a big oops with the RSS feed URL 8 months ago Initial commit 8 months ago
index.html.pp Initial commit 8 months ago
index.ptree Initial commit 8 months ago
latex.css Initial commit 8 months ago
layout.css Initial commit 8 months ago
pdf.ptree Initial commit 8 months ago
pollen.rkt Fixed blockquote tag 7 months ago
template.html.p Initial commit 8 months ago
template.pdf.p Fixed verse/tufte-book incompatibility 7 months ago
topics.html.pp Initial commit 8 months ago
tufte.css Initial commit 8 months ago
util-date.rkt Initial commit 8 months ago
util-db.rkt Initial commit 8 months ago
util-template.rkt Initial commit 8 months ago
util-topics.rkt Initial commit 8 months ago

Dangermuse Blog

A blog created with Pollen. The live site is at See LICENSE for copyright/licensing information.

This is a fork of Joel Dueck's The Notepad at / It also includes code from Matthew Butterick's pollen-tuftorial at,


Pollen is really optimized for books, where the sections are finite and can be prearranged according to the logic of the subject matter. It takes some extra work to put it to use as a blog, which by analogy is a loose sheaf of papers that need constant reshuffling before any use can be made of them.

Nonetheless, it works pretty well as a static blog generator. Pollen comes with no opinions about your site so there's no cruft to clean out or hack around. Pollen also gives me capabilities I can no longer live without — first among which is, it allows you to design your own markup and control how it works, forever. More thoroughly tedious rationale for my design choices will eventually go on the site’s About page.


  • An RSS Feed
  • Generates PDF versions of every post
  • Includes “Topics”, a tagging system
  • Makefile for incremental builds
  • Pollen tags for perma-embedding Tweets in web and PDF output (no JavaScript)
  • Example dynamically generated index.ptree — no need to edit every time you add a new post
  • Semantic line wrapping


If you find this project helpful, please consider chipping a few bucks towards the original author(Joel Dueck)!

Buy Me a Coffee at

Setting up your own copy

  • You'll need xelatex installed and in your PATH to generate PDFs. On Mac, installing MacTeX is easy and will do the job.
  • You'll need to install Racket, and the Pollen package
  • Ideally you'll be on a system that can run Bash scripts and the GNU make utility
  • If you do use the included makefile to build the site, you will want to install HTML5 Tidy — or remove references to the tidy command in the makefile. (Note: Many operating systems come with a version of tidy pre-installed, but it is usually very out of date and will throw errors when used with this repo.)

Next, just plop all the files from this repository in a folder. Run make all from the command line in this folder to build all the static HTML files. Run make pdfs to build the PDF versions of each post. (This is done separately because it is so much slower than building the HTML.)

To start writing your own content, move the included posts directory out of the way. You may wish to keep it around under a different name in order to refer to it for examples:

mv posts posts.example; make zap;

The make zap cleans out the top-level pages and the SQLite cache used to build them.

Finally, edit feed.xml.pp, filling in your own RSS metadata.


Blog posts should be named and placed in the posts/ subfolder. Make sure the first line is #lang pollen and use ◊define-meta to specify the title, publish date, and, optionally, “topics” (basically tags). Check out the existing files in that folder for more examples of how things are done.

If you really want to customize anything, you will need to learn all about Pollen!

As in any Pollen project, you can test-run the site locally by running raco pollen start from the project folder. Then browse to http://localhost:8080 in your browser.

From the project folder, run make all to generate all the static HTML files for the site. This is an incremental rebuild: if you’ve built the site once and since done nothing but add a new post, make all will build the HTML files for that post, rebuild the Index and Topics HTML pages, and rebuild the RSS feed. If you change any of the Racket code (.rkt files) or any of the template files, it will rebuild the HTML files for every single post, depending on what you changed.

Use make zap to clean out all the generated pages, which will force a complete rebuild next time you do make all.

In order to speed up rendering of index.html and other top-level pages, I have implemented an additional caching system in an SQLite database. See the post Using SQLite to Speed Up Pollen Renders to understand how it works.

Finally, you can use make publish to push all necessary static files to your web server. See makefile for more details; you'll need to configure a couple of environment variables and you also need to be able to ssh into your server passwordlessly.


See Contributions for guidance on submitting issues and pull requests to this repo.


Please feel free to fork this repo! If you do so, be sure to edit to reflect your preferred guidance for potential contributors. Also note you must abide by the license terms, so please review those carefully.

If you want your improvements and customizations to be more generally known, feel free to let me know; I’ll be happy to add a link to it in the section below. (Alternatively, add a link to it in this file yourself and submit a pull request.)

Existing forks

None yet!