The public website for DS 6050 Deep Learning (School of Data Science, University of Virginia), taught by Heman Shakeri. Twelve modules take you from linear models and backpropagation to transformers, parameter-efficient fine-tuning, and generative AI — through video lectures, readings from the open Dive into Deep Learning textbook, Colab notebooks, and self-check questions.
Live site: https://shakeri-lab.github.io/dl-course-site/ YouTube playlist: https://www.youtube.com/playlist?list=PLwZv_wzaKu3vzW88m6ASKemCTb70ukycH
The site is fully public and self-paced. For-credit logistics (deadlines, quizzes, submissions, grades) live in UVA's Canvas, not here.
- Next.js 15 (App Router, static export) + React 19 + TypeScript
- Tailwind CSS + a trimmed set of shadcn/ui components
- KaTeX for math in self-check questions (rendered at build time)
- Deployed to GitHub Pages by
.github/workflows/deploy.ymlon every push tomain
All course content is data, not markup. To update content you almost never touch JSX:
| File | Contents |
|---|---|
lib/module-data.ts |
Per-module lectures (YouTube IDs, slide PDFs), Colab links, readings, descriptions |
lib/module-extras.ts |
Per-module learning objectives, time estimates, prerequisites, D2L section links, homepage topics |
lib/self-check-data.ts |
Per-module self-check questions (KaTeX $...$ math supported) |
lib/site-config.ts |
Site-wide facts: URLs, instructor, playlist, analytics code, "content current as of" |
public/ |
Slide PDFs (Modules 11–12), syllabus PDF, logo, social-share card, llms.txt |
Pages (app/…/page.tsx) render that data through components/module-template.tsx and
friends. SEO infrastructure (sitemap, robots, JSON-LD, Open Graph) is generated from the
same data — adding a module to module-data.ts updates everything automatically.
- New lecture video: add
{ title, videoId }to the module'slecturesarray inlib/module-data.ts. - Change a reading: edit
d2lLinksinlib/module-extras.ts(each entry is a verifiedhttps://d2l.ai/...section URL). - Add a self-check question: append to the module's array in
lib/self-check-data.ts. - Enable analytics: create a free GoatCounter site and
put its code in
siteConfig.goatcounter. - New semester: update
siteConfig.contentCurrentAsOf, tag the release (git tag spring-2027), adjust content as needed.
npm install
npm run dev # http://localhost:3000
npm run build # static export to out/ (what GitHub Pages serves)The production build serves under the /dl-course-site base path (see
next.config.mjs); local dev runs at the root.
Push to main → GitHub Actions builds the static export and publishes it to GitHub
Pages. Nothing manual. A separate weekly workflow (link-check.yml) sweeps all external
links (D2L, arXiv, YouTube) and opens an issue if any rot.
- One learning path per module — watch → read → self-check → code, all on the module page. D2L is the canonical text for Modules 1–9; for Modules 10–12 (ViT, PEFT, quantization, multimodal, diffusion) the lecture slides and linked papers are the readings, because the book doesn't cover them at course depth.
- No slide duplication — lectures are board-first; slides are published only where they substitute for not-yet-recorded videos (Modules 11–12). Keeping slides out of the site elsewhere avoids drift against the LaTeX sources.
- Evergreen — no dates on the public site; semester logistics stay in Canvas.
Original course materials are licensed CC BY 4.0. Lecture videos © Heman Shakeri. Linked readings (papers, D2L) remain under their own licenses.