sign uplog in

The Book is a Program

A practical exploration in dual-publishing websites and printed books, using Pollen, LaTeX, and the Racket programming language.

CurriculumAll CohortsFacilitators


We are going to explore ways to create custom document markup, and how to publish websites and printed books from the same source documents. Our biggest lever for getting this done is the Pollen publishing system, which treats your documents as functional programs. Pollen is built on the Racket programming language.

Why would you want to dual-publish to the web and to print? Read my short essay, The Unbearable Lightness of Web Pages.

Example books published with Pollen:

Course Goals

  • Understand common techniques for implementing design ideas in Pollen
  • Understand how to start and build a Pollen project
  • Gain some Racket programming knowledge and “functional programming” chops
  • Build and produce a POD-ready PDF and a web site from the same source

Who This Course is For

  • You enjoy publishing things digitally
  • You’re at least somewhat familiar with HTML and CSS
  • You’re not afraid to make things by writing code
    • (You need not be an advanced programmer, but some familiarity in any programming language will help. There are no point-and-click applications in this course!)

Length / Commitment

There will be 4 weekly sessions of 1.5–2 hours each. There is some homework; it’s optional, but you’ll get more out of the course if you do it. You can do much of it before the course starts, if you wish.

Syllabus / Schedule

The course is in beta form, and the structure is still in flux! This, at least, is the initial plan of attack.

Before we begin

  • Install Racket and Pollen on your computer (instructions)
  • As much as you are able: read the Pollen documentation and do the first 3 tutorials (don’t just read them, do them, step by step). If you can’t do it all, no worries; if you can, but it doesn’t quite make sense, no worries. Whatever you can do will help you immensely with the course.

Week 1: Intro and Quick Tour

Group Call (1.5–2 hours)

  • We’ll make sure everyone’s tech is up and running
  • We’ll start and complete a simple Pollen-based website


  • Tinker with the website you made
  • Study an existing Pollen project on GitHub (links will be provided)
  • Read up on X-expressions

Week 2: Designing Markup

Group call (1.5–2 hours)

  • Focus: Designing and implementing a custom markup languages
  • Some common markup needs
  • As needed: Racket programming language explainers


  • (optional) Develop your own tag functions
  • (optional) Install LaTeX on your computer
  • Read (and if possible, do) the fourth tutorial in the Pollen documentation

Week 3: Dual Web/Print PDF publishing

Group Call (1.5–2 hours)

  • Multiple output target formats in Pollen
  • Generating PDFs via LaTeX
  • Print layout considerations
  • Publishing those PDFs as print books via Kindle Direct Publishing


  • Work on implementing multiple output targets in your project

Week 4: Closing the circle

Things have gone at a brisk pace by this point. There will be things we didn’t get to, questions I didn’t forsee for this first cohort. This week will be focused on filling in those gaps and making sure everyone has a working foundation for their projects.

Group call (1.5–2 hours)

  • Anything crucial we postponed from earlier calls
  • Sharing our projects
  • Dealing with LaTeX
  • #lang bookcover: A Racket language for making your book cover
  • Possibilities: Generating a podcast or an ebook with Pollen


You should come away from this with a working model of a Pollen project that can be published as a website or as a book.

4 weeksUp to 5 learners


Some programming (any language)

Looks like there aren't any cohorts planned :(

Want emails on new cohorts?