This is a template for creating new ML@CL courses using Jekyll, LaMD (Lecture as Markdown), and VibeSafe project management tools.
# From the parent directory (e.g., /Users/neil/mlatcl/)
cp -r course-template/ yourcourse/
cd yourcourse/Run the customization script to update all placeholders:
./setup-course.shThis will prompt you for:
- Course code (e.g.,
mlfc,advds,mlphysical) - Course title (e.g., "Machine Learning Foundations")
- Course description
- Your name and institution
- Course venue
Alternatively, manually replace the following placeholders throughout the template:
tig- Your course code (e.g., mlfc, advds)The Inaccessible Game- Your course full titleA course about entropy, information geometry and Fisher information- Short course descriptionA course about entropy, information geometry and Fisher information- Longer description for home pageA course about entropy, information geometry and Fisher information- Overview paragraph for home pageYour Name,Your Institution- Author information
# Install Ruby gems for Jekyll
bundle install
# Make sure LaMD is installed
# See: https://github.com/lawrennd/lamdcd _lamd
cp sample-lecture.md 01-01-introduction.md
# Edit 01-01-introduction.md with your content
maketalk 01-01-introduction.mdbundle exec jekyll serve
# Visit http://localhost:4000/tig/# Initialize git repository
git init
git add .
git commit -m "Initial course setup"
# Create repository on GitHub (e.g., mlatcl/yourcourse)
git remote add origin https://github.com/mlatcl/yourcourse.git
git push -u origin main
# Enable GitHub Pages in repository settings
# Set source to "main" branch
# Your site will be at: https://mlatcl.github.io/yourcourse/course-template/
├── _config.yml # Jekyll configuration
├── _data/ # Site data (navigation, etc.)
│ ├── nav.yml # Navigation menu configuration
│ └── people.yml # Course instructors/TAs
├── _lamd/ # Lecture source files (LaMD format)
│ ├── _lamd.yml # LaMD configuration
│ ├── sample-lecture.md # Sample lecture
│ └── sample-practical.md # Sample practical
├── _lectures/ # Compiled lecture HTML (generated)
├── _notebooks/ # Compiled Jupyter notebooks (generated)
├── _practicals/ # Compiled practical exercises (generated)
├── _projects/ # Student project descriptions
├── _people/ # People information
├── slides/ # Compiled reveal.js slides (generated)
│ └── diagrams/ # Images and diagrams for slides
├── Gemfile # Ruby dependencies
├── .gitignore # Git ignore rules
├── index.html # Course home page
├── lectures.html # Lectures index page
├── practicals.html # Practicals index page
├── projects.html # Projects index page
├── setup-course.sh # Customization script
└── README.md # This file
Lectures are written in LaMD (Lecture as Markdown) format in the _lamd/ directory.
File naming convention: WW-SS-topic-name.md
- WW = week number (01, 02, etc.)
- SS = session number (01, 02, etc.)
Example: 01-01-introduction.md (Week 1, Session 1)
Compiling lectures:
cd _lamd
maketalk 01-01-introduction.mdThis generates:
- HTML lecture page in
_lectures/ - Reveal.js slides in
slides/ - Jupyter notebook in
_notebooks/
Practicals follow the same naming convention but include -practical:
01-01-introduction-practical.md
Common commands in LaMD files:
\notes{...}- Content for lecture notes (not in slides)\slides{...}- Content for slides only\subsection{...}- Section heading\code{...}- Executable Python code\setupcode{...}- Setup code (hidden in output)$$...$$- LaTeX mathematics\reading{...}- Reading list
See LaMD documentation for full details.
Main Jekyll configuration. Key settings:
title: Course titledescription: Course descriptionbaseurl: Course URL path (e.g.,/mlfc)collections: Defines lectures, practicals, projects
LaMD configuration. Key settings:
author: Your informationpostsdir,slidesdir, etc.: Output directoriesposts,ipynb,reveal: Enable/disable output formatsurl,baseurl: Website URLsvenue: Course venue
Navigation menu configuration. Customize the main navigation, footer, and top bar.
This template can be integrated with VibeSafe for project management:
- Backlog: Task tracking system
- CIPs (Code Improvement Plans): Structured improvements
- AI-Requirements: Requirements gathering framework
- Tenets: Project principles and guidelines
To install VibeSafe tools, see: VibeSafe Documentation
The template uses mlatcl/jekyll-theme. To use a different theme:
- Update
remote_themein_config.yml - Adjust layouts in HTML files if needed
Create custom layouts in _layouts/ directory:
---
layout: default
---
{{ content }}Add custom styles by creating _sass/custom.scss and including in Jekyll.
cd _lamd
# Create new file following naming convention
vim 02-01-new-topic.md
# Compile it
maketalk 02-01-new-topic.mdEdit _data/nav.yml to add/remove menu items.
Place images in slides/diagrams/ and reference in markdown:
bundle exec jekyll serve --watch
# Visit http://localhost:4000/tig/# Remove Jekyll build
rm -rf _site
# Remove generated lecture files
rm -rf _lectures/* _notebooks/* slides/*bundle install
bundle updateCheck:
_lamd.ymlconfiguration- YAML frontmatter in lecture files
- Python environment for code execution
- Verify
reveal: Truein_lamd.yml - Check that
slidesdirpath is correct - Ensure reveal.js is included in theme
- Check
baseurlin_config.ymlmatches repository name - Verify GitHub Pages is enabled in repository settings
- Wait a few minutes for GitHub Pages to build
- LaMD Documentation: https://inverseprobability.com/lamd
- LaMD GitHub: https://github.com/lawrennd/lamd
- Jekyll Documentation: https://jekyllrb.com/docs/
- GitHub Pages: https://pages.github.com/
- ML@CL Jekyll Theme: https://github.com/mlatcl/jekyll-theme
See these courses for examples:
- ML Foundations: https://github.com/mlatcl/mlfc
- Advanced Data Science: https://github.com/mlatcl/advds
- ML and the Physical World: https://github.com/mlatcl/mlphysical
- Deep Neural Networks: https://github.com/mlatcl/deepnn
For questions or issues:
- Open an issue on the course repository
- Contact ML@CL group: https://mlatcl.github.io/contact-us/
This template is provided as-is for creating ML@CL courses. Individual course content is subject to its own licensing.