← Back to Course Hub

Professor's Guide

SE 423 Course Material Repository

Overview

This repository holds all course material for SE 423 — lecture slides, lab handouts, homework assignments, and an interactive course website. The key idea is simple: you edit files, push them to GitHub, and everything else happens automatically.

The workflow in one sentence

Edit a .tex or .pptx file → push to the main branch → GitHub automatically compiles it into a PDF and publishes it to the course website.

What lives where

Directory / FileWhat it contains
Lectures/Slides/PowerPoint slides (.pptx) for each lecture
Lectures/Figures/Vector figures (TikZ / SVG) used in slides — auto-converted to SVG
Labs/Lab handout source files (.tex)
Homeworks/Homework assignment source files (.tex)
site/The GitHub Pages website (HTML + JavaScript)
header.texShared formatting — all assignments import this
pdf-list.txtThe build manifest — lists every .tex file the CI should compile
.github/workflows/build-latex.ymlThe automation script (GitHub Actions) — you rarely need to touch this

How CI Works (The Automatic Pipeline)

"CI" stands for Continuous Integration — it's a robot that runs on GitHub's servers every time you push code. You never have to install LaTeX or PDF tools on your own machine; the robot handles it.

Happens automatically on every push

  • .tex files → compiled to PDF and accessible HTML
  • .pptx files → converted to PDF
  • • TikZ figure files → converted to SVG for the website gallery
  • • All outputs published to the artifacts branch (which GitHub Pages serves)

You must do manually

  • • Write / edit .tex and .pptx files
  • • Add new .tex files to pdf-list.txt
  • • Update site/index.html when adding new assignments
  • • Commit and push your changes

⚠ Never edit the artifacts branch directly

The artifacts branch is completely managed by the robot. Any manual edits you make there will be overwritten the next time CI runs. Always edit on the main branch.

Triggering a full rebuild

By default, CI only recompiles files that changed. To force a complete rebuild of everything (useful after renaming files or fixing a shared header):

  1. 1Go to your GitHub repository page
  2. 2Click Actions in the top menu
  3. 3Click the Build LaTeX PDFs workflow
  4. 4Click Run workflowRun workflow — this rebuilds every file in pdf-list.txt

Forking for Your Own Course

"Forking" means creating your own copy of this repository that you fully control. From that point on, you can change anything without affecting the original SE 423 materials.

1

Fork on GitHub

Go to the repository page, click Fork (top right), and choose your personal or institutional account. GitHub creates a full copy under your account.

2

Enable GitHub Actions on your fork

Forks start with Actions disabled. Go to Actions tab in your forked repo and click Enable GitHub Actions.

3

Update the course name and metadata in header.tex

Near line 158 of header.tex, change these two lines to match your course:

\def\CourseCode{ECE 420}
\def\CourseName{Advanced Robotics}
4

Set your course start date in timline.tex

Change the start date so that due-date calculations across all assignments update automatically:

\def\StartDate{2026-01-20}   % Change to your semester start date (YYYY-MM-DD)
\def\HWCheckOffTime{5PM}     % Time students demo work in lab
\def\HWSubmitTime{9AM}       % Time Gradescope submissions are due

After this one change, every \GetDate{week}{day} call in every homework file automatically shows the correct date for your semester.

5

Replace or clear out the existing content

Delete the existing Lectures/Slides/*.pptx, Labs/*.tex, and Homeworks/*.tex files and replace them with your own. Keep the directory structure intact.

6

Enable GitHub Pages

Go to Settings → Pages in your forked repo. Under Source, select Deploy from a branch, choose branch artifacts, folder / (root), and save. After the first CI run, your site will be live at https://your-username.github.io/repo-name/.

Lecture Slides (PPTX)

Lecture slides live in Lectures/Slides/ as PowerPoint files. The CI converts each one to PDF automatically — you don't need to export them yourself.

Adding a new lecture

  1. 1Create your slide deck in Microsoft PowerPoint (recommended) or LibreOffice Impress, following the UIUC branding guidelines for colors.
  2. 2Name the file following the existing pattern: L1.pptx, L2.pptx, … and place it in Lectures/Slides/.
  3. 3Commit and push to main. The CI detects all L*.pptx files automatically — no entry in pdf-list.txt is needed for slides.
  4. 4Add a card to the lectures list in site/index.html so it appears on the course hub (see the Website section).

💡 UIUC Color Palette

Illini Blue #13294B
Illini Orange #FF5F05
Arches #009FD4
Prairie #006230
Harvest #FCB316

⚠ Sourcing images

Always note the source of any image or diagram taken from an external website. Add a small caption below the image (e.g., "Source: Wikipedia"). Circuit diagrams from the F28379D technical reference should cite that document.

Lab Assignments

Lab handouts are written in LaTeX and compiled to PDF by the CI. If you've never used LaTeX before, read the LaTeX Primer section first, then come back here.

Creating a new lab

Copy this template and save it as Labs/Lab4.tex (or whatever number comes next):

\documentclass[11pt]{article}

\def\AssignmentMode{Lab}      % Do not change this for labs
\def\HWNum{4}                 % Lab number
\def\AssignmentText{Brief one-line description of the lab}

\input{header}                % Loads all shared formatting — do not move this line

\begin{document}

\MakeAssignmentTitle          % Prints the gray title box at the top

\section*{Goals for this Lab Assignment}
\begin{itemize}
    \item Goal 1
    \item Goal 2
\end{itemize}

\section*{Laboratory Exercises}

\Ex                           % Exercise 1 (auto-numbered)

Description of the first exercise.

\begin{enumerate}
    \item Step one
    \item Step two
\end{enumerate}

\Ex[Optional title]           % Exercise 2 with a subtitle

Another exercise. Code example:

\begin{minted}{c}
int main(void) {
    // Your C code here
    return 0;
}
\end{minted}

\MakeFooter                   % Prints the reminder box at the bottom
\end{document}

Registering the lab so CI compiles it

Open pdf-list.txt and add a line for your new file:

Labs/Lab4.tex

🚫 If you skip this step, CI will not compile your file

Every .tex file that should become a PDF must be listed in pdf-list.txt. The CI ignores .tex files not on this list.

Homework Assignments

Homework files follow the same LaTeX pattern as labs but use \AssignmentMode{HW} and include accessibility metadata required by UIUC's PDF/UA-2 standard.

Homework template

% This block MUST come first — before \documentclass.
% It enables accessibility tagging in the PDF output.
\ifdefined\HCode\else
\DocumentMetadata{
  testphase = {phase-III, math, table},
  pdfstandard = ua-2,
  lang = en
}
\fi

\documentclass[11pt]{article}

\def\AssignmentMode{HW}      % Do not change this for homeworks
\def\HWNum{7}                % Homework number

\input{header}

% \GetDate{weeks}{days} counts from the semester start date defined in timline.tex
\def\AssignmentText{%
  Check-offs due \HWCheckOffTime~\GetDate{8}{1}.
  Gradescope submission due \HWSubmitTime~\GetDate{8}{2}.%
}

\begin{document}
\MakeAssignmentTitle

\Ex[First Problem]

Problem description here. You can use \textbf{bold}, \textit{italics},
or \mintinline{c}{inline code}.

\Ex[Second Problem]

\begin{enumerate}
    \item Part a
    \item Part b
\end{enumerate}

\MakeFooter
\end{document}

Due dates with \GetDate

The \GetDate{weeks}{days} macro counts forward from the \StartDate you set in timline.tex. You never hardcode dates — if the semester shifts, you change \StartDate once and every deadline updates.

CommandMeans
\GetDate{2}{1}2 weeks + 1 day after start date
\GetDate{4}{5}4 weeks + 5 days after start date

Add the new file to pdf-list.txt:

Homeworks/HW7.tex

Figures

Figures in Lectures/Figures/ are automatically converted to SVG and shown in the website's gallery. Each figure gets a modal preview card — no manual steps needed.

Preferred formats (best to worst)

✓ TikZ (.tex) — Best

Written in LaTeX, compiles to a perfect vector graphic. CI converts it to SVG automatically. Use for diagrams, block diagrams, and circuit drawings.

✓ SVG — Good

Native vector format for the web. Export from Inkscape, Figma, or Adobe Illustrator. CI copies it directly.

~ PNG / JPG — Only when necessary

Raster images look blurry when zoomed. Only use if no vector source exists (e.g., a photo of lab hardware). Always provide meaningful alt text for accessibility.

Naming convention

Use lowercase with underscores. The filename becomes the gallery card title.

Good nameBad name
adc_soc_trigger_flow.texFigure1.png
encoder_disk_diagram.svgUntitled.svg

Using a figure in a LaTeX document

% Always use \AltImg (not plain \includegraphics) for accessibility.
% The third argument is the alt text — describe what the figure shows.
\begin{figure}[H]
\centering
\AltImg[width=0.8\textwidth]{Lectures/Figures/adc_soc_trigger_flow.pdf}{%
    Block diagram showing ADC SOC trigger path from ePWM through
    SOC channel selection to the ADC result register%
}
\caption{ADC SOC trigger flow.}
\end{figure}

ℹ TikZ figures are compiled to PDF then referenced as PDF

In your \includegraphics call, reference the .pdf version of the figure (e.g., Lectures/Figures/mydiagram.pdf). The CI converts the TikZ .tex to PDF first, then to SVG for the web.

Course Website (site/index.html)

The course hub page lists all lectures, labs, and homeworks as clickable cards. This list is not automatically generated from the file system — you must manually update the JavaScript data object inside site/index.html when you add new content.

Adding a homework card

Search for the hw: array in site/index.html and add an entry:

// Inside the data object in site/index.html
hw: [
  // ... existing entries ...
  {
    title: "Homework 7: SLAM",
    file: "Homeworks/HW7.pdf",
    links: [
      { label: "Dataset",   url: "https://example.com/slam-dataset" },
      { label: "Reference", url: "https://example.com/slam-paper"   }
    ]
  },
]

Adding a lecture card

lectures: [
  // ... existing entries ...
  {
    title: "Lecture 24: SLAM",
    basePath: "Lectures/Slides/L24",   // CI creates both L24.pdf and leaves L24.pptx
    topic: "Simultaneous Localization and Mapping, particle filters"
  },
]

ℹ The figure gallery updates automatically

The SVG gallery (the modal that shows all figures) is injected by CI between the /* INJECT_FIGURES_START */ and /* INJECT_FIGURES_END */ markers. Do not edit that block manually — it will be overwritten.

Adding an interactive tool

  1. 1Create site/my_tool.html as a self-contained HTML page (see color_spaces.html as a reference)
  2. 2Add a navigation button in the header of site/index.html linking to it
  3. 3Push to main — CI copies the entire site/ directory to the artifacts branch

LaTeX Primer for Beginners

LaTeX is a document preparation system where you write plain text with formatting commands, and it produces a professionally typeset PDF. Think of it like writing HTML, but for documents.

💡 Easiest way to get started: Overleaf

Overleaf is a free browser-based LaTeX editor — no installation required. This repo supports Overleaf sync, so you can import it directly. UIUC provides free Overleaf Professional accounts to faculty and students.

Core concepts

Commands start with a backslash

\textbf{bold text}      → bold text
\textit{italic text}    → italic text
\texttt{code font}      → monospace
\url{https://uiuc.edu}  → clickable link

Environments wrap blocks of content

\begin{itemize}          % unordered list
    \item First item
    \item Second item
\end{itemize}

\begin{enumerate}        % numbered list
    \item Step one
    \item Step two
\end{enumerate}

Math mode uses dollar signs

Inline math: $x = \frac{-b \pm \sqrt{b^2 - 4ac}}{2a}$

Display math (centered, on its own line):
\[ F = ma \]

Code listings with minted

% Inline: short snippet in a sentence
The function \mintinline{c}{int main(void)} starts every program.

% Block: multi-line code
\begin{minted}{c}
#include <stdio.h>
int main(void) {
    printf("Hello, world!\n");
    return 0;
}
\end{minted}

Repo-specific macros you'll use constantly

MacroWhat it does
\MakeAssignmentTitlePrints the gray title box at the top of the document
\MakeFooterPrints the reminder box at the bottom (about code comments)
\ExStarts a new exercise (auto-numbered)
\Ex[Subtitle]Starts a new exercise with an optional subtitle
\AltImg[width=...]{path}{alt text}Inserts an image with accessibility alt text
\GetDate{weeks}{days}Computes a date relative to the semester start
\mintinline{c}{code}Inline syntax-highlighted code

Formatting rules specific to this repo

Do thisNot thisWhy
\begin{figure}[H]\begin{figure}[t]Forces figure to appear exactly where written
\begin{subfigure}[b]\begin{subfigure}[t]Bottom-aligns side-by-side figures
$\rightarrow$->Proper math arrow in text
Add a % line between paragraphs and environmentsBlank lines between \end{...} and \begin{...}Prevents spacing issues in HTML output
\AltImg\includegraphicsRequired for accessibility compliance

Accessibility Requirements

UIUC requires course materials to meet WCAG 2.1 AA accessibility standards. This repo's CI pipeline automatically handles most of it — but you need to follow a few rules when writing content.

ℹ What the repo handles automatically

  • PDF/UA-2 accessibility tagging (via tagpdf package)
  • Dark mode support on the website (system preference detection)
  • Accessible HTML conversion with ARIA attributes
  • WCAG AA color contrast for code blocks

What you must do

1. Always use \AltImg for images (never bare \includegraphics)

% ✓ Correct — includes alt text for screen readers
\AltImg[width=\textwidth]{Labs/Figures/board.jpg}{%
    Top view of the F28379D breakout board with four 2x10 headers
    soldered along the top edge and 18 LEDs in two rows below%
}

% ✗ Wrong — no alt text, fails accessibility check
\includegraphics[width=\textwidth]{Labs/Figures/board.jpg}

2. Write meaningful alt text — describe what the image shows, not just what it is

Good alt textBad alt text
"Block diagram showing ePWM → ADC SOC trigger with channel select and result register output""Figure 1" or "diagram"
"Photo of soldered board, top view. Headers installed along top edge.""board photo"

3. Use \AltMath for important equations

% Wraps the equation with an English description for screen readers
\AltMath{Newton's second law: force equals mass times acceleration}{%
    F = ma
}

4. Do not use color alone to convey meaning

For example, don't write "the red wire connects to pin 3" without also providing a label or pattern. Users who are colorblind will miss color-only cues.

Checking your work

  • • Run the WebAIM WAVE tool on any HTML page you publish to check for errors
  • • For PDFs: open in Adobe Acrobat and run the built-in Accessibility Checker
  • • UIUC's accessibility guide: Box link

💡 Easiest way to fix WCAG constrast issues

ConstrastFinder is a free browser-based tool for finding the closest accessible color contrast based on your foreground color and background color — no installation required. UIUC only requires WCAG AA constrast, so you can use the "AA" column values to fix any issues flagged by the WAVE tool or Acrobat checker.

Quick Reference

TaskWhat to do
Change course nameEdit \def\CourseCode and \def\CourseName in header.tex
Change semester start dateEdit \def\StartDate in timline.tex
Add a lecture slide deckPut L23.pptx in Lectures/Slides/, add entry to data.lectures in site/index.html
Add a new labCreate Labs/Lab4.tex, add line to pdf-list.txt, add card to data.labs in site/index.html
Add a new homeworkCreate Homeworks/HW7.tex, add line to pdf-list.txt, add card to data.hw in site/index.html
Add a figure to the galleryPut a .tex or .svg file in Lectures/Figures/ — gallery updates automatically on next CI run
Force a full rebuildGitHub → Actions → Build LaTeX PDFs → Run workflow
Add a new package to LaTeXOpen an issue to discuss first — package order affects the accessibility pipeline

Contact

Questions about this repository? Contact the original author:

Marius Juston

marius.juston@hotmail.fr  ·  mjuston2@illinois.edu

If you're a professor adapting this material for your own course, Marius would love to hear from you!