A web-based slideshow presentation platform with retro DOS/UNIX styling for dynamic, interactive technical talks
Present slides in presentation mode page, view notes on a separate monitor, or visit the interactive mode page for hands-on sandboxes where the audience can experiment with concepts of the presentation
App uses ngsw to ensure stability in low web connection environments, such as crowded conference halls. A previous load of the website will remain in the browser, even after accidentally refreshing.
src/app/- Application rootbootstrap/- App initialization and base route configurationcommon/- Top-level shared utilities (used across all talks)page/- Main pages loaded by appmain-menu/- Talk and mode selectormode-presentation/- Slide viewer for presentersmode-interactive/- Audience-facing sandbox experiencepresenter-notes/- Notes viewer for presenterstalk/- Self-contained presentationscompress/*Data Compressionregex/*- Regex Fundamentalsnew-talk/- Example structure of a presentationcommon/- Utilities scoped only to this talkcomponent/- Reusable components for this talkroute/- Route definitions and venue-specific configurationsvenue/-default.tsand other venue configs
sandbox/- Interactive sandbox for audience experimentationslide/- Individual slide definitionsintro/- Example of a slidenested-component/- Sub-components for this slide
src/style/- Global SCSSsetup/- Generates CSS variables based on config input
script/- Project scripts to simplify bulk changesasset/- Web-server assetstalk/- Specific to each talknew-talk/- Example talk. Contains .webp files used in this talkvenue/- Contains a directory for each venuenew-venue/- Example venue. Contains .webp files used for this venue's logo, opening/closing slides, etc.
Avoid plural wording, entirely
Avoid repeat naming through nested directories. A component file named x.component.ts inside a component directory is already superfluous; remove component from the name
Use default exports where ambiguity is of no risk, such as route children imports
Create a new folder under talk/ (e.g., talk/my-topic/) with the same structure: common/, component/, slide/, sandbox/, and route/. This keeps scoped utilities close to their use and maintains consistency.
Inspect src/app/page/talk/regex for examples
Mode Presentation page routes file (src/app/page/mode-presentation/route.ts) requires a route entry to the new talk
Main Menu page requires UI additions to add the new talk into the selection list
Angular CLI version 21.2.1.
Run npm start for a dev server. Navigate to http://localhost:4200/. The application will automatically reload if you change any of the source files
Run npm build to build the project. The build artifacts will be stored in the dist/ directory
Run npm update-css-vars to generate a fresh stylesheet containing the list of potential CSS variables according to the config. See src/style/setup
Run npm host-local to serve the dev server on local network. View the IP in the command output, and visit that from a mobile device