Jekyll-journal is a set of handrolled extensions to Jekyll, customized for use as an academic journal templating system. I built it to help manage Hyperrhiz and (shortly) Rhizomes. You can use Jekyll-journal for whatever, but I am not available for tech support because I have to, you know, run a journal.
J-j is built to include some of the things useful for journal organization and display:
J-j is not a journal management system for editorial processes. We got that handled already, kthxbye.
Before you start you'll need:
To get and run the site files:
git clone https://github.com/hyperrhiz/jekyll-journal.git
cd jekyll-journal
gem install jekyll bundler
bundle init
gem "jekyll"
bundle
bundle exec jekyll serve
baseurl: /jekyll-journal
(line 37) from _config.yml. This is just in there so that Github Pages can figure out pathnames in the demo site. Once you do this, you'll be previewable directly at http://localhost:4000/.{% include corner.html %}
from "page.html" in the _layouts folder. Otherwise you'll be stuck with that Github logo.gem install jekyll-sitemap
gem "jekyll-sitemap"
bundle
Jekyll builds sites from templates, so you can use it to layout visual elements. But it's also a way of organizing (and reorganizing) information: regeneration means you can do important things like make sitewide content or settings changes and only have to do it in one place.
All the sidebar/topbar pages are in the folder named "meta". You can rename or remove them as you see fit and they will update automatically. You'll want to keep the "archive" page, though, so you can see previous issues.
As you save your files, they'll automatically regenerate; so you can preview the entire site using your browser. You might want to keep your terminal window open too, since this will tell you when the site has completed. Sometimes it can take a few seconds.
Individual articles in each issue will only generate if the issue folder is listed as output:true
in _config.yml. I've put in a commented out "issue02" so you can see how it will work after the first one.
!important! _config.yml does not update while your local server is running. So, if you make changes to that file, you'll need to interrupt the web server (ctrl-c) in Terminal and restart it again using bundle exec jekyll serve.
My workflow looks something like this:
Each issue is based on the Jekyll "collections" system. The index file in the root of each collection specifies basic info and the "category_menu" layout generates a table of contents.
In the _issue01 folder is a sample issue. Files include a working example of the footnoting system, multiauthor citation, and a sample "special feature" subsection.
When customizing, create a new collection for each issue. Write your yml carefully. If you have weird quotes that you want to put in there, use the |- method to escape them upfront. There's an example in the bios.yml file in the data folder.
First off you'll need an index page with the following info in the root of the issue folder.
---
layout: category_index <-- leave this as is
index: true <-- leave this as is
type: issue01 <-- the name of your issue folder without the underscore
DOI: xxx <-- the part of the doi unique to this issue. leave off the base journal doi
issue: 01
season: Season
year: 200x
topic: Issue topic <-- appears in the header
subtopic: <-- optional
editor: [nameofeditor] <-- match this to a bio entry in bios.yml in the data folder (see below)
categories: [section1, section2, section3] <-- labels for each part of the issue
description: short description for metadata and twitter
media:
- path: path/foldername/ <-- media server pathname for this issue. leave off the base url specified in _config.yml
default: filename.jpg <-- default image for social media. it should be in the media folder specified in media_path
---
Next, individual articles. The yml for a typical article looks like this:
---
layout: page <-- standard
category: name of the section within the issue. must exactly match the name in the index list
type: name of the folder containing the issue, minus the underscore
issue: a number
year: a year
DOI: xxx.xxx <-- the parts of the doi unique to this issue and article. leave off the base journal doi
title: title of the essay as it will appear in the TOC
bio: [author1, author2] <-- these should match the entry in the bio.yml file
description: short description for metadata and twitter
media:
- path: path/foldername/ <-- media server pathname for this issue. leave off the base url specified in _config.yml
default: <-- default image for social media. it should be in the media folder specified in media_path
---
"bios.yml" contains all author info. These are used to generate sidebar bios for each article. I've gone back & forth about whether it's better to have bios in one place for updating or to treat them like historical artefacts. For the moment, I've chosen the "one place" approach so as to keep authors updated.
The "feature" folder is a place to store info for generating "special feature" submenus, for example a curated collection of items by different people like this one that you want gathered together as an integrated unit in a journal issue. You could also use it for an individual essay that has multiple pages with different content like this one. The yml is used to generate a subtable of contents. Make a new file for each special feature collection.
The "xml" folder is a place to put your data stuff like crossref and doaj deposit files.
I used bio info from astronauts as an example. Because astronauts are amazing and should be in everything.
these data are also used to generate individual citations for each page. Still working on getting a selective "role" working (eg "edited by" or "curated by" since there is a case problem if the author appears in more than one place in the same issue.)
The "current issue" link is designated in _config.yml on line 51 - so every time you publish a new issue, you'll need to make sure the folder name is correct on line 51.
Once you're ready, push all the files to your server (see below on choices - either use git to keep it all together, or just upload the _site file using SFTP).
If you have your own server and don't want to mess with git, you can simply use SFTP and upload the contents of the _site folder to the root of your domain, remembering to back up your local files regularly.
If your site is relatively small and uncomplicated, you can keep it on Github Pages following their instructions here (they even have automatic Jekyll support). There are some things that this prevents, though, such as plugins and .htaccess. I use my own server so that authors have their files kept private and I can maintain embargoes for proofing during the production process.
If you want to keep the Jekyll files all tracked offsite, you should set up a git repo in the root of your user folder. It's tricky to set up (or at least it was for me), but could save you from disaster if your laptop dies and you don't have your Jekyll install backed up elsewhere. I used these instructions for Dreamhost.