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 / File | What 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.tex | Shared formatting — all assignments import this |
| pdf-list.txt | The build manifest — lists every .tex file the CI should compile |
| .github/workflows/build-latex.yml | The 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):
- 1Go to your GitHub repository page
- 2Click Actions in the top menu
- 3Click the Build LaTeX PDFs workflow
- 4Click Run workflow → Run 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.
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.
Enable GitHub Actions on your fork
Forks start with Actions disabled. Go to Actions tab in your forked repo and click Enable GitHub Actions.
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}
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.
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.
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
- 1Create your slide deck in Microsoft PowerPoint (recommended) or LibreOffice Impress, following the UIUC branding guidelines for colors.
- 2Name the file following the existing pattern: L1.pptx, L2.pptx, … and place it in Lectures/Slides/.
- 3Commit and push to main. The CI detects all L*.pptx files automatically — no entry in pdf-list.txt is needed for slides.
- 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
⚠ 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.
| Command | Means |
|---|---|
| \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 name | Bad name |
|---|---|
| adc_soc_trigger_flow.tex | Figure1.png |
| encoder_disk_diagram.svg | Untitled.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
- 1Create site/my_tool.html as a self-contained HTML page (see color_spaces.html as a reference)
- 2Add a navigation button in the header of site/index.html linking to it
- 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
| Macro | What it does |
|---|---|
| \MakeAssignmentTitle | Prints the gray title box at the top of the document |
| \MakeFooter | Prints the reminder box at the bottom (about code comments) |
| \Ex | Starts 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 this | Not this | Why |
|---|---|---|
| \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 environments | Blank lines between \end{...} and \begin{...} | Prevents spacing issues in HTML output |
| \AltImg | \includegraphics | Required 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 text | Bad 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
| Task | What to do |
|---|---|
| Change course name | Edit \def\CourseCode and \def\CourseName in header.tex |
| Change semester start date | Edit \def\StartDate in timline.tex |
| Add a lecture slide deck | Put L23.pptx in Lectures/Slides/, add entry to data.lectures in site/index.html |
| Add a new lab | Create Labs/Lab4.tex, add line to pdf-list.txt, add card to data.labs in site/index.html |
| Add a new homework | Create Homeworks/HW7.tex, add line to pdf-list.txt, add card to data.hw in site/index.html |
| Add a figure to the gallery | Put a .tex or .svg file in Lectures/Figures/ — gallery updates automatically on next CI run |
| Force a full rebuild | GitHub → Actions → Build LaTeX PDFs → Run workflow |
| Add a new package to LaTeX | Open 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!