diff --git a/CUSTOMIZE.md b/CUSTOMIZE.md
index c49e69a..64ce883 100644
--- a/CUSTOMIZE.md
+++ b/CUSTOMIZE.md
@@ -409,6 +409,67 @@ Then in your landing page template:
{% endif %}
```
+### Creating a teachings collection
+
+The al-folio theme includes a pre-configured `_teachings/` collection for course pages. Each course is represented by a markdown file with frontmatter metadata. Here's how to add or modify courses:
+
+#### Course file format
+
+Create markdown files in `_teachings/` with the following structure:
+
+```yaml
+---
+layout: course
+title: Course Title
+description: Course description
+instructor: Your Name
+year: 2023
+term: Fall
+location: Room 101
+time: MWF 10:00-11:00
+course_id: course-id # This should be unique
+schedule:
+ - week: 1
+ date: Jan 10
+ topic: Introduction
+ description: Overview of course content and objectives
+ materials:
+ - name: Slides
+ url: /assets/pdf/example_pdf.pdf
+ - name: Reading
+ url: https://example.com/reading
+ - week: 2
+ date: Jan 17
+ topic: Topic 2
+ description: Description of this week's content
+---
+Additional course content, information, or resources can be added here as markdown.
+```
+
+#### Important course collection notes
+
+1. Each course file must have a unique `course_id` in the frontmatter
+2. Course files will be grouped by `year` on the teaching page
+3. Within each year, courses are sorted by `term`
+4. The content below the frontmatter (written in markdown) will appear on the individual course page
+5. The schedule section will be automatically formatted into a table
+
+#### Required fields
+
+- `layout: course` — Must be set to use the course layout
+- `title` — The course title
+- `year` — The year the course was/will be taught (used for sorting)
+- `course_id` — A unique identifier for the course
+
+#### Optional fields
+
+- `description` — A brief description of the course
+- `instructor` — The course instructor's name
+- `term` — The academic term (e.g., Fall, Spring, Summer)
+- `location` — The course location
+- `time` — The course meeting time
+- `schedule` — A list of course sessions with details
+
### Collections with categories and tags
If you want to add category and tag support (like the blog posts have), you need to configure the `jekyll-archives` section in [\_config.yml](_config.yml). See how this is done with the `books` collection for reference. For more details, check the [jekyll-archives-v2 documentation](https://george-gca.github.io/jekyll-archives-v2/).
diff --git a/_config.yml b/_config.yml
index 7f056c7..259ae05 100644
--- a/_config.yml
+++ b/_config.yml
@@ -164,6 +164,8 @@ collections:
output: true
projects:
output: true
+ teachings:
+ output: true
# -----------------------------------------------------------------------------
# Jekyll settings
diff --git a/_includes/course_schedule.liquid b/_includes/course_schedule.liquid
new file mode 100644
index 0000000..363387b
--- /dev/null
+++ b/_includes/course_schedule.liquid
@@ -0,0 +1,71 @@
+{% assign course = site.teachings | where: 'course_id', include.course_id | first %}
+
+{% if course %}
+
+
{{ course.title }}
+
+ {% if course.description %}
+
+ {{ course.description | markdownify }}
+
+ {% endif %}
+
+ {% if course.instructor %}
+
Instructor: {{ course.instructor }}
+ {% endif %}
+
+ {% if course.term %}
+
Term: {{ course.term }}
+ {% endif %}
+
+ {% if course.schedule %}
+
+
+
+ | Week |
+ Date |
+ Topic |
+ Materials |
+
+
+
+ {% for entry in course.schedule %}
+
+ | {{ entry.week }} |
+ {{ entry.date }} |
+
+ {% if entry.topic %}
+ {{ entry.topic }}
+ {% endif %}
+ {% if entry.description %}
+ {{ entry.description | markdownify }}
+ {% endif %}
+ |
+
+ {% if entry.materials %}
+
+ {% for material in entry.materials %}
+ -
+ {% if material.url %}
+ {% if material.url contains '://' %}
+ {{ material.name }}
+ {% else %}
+ {{ material.name }}
+ {% endif %}
+ {% else %}
+ {{ material.name }}
+ {% endif %}
+
+ {% endfor %}
+
+ {% endif %}
+ |
+
+ {% endfor %}
+
+
+ {% else %}
+
No schedule available for this course.
+ {% endif %}
+
+{% endif %}
diff --git a/_includes/courses.liquid b/_includes/courses.liquid
new file mode 100644
index 0000000..85858d3
--- /dev/null
+++ b/_includes/courses.liquid
@@ -0,0 +1,37 @@
+{% if site.teachings %}
+
+ {% assign courses_by_year = site.teachings | sort: 'year' | reverse | group_by: 'year' %}
+
+ {% for year_group in courses_by_year %}
+
{{ year_group.name }}
+
+ {% assign year_courses = year_group.items | sort: 'term' %}
+ {% for course in year_courses %}
+
+
+
+
+ {% if course.term %}
+ {{ course.term }}
+ {% endif %}
+
+ {% if course.instructor %}
+ {{ course.instructor }}
+ {% endif %}
+
+
+ {% if course.description %}
+
+ {{ course.description | markdownify }}
+
+ {% endif %}
+
+ {% endfor %}
+
+ {% endfor %}
+
+{% else %}
+ No courses available yet.
+{% endif %}
diff --git a/_layouts/course.liquid b/_layouts/course.liquid
new file mode 100644
index 0000000..aa37b6a
--- /dev/null
+++ b/_layouts/course.liquid
@@ -0,0 +1,75 @@
+---
+layout: page
+---
+
+ {% if page.instructor or page.term or page.location or page.time %}
+
+ {% if page.instructor %}
+
Instructor: {{ page.instructor }}
+ {% endif %}
+
+ {% if page.term %}
+
Term: {{ page.term }}
+ {% endif %}
+
+ {% if page.location %}
+
Location: {{ page.location }}
+ {% endif %}
+
+ {% if page.time %}
+
Time: {{ page.time }}
+ {% endif %}
+
+ {% endif %}
+
+ {{ content }}
+
+ {% if page.schedule %}
+
Schedule
+
+
+
+ | Week |
+ Date |
+ Topic |
+ Materials |
+
+
+
+ {% for entry in page.schedule %}
+
+ | {{ entry.week }} |
+ {{ entry.date }} |
+
+ {% if entry.topic %}
+ {{ entry.topic }}
+ {% endif %}
+ {% if entry.description %}
+ {{ entry.description | markdownify }}
+ {% endif %}
+ |
+
+ {% if entry.materials %}
+
+ {% for material in entry.materials %}
+ -
+ {% if material.url %}
+ {% if material.url contains '://' %}
+ {{ material.name }}
+ {% else %}
+ {{ material.name }}
+ {% endif %}
+ {% else %}
+ {{ material.name }}
+ {% endif %}
+
+ {% endfor %}
+
+ {% endif %}
+ |
+
+ {% endfor %}
+
+
+ {% endif %}
+
diff --git a/_layouts/cv.liquid b/_layouts/cv.liquid
index 17f6c41..7ab4686 100644
--- a/_layouts/cv.liquid
+++ b/_layouts/cv.liquid
@@ -11,7 +11,7 @@ layout: default
{% if page.cv_pdf contains '://' %}
href="{{ page.cv_pdf }}"
{% else %}
- href="{{ page.cv_pdf | prepend: 'assets/pdf/' | relative_url }}"
+ href="{{ page.cv_pdf | relative_url }}"
{% endif %}
target="_blank"
rel="noopener noreferrer"
@@ -62,7 +62,7 @@ layout: default
{% if page.cv_pdf contains '://' %}
href="{{ page.cv_pdf }}"
{% else %}
- href="{{ page.cv_pdf | prepend: 'assets/pdf/' | relative_url }}"
+ href="{{ page.cv_pdf | relative_url }}"
{% endif %}
target="_blank"
rel="noopener noreferrer"
diff --git a/_pages/cv.md b/_pages/cv.md
index f13f402..b0b112b 100644
--- a/_pages/cv.md
+++ b/_pages/cv.md
@@ -4,7 +4,7 @@ permalink: /cv/
title: cv
nav: true
nav_order: 5
-cv_pdf: example_pdf.pdf # you can also use external links here
+cv_pdf: /assets/pdf/example_pdf.pdf # you can also use external links here
description: This is a description of the page. You can modify it in '_pages/cv.md'. You can also change or remove the top pdf download button.
toc:
sidebar: left
diff --git a/_pages/teaching.md b/_pages/teaching.md
index 87bb1a5..3f1adb0 100644
--- a/_pages/teaching.md
+++ b/_pages/teaching.md
@@ -2,11 +2,11 @@
layout: page
permalink: /teaching/
title: teaching
-description: Materials for courses you taught. Replace this text with your description.
+description: Course materials, schedules, and resources for classes taught.
nav: true
nav_order: 6
---
-For now, this page is assumed to be a static description of your courses. You can convert it to a collection similar to `_projects/` so that you can have a dedicated page for each course.
+This page displays a collection of courses with detailed schedules, materials, and resources. You can organize your courses by years, terms, or topics.
-Organize your courses by years, topics, or universities, however you like!
+{% include courses.liquid %}
diff --git a/_sass/_teachings.scss b/_sass/_teachings.scss
new file mode 100644
index 0000000..c33204c
--- /dev/null
+++ b/_sass/_teachings.scss
@@ -0,0 +1,77 @@
+/*****************************
+ * Teachings/Courses styles
+ *****************************/
+
+.courses {
+ margin-top: 30px;
+}
+
+.year {
+ margin-top: 40px;
+ margin-bottom: 20px;
+ border-bottom: 1px solid var(--global-divider-color);
+ padding-bottom: 10px;
+}
+
+.course-list {
+ display: grid;
+ grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
+ gap: 20px;
+}
+
+.course-item {
+ border: 1px solid var(--global-divider-color);
+ border-radius: 5px;
+ padding: 15px;
+ background-color: var(--global-bg-color);
+ transition: transform 0.2s ease-in-out;
+
+ &:hover {
+ transform: translateY(-5px);
+ box-shadow: 0 10px 20px rgba(0, 0, 0, 0.05);
+ }
+}
+
+.course-title {
+ margin-top: 0;
+ margin-bottom: 10px;
+}
+
+.course-meta {
+ font-size: 0.9rem;
+ color: var(--global-text-color-light);
+ margin-bottom: 10px;
+}
+
+.course-term,
+.course-instructor {
+ margin-right: 15px;
+}
+
+.course-description {
+ font-size: 0.9rem;
+ margin-bottom: 15px;
+
+ p {
+ margin-bottom: 0;
+ }
+}
+
+.course-info {
+ margin-bottom: 30px;
+}
+
+.course-schedule {
+ margin-bottom: 30px;
+}
+
+.schedule-description {
+ p {
+ margin-bottom: 0;
+ }
+}
+
+.schedule-materials {
+ padding-left: 18px;
+ margin-bottom: 0;
+}
diff --git a/_teachings/data-science-fundamentals.md b/_teachings/data-science-fundamentals.md
new file mode 100644
index 0000000..703263c
--- /dev/null
+++ b/_teachings/data-science-fundamentals.md
@@ -0,0 +1,97 @@
+---
+layout: course
+title: Data Science Fundamentals
+description: This course covers the foundational aspects of data science, including data collection, cleaning, analysis, and visualization. Students will learn practical skills for working with real-world datasets.
+instructor: Prof. Data
+year: 2024
+term: Spring
+location: Science Building, Room 202
+time: Mondays and Wednesdays, 2:00-3:30 PM
+course_id: data-science-fundamentals
+schedule:
+ - week: 1
+ date: Feb 5
+ topic: Introduction to Data Science
+ description: Overview of the data science workflow and key concepts.
+ materials:
+ - name: Syllabus
+ url: /assets/pdf/example_pdf.pdf
+ - name: Slides
+ url: /assets/pdf/example_pdf.pdf
+
+ - week: 2
+ date: Feb 12
+ topic: Data Collection and APIs
+ description: Methods for collecting data through APIs, web scraping, and databases.
+ materials:
+ - name: Lecture Notes
+ url: /assets/pdf/example_pdf.pdf
+ - name: Assignment 1
+ url: /assets/pdf/example_pdf.pdf
+
+ - week: 3
+ date: Feb 19
+ topic: Data Cleaning and Preprocessing
+ description: Techniques for handling missing values, outliers, and data transformation.
+ materials:
+ - name: Lecture Notes
+ url: /assets/pdf/example_pdf.pdf
+ - name: Coding Lab
+ url: https://github.com/
+
+ - week: 4
+ date: Feb 26
+ topic: Exploratory Data Analysis
+ description: Descriptive statistics, visualization, and pattern discovery.
+ materials:
+ - name: Lecture Notes
+ url: /assets/pdf/example_pdf.pdf
+ - name: Assignment 2
+ url: /assets/pdf/example_pdf.pdf
+
+ - week: 5
+ date: Mar 4
+ topic: Statistical Analysis
+ description: Hypothesis testing, confidence intervals, and statistical inference.
+ materials:
+ - name: Lecture Notes
+ url: /assets/pdf/example_pdf.pdf
+ - name: Review Materials
+ url: /assets/pdf/example_pdf.pdf
+
+ - week: 6
+ date: Mar 11
+ topic: Data Visualization
+ description: Principles and tools for effective data visualization.
+ materials:
+ - name: Lecture Notes
+ url: /assets/pdf/example_pdf.pdf
+ - name: Assignment 3
+ url: /assets/pdf/example_pdf.pdf
+---
+
+## Course Overview
+
+This course provides a comprehensive introduction to data science principles and practices. Students will:
+
+- Learn the end-to-end data science workflow
+- Gain practical experience with data manipulation tools
+- Develop skills in data visualization and communication
+- Apply statistical methods to derive insights from data
+
+## Prerequisites
+
+- Basic programming knowledge (preferably in Python)
+- Introductory statistics
+- Comfort with basic algebra
+
+## Textbooks
+
+- "Python for Data Analysis" by Wes McKinney
+- "Data Science from Scratch" by Joel Grus
+
+## Grading
+
+- Assignments: 50%
+- Project: 40%
+- Participation: 10%
diff --git a/_teachings/introduction-to-machine-learning.md b/_teachings/introduction-to-machine-learning.md
new file mode 100644
index 0000000..912c04d
--- /dev/null
+++ b/_teachings/introduction-to-machine-learning.md
@@ -0,0 +1,113 @@
+---
+layout: course
+title: Introduction to Machine Learning
+description: This course provides an introduction to machine learning concepts, algorithms, and applications. Students will learn about supervised and unsupervised learning, model evaluation, and practical implementations.
+instructor: Prof. Example
+year: 2023
+term: Fall
+location: Main Campus, Room 301
+time: Tuesdays and Thursdays, 10:00-11:30 AM
+course_id: intro-machine-learning
+schedule:
+ - week: 1
+ date: Sept 5
+ topic: Course Introduction
+ description: Overview of machine learning, course structure, and expectations.
+ materials:
+ - name: Syllabus
+ url: /assets/pdf/example_pdf.pdf
+ - name: Slides
+ url: /assets/pdf/example_pdf.pdf
+
+ - week: 2
+ date: Sept 12
+ topic: Linear Regression
+ description: Introduction to linear regression, gradient descent, and model evaluation.
+ materials:
+ - name: Lecture Notes
+ url: /assets/pdf/example_pdf.pdf
+ - name: Assignment 1
+ url: /assets/pdf/example_pdf.pdf
+
+ - week: 3
+ date: Sept 19
+ topic: Classification
+ description: Logistic regression, decision boundaries, and multi-class classification.
+ materials:
+ - name: Lecture Notes
+ url: /assets/pdf/example_pdf.pdf
+ - name: Coding Lab
+ url: https://github.com/
+
+ - week: 4
+ date: Sept 26
+ topic: Decision Trees and Random Forests
+ description: Tree-based methods, ensemble learning, and feature importance.
+ materials:
+ - name: Lecture Notes
+ url: /assets/pdf/example_pdf.pdf
+ - name: Assignment 2
+ url: /assets/pdf/example_pdf.pdf
+
+ - week: 5
+ date: Oct 3
+ topic: Support Vector Machines
+ description: Margin maximization, kernel methods, and support vectors.
+ materials:
+ - name: Lecture Notes
+ url: /assets/pdf/example_pdf.pdf
+ - name: Review Materials
+ url: /assets/pdf/example_pdf.pdf
+
+ - week: 6
+ date: Oct 10
+ topic: Midterm Exam
+ description: Covers weeks 1-5.
+
+ - week: 7
+ date: Oct 17
+ topic: Neural Networks Fundamentals
+ description: Perceptrons, multilayer networks, and backpropagation.
+ materials:
+ - name: Lecture Notes
+ url: /assets/pdf/example_pdf.pdf
+ - name: Assignment 3
+ url: /assets/pdf/example_pdf.pdf
+
+ - week: 8
+ date: Oct 24
+ topic: Deep Learning
+ description: Convolutional neural networks, recurrent neural networks, and applications.
+ materials:
+ - name: Lecture Notes
+ url: /assets/pdf/example_pdf.pdf
+ - name: Coding Lab
+ url: https://github.com/
+---
+
+## Course Overview
+
+This introductory course on machine learning covers fundamental concepts and algorithms in the field. By the end of this course, students will be able to:
+
+- Understand key machine learning paradigms and concepts
+- Implement basic machine learning algorithms
+- Evaluate and compare model performance
+- Apply machine learning techniques to real-world problems
+
+## Prerequisites
+
+- Basic knowledge of linear algebra and calculus
+- Programming experience in Python
+- Probability and statistics fundamentals
+
+## Textbooks
+
+- Primary: "Machine Learning: A Probabilistic Perspective" by Kevin Murphy
+- Reference: "Pattern Recognition and Machine Learning" by Christopher Bishop
+
+## Grading
+
+- Assignments: 40%
+- Midterm Exam: 20%
+- Final Project: 30%
+- Participation: 10%
diff --git a/assets/css/main.scss b/assets/css/main.scss
index 8fa1d3c..feea333 100644
--- a/assets/css/main.scss
+++ b/assets/css/main.scss
@@ -14,6 +14,7 @@ $max-content-width: {{ site.max_width }};
"distill",
"cv",
"tabs",
+ "teachings",
"typograms",
"font-awesome/fontawesome",
"font-awesome/brands",
diff --git a/package-lock.json b/package-lock.json
index 67b3aeb..03a38f1 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -5,8 +5,8 @@
"packages": {
"": {
"devDependencies": {
- "@shopify/prettier-plugin-liquid": "1.4.0",
- "prettier": "^3.1.1"
+ "@shopify/prettier-plugin-liquid": "1.10.0",
+ "prettier": "^3.7.4"
}
},
"node_modules/@shopify/liquid-html-parser": {
@@ -21,13 +21,13 @@
}
},
"node_modules/@shopify/prettier-plugin-liquid": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/@shopify/prettier-plugin-liquid/-/prettier-plugin-liquid-1.4.0.tgz",
- "integrity": "sha512-Fd0QiPi0bpSapUG0plri1+bLew9j//Q0MFKkBjkIG4RTJC76dycVysf5Dy7JvbvIjSJ4YFxaT0PBW5v9O7JItQ==",
+ "version": "1.10.0",
+ "resolved": "https://registry.npmjs.org/@shopify/prettier-plugin-liquid/-/prettier-plugin-liquid-1.10.0.tgz",
+ "integrity": "sha512-csHYjwuT34o8ja6EY0dUBYQS5UVwsKwRYxGiuG816Ov0B8lVd8FUjOwWUk2SnrNx3cGgL0no7z+Byapp7sC1Uw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@shopify/liquid-html-parser": "^2.0.0",
+ "@shopify/liquid-html-parser": "^2.9.0",
"html-styles": "^1.0.0"
},
"peerDependencies": {
@@ -83,9 +83,9 @@
}
},
"node_modules/prettier": {
- "version": "3.7.4",
- "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.7.4.tgz",
- "integrity": "sha512-v6UNi1+3hSlVvv8fSaoUbggEM5VErKmmpGA7Pl3HF8V6uKY7rvClBOJlH6yNwQtfTueNkGVpOv/mtWL9L4bgRA==",
+ "version": "3.8.0",
+ "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.8.0.tgz",
+ "integrity": "sha512-yEPsovQfpxYfgWNhCfECjG5AQaO+K3dp6XERmOepyPDVqcJm+bjyCVO3pmU+nAPe0N5dDvekfGezt/EIiRe1TA==",
"dev": true,
"license": "MIT",
"bin": {