Purpose
This website designed as an open science showcase for recent work from the Bedford Lab. We have a blog for news and smaller analyses, but also project pages that mirror ongoing research developments that take place on GitHub. This structure is meant to make sharing of results as frictionless as possible, with the idea of having a GitHub repo that contains everything of key importance to a project. Within this GitHub repo, README.md
files or other Markdown files describe methods and results and such files get copied over to projects/, where we’ve attempted to streamline navigation. So, reading the basics of a project can be done from the site, but if someone wants to really dive in, all the source code, data files, etc… are available from GitHub.
Source code
All source code that’s necessary to construct the site is freely available on GitHub. All code is placed under the MIT license. 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.
Forks
Forks of the site have started appearing. It’s very gratifying to see this. Here’s the list that I know about:
- Bik Lab: biklab.github.io
- Canepa Research Lab: caneparesearch.org
- Charlton Callender: chacalle.github.io
- CCS Lab: ccs-lab.github.io
- Cognitive Science Group: cognitivesciences.github.io/
- Drummond Lab: drummondlab.org
- Hughey Lab: hugheylab.org
- Human Analysis Lab: hal.cse.msu.edu
- iMED Lab: stephen-snow.github.io/imedlab
- Jayich Lab: jayich.io
- John Barton: johnbarton.github.io
- Miller Lab: mj-miller.net
- Neonatal Neuroimaging Unit: neonatalneuroimagingunit.github.io
- Nielsen Lab: nielsen-lab.github.io
- Premal Shah Lab: theshahlab.org
- Riggleman Lab: rrgroup.seas.upenn.edu
- Robin Green: robingreen525.github.io
- Sammons Lab: thesammonslab.org/
- Sohrab Shah Lab: shahlab.ca
- Stefan Canzar: ttic.uchicago.edu/~canzar/
- Stenglein Lab: www.stengleinlab.org
- Subramaniam Lab: rasilab.org
- Trapnell Lab: cole-trapnell-lab.github.io
- Vijaykrishna Lab: vjlab.io
- Zid Lab: zidlab.ucsd.edu
- Zhenke Wu: zhenkewu.com
Web stack
In migrating to Jekyll, I’ve tried to bring the site up to speed with current web standards. I thought I’d describe the web stack I arrived at.
Build
The site is built with Jekyll. This allows the site to be versioned on GitHub and, importantly, allows anyone with commit access to the GitHub repository to easily contribute. This makes it possible to have a shared lab blog that multiple people can manage.
Content is stored as simple Markdown files with a bit of YAML at the top. This keeps content mostly semantic and can be easily processed. An example post can be seen here. In addition to including blog posts, simple Markdown files are included for papers and people, in which case the YAML metadata is bit broader, indicating things like paper PDFs or Twitter handles.
I had wanted to make it possible to point the site at GitHub repos and display their contents in a nicely formatted way. These are projects, and in their case, there is no data on them in the site, except for a list of repo names. Project data is pulled in automatically by cloning the project repo and project metadata is gathered using Octokit to access the GitHub API via a preprocessing script. This allows project pages to display things like a list of contributors and recent commits.
Design
Site layout and design is built on top of Bootstrap. This gives a responsive grid to work with as well as a number of useful CSS components like code blocks and nav bars. On top of this I have included:
- Custom fonts via Typekit
- Icons via Font Awesome
- Solarized code highlighting
- Equation rendering via KaTeX
- Infinite scroll via jQuery and custom script
Deploy
Deployment is done to an Amazon S3 bucket, using s3-website. I’ve written a script to update and deploy the site to S3. I then have an Amazon CloudFront distribution set up to mirror the S3 files across Amazon’s network to improve download speeds. This solution appears faster and cheaper than using other hosting providers and is ideal for serving a static site.