# HdM Slides - Unified Makefile # Supports multiple courses: 223015b (Dateiformate) and 223015c (Internettechnik) .PHONY: help dev dev-b dev-c build build-b build-c pdf html klausur clean install deploy qr optimize-images # Course configuration COURSES = 223015b 223015c SLIDES_DIR = slides # Course-specific settings 223015b_NAME = Dateiformate, Schnittstellen, Speichermedien 223015b_KAPITEL = 00-intro 01-grundlagen-text-audio 02-bild-audio-video 03-speichermedien-schnittstellen 04-distribution-apis-zukunft 05-vertiefung-offene-fragen klausurfolien 223015b_DEPLOY_PATH = /home/tengo/html/hdm/223015b 223015c_NAME = Internettechnologien 223015c_KAPITEL = 01-geschichte-grundlagen-html 02-netzwerke-protokolle-css 03-interaktivitaet-javascript klausurfolien 223015c_DEPLOY_PATH = /home/tengo/html/hdm/223015c DEPLOY_HOST = tengo@tuttle.uberspace.de # Default target help: @echo "HdM Slides - Unified Build System" @echo "" @echo "Courses:" @echo " 223015b - Dateiformate, Schnittstellen, Speichermedien" @echo " 223015c - Internettechnologien" @echo "" @echo "Development:" @echo " make dev - Start development server (port 3000)" @echo "" @echo "Build:" @echo " make build - Build all courses" @echo " make build-b - Build 223015b only" @echo " make build-c - Build 223015c only" @echo " make pdf - Export all to PDF" @echo " make html - Export all to HTML" @echo " make klausur - Extract klausurfolien slides" @echo "" @echo "Tools:" @echo " make qr URL=... - Generate QR code for URL" @echo " make optimize-images COURSE=223015b - Resize images" @echo "" @echo "Deploy:" @echo " make deploy - Deploy all courses" @echo " make deploy-b - Deploy 223015b only" @echo " make deploy-c - Deploy 223015c only" @echo "" @echo "Other:" @echo " make clean - Remove generated files" @echo " make install - Install dependencies" # Ensure build directories exist build/.exists: @mkdir -p build/223015b build/223015c @touch $@ # Development server dev: @./scripts/dev-server.sh dev-kill: @-pkill -f "marp-cli.*--server" 2>/dev/null || true @sleep 0.5 # Build functions define build_course @echo "Building $(1)..." @mkdir -p build/$(1) @cp -r $(SLIDES_DIR)/$(1)/assets build/$(1)/ 2>/dev/null || true @cp -r $(SLIDES_DIR)/$(1)/materials build/$(1)/ 2>/dev/null || true @for f in $($(1)_KAPITEL); do \ if [ -f "$(SLIDES_DIR)/$(1)/$$f.md" ]; then \ echo " Building $$f..."; \ npx @marp-team/marp-cli $(SLIDES_DIR)/$(1)/$$f.md -o build/$(1)/$$f.html; \ npx @marp-team/marp-cli $(SLIDES_DIR)/$(1)/$$f.md --pdf --allow-local-files -o build/$(1)/$$f.pdf; \ fi \ done @./scripts/generate-index.sh $(1) build/$(1) endef build-b: build/.exists $(call build_course,223015b) build-c: build/.exists $(call build_course,223015c) build: build-b build-c @echo "All courses built!" # HTML only builds define html_course @echo "Building HTML for $(1)..." @mkdir -p build/$(1) @cp -r $(SLIDES_DIR)/$(1)/assets build/$(1)/ 2>/dev/null || true @cp -r $(SLIDES_DIR)/$(1)/materials build/$(1)/ 2>/dev/null || true @for f in $($(1)_KAPITEL); do \ if [ -f "$(SLIDES_DIR)/$(1)/$$f.md" ]; then \ echo " $$f.html"; \ npx @marp-team/marp-cli $(SLIDES_DIR)/$(1)/$$f.md -o build/$(1)/$$f.html; \ fi \ done @./scripts/generate-index.sh $(1) build/$(1) endef html-b: build/.exists $(call html_course,223015b) html-c: build/.exists $(call html_course,223015c) html: html-b html-c # PDF only builds define pdf_course @echo "Building PDFs for $(1)..." @mkdir -p build/$(1) @for f in $($(1)_KAPITEL); do \ if [ -f "$(SLIDES_DIR)/$(1)/$$f.md" ]; then \ echo " $$f.pdf"; \ npx @marp-team/marp-cli $(SLIDES_DIR)/$(1)/$$f.md --pdf --allow-local-files -o build/$(1)/$$f.pdf; \ fi \ done endef pdf-b: build/.exists $(call pdf_course,223015b) pdf-c: build/.exists $(call pdf_course,223015c) pdf: pdf-b pdf-c # Klausur slide extraction klausur-b: @./scripts/extract-klausur.sh 223015b klausur-c: @./scripts/extract-klausur.sh 223015c klausur: klausur-b klausur-c @echo "Klausurfolien slides extracted for all courses!" # QR Code generation (uses nix-shell) qr: ifndef URL @echo "Usage: make qr URL=https://example.com" @echo " make qr URL=https://example.com OUTPUT=my-qr.png" else @nix-shell -p qrencode --run 'qrencode -o $(or $(OUTPUT),qr-code.png) -s 10 "$(URL)"' @echo "Generated: $(or $(OUTPUT),qr-code.png)" endif # QR code for a slide deck URL qr-slides: ifndef COURSE @echo "Usage: make qr-slides COURSE=223015b" else @nix-shell -p qrencode --run 'qrencode -o build/$(COURSE)/qr-$(COURSE).png -s 10 "https://librete.ch/hdm/$(COURSE)/"' @echo "Generated: build/$(COURSE)/qr-$(COURSE).png" endif # Optimize images optimize-images: ifndef COURSE @echo "Usage: make optimize-images COURSE=223015b" else @echo "Optimizing images for $(COURSE)..." @mkdir -p $(SLIDES_DIR)/$(COURSE)/assets-original @nix-shell -p imagemagick --run 'for img in $(SLIDES_DIR)/$(COURSE)/assets/*.png $(SLIDES_DIR)/$(COURSE)/assets/*.jpg 2>/dev/null; do \ [ -f "$$img" ] && cp "$$img" $(SLIDES_DIR)/$(COURSE)/assets-original/ && \ magick "$$img" -resize "1920x>" -quality 85 "$$img" && echo " Optimized: $$(basename $$img)"; \ done || true' @echo "Done! Originals in assets-original/" endif # Root index for /hdm/ HDM_DEPLOY_PATH = /home/tengo/html/hdm build-index: build/.exists @echo "Building root index..." @echo 'HdM Vorlesungen

HdM Vorlesungen

Wintersemester 2025/26 · Michael Czechowski

223015b
Dateiformate, Schnittstellen, Speichermedien & Distributionswege
6 Kapitel · Modul "Technik 1"
223015c
Grundlagen IT- und Internettechnik
3 Kapitel · Modul "Technik 1"

Referenzen

Plattform
Code Crispies
Selbstlernplattform
QR Code

https://librete.ch/hdm/

' > build/index.html # Deploy define deploy_course @echo "Deploying $(1)..." scp build/$(1)/*.html $(DEPLOY_HOST):$($(1)_DEPLOY_PATH)/ scp build/$(1)/*.pdf $(DEPLOY_HOST):$($(1)_DEPLOY_PATH)/ 2>/dev/null || true scp build/$(1)/*.svg $(DEPLOY_HOST):$($(1)_DEPLOY_PATH)/ 2>/dev/null || true scp -r build/$(1)/assets/ $(DEPLOY_HOST):$($(1)_DEPLOY_PATH)/ scp -r build/$(1)/materials/ $(DEPLOY_HOST):$($(1)_DEPLOY_PATH)/ 2>/dev/null || true @echo "$(1) deployed!" endef deploy-b: build-b $(call deploy_course,223015b) deploy-c: build-c $(call deploy_course,223015c) deploy-index: build-index @echo "Deploying root index..." scp build/index.html $(DEPLOY_HOST):$(HDM_DEPLOY_PATH)/ scp build/qr-root.svg $(DEPLOY_HOST):$(HDM_DEPLOY_PATH)/ 2>/dev/null || true @echo "Root index deployed!" deploy: build-index deploy-b deploy-c deploy-index @echo "All courses deployed!" # Clean clean: @echo "Cleaning generated files..." rm -rf build/ .dev-index/ *.pdf *.html qr-code.png # Install dependencies install: @echo "Installing dependencies..." npm install