A modern, learner-centered course website built with Next.js and designed for seamless integration with Canvas LMS. This repository contains all course materials, resources, and documentation for the Deep Learning Mastery course.
This project implements a hybrid approach combining the best of GitHub Pages and Canvas LMS:
- GitHub Pages: Delivers beautiful, static course content (videos, readings, code examples)
- Canvas LMS: Handles course management (authentication, progress tracking, quizzes, assignments)
- β Clean Separation: Content delivery vs. course management
- β Always Accessible: Materials remain available after course completion
- β Easy Maintenance: Update content without breaking Canvas integration
- β Professional Design: Modern, responsive, and accessible interface
- β SEO Friendly: Course materials discoverable by search engines
``` βββββββββββββββββββ βββββββββββββββββββ β GitHub Pages β β Canvas LMS β β β β β β β’ Course ContentβββββΊβ β’ Authenticationβ β β’ Video Lecturesβ β β’ Progress Trackβ β β’ Code Examples β β β’ Quizzes β β β’ Resources β β β’ Assignments β β β’ Documentation β β β’ Gradebook β βββββββββββββββββββ βββββββββββββββββββ ```
- Node.js 18+ and npm
- Git
- GitHub account
- Canvas LMS access (for course management)
-
Clone the repository ```bash git clone https://github.com/your-username/dl-course-materials.git cd dl-course-materials ```
-
Install dependencies ```bash npm install ```
-
Start development server ```bash npm run dev ```
-
Open in browser ``` http://localhost:3000 ```
-
Enable GitHub Pages
- Go to repository Settings β Pages
- Select "Deploy from a branch"
- Choose "main" branch and "/ (root)" folder
-
Configure custom domain (optional) ```bash echo "your-domain.com" > public/CNAME ```
-
Deploy ```bash npm run build npm run export git add . git commit -m "Deploy to GitHub Pages" git push origin main ```
``` dl-course-materials/ βββ app/ # Next.js app directory β βββ page.tsx # Homepage with course overview β βββ layout.tsx # Global layout and navigation β βββ globals.css # Global styles β βββ module/ β β βββ [id]/ β β βββ page.tsx # Individual module pages β βββ resources/ β β βββ page.tsx # Additional learning resources β βββ setup/ β β βββ page.tsx # Environment setup guide β βββ faq/ β β βββ page.tsx # Frequently asked questions β βββ canvas-integration/ β β βββ page.tsx # Canvas integration guide β βββ implementation/ β βββ page.tsx # Implementation checklist βββ components/ # Reusable UI components β βββ ui/ # shadcn/ui components βββ public/ # Static assets β βββ slides/ # Course slide decks β βββ images/ # Course images β βββ requirements.txt # Python requirements βββ docs/ # Documentation β βββ canvas-setup.md # Canvas configuration guide β βββ deployment.md # Deployment instructions βββ package.json # Node.js dependencies βββ next.config.js # Next.js configuration βββ tailwind.config.js # Tailwind CSS configuration βββ README.md # This file ```
The course consists of 12 modules, each following a consistent structure:
- Learning Objectives: Clear goals for each module
- Lecture Materials: Video lectures and slide presentations
- Required Readings: Essential texts and research papers
- Code Examples: Jupyter notebooks and Python scripts
- Additional Resources: Supplementary materials and tools
``` Pre-class Preparation β Lectures β Readings β Code Practice β Assessment ```
- Create Canvas Modules: One for each course module (1-12)
- Configure External Tools: Set up LTI integration with GitHub Pages
- Link Content: Point Canvas modules to GitHub Pages materials
- Set Up Assessments: Create quizzes and assignments in Canvas
Each Canvas module should include:
- Overview page with link to GitHub materials
- Knowledge check quiz (due before live session)
- Assignment submission portal
- Discussion forum for Q&A
```html
\`\`\`- Update colors in
tailwind.config.js
- Replace logo/branding in
app/layout.tsx
- Modify course title and description
- Module content: Edit files in
app/module/[id]/page.tsx
- Course overview: Update
app/page.tsx
- Resources: Modify
app/resources/page.tsx
- Add/remove navigation items in
app/layout.tsx
- Update footer links and information
- Create new module data in the appropriate page component
- Add module to the main course modules array
- Create any associated resources (slides, notebooks, etc.)
- Update Canvas to link to the new module
- Edit the relevant page component
- Update any linked resources
- Test changes locally before deploying
- Deploy to GitHub Pages
- Videos: Host on YouTube/Vimeo, embed links
- Slides: Store in
public/slides/
directory - Notebooks: Host on Google Colab, link to GitHub
- Readings: Link to external sources or PDFs
- Semantic HTML structure
- Meta tags and descriptions
- Open Graph tags for social sharing
- Sitemap generation
```javascript // Add to app/layout.tsx import { GoogleAnalytics } from '@next/third-parties/google'
export default function RootLayout({ children }) { return ( {children} ) } ```
```bash
npm run dev
npm run build
npm start ```
- All links work correctly
- Mobile responsiveness verified
- Canvas integration tested
- Content accuracy reviewed
- Performance optimized
- Push changes to main branch
- GitHub Actions automatically deploys
- Site available at
https://username.github.io/repository-name
- Add CNAME file:
echo "yourdomain.com" > public/CNAME
- Configure DNS records with your domain provider
- Enable HTTPS in GitHub Pages settings
- Vercel: Connect GitHub repo for automatic deployments
- Netlify: Drag and drop build folder or connect repo
- AWS S3: Upload build files to S3 bucket with static hosting
Build Errors ```bash
rm -rf .next node_modules package-lock.json npm install npm run build ```
Canvas Integration Issues
- Verify External Tool configuration
- Check CORS settings
- Test iframe embedding as fallback
Mobile Display Problems
- Test responsive breakpoints
- Verify touch interactions
- Check viewport meta tag
- Check the FAQ page
- Review Canvas Integration Guide
- Open GitHub issue for bugs
- Contact course administrators for Canvas issues
- Static site generation (SSG)
- Image optimization with Next.js
- CSS and JavaScript minification
- Lazy loading for images and components
```bash
npm run build npm run analyze
npx lighthouse http://localhost:3000 ```
- No sensitive data in client-side code
- External links open in new tabs
- Content Security Policy headers
- Regular dependency updates
- No API keys in public code
- External links properly configured
- Dependencies regularly updated
- HTTPS enabled for production
- Fork the repository
- Create feature branch:
git checkout -b feature/new-module
- Make changes and test locally
- Submit pull request with description
- Follow existing module structure
- Ensure mobile responsiveness
- Test all external links
- Include proper attribution for resources
This project is licensed under the MIT License - see the LICENSE file for details.
- Next.js: React framework for production
- Tailwind CSS: Utility-first CSS framework
- shadcn/ui: Beautiful UI components
- Lucide React: Icon library
- Canvas LMS: Learning management system integration
- Use Canvas discussion forums for course questions
- Check the Setup Guide for technical issues
- Contact course instructors via Canvas messaging
- Review the Implementation Guide
- Check Canvas Integration documentation
- Open GitHub issues for technical problems
- Course Website: https://your-username.github.io/dl-course-materials
- Canvas Course: https://canvas.instructure.com/courses/your-course
- GitHub Repository: https://github.com/your-username/dl-course-materials
- Instructor Email: instructor@university.edu
- Live Course Website
- Canvas Course
- GitHub Repository
- Implementation Checklist
- Canvas Integration Guide
Happy Learning! π
Each module page (/module/[id]
) follows this structure in order:
- Lecture Video β Embedded YouTube iframe inside a responsive 16:9 container (
padding-bottom: 56.25%
) and wrapped inmax-w-4xl mx-auto
. A right-aligned button in the header links to "Lecture Notes & HW Notebook" (GitHub). - Resources & Homework Card β placed directly under the video and contains:
- A short paragraph with the recommended reading from Dive into Deep Learning (D2L), e.g. "read up to Β§ 5.2".
- A second paragraph describing the homework notebook. (No buttons hereβthe Notes & Notebook button is next to the lecture title, and Gradescope lives in the top navbar.)
That's itβno separate "Lecture Notes" or "Homework" sections. The page remains minimal: video β single card.
notebooks/ (kept only if you want rendered copies)
# Active development happens in the separate repo:
https://github.com/Shakeri-Lab/dl-course
In each module folder of that repo you keep:
notes.pdf
ornotes.ipynb
homework.ipynb
- Duplicate
app/module/1/page.tsx
βapp/module/2/page.tsx
(etc.). - Change:
β’ YouTube
src
andtitle
β’ D2L reading range β’ Button links. - Add the new materials under
https://github.com/Shakeri-Lab/dl-course/tree/main/module-X
.