A reusable Jekyll template for research groups that need:
- a clear institutional homepage
- people profiles
- research project pages
- news posts
- publication listing
- automatic deployment on GitHub Pages
This repository currently contains CARISMA content, but the structure is template-ready and can be adapted for any research group.
- Production URL pattern (project site):
https://<org-or-user>.github.io/<repo>/ - In this repo:
https://iusspavia-carisma.github.io/lab-website/
- Jekyll
~> 4.3 - Ruby (CI uses Ruby
3.2) - GitHub Actions workflow for Pages deploy:
.github/workflows/jekyll.yml
- Clone the repository.
- Install dependencies:
bundle install
- Start local server:
bundle exec jekyll serve - Open:
http://localhost:4000/lab-website/
If your local Ruby does not match Gemfile.lock (for example missing Bundler 2.5.6), either:
- install the required bundler version, or
- update lockfile/bundler version consistently for your team.
Deploy is automatic on push to main through GitHub Actions.
Workflow:
- Build Jekyll site
- Upload
_siteartifact - Deploy to GitHub Pages environment
Required repository settings:
Settings->Pages- Source:
GitHub Actions - Ensure Actions are enabled for the repository
Main configuration is in _config.yml.
Important keys:
url: full base domain, e.g.https://example.github.iobaseurl:"/repo-name"for project pages""for user/org root pages
name,description: generic site metadataseo.title,seo.description: social preview/homepage metadatalab.*: lab identity, mission text, activities, collaborations, homepage sectionsnavigation: top menu linkssocial: footer links
After changing _config.yml, restart local Jekyll server.
Editable markdown pages:
index.mdabout.mdpeople.mdresearch.mdpublications.mdeducation.mdresources.mdnews.mdcontact.md
_people/-> profile pages_research/-> project/research detail pages_news/-> dated news posts
Layouts:
- Copy
_people/_template.md - Rename to
firstname-lastname.md - Fill front matter (
name,slug,position, contact links, etc.) - Set
published: true(or remove the line) when ready - Optional: add photo in
assets/img/people/and setphoto - Optional: update
assets/carisma_people.csvfor your own tracking
- Copy
_news/_template.md - Rename to
YYYY-MM-DD-short-title.md - Fill
title,date,author, body content - Set
published: true(or removepublished: false)
- Add a markdown file in
_research/ - Include at least:
--- title: "Project Name" project: true ---
- Optional fields consumed by layout:
subtitlestatusfundingteam(list)
Manual file:
Automated generator:
- script:
scripts/generate_publications_md.rb - input CSV:
assets/carisma_pub.csv
Run:
ruby scripts/generate_publications_md.rbThe script rebuilds publications.md from CSV rows.
- Main stylesheet:
assets/css/main.css - Shared layout/head metadata:
_layouts/default.html - Navigation/footer includes:
- Hero slider include:
_includes/hero-slider.html - Images/PDFs:
assets/img/,assets/pdf/
- Fork or copy this repository.
- Replace lab identity fields in
_config.yml:lab.name,lab.full_name,lab.tagline, contacts, collaborations
- Replace logo/images in
assets/img/. - Replace people/news/research collections with your content.
- Update
urlandbaseurlbased on your GitHub Pages target. - Push to
mainand verify Pages deployment in Actions.
Check:
- Actions run succeeded (
Deploy Jekyll site to Pages) - Pages source is
GitHub Actions - You are opening the correct URL with
baseurl - Hard refresh browser cache
- Preview uses Open Graph/Twitter metadata in
_layouts/default.html, not visible page text. - After updating metadata, social apps may cache old previews. Test with a temporary query param (example:
?v=2).
See LICENCE.md.