To build the website locally, clone the repo and change into the repo's directory.
git clone https://github.com/blab/blotter.git
cd blotter/
Install the latest version of Ruby supported by blotter using rbenv to work around any system-wide Ruby installations that may be incompatible.
rbenv installCheck that gem is available through the rbenv installation.
If it is not, consult the rbenv documentation above to resolve the issue.
which gemInstall bundler.
gem install bundlerInstall blotter's Ruby dependencies.
bundle installBuild the site.
bundle exec jekyll build
Important
If you are getting errors at this stage, it may be due to your version of bundle.
Try gem uninstall bundler + gem install bundler -v 1.13.1.
Start a local Jekyll server to view the site.
bundle exec jekyll serveOpen your browser to http://localhost:4000/. More information on Jekyll can be found here.
To include project pages, three preprocessing scripts fetch data from GitHub before Jekyll runs. First-time setup clones the projects: full-clone repos into projects/<name>/:
ruby _scripts/update-and-preprocess.rb
After that, use the Rakefile targets below for day-to-day iteration.
A Rakefile exposes the preprocessing steps and Jekyll build as named targets:
| Target | What it does |
|---|---|
rake readmes |
Fetch each repo in _config.yml's readmes: list, rewrite links to GitHub, download images, write projects/<name>/index.md. |
rake preprocess |
Walk .md files under projects: (full-clone) project directories, add front matter, rewrite .md → .html and source-file links. |
rake data |
Query GitHub via Octokit for project metadata (contributors, recent commits, homepage). Writes _data/projects.yml. Requires GITHUB_TOKEN. |
rake build |
bundle exec jekyll build. |
rake serve |
bundle exec jekyll serve --livereload. |
rake all |
Run readmes, preprocess, data, then build. Useful for a clean re-seed. |
Typical inner loop:
- Once per session (or whenever upstream data may have changed), seed:
rake all. - Iterate:
rake serveand edit files. Jekyll auto-rebuilds. - When editing a preprocessing script, re-run only that script's target — e.g.
rake readmes && rake build. The_scripts/generate-readmes.rboutput is idempotent, so you can re-run freely without first wiping state.
The deploy driver blotter-deploy.rb (in the sibling blotter-deploy repo) rebuilds everything from a clean state via git reset --hard + git clean -f, and is meant for validating the full deploy pipeline, not for fast iteration. Don't edit files inside its blotter/ checkout — they'll be wiped on the next --test run.
Blog posts just require YAML top matter that looks something like:
---
layout: post
title: Newton Institute presentation
author: Trevor Bedford
link: http://www.newton.ac.uk/programmes/IDD/seminars/2013082213301.html
image: /images/blog/transmission.png
---
The layout, title and author tags are required, while link and image are optional. Just save a Markdown file with this top matter as something like blog/_posts/2013-08-27-newton-institute.md, where 2013-08-27 is the date of the post and newton-institute is the short title. This short title is used in the URL of the post, so this becomes blog/newton-institute/, so the short title should be long enough and unique enough not to cause conflicts with other posts.
- Look over the metadata format guide
- Look over the Markdown style guide
All source code in this repository, consisting of files with extensions .html, .css, .less, .rb or .js, is freely available under an MIT license, unless otherwise noted within a file. You're welcome to borrow / repurpose code to build your own site, but I would very much appreciate attribution and a link back to bedford.io from your about page.
The MIT License (MIT)
Copyright (c) 2013-2024 Trevor Bedford
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.