My web site is one of my favorite yaks. There are many like it, but it is mine.

I build it as a static site and publish via Netlify. I track the content & compiler source in Git on BitBucket (BitBucket Pipelines recompile and deploy the site every time I push new updates).

The compilation process is a pile of custom JavaScript; I am not using a site generator framework such as Metalsmith or Assemble (I do use Panini for other, simpler sites). The major libraries I use include:

  • Gulp ties everything together
  • Remark for most of the content processing
  • Pandoc for the few pages that require more complex formatting than Remark can handle
  • Rehype for reprocessing content HTML
  • Handlebars for content templates
  • Pug for layouts
  • Hastscript for generating little bits of HTML in the compilation process
  • PostHTML for postprocessing and minifying final HTML
  • PostCSS to make CSS more usable
  • Webpack to prepare client-side Javascript
  • Mithril for advanced client-side interactions (so far just the search page)
  • Lunr to implement site search
  • KaTeX for math rendering

I also use Bluebird for rich promises, Request-Promise for web service calls, and mississippi for a pile of stream utilities.

One of the particularly cool features of this setup is my publication pages: each publication has a page written in Markdown; embedded HTML at the top of the page serves as single-source-of-truth for my publications across the whole site. My CV is updated from this data, as is my publication list and other places where publications show up (project pages, blog posts, etc.).

I source citation statistics from Microsoft Academic via Cognitive Services Labs, updated every time the site rebuilds.

WeasyPrint renders my CV into a consistent and downloadable PDF. The HTML CV itself prints well (the print CSS is how I generate the PDF), but the WeasyPrint PDF includes niceties like well-formatted headers and footers. I use qpdf create an encrypted PDF for internal review purposes that contains nonpublic information about work in progress.

Fonts are Adobe's Source Sans Pro and Source Code Pro. Headers are set in Proza Libre.

Icons are from the excellent Noun Project