This is a Jekyll theme based on Bootstrap 4 which can be used to make a simple, responsive website for a one-day conference or workshop with parallel tracks containing:
- program / schedule
- talk and speaker descriptions
- map for directions
All components such as talks, speakers or rooms are represented as collection of files. The schedule is given is defined via a simple structure stored in a YAML file. There is no need for databases and once generated the website consists only of static files. The design is easily modifiable and is adapted for mobile uses and printing.
The theme was originally created for the yearly Winterkongress conference of the Digital Society Switzerland. You can see this theme in action here:
There are three ways to install: As a Gem-based theme, as a remote theme (GitHub Pages compatible), or by cloning/forking this repository and reference to it directly.
With Gem-based themes, directories such as the assets
, _layouts
, _includes
, and _sass
are stored in the theme’s gem, hidden from your immediate view. Yet all of the necessary directories will be read and processed during Jekyll’s build process.
This allows for easier installation and updating as you don't have to manage any of the theme files. To install:
-
Add the following to your
Gemfile
:gem "jekyll-theme-conference"
-
Fetch and update bundled gems by running the following Bundler command:
bundle
-
Set the
theme
in your project's Jekyll_config.yml
file:theme: jekyll-theme-conference
-
Copy the internationalization file containing the different language strings for this repository to your Jekyll folder:
_data/lang.yml
-
Continue with the Setup section further below to customize the theme and add some content for your conference
To update the theme run bundle update
.
Remote themes are similar to Gem-based themes, but do not require Gemfile
changes or whitelisting making them ideal for sites hosted with GitHub Pages.
To install:
-
Create/replace the contents of your
Gemfile
with the following:source "https://rubygems.org" gem "github-pages", group: :jekyll_plugins
-
Add
jekyll-include-cache
to theplugins
array of your_config.yml
. -
Fetch and update bundled gems by running the following Bundler command:
bundle
-
Add
remote_theme: "DigitaleGesellschaft/jekyll-conference@2.0.0"
to your_config.yml
file. Remove any othertheme:
orremote_theme:
entry. -
Copy the internationalization file containing the different language strings for this repository to your Jekyll folder:
_data/lang.yml
-
Continue with the Setup section further below to customize the theme and add some content for your conference
The different talks, speakers and rooms are stored as a collection of files. Each file contains a small header in form of a YAML block (called FrontMatter) which is used to store additional information beside a description. Their exact use and meaning is described further below in the section Content. Additional configuration options can be found in the section Configuration.
The actual schedule defining when and in which room a talk takes place is stored as a YAML data file under _data/program.yml
. For further details about it see below in the section Content.
In order to be up and running simply use the default content of this repository as an initial base for your new website. After having setup a new Jekyll website copy the following files and folders into the website's folder:
_config.example.yml
->_config.yml
_data/
_rooms/
_speakers/
_talks/
index.md
location/
program/
speakers/
talks/
There exists a Python file in this repository, create_entries.py
, which can be used to import content from a CSV table and generate the different talk, speakers and room files automatically based on it. Just open your terminal and type python create_entries.py --help
to show the help and get started.
In case you do not want to install the entire Ruby/Jekyll toolchain on your machine you can make use of GitHub Actions, Github's continuous integration platform. This repository contains an example Github Action configuration file which automatically builds the website upon adding a new tag. It then attaches the generated website as package to a release for easy downloading. Simply copy the following file to your repository and adapt it to your needs:
workflows.example.yml
->.github/workflows.main.yml
All configurations and customization for this theme are stored under the conference
property in the _config.yml
file. You can find an example configuration containing most of the here discussed parameters under _config.example.yml
in this repository.
The three required collections containing the files for the talks, speakers and rooms have to be specified in the _config.yml
file. The first block declares them and sets the URL under which they will later be accessed. The second block defines the default layout for each of the collection.
collections:
talks:
output: true
permalink: /:collection/:title/
speakers:
output: true
permalink: /:collection/:title/
rooms:
output: true
permalink: /:collection/:title/
defaults:
- scope:
path: ""
type: talks
values:
layout: talk
- scope:
path: ""
type: speakers
values:
layout: speaker
- scope:
path: ""
type: rooms
values:
layout: room
In order to change the URL of the collection, simply edit the permalink
property and replace the :collection
tag (which translates to talks
, speakers
and rooms
) with your desired value. Please note that the talk and speaker overview pages should residue in a folder of the same name.
Note: While you might want to change the URLs, the name of the three collections (talks
, speakers
and rooms
) is fixed and cannot be changed.
In order to adapt the language of the theme set the lang
property. Make sure you have copied the internationalization file from this repository to _data/lang.yml
. Currently the following languages are supported:
- English:
en
(Default) - German:
de
- French:
fr
- Portuguese:
pt
Example:
conference:
lang: en
The navigation bar is located at the top and visible on every site. On the right it show the title of the website (site.title
) followed by the links listed under the links
property of the navigation
property. Each link consists of
- the text to show (
name
), - a relative (
relative_url
) or absolute link address (absolute_url
) or a collapsed menu listing additional sublinks (menu
), and - optionally if it is disabled (
disabled: true
).
Example:
conference:
navigation:
links:
- name: Program
relative_url: /program/
- name: Previous Editions
menu:
- name: 2020 (current)
disabled: true
- name: 2019
relative_url: /2019/
Optionally, a logo or link of your organization hosting the conference can be shown on the right side of the navigation bar. It is activate through the logo
property under the navigation
property containing
- the text to show (
name
), - an absolute link address (
url
), and - optionally a logo to show instead of the text (
img
), whereby the path to the image file relative to the/assets/images/
folder has to be specified.
Example:
conference:
navigation:
...
logo:
name: Magic Organisation
url: 'https://github.com'
The main landing page is shown at the root of the website to greet new visitors. In order to show it you need to create a index.md
file in the root of your website's folder and specify its layout as layout: main
. The remaining customizations are specified in the _config.yml
file.
The main page states your site's title (site.title
) or a logo instead. The logo can be configured through the logo
property under the main
property containing:
- a
img
property specifying the path to the image file relative to the/assets/images/
folder.
Example:
conference:
main:
logo:
img: 'main_logo.png'
The title/logo on the main page is followed by a description of your site (site.description
) and the content of your index.md
file. It ends with an optional list of links in the form of buttons. Each link consists of
- the text to show (
name
), - a relative (
relative_url
) or absolute link address (absolute_url
) or a collapsed menu listing additional sublinks (menu
), and - optionally if it is disabled (
disabled: true
).
Example:
conference:
main:
...
links:
- name: Program
relative_url: /program/
- name: Tickets
disabled: true
absolute_url: ''
One or multiple information banners or boxes can be shown at the top of the website just below the navigation bar. They are prominent but dismissable and can inform your visitors about recent changes. They are activate through the info_bars
property which contains a list for each information banner to show. Each banner consists of
- a title (
title
), - a color (
color
) following the Bootstrap color scheme (see below), possible values are:primary
(your website's main color, normally blue)secondary
(your website's secondary color, normally grey)success
(green)alert
(red)warning
(yellow)info
(blue)light
(white)dark
(dark grey)
- an additional text (
text
, markdown supported), - the option to show it on all pages, only the main landing page (
main_only: true
), or all pages except the main landing page (pages_only: true
).
Example:
conference:
info_bars:
- title: Sold Out!
color: primary
main_only: true
text: |
We're truly sorry but we are sold out.
---
Try again next year.
Each talk can have one or multiple categories associated via FrontMatter (see the Individual Pages: Talks section below for more details). Some of these categories can be elevated to so called main categories". These are used to color group the talks across the entire website, particularly in the program. In order to do so add the main_categories
property under the talks
property. It consists of a list of all main categories. Each main category consists of:
- its name (
name
, must be corresponding to the listed categories in the talk's FrontMatter), and - a color (
color
) following the Bootstrap color scheme (see below), possible values are:primary
(your website's main color, normally blue)secondary
(your website's secondary color, normally grey)success
(green)alert
(red)warning
(yellow)info
(blue)light
(white)dark
(dark grey)
Example:
conference:
talks:
# Talk categories
main_categories:
- name: Cat A
color: info
- name: Cat B
color: success
In the program as well as the speaker's overview the speaker's first name can be abbreviated to its first letter. Of course, you also have the option to not specify a first name for each speaker in the first place. In order to shorten the first name add the show_firstname: true
setting (default: false
) to the speakers
property.
Example:
conference:
speakers:
show_firstname: false
In case the location of your rooms is obvious (e.g. on a campus) you can decide to disable the location page and links to all the rooms. You still need to create the different rooms as files in the _rooms/
directory, since they are needed as a reference. But there will not be any link pointing to it (effectively hiding them).
In order to hide all rooms add the hide: true
setting (default: false
) to the location
property.
Alternatively, you can show the rooms as usual but hide the map container on the room overview page. In order to hide only the map add the map: false
setting (default: true
) to the location
property.
If your location
overview file is not located under /location
you can indicate an alternative path by setting the url
property (default: /location
) under the location
property.
Example:
conference:
location:
hide: true
map: false
The schedule shown as program can be slightly customized:
- The time steps shown with a new line can be adapted with the
time_steps
setting given in minute (default:15
minutes) - Besides the full hour the individual time steps can be hidden by setting
show_alltimes: false
(default:true
)
If your program
file is not located under /program
you can indicate an alternative path by setting the url
property (default: /program
) under the program
property.
Example:
conference:
program:
time_steps: 15 # in minutes
show_alltimes: true
The different talks, speakers and rooms are stored as a collection of file. Each file contains a small header in form of a YAML block (called FrontMatter) which is used to store additional information beside a description. The actual schedule defining when and in which room a talk takes place is stored as a YAML data file.
The schedule of the conference linking the talks with the rooms and indicating when each talk talks place and how long it goes is set in the _data/program.yml
file. It consists of an array of rooms each consisting of a
room
name (must correspond to one of the room identifier), and- an array of
talks
which also can be empty[]
.
The order of the room in the file defines the order of the rooms on the website (program and room listings). Each talk in the array consists of
- a
name
(must correspond to one of the talk identifier), - a starting time
time_start
given asH:M
(strftime
formated), and - an end time
time_end
.
The array should (manually) be ordered by time. Currently talks can only take place on the same day and multi-day conferences are not supported.
Example:
- room: Room A
talks:
- name: Vim Impetus Placerat Cotidieque Ad
time_start: '12:00'
time_end: '12:45'
- name: Condimentum Vitae Sapien Pellentesque
time_start: '12:45'
time_end: '13:30'
- room: Room B
talks:
...
Each talk is represented by a file in the _talks/
directory. It must begin with valid YAML Front Matter containing
- the talk's
name
(used as identifier), - one or more existing
speakers
name(s), and - optionally one or more
categories
of which one should be a main category as defined in the site's configuration - optionally a list of
links
whereby each link element consist of- a
name
, and - either an absolute link
href
or afile
name (of a file stored under/documents/
)
- a
- optionally
hide: true
if the talk's page should not be linked to.
Each speaker is represented by a file in the _speakers/
directory. It must begin with valid YAML Front Matter containing
- the speaker's
name
(used as identifier), as well as its first_name
,last_name
,- optionally a list of
links
whereby each link element consist of- a
name
, and - either an absolute link
href
or afile
name (of a file stored under/documents/
)
- a
- optionally
hide: true
if the speaker's page should not be linked to.
Each room is represented by a file in the _rooms/
directory. It must begin with valid YAML Front Matter containing
- the room's
name
, and - optionally
hide: true
if the room's page should not be linked to.
For each of the three collections there exist a dedicated layout giving an overview among all items of the collection. Furthermore, there exists a layout to show the program as a time schedule. Simply create an empty page and associate the corresponding layout with it:
talks/index.md
withlayout: talk-overview
speakers/index.md
withlayout: speaker-overview
location/index.md
withlayout: location
program/index.md
withlayout: program
They can be empty but should contain the layout
property in the FrontMatter header.
If you choose a different location for the overview pages you must:
- in case of the
talks
andspeaker
overview file, adapt the URL of the two collections as described further above in the section Collection URLs, and - in case of the
location
andprogram
file, adapt the correspondingurl
parameter as described further above in the sections Location Settings and Program Settings.
The location
layout contains a map container (if not disabled, see section Location Settings: Hide all and disable map above) which can be adapted. The map is based on the JavaScript Library Leaflet and can be customized by editing the assets/js/map.js
file (copy it from this repository).
Additional static pages can easily be added as files and linked to via navigation bar or main landing page (see above on how to).
The design is based on the Bootstrap 4 and thus easily expandable. Furthermore, it makes use of the FontAwesome Icons across the theme. Custom Bootstrap themes or simple color schemes such as designed with Bootstrap Magic can be added in the main SASS stylesheet:
-
Create a new file under
assets/css/main.scss
with the following content (or copy the one of this repository):--- --- $fa-font-path: '{{ site.baseurl }}/assets/webfonts'; @import 'conference';
Do not skip the
$fa-font-path
variable or modify it as otherwise, the FontAwesome icons will not be able to load. -
Add your Bootstrap variables in front of the
@import 'conference'
line, e.g. currently the primary color is set internally to green (instead of Bootstrap's default blue):$primary: #074 !default;
-
Add any additional CSS styles after it.
This project is licensed under the MIT License. You can view LICENSE.md for more details.
This project redistributes other opensource tools and libraries. You can view REDISTRIBUTED.md for third party licenses.