# Hudra Architecture ## Overview Hudra is a Manifest V3 browser extension that presents the existing DOM of an HTML lesson. It does not convert the lesson into a proprietary format. ## Slide detection The current presentation model uses HTML headings: - H1 identifies the lesson title - H2 identifies the beginning of a new slide - H3 identifies the beginning of a new slide - H4 identifies a subsection within the current slide - content following an H2 or H3 belongs to that slide until the next H2 or H3 Pages without H2 or H3 headings are presented as a single slide. ## Supported pages Hudra starts only on secure QLearn pages at `qlearn.eq.edu.au` (including subdomains) and Canvas pages on an `instructure.com` subdomain. A supported page must also contain a recognised lesson-content container and an H1 lesson title. Unsupported pages receive a temporary in-page notice and are not put into presentation mode. ## Main components ### background.js Handles extension-level behaviour and presentation launch logic. Active session routing and window-restoration metadata is kept in `chrome.storage.session` so presenter controls survive service-worker restarts. Lesson content and slide previews are not persisted. ### controls.html Provides the presenter dashboard interface. ### controls.css Styles the presenter controls. ### controls.js Manages presenter navigation, controls and audience communication. ### presenter.js Creates and manages the audience presentation experience. ### page-detection.js Contains the shared lesson-container and title detection used before launch and when presentation mode starts. ### manifest.json Defines the extension metadata, permissions and version. ## Design constraints Hudra should avoid: - cloning complex media unnecessarily - fragile LMS-specific DOM assumptions - large content-detection systems - destructive modification of the original lesson New media features should be implemented and tested independently.