diff --git a/template/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md similarity index 100% rename from template/.github/ISSUE_TEMPLATE/bug_report.md rename to .github/ISSUE_TEMPLATE/bug_report.md diff --git a/template/.github/ISSUE_TEMPLATE/customization_help.md b/.github/ISSUE_TEMPLATE/customization_help.md similarity index 100% rename from template/.github/ISSUE_TEMPLATE/customization_help.md rename to .github/ISSUE_TEMPLATE/customization_help.md diff --git a/template/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md similarity index 100% rename from template/.github/ISSUE_TEMPLATE/feature_request.md rename to .github/ISSUE_TEMPLATE/feature_request.md diff --git a/template/.github/workflows/deploy-github-pages.yml b/.github/workflows/deploy-github-pages.yml similarity index 100% rename from template/.github/workflows/deploy-github-pages.yml rename to .github/workflows/deploy-github-pages.yml diff --git a/template/.github/workflows/html-validation.yml b/.github/workflows/html-validation.yml similarity index 100% rename from template/.github/workflows/html-validation.yml rename to .github/workflows/html-validation.yml diff --git a/template/.gitignore b/.gitignore similarity index 100% rename from template/.gitignore rename to .gitignore diff --git a/README.md b/README.md index 27c0cda..fdcf034 100644 --- a/README.md +++ b/README.md @@ -1,91 +1,739 @@ -# CourseWebsiteTemplate - -A free, modern course website template featuring interactive HTML presentations, attendance tracking with card reader support, and serverless backend - all deployable at no cost using GitHub and Netlify. - -## Live Examples - -See the template in action with these live course sites: -- **Web Programming**: [wp.profbobby.com](https://wp.profbobby.com) -- **Software Engineering**: [se.profbobby.com](https://se.profbobby.com) -- **Database Design**: [db.profbobby.com](https://db.profbobby.com) - -## Features - -- **Interactive Presentations**: Built-in HTML slide deck with keyboard navigation and presentation mode -- **Attendance Tracking**: Student registration and daily attendance with card swipe support -- **Attendance Overview**: Visual attendance reports and analytics -- **Serverless Backend**: Netlify Functions + Neon PostgreSQL (all free tier) -- **No Build Step**: Pure vanilla JS, HTML, and CSS - edit and deploy instantly -- **Responsive Design**: Works on desktop, tablet, and mobile devices -- **Dark/Light Mode**: Theme toggle with CSS custom properties - -## Quick Start (100% Free!) - -### 1. Use This Template - -Click the green **"Use this template"** button at the top of this page to create your own course repository. - -### 2. Set Up Your Free Services - -**GitHub** (already done if you're reading this!) -- Free hosting for your code -- Free static site hosting via GitHub Pages (optional) - -**Netlify** (recommended - free tier) -1. Sign up at [netlify.com](https://netlify.com) (free account) -2. Connect your GitHub repository -3. Deploy with one click - automatic HTTPS included! -4. Free tier includes: 100GB bandwidth/month, serverless functions, form handling - -**Neon** (for attendance database - free tier) -1. Sign up at [neon.tech](https://neon.tech) (free account) -2. Create a PostgreSQL database (free tier: 3GB storage, autoscaling) -3. Copy connection string to Netlify environment variables - -### 3. Customize Your Site - -Run the initialization wizard: -```bash -bash template/initialize-course.sh -``` - -Or manually edit: -- `template/index.html` - Course title, schedule, instructor info -- `template/styles/presentation.css` - Colors and theming -- `template/pages/lectures/` - Add your lecture slides - -### 4. Deploy - -**Option A: Netlify (Recommended)** -- Push to GitHub โ†’ Netlify auto-deploys -- Get free HTTPS domain: `your-course.netlify.app` -- Optional: Use custom domain - -**Option B: GitHub Pages** -- Enable in repository Settings โ†’ Pages -- Free hosting at `username.github.io/repo-name` - -## Documentation - -- **[Template Repository Guide](TEMPLATE_REPOSITORY_GUIDE.md)** - How to use this as a GitHub template -- **[Setup Checklist](template/SETUP_CHECKLIST.md)** - Step-by-step customization guide -- **[Project Overview](PROJECT_OVERVIEW.md)** - Technical architecture and features - -## Cost Breakdown - -Everything runs on free tiers: -- GitHub: Free (unlimited public repos) -- Netlify: Free (100GB bandwidth, 125k serverless function calls/month) -- Neon PostgreSQL: Free (3GB storage, 0.5GB RAM) -- **Total Monthly Cost: $0** - -## Support - -For questions or issues: -1. Check the [documentation files](template/SETUP_CHECKLIST.md) -2. Review [live examples](#live-examples) for inspiration -3. Open an issue in this repository - -## License - -MIT License - see [LICENSE](LICENSE) for details +# Course Website Template + +[![GitHub Template](https://img.shields.io/badge/GitHub-Template-green?logo=github)](https://github.com/bobbyreed/CourseWebsiteTemplate) +[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE) +[![Tested](https://img.shields.io/badge/Tests-71%2F71%20Passed-brightgreen)](docs/testing/TEST_REPORT.md) + +A domain-agnostic, professional course website template with interactive presentations, attendance tracking, and theme customization. **Battle-tested with 100+ students across 3 production courses.** + +## ๐Ÿ“š What Is This? + +This template provides everything you need to create a modern, interactive course website. It's designed for educators who want to: +- **Present lectures** using a built-in slide presentation system with keyboard navigation +- **Track attendance** (optional) using serverless PostgreSQL backend +- **Customize branding** quickly with theme variables +- **Deploy easily** to GitHub Pages, Netlify, or any static host + +No complex frameworks, no heavy dependenciesโ€”just clean HTML, CSS, and vanilla JavaScript that works everywhere. + +## ๐Ÿš€ Getting Started + +### Step 1: Create Your Repository + +This is a **GitHub Template Repository**, which means you can create a copy with one click: + +1. Click the **"Use this template"** button (green button at the top of this page) +2. Name your repository: + - Use format: `[CourseNumber]-[CourseName]` (e.g., `CSCI3403-WebProgramming`) + - Choose public or private (public allows free GitHub Pages hosting) +3. Click **"Create repository from template"** + +You now have your own copy! All files are yours to customize. + +### Step 2: Clone to Your Computer + +```bash +git clone https://github.com/YOUR-USERNAME/YOUR-REPO-NAME.git +cd YOUR-REPO-NAME +``` + +### Step 3: Choose Your Setup Path + +#### ๐ŸŽฏ Path A: Automated Setup (Recommended for Beginners) + +Run the interactive setup wizard: + +```bash +bash initialize-course.sh +``` + +The wizard will ask you questions and automatically update: +- Course title, number, and level +- Instructor name and contact information +- Institution colors and branding +- Semester and schedule +- Whether you want attendance tracking enabled + +**Time:** ~5 minutes | **Best for:** First-time users or quick setup + +Then follow the [Setup Checklist](SETUP_CHECKLIST.md) for deployment and final touches. + +#### ๐Ÿ”ง Path B: Manual Setup (More Control) + +Edit files directly for maximum customization: + +1. **Update course info** in `index.html` (lines 10-50) +2. **Customize colors** in `styles/theme-variables.css` +3. **Create lectures** by copying `pages/lectures/lectureTemplate.html` +4. **Deploy** to GitHub Pages or Netlify (see [Deployment](#deployment)) + +**Time:** ~15-30 minutes | **Best for:** Experienced users or specific customization needs + +See the [Quick Start](#quick-start) section below for detailed manual setup instructions. + +--- + +## Features + +- **Interactive Presentation System**: Keyboard navigation, theme toggle, timers, and auto-hide controls +- **Responsive Design**: Mobile-first layout that works on all devices +- **Dark/Light Themes**: User preference with localStorage persistence +- **Attendance Tracking** (Optional): Serverless PostgreSQL backend via Netlify Functions +- **Easy Customization**: Separated theme variables for quick branding + +## Quick Start + +### Automated Setup (Recommended) + +```bash +# After creating from template and cloning +cd your-course-repo +bash initialize-course.sh +``` + +The wizard will prompt you for: +- Course title, number, and level +- Instructor information +- Institution colors +- Whether you want attendance tracking +- Deployment preferences + +Then follow the [Setup Checklist](SETUP_CHECKLIST.md) for remaining tasks. + +### Manual Setup + +#### Option 1: Static Website (No Attendance) + +1. Create repository from this template on GitHub +2. Clone your new repository +3. Edit `index.html` with your course information +4. Customize colors in `styles/theme-variables.css` +5. Create lectures using `pages/lectures/lectureTemplate.html` +6. Deploy to GitHub Pages, Netlify, or any static host + +#### Option 2: Full Setup (With Attendance Tracking) + +1. Create repository from this template +2. Set up a [Neon PostgreSQL](https://neon.tech) database +3. Deploy to Netlify +4. Add `DATABASE_URL` environment variable in Netlify dashboard +5. Run database schema (see Database Setup below) +6. Customize your course information + +## ๐Ÿ“ Repository Structure + +After creating from this template, your repository will have this structure: + +``` +your-course-website/ +โ”œโ”€โ”€ index.html # ๐Ÿ  Course homepage - start here! +โ”œโ”€โ”€ SETUP_CHECKLIST.md # ๐Ÿ“‹ Step-by-step setup guide +โ”œโ”€โ”€ initialize-course.sh # ๐Ÿ”ง Automated setup wizard +โ”‚ +โ”œโ”€โ”€ pages/ # ๐Ÿ“„ All your course pages +โ”‚ โ”œโ”€โ”€ lectures/ # Lecture presentations +โ”‚ โ”‚ โ”œโ”€โ”€ lectureTemplate.html # Copy this for each new lecture +โ”‚ โ”‚ โ””โ”€โ”€ 1ExampleLecture.html # Example lecture to reference +โ”‚ โ”œโ”€โ”€ attendance.html # Student attendance tracking (optional) +โ”‚ โ””โ”€โ”€ register-students.html # Student registration (optional) +โ”‚ +โ”œโ”€โ”€ js/ # ๐ŸŽฎ Interactive functionality +โ”‚ โ”œโ”€โ”€ presentation.js # Core slide navigation & controls +โ”‚ โ”œโ”€โ”€ classroom-auth.js # Authentication helpers (optional) +โ”‚ โ””โ”€โ”€ utils.js # Shared utility functions +โ”‚ +โ”œโ”€โ”€ styles/ # ๐ŸŽจ Look and feel +โ”‚ โ”œโ”€โ”€ theme-variables.css # โšก CUSTOMIZE: Your colors here! +โ”‚ โ””โ”€โ”€ presentation.css # Core presentation styles +โ”‚ +โ”œโ”€โ”€ images/ # ๐Ÿ–ผ๏ธ Visual assets +โ”‚ โ””โ”€โ”€ favicon.png # Browser tab icon +โ”‚ +โ”œโ”€โ”€ docs/ # ๐Ÿ“š Documentation & guides +โ”‚ โ”œโ”€โ”€ CUSTOMIZATION_GUIDE.md # Detailed customization instructions +โ”‚ โ”œโ”€โ”€ LECTURE_CREATION_GUIDE.md # How to create engaging lectures +โ”‚ โ”œโ”€โ”€ PROJECT_OVERVIEW.md # Architecture and design decisions +โ”‚ โ”œโ”€โ”€ repository/ # Template repository documentation +โ”‚ โ””โ”€โ”€ testing/ # Test files and reports +โ”‚ +โ”œโ”€โ”€ .github/ # โš™๏ธ GitHub configuration +โ”‚ โ”œโ”€โ”€ workflows/ # Automated deployment workflows +โ”‚ โ””โ”€โ”€ ISSUE_TEMPLATE/ # Issue templates for support +โ”‚ +โ”œโ”€โ”€ netlify.toml # โ˜๏ธ Netlify deployment config +โ””โ”€โ”€ package.json # ๐Ÿ“ฆ Dependencies (for Netlify functions) +``` + +**Key Files to Customize:** +1. `index.html` - Your course information, lecture list, and homepage content +2. `styles/theme-variables.css` - Your institution's colors and branding +3. `pages/lectures/*.html` - Create one file per lecture using the template + +## ๐Ÿ“ Common Customization Tasks + +### Creating Your First Lecture + +**What:** Lectures are HTML slide presentations with keyboard navigation, timers, and theme support. + +**How:** + +1. **Copy the template:** + ```bash + cp pages/lectures/lectureTemplate.html pages/lectures/1Introduction.html + ``` + +2. **Edit the content:** + Open `pages/lectures/1Introduction.html` and: + - Update the `` tag (line 5) + - Replace slide content inside `<div class="slide">` elements + - Add or remove slides as needed (each slide is a `<div class="slide">`) + - The first slide should have `class="slide active"` + +3. **Add to homepage:** + Edit `index.html` and add your lecture to the `lectures` array: + ```javascript + const lectures = [ + { + number: 1, + title: "Introduction to Web Development", + date: "2025-01-15", // Lecture becomes available day before + link: "./pages/lectures/1Introduction.html" + }, + // Add more lectures here + ]; + ``` + +4. **Test it:** + - Open `index.html` in a browser + - Your lecture should appear in the schedule + - Click to open and test keyboard navigation (โ†, โ†’, Space) + +**Pro tip:** Check the date logicโ€”lectures become accessible the day before their scheduled date to allow student preparation. + +--- + +### Changing Colors & Branding + +**What:** All colors are centralized in one file for easy customization. + +**How:** + +1. **Open** `styles/theme-variables.css` + +2. **Find the color variables** (around lines 5-20): + ```css + /* Light mode colors */ + --primary-color: #00669b; /* Main brand color */ + --secondary-color: #009edb; /* Links and accents */ + --accent-color: #ffc222; /* Buttons and highlights */ + ``` + +3. **Replace with your institution's colors:** + ```css + /* Example: University of Example */ + --primary-color: #003366; /* Deep blue */ + --secondary-color: #0066cc; /* Bright blue */ + --accent-color: #ffcc00; /* Gold */ + ``` + +4. **Update dark mode colors too** (around lines 30-40): + ```css + [data-theme="dark"] { + --primary-color: #0088cc; /* Lighter shade for dark backgrounds */ + /* ... update other colors ... */ + } + ``` + +5. **Test both themes:** + - Open `index.html` + - Click the theme toggle button (๐ŸŒ™/โ˜€๏ธ) + - Verify colors look good in both light and dark mode + +**Pro tip:** Use your institution's official brand guidelines for color codes. + +--- + +### Updating Course Information + +**What:** All course metadata lives in `index.html`. + +**Where to edit:** + +1. **Page title** (line 6): + ```html + <title>CSCI 3403 - Web Development | Fall 2025 + ``` + +2. **Course header** (around line 40): + ```html +

CSCI 3403: Web Development

+

Fall 2025 | MWF 10:00-10:50 AM

+ ``` + +3. **Instructor info** (around line 80): + ```html +

Instructor

+

Prof. Jane Doe
+ Email: jane.doe@university.edu
+ Office: Walker Hall 315
+ Office Hours: MW 2-4 PM or by appointment

+ ``` + +4. **Course description** (around line 90): + ```html +

This course covers modern web development including HTML5, CSS3, + JavaScript, responsive design, and web frameworks...

+ ``` + +**Pro tip:** Search for "CUSTOMIZE" comments in the HTMLโ€”they mark all places that typically need updates. + +## ๐Ÿ“Š Database Setup (Optional - For Attendance Tracking) + +**Do you need this?** Only if you want to track student attendance using the built-in attendance pages. Most users skip this and just use the presentation features. + +### Setting Up Attendance Tracking + +**Prerequisites:** +- Deployed to Netlify (serverless functions required) +- Free Neon PostgreSQL account + +**Step-by-step setup:** + +1. **Create a Neon database:** + - Go to [neon.tech](https://neon.tech) and sign up (free tier is plenty) + - Create a new project + - Copy your connection string (looks like: `postgresql://user:pass@host/db`) + +2. **Run the database schema:** + - In Neon's SQL Editor, run this SQL: + ```sql + -- Students table + CREATE TABLE students ( + id SERIAL PRIMARY KEY, + first_name VARCHAR(100) NOT NULL, + last_name VARCHAR(100) NOT NULL, + full_name VARCHAR(200) NOT NULL, + card_data TEXT, -- Optional: for card swipe systems + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + UNIQUE(first_name, last_name) + ); + + -- Attendance records table + CREATE TABLE attendance ( + id SERIAL PRIMARY KEY, + student_id INTEGER REFERENCES students(id) ON DELETE CASCADE, + attendance_date DATE NOT NULL, + timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + is_late BOOLEAN DEFAULT false, -- Optional: mark late arrivals + UNIQUE(student_id, attendance_date) -- Prevent duplicate records + ); + + -- Index for faster lookups + CREATE INDEX idx_attendance_date ON attendance(attendance_date); + CREATE INDEX idx_student_name ON students(last_name, first_name); + ``` + +3. **Add DATABASE_URL to Netlify:** + - In Netlify: Site settings โ†’ Environment variables + - Variable name: `DATABASE_URL` + - Value: Your Neon connection string + - Click **Save** + - Redeploy your site + +4. **Register students:** + - Visit: `https://your-site.netlify.app/pages/register-students.html` + - Enter student names one by one + - Or bulk import via SQL: + ```sql + INSERT INTO students (first_name, last_name, full_name) + VALUES + ('John', 'Doe', 'John Doe'), + ('Jane', 'Smith', 'Jane Smith'); + ``` + +5. **Test attendance:** + - Visit: `https://your-site.netlify.app/pages/attendance.html` + - Search for a student name + - Click to mark present + - Check `pages/attendance-overview.html` to see reports + +**Security note:** The attendance functions use basic authentication. For production with sensitive data, consider adding proper authentication (e.g., OAuth, password protection). + +## Keyboard Shortcuts (In Presentations) + +- **Arrow Keys**: Navigate slides +- **Space**: Next slide +- **Home/End**: First/Last slide +- **F**: Toggle fullscreen +- **T**: Toggle theme +- **Esc**: Exit fullscreen + +## ๐Ÿš€ Deployment Options + +Your course website is just static files, so it can be hosted almost anywhere. Here are the most common options: + +### Option 1: GitHub Pages (Free & Easy) + +**Best for:** Simple deployments without attendance tracking + +**Advantages:** +- โœ… Completely free +- โœ… Automatic deployment on every push +- โœ… Built-in HTTPS +- โœ… Custom domain support + +**Limitations:** +- โŒ No serverless functions (attendance tracking won't work) + +**Setup Steps:** + +1. **Push your code to GitHub:** + ```bash + git add . + git commit -m "Initial course website setup" + git push origin main + ``` + +2. **Enable GitHub Pages:** + - Go to your repository on GitHub + - Click **Settings** โ†’ **Pages** + - Under "Source", select **"Deploy from a branch"** + - Select branch: **`main`**, folder: **`/ (root)`** + - Click **Save** + +3. **Wait for deployment** (1-2 minutes): + - Go to **Actions** tab to watch the deployment + - Once complete, your site will be at: + ``` + https://YOUR-USERNAME.github.io/YOUR-REPO-NAME/ + ``` + +4. **Test your site:** + - Visit the URL + - Test navigation, theme toggle, and lecture links + - Share the URL with your students! + +**Troubleshooting:** +- If pages don't load, check that `index.html` is in the root directory +- If styles are broken, verify all paths are relative (e.g., `./styles/` not `/styles/`) + +--- + +### Option 2: Netlify (Full Features) + +**Best for:** Deployments with attendance tracking or advanced features + +**Advantages:** +- โœ… Serverless functions (attendance tracking works!) +- โœ… Deploy previews for every PR +- โœ… Custom domains with free SSL +- โœ… Environment variables for secrets +- โœ… Automatic deployments + +**Setup Steps:** + +1. **Create Netlify account:** + - Go to [netlify.com](https://netlify.com) and sign up (free tier is plenty) + +2. **Connect your repository:** + - Click **"Add new site"** โ†’ **"Import an existing project"** + - Choose **GitHub** and authorize Netlify + - Select your course website repository + +3. **Configure build settings:** + - Build command: *leave empty* (it's a static site) + - Publish directory: `.` (root directory) + - Click **"Deploy site"** + +4. **Set up environment variables** (if using attendance): + - Go to **Site settings** โ†’ **Environment variables** + - Add variable: `DATABASE_URL` + - Value: Your Neon PostgreSQL connection string (see [Database Setup](#database-setup)) + +5. **Access your site:** + - Netlify provides a URL like: `https://random-name-12345.netlify.app` + - You can customize this or add your own domain + +6. **Automatic deployments:** + - Every push to `main` automatically deploys + - Pull requests get preview URLs for testing + +**Pro tip:** Use Netlify's deploy previews to test changes before merging to main. + +--- + +### Option 3: Other Platforms + +This template works with any static hosting provider: + +| Provider | Free Tier | Serverless Functions | Custom Domain | +|----------|-----------|---------------------|---------------| +| **Vercel** | โœ… Yes | โœ… Yes | โœ… Yes | +| **Cloudflare Pages** | โœ… Yes | โœ… Yes (Workers) | โœ… Yes | +| **AWS S3 + CloudFront** | โš ๏ธ Free tier | โŒ Requires Lambda | โœ… Yes | +| **Azure Static Web Apps** | โœ… Yes | โœ… Yes | โœ… Yes | + +**General deployment steps:** +1. Build/bundle: None needed (already static HTML/CSS/JS) +2. Publish directory: Root directory (where `index.html` is) +3. Environment variables: `DATABASE_URL` if using attendance + +--- + +### Custom Domain Setup + +After deploying to any platform, you can add a custom domain: + +**For GitHub Pages:** +1. Go to Settings โ†’ Pages +2. Enter your domain (e.g., `csci3403.university.edu`) +3. Add DNS records (CNAME or A record) per GitHub's instructions + +**For Netlify:** +1. Go to Site settings โ†’ Domain management +2. Click "Add custom domain" +3. Follow DNS configuration instructions + +**Pro tip:** Most universities allow faculty to create subdomains for courses. Contact your IT department. + +## โ“ Frequently Asked Questions + +### General Questions + +**Q: Do I need to know how to code to use this template?** +A: Basic HTML knowledge helps, but the automated setup wizard (`initialize-course.sh`) can handle most customization. For creating lectures, you can copy the template and modify the textโ€”no coding required. + +**Q: Is this template free to use?** +A: Yes! It's MIT licensed, which means you can use it for any educational purpose, modify it, and even share your modified version. + +**Q: Can I use this for non-course websites?** +A: Absolutely! While designed for courses, the presentation system works great for any sequential content: training materials, workshops, conference talks, etc. + +**Q: How many students can this handle?** +A: The static site itself scales infinitely (it's just HTML). If using attendance tracking, Neon's free tier handles 10GB, which is enough for thousands of students across multiple semesters. + +### Technical Questions + +**Q: Why aren't my lectures showing up on the homepage?** +A: Check these common issues: +1. Ensure the lecture `date` is in `YYYY-MM-DD` format +2. Verify the lecture is added to the `lectures` array in `index.html` +3. Check browser console (F12) for JavaScript errors +4. Ensure the `link` path is correct (relative to `index.html`) + +**Q: How do I make lectures available immediately (ignore the date check)?** +A: In `index.html`, find this code: +```javascript +const isAvailable = currentDate >= new Date(lecture.date); +``` +Replace it with: +```javascript +const isAvailable = true; // All lectures always available +``` + +**Q: The theme toggle isn't working. What's wrong?** +A: Make sure both CSS files are linked in your HTML: +```html + + +``` +And that `presentation.js` is loaded at the bottom of the ``. + +**Q: Can I add videos to my slides?** +A: Yes! Just add HTML5 video tags in your slide content: +```html +
+

Lecture Video

+ +
+``` + +**Q: How do I export lectures to PDF?** +A: Open the lecture in your browser and use Print (Ctrl+P / Cmd+P). The CSS includes print styles that work well for PDF export. For best results: +1. Set orientation to "Landscape" +2. Enable "Background graphics" +3. Print to PDF + +**Q: Can I password-protect my course site?** +A: GitHub Pages and Netlify don't have built-in password protection on free tiers. Options: +- Use Netlify's password protection (requires paid plan) +- Deploy to a platform with authentication (e.g., Vercel with auth) +- Use your university's LMS integration +- Keep the repository private (but then you can't use GitHub Pages) + +### Customization Questions + +**Q: How do I change the favicon?** +A: Replace `images/favicon.png` with your own image (recommended: 32x32 or 64x64 PNG). + +**Q: Can I use Google Fonts or custom fonts?** +A: Yes! Add to the `` of your HTML: +```html + +``` +Then update `theme-variables.css`: +```css +--font-family: 'Roboto', sans-serif; +``` + +**Q: How do I add a syllabus page?** +A: Create `pages/syllabus.html`, copy the structure from `index.html`, and add content. Link to it from your homepage quick links. + +**Q: Can I add code syntax highlighting to slides?** +A: Yes! Include a library like Prism.js or Highlight.js. Add to your lecture HTML: +```html + + +``` +Then use: +```html +

+def hello():
+    print("Hello, world!")
+
+``` + +--- + +## ๐Ÿ› ๏ธ Troubleshooting + +### Common Issues + +**Problem:** Styles aren't loading / site looks broken +**Solutions:** +- Check that all CSS files are in the `styles/` folder +- Verify file paths are relative (e.g., `./styles/theme-variables.css`) +- Clear browser cache (Ctrl+Shift+R / Cmd+Shift+R) +- Open browser console (F12) and check for 404 errors + +**Problem:** JavaScript features not working (navigation, theme toggle, etc.) +**Solutions:** +- Open browser console (F12) and check for errors +- Verify `js/presentation.js` is loaded before the closing `` tag +- Ensure you're not blocking JavaScript +- Try in a different browser to rule out extensions + +**Problem:** Lectures are all showing as "Available Soon" +**Solutions:** +- Check that lecture dates are in the past or today +- Remember: lectures become available the day *before* their date +- Verify dates are in `YYYY-MM-DD` format (not `MM/DD/YYYY` or other formats) +- Check your computer's date/time settings + +**Problem:** Attendance tracking not working on Netlify +**Solutions:** +- Verify `DATABASE_URL` environment variable is set in Netlify +- Check Netlify function logs: Site โ†’ Functions โ†’ Click function โ†’ Logs +- Ensure database schema was created correctly +- Test database connection string in a PostgreSQL client +- Make sure you redeployed after adding environment variables + +**Problem:** GitHub Pages deployment fails +**Solutions:** +- Check Actions tab for error messages +- Ensure `index.html` is in the root directory (not in a subfolder) +- Verify GitHub Pages is enabled in Settings โ†’ Pages +- Make sure your repository is public (or you have GitHub Pro for private repos) + +**Problem:** Mobile layout is broken +**Solutions:** +- Add viewport meta tag to HTML (should already be there): + ```html + + ``` +- Test using browser developer tools (F12) with device emulation +- Check for custom CSS that overrides responsive styles + +**Problem:** Theme toggle persists across different courses +**Solutions:** +- This is expected behavior (uses localStorage per domain) +- If deploying multiple courses, use different subdomains +- Or modify the localStorage key in `presentation.js` to include course name + +--- + +## ๐Ÿ“š Additional Documentation + +Detailed guides are available in the `docs/` folder: + +- **[Customization Guide](docs/CUSTOMIZATION_GUIDE.md)** - Deep dive into customization options +- **[Lecture Creation Guide](docs/LECTURE_CREATION_GUIDE.md)** - How to create engaging, interactive lectures +- **[Project Overview](docs/PROJECT_OVERVIEW.md)** - Architecture and design decisions +- **[Testing Report](docs/testing/TEST_REPORT.md)** - Comprehensive testing documentation + +For template repository documentation: +- **[Template Repository Guide](docs/repository/TEMPLATE_REPOSITORY_GUIDE.md)** - How to use GitHub templates +- **[Template Repository README](docs/repository/TEMPLATE_REPOSITORY_README.md)** - Original repository information + +--- + +## ๐ŸŒ Browser Support + +**Fully Supported:** +- Chrome/Edge (latest 2 versions) +- Firefox (latest 2 versions) +- Safari (latest 2 versions) +- Mobile: iOS Safari 13+, Chrome Mobile + +**Minimum Requirements:** +- CSS Grid and Flexbox support +- CSS Custom Properties (CSS Variables) +- ES6 JavaScript (arrow functions, const/let, template literals) +- LocalStorage API + +**Not supported:** Internet Explorer (use Edge instead) + +--- + +## ๐Ÿ“„ License + +MIT License - See [LICENSE](LICENSE) file for details + +**What this means:** +- โœ… Use for any educational purpose +- โœ… Modify and customize freely +- โœ… Share your modifications +- โœ… Use commercially (e.g., paid courses) +- โš ๏ธ No warranty or liability (use at your own risk) + +--- + +## ๐Ÿ™ Credits & Acknowledgments + +Created by **Bobby Reed** for educational use. + +**Based on production course websites from Oklahoma City University:** +- CSCI 3403 - Web Programming +- CSCI 2383 - Foundations of Computer Science II +- CSCI 1383 - Foundations of Computer Science I + +**Special thanks to:** +- 100+ students who battle-tested this template across 3 semesters +- Oklahoma City University for supporting open educational resources + +**Technologies used:** +- Vanilla JavaScript (no frameworks!) +- CSS Grid and Flexbox +- PostgreSQL (via Neon) +- Netlify Functions (serverless) + +--- + +## ๐Ÿ’ฌ Getting Help & Contributing + +**Found a bug?** [Create an issue](https://github.com/bobbyreed/CourseWebsiteTemplate/issues) + +**Have a question?** Check the [FAQ](#frequently-asked-questions) or [create a discussion](https://github.com/bobbyreed/CourseWebsiteTemplate/discussions) + +**Want to contribute?** Pull requests welcome! Please: +1. Fork the repository +2. Create a feature branch (`git checkout -b feature/amazing-feature`) +3. Commit your changes (`git commit -m 'Add amazing feature'`) +4. Push to the branch (`git push origin feature/amazing-feature`) +5. Open a Pull Request + +--- + +**Ready to create your course website?** Click "Use this template" at the top of this page to get started! ๐ŸŽ“ diff --git a/template/SETUP_CHECKLIST.md b/SETUP_CHECKLIST.md similarity index 100% rename from template/SETUP_CHECKLIST.md rename to SETUP_CHECKLIST.md diff --git a/template/docs/CUSTOMIZATION_GUIDE.md b/docs/CUSTOMIZATION_GUIDE.md similarity index 100% rename from template/docs/CUSTOMIZATION_GUIDE.md rename to docs/CUSTOMIZATION_GUIDE.md diff --git a/template/docs/LECTURE_CREATION_GUIDE.md b/docs/LECTURE_CREATION_GUIDE.md similarity index 100% rename from template/docs/LECTURE_CREATION_GUIDE.md rename to docs/LECTURE_CREATION_GUIDE.md diff --git a/PROJECT_OVERVIEW.md b/docs/PROJECT_OVERVIEW.md similarity index 100% rename from PROJECT_OVERVIEW.md rename to docs/PROJECT_OVERVIEW.md diff --git a/TEMPLATE_REPOSITORY_GUIDE.md b/docs/repository/TEMPLATE_REPOSITORY_GUIDE.md similarity index 100% rename from TEMPLATE_REPOSITORY_GUIDE.md rename to docs/repository/TEMPLATE_REPOSITORY_GUIDE.md diff --git a/docs/repository/TEMPLATE_REPOSITORY_README.md b/docs/repository/TEMPLATE_REPOSITORY_README.md new file mode 100644 index 0000000..27c0cda --- /dev/null +++ b/docs/repository/TEMPLATE_REPOSITORY_README.md @@ -0,0 +1,91 @@ +# CourseWebsiteTemplate + +A free, modern course website template featuring interactive HTML presentations, attendance tracking with card reader support, and serverless backend - all deployable at no cost using GitHub and Netlify. + +## Live Examples + +See the template in action with these live course sites: +- **Web Programming**: [wp.profbobby.com](https://wp.profbobby.com) +- **Software Engineering**: [se.profbobby.com](https://se.profbobby.com) +- **Database Design**: [db.profbobby.com](https://db.profbobby.com) + +## Features + +- **Interactive Presentations**: Built-in HTML slide deck with keyboard navigation and presentation mode +- **Attendance Tracking**: Student registration and daily attendance with card swipe support +- **Attendance Overview**: Visual attendance reports and analytics +- **Serverless Backend**: Netlify Functions + Neon PostgreSQL (all free tier) +- **No Build Step**: Pure vanilla JS, HTML, and CSS - edit and deploy instantly +- **Responsive Design**: Works on desktop, tablet, and mobile devices +- **Dark/Light Mode**: Theme toggle with CSS custom properties + +## Quick Start (100% Free!) + +### 1. Use This Template + +Click the green **"Use this template"** button at the top of this page to create your own course repository. + +### 2. Set Up Your Free Services + +**GitHub** (already done if you're reading this!) +- Free hosting for your code +- Free static site hosting via GitHub Pages (optional) + +**Netlify** (recommended - free tier) +1. Sign up at [netlify.com](https://netlify.com) (free account) +2. Connect your GitHub repository +3. Deploy with one click - automatic HTTPS included! +4. Free tier includes: 100GB bandwidth/month, serverless functions, form handling + +**Neon** (for attendance database - free tier) +1. Sign up at [neon.tech](https://neon.tech) (free account) +2. Create a PostgreSQL database (free tier: 3GB storage, autoscaling) +3. Copy connection string to Netlify environment variables + +### 3. Customize Your Site + +Run the initialization wizard: +```bash +bash template/initialize-course.sh +``` + +Or manually edit: +- `template/index.html` - Course title, schedule, instructor info +- `template/styles/presentation.css` - Colors and theming +- `template/pages/lectures/` - Add your lecture slides + +### 4. Deploy + +**Option A: Netlify (Recommended)** +- Push to GitHub โ†’ Netlify auto-deploys +- Get free HTTPS domain: `your-course.netlify.app` +- Optional: Use custom domain + +**Option B: GitHub Pages** +- Enable in repository Settings โ†’ Pages +- Free hosting at `username.github.io/repo-name` + +## Documentation + +- **[Template Repository Guide](TEMPLATE_REPOSITORY_GUIDE.md)** - How to use this as a GitHub template +- **[Setup Checklist](template/SETUP_CHECKLIST.md)** - Step-by-step customization guide +- **[Project Overview](PROJECT_OVERVIEW.md)** - Technical architecture and features + +## Cost Breakdown + +Everything runs on free tiers: +- GitHub: Free (unlimited public repos) +- Netlify: Free (100GB bandwidth, 125k serverless function calls/month) +- Neon PostgreSQL: Free (3GB storage, 0.5GB RAM) +- **Total Monthly Cost: $0** + +## Support + +For questions or issues: +1. Check the [documentation files](template/SETUP_CHECKLIST.md) +2. Review [live examples](#live-examples) for inspiration +3. Open an issue in this repository + +## License + +MIT License - see [LICENSE](LICENSE) for details diff --git a/TESTING_SUMMARY.md b/docs/testing/TESTING_SUMMARY.md similarity index 100% rename from TESTING_SUMMARY.md rename to docs/testing/TESTING_SUMMARY.md diff --git a/TEST_REPORT.md b/docs/testing/TEST_REPORT.md similarity index 100% rename from TEST_REPORT.md rename to docs/testing/TEST_REPORT.md diff --git a/final-tests.sh b/docs/testing/final-tests.sh similarity index 100% rename from final-tests.sh rename to docs/testing/final-tests.sh diff --git a/integration-test.html b/docs/testing/integration-test.html similarity index 100% rename from integration-test.html rename to docs/testing/integration-test.html diff --git a/run-tests.sh b/docs/testing/run-tests.sh similarity index 100% rename from run-tests.sh rename to docs/testing/run-tests.sh diff --git a/test-suite.sh b/docs/testing/test-suite.sh similarity index 100% rename from test-suite.sh rename to docs/testing/test-suite.sh diff --git a/template/images/favicon.png b/images/favicon.png similarity index 100% rename from template/images/favicon.png rename to images/favicon.png diff --git a/template/index.html b/index.html similarity index 100% rename from template/index.html rename to index.html diff --git a/template/initialize-course.sh b/initialize-course.sh similarity index 100% rename from template/initialize-course.sh rename to initialize-course.sh diff --git a/template/js/classroom-auth.js b/js/classroom-auth.js similarity index 100% rename from template/js/classroom-auth.js rename to js/classroom-auth.js diff --git a/template/js/presentation.js b/js/presentation.js similarity index 100% rename from template/js/presentation.js rename to js/presentation.js diff --git a/template/js/utils.js b/js/utils.js similarity index 100% rename from template/js/utils.js rename to js/utils.js diff --git a/template/netlify.toml b/netlify.toml similarity index 100% rename from template/netlify.toml rename to netlify.toml diff --git a/template/package.json b/package.json similarity index 100% rename from template/package.json rename to package.json diff --git a/template/pages/attendance-overview.html b/pages/attendance-overview.html similarity index 100% rename from template/pages/attendance-overview.html rename to pages/attendance-overview.html diff --git a/template/pages/attendance.html b/pages/attendance.html similarity index 100% rename from template/pages/attendance.html rename to pages/attendance.html diff --git a/template/pages/lectures/1ExampleLecture.html b/pages/lectures/1ExampleLecture.html similarity index 100% rename from template/pages/lectures/1ExampleLecture.html rename to pages/lectures/1ExampleLecture.html diff --git a/template/pages/lectures/lectureTemplate.html b/pages/lectures/lectureTemplate.html similarity index 100% rename from template/pages/lectures/lectureTemplate.html rename to pages/lectures/lectureTemplate.html diff --git a/template/pages/register-students.html b/pages/register-students.html similarity index 100% rename from template/pages/register-students.html rename to pages/register-students.html diff --git a/template/styles/presentation.css b/styles/presentation.css similarity index 100% rename from template/styles/presentation.css rename to styles/presentation.css diff --git a/template/styles/theme-variables.css b/styles/theme-variables.css similarity index 100% rename from template/styles/theme-variables.css rename to styles/theme-variables.css diff --git a/template/README.md b/template/README.md deleted file mode 100644 index fe9abec..0000000 --- a/template/README.md +++ /dev/null @@ -1,211 +0,0 @@ -# Course Website Template - -[![GitHub Template](https://img.shields.io/badge/GitHub-Template-green?logo=github)](https://github.com/bobbyreed/CourseWebsiteTemplate) -[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE) -[![Tested](https://img.shields.io/badge/Tests-71%2F71%20Passed-brightgreen)](TEST_REPORT.md) - -A domain-agnostic, professional course website template with interactive presentations, attendance tracking, and theme customization. **Battle-tested with 100+ students across 3 production courses.** - -## ๐Ÿš€ Using This Template - -This is a GitHub template repository! To create your own course website: - -1. **Click "Use this template"** button at the top of this repository -2. **Name your new repository** (e.g., `CSCI3403-WebProgramming`) -3. **Clone your new repository** to your local machine -4. **Run the setup wizard** (optional but recommended): - ```bash - bash initialize-course.sh - ``` - This will prompt you for course details and automatically update the template. -5. **Follow the [Setup Checklist](SETUP_CHECKLIST.md)** to complete your site - -**Prefer manual setup?** See the [Quick Start](#quick-start) section below. - ---- - -## Features - -- **Interactive Presentation System**: Keyboard navigation, theme toggle, timers, and auto-hide controls -- **Responsive Design**: Mobile-first layout that works on all devices -- **Dark/Light Themes**: User preference with localStorage persistence -- **Attendance Tracking** (Optional): Serverless PostgreSQL backend via Netlify Functions -- **Easy Customization**: Separated theme variables for quick branding - -## Quick Start - -### Automated Setup (Recommended) - -```bash -# After creating from template and cloning -cd your-course-repo -bash initialize-course.sh -``` - -The wizard will prompt you for: -- Course title, number, and level -- Instructor information -- Institution colors -- Whether you want attendance tracking -- Deployment preferences - -Then follow the [Setup Checklist](SETUP_CHECKLIST.md) for remaining tasks. - -### Manual Setup - -#### Option 1: Static Website (No Attendance) - -1. Create repository from this template on GitHub -2. Clone your new repository -3. Edit `index.html` with your course information -4. Customize colors in `styles/theme-variables.css` -5. Create lectures using `pages/lectures/lectureTemplate.html` -6. Deploy to GitHub Pages, Netlify, or any static host - -#### Option 2: Full Setup (With Attendance Tracking) - -1. Create repository from this template -2. Set up a [Neon PostgreSQL](https://neon.tech) database -3. Deploy to Netlify -4. Add `DATABASE_URL` environment variable in Netlify dashboard -5. Run database schema (see Database Setup below) -6. Customize your course information - -## File Structure - -``` -template/ -โ”œโ”€โ”€ index.html # Course homepage (customize this) -โ”œโ”€โ”€ package.json # Node dependencies for Netlify functions -โ”œโ”€โ”€ netlify.toml # Netlify configuration -โ”œโ”€โ”€ pages/ -โ”‚ โ”œโ”€โ”€ lectures/ -โ”‚ โ”‚ โ””โ”€โ”€ lectureTemplate.html # Template for new lectures -โ”‚ โ”œโ”€โ”€ notes/ -โ”‚ โ”‚ โ””โ”€โ”€ notesTemplate.html # Template for student notes -โ”‚ โ””โ”€โ”€ attendance.html # Attendance tracking (optional) -โ”œโ”€โ”€ js/ -โ”‚ โ”œโ”€โ”€ presentation.js # Core presentation engine -โ”‚ โ”œโ”€โ”€ classroom-auth.js # Authentication (optional) -โ”‚ โ””โ”€โ”€ utils.js # Utility functions -โ”œโ”€โ”€ styles/ -โ”‚ โ”œโ”€โ”€ theme-variables.css # CUSTOMIZE: Colors and branding -โ”‚ โ””โ”€โ”€ presentation.css # Core presentation styles -โ”œโ”€โ”€ images/ -โ”‚ โ””โ”€โ”€ favicon.png # Course icon -โ”œโ”€โ”€ netlify/ -โ”‚ โ””โ”€โ”€ functions/ # Serverless backend (optional) -โ””โ”€โ”€ docs/ - โ”œโ”€โ”€ CUSTOMIZATION_GUIDE.md - โ””โ”€โ”€ LECTURE_CREATION_GUIDE.md -``` - -## Customization Guide - -### 1. Update Course Information - -Edit `index.html`: -- Course title, number, and description -- Instructor name and contact -- Semester and schedule -- Lecture list with dates and titles - -### 2. Customize Colors - -Edit `styles/theme-variables.css`: -```css ---primary-color: #00669b; /* Your institution's primary color */ ---secondary-color: #009edb; /* Accent color */ ---accent-color: #ffc222; /* Highlight color */ -``` - -### 3. Create Lectures - -1. Copy `pages/lectures/lectureTemplate.html` -2. Rename to match your lecture (e.g., `1Introduction.html`) -3. Edit slides with your content -4. Add to lectures array in `index.html` - -## Database Setup (Optional - For Attendance) - -If using attendance tracking, create these tables in your Neon database: - -```sql -CREATE TABLE students ( - id SERIAL PRIMARY KEY, - first_name VARCHAR(100) NOT NULL, - last_name VARCHAR(100) NOT NULL, - full_name VARCHAR(200) NOT NULL, - card_data TEXT, - created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, - UNIQUE(first_name, last_name) -); - -CREATE TABLE attendance ( - id SERIAL PRIMARY KEY, - student_id INTEGER REFERENCES students(id) ON DELETE CASCADE, - attendance_date DATE NOT NULL, - timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP, - is_late BOOLEAN DEFAULT false, - UNIQUE(student_id, attendance_date) -); -``` - -## Keyboard Shortcuts (In Presentations) - -- **Arrow Keys**: Navigate slides -- **Space**: Next slide -- **Home/End**: First/Last slide -- **F**: Toggle fullscreen -- **T**: Toggle theme -- **Esc**: Exit fullscreen - -## Deployment - -### GitHub Pages (Automated!) - -This template includes GitHub Actions for automatic deployment: - -**Setup:** -1. Push your repository to GitHub -2. Go to Settings โ†’ Pages โ†’ Source: "GitHub Actions" -3. Workflow automatically deploys on every push to `main` -4. Access at: `https://[username].github.io/[repository-name]` - -**Limitations:** Serverless functions won't work (attendance tracking disabled) - -### Netlify (Full Features) - -**Setup:** -1. Connect repository to Netlify -2. Build settings pre-configured in `netlify.toml` -3. Add `DATABASE_URL` environment variable (if using attendance) -4. Auto-deploys on every push - -**Benefits:** Serverless functions, custom domains, SSL, deploy previews - -### Other Hosts -Works with Vercel, Cloudflare Pages, AWS S3, Azure Static Web Apps - -## Documentation - -- [Customization Guide](docs/CUSTOMIZATION_GUIDE.md) - Detailed customization instructions -- [Lecture Creation Guide](docs/LECTURE_CREATION_GUIDE.md) - How to create engaging lectures - -## Browser Support - -- Chrome, Firefox, Safari, Edge (latest 2 versions) -- Mobile: iOS Safari, Chrome Mobile -- Requires: CSS Grid, Flexbox, CSS Variables, ES6 JavaScript - -## License - -MIT License - Feel free to use for educational purposes - -## Credits - -Created for educational use. Based on production course websites from Oklahoma City University. - ---- - -**Need Help?** Check the documentation in the `docs/` folder or create an issue. diff --git a/template/docs/PROJECT_OVERVIEW.md b/template/docs/PROJECT_OVERVIEW.md deleted file mode 100644 index ff1f740..0000000 --- a/template/docs/PROJECT_OVERVIEW.md +++ /dev/null @@ -1,401 +0,0 @@ -# Course Website Template - Project Overview - -## Purpose - -This repository serves as a **domain-agnostic template** for creating professional course websites, extracted from three production course sites: -- Web Programming (CSCI 3403) - Undergraduate -- Software Engineering (CSCI 5403) - Graduate -- Database Design (CSCI 5603) - Graduate - -The template provides a robust foundation for building engaging, interactive course websites with modern presentation features, student tracking, and customizable theming. - -## Template Philosophy - -This template is designed to be: -- **Domain-Agnostic**: No course-specific content, ready to customize for any subject -- **Production-Ready**: Battle-tested infrastructure from three live courses -- **Feature-Rich**: Presentation system, attendance tracking, theme customization -- **Easy to Customize**: Clear structure with separated concerns (content, styling, functionality) -- **Modern**: Responsive design, dark/light themes, keyboard navigation - -## Core Features - -### 1. Interactive Presentation System -- **Keyboard Navigation**: Arrow keys, Home, End, Space bar, 'f' for fullscreen, 't' for theme toggle -- **Auto-Hide Controls**: Intelligent UI that hides after 2 seconds of inactivity -- **Timer System**: Countdown timers for in-class exercises with audio alerts -- **Slide Counter**: Current/total slides with visual progress -- **Smooth Transitions**: CSS-based slide animations -- **Print-Friendly**: Optimized for PDF export and printing - -### 2. Course Homepage -- **Lecture Grid**: Dynamic, responsive grid of lecture cards -- **Availability Logic**: Lock lectures until specified dates (day-before access) -- **Status Indicators**: Visual markers for completed, current, and upcoming lectures -- **Responsive Layout**: Mobile-first design that adapts to all screen sizes -- **Quick Links**: Customizable resource cards for external links - -### 3. Theme System -- **Light/Dark Mode**: User preference with localStorage persistence -- **Custom Color Schemes**: Easy to customize with CSS variables -- **OCU Branding**: Includes Oklahoma City University color palette (customizable) -- **Theme Toggle UI**: Bubble interface with auto-hide functionality - -### 4. Student Engagement (Optional) -- **Attendance Tracking**: Card swipe authentication system -- **Progress Tracking**: Individual student dashboards -- **Admin Panel**: Instructor-only access for managing students -- **Database Integration**: PostgreSQL backend via Netlify serverless functions - -## Technology Stack - -### Frontend -- **HTML5**: Semantic markup for accessibility -- **CSS3**: Custom properties (CSS variables), flexbox, grid -- **Vanilla JavaScript**: No frameworks - pure, maintainable code - -### Backend & Services -- **Netlify Functions**: Serverless backend for database operations -- **PostgreSQL**: Student and attendance data (via Neon serverless) -- **GitHub Pages**: Alternative hosting option - -### Styling Philosophy -- **CSS Variables**: All colors, spacing, and typography defined as variables -- **Mobile-First**: Responsive breakpoints for all screen sizes -- **Accessibility**: WCAG AA compliant with semantic HTML -- **Print Support**: Clean print styles for lecture materials - -## Project Structure - -``` -CourseWebsiteTemplate/ -โ”œโ”€โ”€ index.html # Course homepage template -โ”œโ”€โ”€ package.json # Node dependencies for Netlify functions -โ”œโ”€โ”€ netlify.toml # Netlify configuration -โ”œโ”€โ”€ pages/ -โ”‚ โ”œโ”€โ”€ lectures/ -โ”‚ โ”‚ โ””โ”€โ”€ lectureTemplate.html # Template for creating new lectures -โ”‚ โ”œโ”€โ”€ notes/ -โ”‚ โ”‚ โ””โ”€โ”€ notesTemplate.html # Template for student notes (optional) -โ”‚ โ”œโ”€โ”€ attendance.html # Attendance tracking page (optional) -โ”‚ โ””โ”€โ”€ quick.html # Quick reference page (optional) -โ”œโ”€โ”€ js/ -โ”‚ โ”œโ”€โ”€ presentation.js # Core presentation engine -โ”‚ โ”œโ”€โ”€ classroom-auth.js # Authentication system (optional) -โ”‚ โ””โ”€โ”€ utils.js # Utility functions -โ”œโ”€โ”€ styles/ -โ”‚ โ”œโ”€โ”€ presentation.css # Main presentation styles -โ”‚ โ”œโ”€โ”€ lecture-tracking-styles.css # Student progress styles (optional) -โ”‚ โ””โ”€โ”€ theme-variables.css # Customizable theme variables -โ”œโ”€โ”€ images/ -โ”‚ โ””โ”€โ”€ favicon.png # Course icon -โ”œโ”€โ”€ netlify/ -โ”‚ โ””โ”€โ”€ functions/ # Serverless API endpoints (optional) -โ”‚ โ”œโ”€โ”€ db-config.js -โ”‚ โ”œโ”€โ”€ mark-attendance.js -โ”‚ โ””โ”€โ”€ get-students.js -โ””โ”€โ”€ docs/ - โ”œโ”€โ”€ PROJECT_OVERVIEW.md # This file - โ”œโ”€โ”€ CUSTOMIZATION_GUIDE.md # How to customize for your course - โ””โ”€โ”€ LECTURE_CREATION_GUIDE.md # How to create new lectures -``` - -## Getting Started - -### Option 1: Minimal Setup (Lectures Only) -1. Clone this repository -2. Update `index.html` with your course information -3. Create lectures using `pages/lectures/lectureTemplate.html` -4. Deploy to GitHub Pages, Netlify, or any static host - -### Option 2: Full Setup (With Attendance Tracking) -1. Clone this repository -2. Set up Neon PostgreSQL database -3. Configure Netlify environment variables -4. Update course information in `index.html` -5. Create lectures and customize theme -6. Deploy to Netlify with functions enabled - -## Customization Points - -### Essential Customizations -1. **Course Information** (`index.html`): - - Course title, number, and description - - Instructor name and contact information - - Semester and schedule - - Lecture list with dates and titles - -2. **Color Theme** (`styles/theme-variables.css`): - - Primary and secondary colors - - Light and dark mode palettes - - Typography (fonts, sizes, weights) - -3. **Lectures** (`pages/lectures/`): - - Create lecture HTML files from template - - Add slides with course-specific content - - Configure timers for exercises - -### Optional Customizations -4. **Branding** (`images/`): - - Favicon - - Logo images - - Background patterns - -5. **Features** (Enable/Disable): - - Attendance tracking system - - Student progress dashboards - - Achievement badges - - Leaderboards - -## Key Files Explained - -### index.html -The course homepage that displays: -- Course header with title and instructor info -- Course overview section -- Quick links to resources -- Lecture grid with availability logic -- Footer - -**Customize**: Update header content, course description, quick links, and lecture array - -### pages/lectures/lectureTemplate.html -A blank lecture presentation with: -- Presentation framework loaded -- Title slide structure -- Example content slides -- Timer controls -- Navigation UI - -**Use**: Copy this file to create each new lecture - -### js/presentation.js -The core presentation engine that handles: -- Slide navigation (keyboard and button) -- Auto-hide controls -- Timer management -- Theme toggling -- Fullscreen mode -- Print optimization - -**Customize**: Rarely needed, but you can adjust timing, transitions, or add features - -### styles/presentation.css -The main stylesheet defining: -- Slide layout and typography -- Navigation controls -- Theme colors (via CSS variables) -- Responsive breakpoints -- Print styles - -**Customize**: Color scheme, fonts, spacing, and visual design - -## Common Course Patterns - -### Pattern 1: Undergraduate Course (Web Programming Style) -- **Lectures**: 30+ classes over 16 weeks -- **Features**: Student notes, achievement system, leaderboard -- **Style**: Clean, modern, accessible -- **Extras**: Integration with external curriculum (The Odin Project) - -### Pattern 2: Graduate Intensive (Software Engineering Style) -- **Lectures**: 15 classes over 8 weeks -- **Features**: Card swipe attendance, admin panel -- **Style**: Blueprint/Windows 95 themed, unique aesthetic -- **Extras**: Industry case studies, hands-on projects - -### Pattern 3: Graduate Specialized (Database Design Style) -- **Lectures**: 16 classes over 8 weeks -- **Features**: Entity-relationship themed design -- **Style**: Database-inspired color scheme and iconography -- **Extras**: Technical documentation, code examples - -## Deployment Options - -### GitHub Pages (Free, Simple) -1. Push repository to GitHub -2. Enable GitHub Pages in repository settings -3. Select branch and directory -4. Access at `username.github.io/repository` - -**Limitations**: No serverless functions (attendance tracking won't work) - -### Netlify (Free, Full-Featured) -1. Connect repository to Netlify -2. Configure build settings (none needed for static site) -3. Add environment variables for database -4. Auto-deploys on git push - -**Benefits**: Serverless functions, custom domains, SSL, previews - -### Custom Server -- Any static file server (Apache, Nginx, etc.) -- Upload files to web root -- Configure virtual host if needed - -## Database Schema (Optional) - -If using attendance tracking: - -### students Table -```sql -CREATE TABLE students ( - id SERIAL PRIMARY KEY, - first_name VARCHAR(100) NOT NULL, - last_name VARCHAR(100) NOT NULL, - full_name VARCHAR(200) NOT NULL, - card_data TEXT, - created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, - UNIQUE(first_name, last_name) -); -``` - -### attendance Table -```sql -CREATE TABLE attendance ( - id SERIAL PRIMARY KEY, - student_id INTEGER REFERENCES students(id) ON DELETE CASCADE, - attendance_date DATE NOT NULL, - timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP, - is_late BOOLEAN DEFAULT false, - UNIQUE(student_id, attendance_date) -); -``` - -## Accessibility Features - -- **Semantic HTML**: Proper heading hierarchy, landmarks, and ARIA labels -- **Keyboard Navigation**: All features accessible without mouse -- **Color Contrast**: WCAG AA compliant (4.5:1 for text) -- **Screen Reader Support**: Meaningful alt text and ARIA descriptions -- **Focus Indicators**: Clear visual focus states -- **Responsive Text**: Scales appropriately at different zoom levels - -## Browser Support - -- **Modern Browsers**: Chrome, Firefox, Safari, Edge (latest 2 versions) -- **Mobile**: iOS Safari, Chrome Mobile, Samsung Internet -- **Features**: CSS Grid, Flexbox, CSS Variables, ES6 JavaScript -- **Fallbacks**: Graceful degradation for older browsers - -## Best Practices - -### Creating Lectures -1. Copy `lectureTemplate.html` for each new lecture -2. Update title, lecture number, and total slides -3. Use semantic HTML structure for slides -4. Include timers for timed activities -5. Test keyboard navigation -6. Verify print layout - -### Styling Guidelines -1. Use CSS variables for all colors and spacing -2. Follow mobile-first responsive design -3. Maintain consistent typography hierarchy -4. Test in both light and dark themes -5. Verify accessibility with tools (WAVE, axe) - -### Content Organization -1. One topic per slide (avoid overcrowding) -2. Use visual examples (code, diagrams, screenshots) -3. Include interactive exercises with timers -4. Add clear learning objectives -5. Provide summary/review slides - -## File Naming Conventions - -### Lecture Files -- Format: `{Number}{Title}.html` -- Examples: `1CourseIntro.html`, `15FinalExam.html` -- Use camelCase for multi-word titles: `5SoftwareArchitecture.html` - -### CSS Files -- `presentation.css` - Core presentation styles -- `theme-variables.css` - Customizable color/font variables -- `{feature}-styles.css` - Feature-specific styles (e.g., `attendance-styles.css`) - -### JavaScript Files -- `presentation.js` - Core presentation engine -- `{feature}.js` - Feature-specific logic (e.g., `classroom-auth.js`) - -## Performance Considerations - -- **Minimal Dependencies**: Pure JavaScript, no heavy frameworks -- **Lazy Loading**: Images and content loaded as needed -- **Local Storage**: Theme preferences cached locally -- **Serverless Functions**: Cold start ~500ms (acceptable for attendance) -- **CDN Delivery**: Use Netlify CDN for fast global access - -## Security Best Practices - -### If Using Attendance System -1. **Environment Variables**: Never commit database credentials -2. **Input Validation**: Sanitize all user inputs in functions -3. **SQL Injection**: Use parameterized queries -4. **Authentication**: Card-based instructor auth with expiration -5. **HTTPS Only**: Enforce SSL for all traffic - -## Lessons Learned from Production - -### What Works Well -- Auto-hide controls reduce distraction during presentations -- Keyboard navigation is heavily used by instructors -- Dark mode is preferred by 60%+ of students -- Day-before lecture unlocking prevents students from racing ahead -- Card swipe attendance is faster than manual entry - -### What to Avoid -- Don't over-complicate the UI (keep it clean) -- Don't use heavy animations (they distract from content) -- Don't make lectures available too early (students lose sync with class) -- Don't rely solely on color for status (use icons too) - -## Support & Maintenance - -### For Course Instructors -- Update lecture dates in `index.html` lecture array -- Create new lectures by copying template -- Customize theme colors in CSS variables -- Monitor attendance in admin panel (if enabled) - -### For Developers -- All JavaScript is well-commented -- CSS uses BEM-like naming conventions -- Database queries are in `netlify/functions/` -- Logs available in Netlify dashboard - -## Future Enhancement Ideas - -- **Video Integration**: Embed lecture recordings -- **Quiz System**: Interactive quizzes with instant feedback -- **Discussion Boards**: Integrated Q&A for each lecture -- **Assignment Submission**: Upload and track assignments -- **Grade Book**: Full LMS-lite functionality -- **Mobile App**: Native iOS/Android companion apps -- **Live Polling**: Real-time audience participation -- **Code Playground**: Embedded code editor for live coding - -## Credits - -This template is derived from three production course websites created for Oklahoma City University: -- **Web Programming** (CSCI 3403) - Fall 2024/2025 -- **Software Engineering** (CSCI 5403) - Spring 2025 -- **Database Design** (CSCI 5603) - Fall 2024 - -**Created By**: bobby reed -**Institution**: Oklahoma City University -**License**: Educational use encouraged - -## Next Steps - -After reviewing this overview: -1. Read `CUSTOMIZATION_GUIDE.md` for step-by-step customization -2. Read `LECTURE_CREATION_GUIDE.md` for creating lecture content -3. Explore the three source courses in their respective directories -4. Start customizing for your own course! - ---- - -**Last Updated**: November 2025 -**Template Version**: 1.0 -**Maintainer**: Course Website Template Team