install.php now takes the videos path (form field / --videos= CLI flag),
persists it into config.php, and creates the directory if missing.
config.example.php default changed from a dev path to /srv/courses.
Creates config.php from the example if missing, creates the database
(and app DB user when admin credentials are given), applies schema.sql
idempotently, optionally creates the first login account, and locks
itself with .install.lock after a successful run.
Scans nested course folders for mp4s, tracks per-user resume position
and per-folder progress. SPA frontend with hash routing over a JSON API;
range-request streaming via stream.php.