This repository contains the source code for the lectureStudio website, built with Hugo and Tailwind CSS.
lectureStudio is a free, open-source software tool for presenting PDF-based lectures. It integrates a wide spectrum of interactive features, including:
- Annotation of slides with pen-based tools
- Streaming and recording of audio and video
- Classroom response system with interactive quizzes and messaging
- Multi-platform support (Windows, Linux, macOS)
- Post-processing capabilities for recorded lectures
The software is designed to digitize lectures with ease, making it an ideal tool for educators in both in-person and remote teaching environments.
- Clone the repository
- Install dependencies:
npm install
To run the development server with live reloading:
npm run devThis will start a local server at http://localhost:1313/ with hot reloading enabled.
The project uses linting tools to maintain code quality:
- ESLint for JavaScript
- Stylelint for CSS
- HTMLHint for HTML
To run all linters:
npm run lintTo run individual linters:
npm run lint:js # Lint JavaScript files
npm run lint:css # Lint CSS files
npm run lint:html # Lint HTML filesTo automatically fix issues where possible:
npm run lint:fixThe project uses pre-commit hooks to ensure code quality. These hooks automatically run linters on staged files before each commit:
- JavaScript files are checked with ESLint and automatically fixed when possible
- CSS files are checked with Stylelint and automatically fixed when possible
- HTML files are checked with HTMLHint
This ensures that all committed code meets the project's coding standards.
To build the site for production:
npm run buildThis generates static files in the public directory.
To update the download information with the latest lectureStudio release:
npm run update-downloadsThis script fetches the latest release information from GitHub and updates the download data files.
The project includes automated tests for critical site functionality, content validation, link checking, and end-to-end testing.
To run all tests:
npm run test:allThis will run the Jest and Playwright tests. For more information on each type of test, see the sections below.
The project uses Jest for testing JavaScript functionality:
npm run test # Run all Jest testsThese tests verify critical site functionality, including:
- Dead link detection
- Download information updates
Note: The link checker requires the site to be built first.
The project includes end-to-end tests using Playwright to test the website in real browsers:
npm run test:e2e # Run all Playwright tests
npm run test:e2e:ui # Run tests with Playwright UI
npm run test:e2e:report # Show HTML report of test resultsBefore running Playwright tests for the first time, install the required browsers:
npx playwright installThese tests verify the website functionality across different browsers and devices, including the responsive design.
The project uses GitHub Actions for continuous integration and deployment.
The CI pipeline automatically runs on every push to the main branch and on pull requests:
- Sets up the Hugo environment
- Installs dependencies
- Builds the site
- Runs linting checks
- Runs unit and end-to-end tests
- Uploads the test report as an artifact
You can view the CI status and logs in the Actions tab of the repository.
To run the same checks locally before pushing:
npm run lint && npm run test:allThe site is automatically deployed to GitHub Pages when changes are pushed to the main branch:
- Builds the site using Hugo
- Uploads the built site as a GitHub Pages artifact
- Deploys the site to GitHub Pages
You can manually trigger a deployment from the Actions tab by clicking "Run workflow".
config/: Hugo configuration filescontent/: Website content organized by sectioni18n/: Translation files for UI elementslayouts/: HTML templates and partialsassets/: CSS, JavaScript, and other assetsstatic/: Static files copied directly to thepublicdirectorydata/: Data files used by Hugo templatesscripts/: Utility scripts for the projecttests/: Automated tests (unit, integration, end-to-end)
The site configuration is managed through several files:
config/_default/hugo.yaml: Main Hugo configurationconfig/_default/languages/: Language-specific configurationsconfig/_default/params/: Site parametersconfig/_default/navigation/: Navigation menus
The website supports multiple languages:
- Content is stored with language suffixes (e.g.,
index.en.md,index.de.md) - UI translations are in the
i18ndirectory - Language-specific configurations are in
config/_default/languages/
Contributions to the lectureStudio website are welcome! Please follow these guidelines:
- Use 4-space indentation for JavaScript files and follow the existing style for other file types
- Follow the existing code style in the project
- Use kebab-case for filenames and directories
- Keep templates modular and reusable
- Test all language versions when making changes
For more detailed information, please refer to the GUIDELINES.md file.
This project is dual-licensed under the MIT License and the CC BY-NC-ND 4.0 License. For details, see the LICENSE file.