# glacy/presentaciones architecture

> Architecture diagram of the GitHub repository glacy/presentaciones, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-25). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/glacy/presentaciones
- Repository: https://github.com/glacy/presentaciones

## Overview

This is a Next.js portal for interactive educational presentations. A learner selects a module in the launcher, enters its presentation, and navigates slide content with keyboard and on-screen controls; narrated modules also provide per-slide playback and optional auto-advance. The three presentation experiences cover vector physics, a teamwork project log, and open/reproducible education. Shared slide and audio components support the experiences. The README documents capabilities beyond the sampled excerpts; links to those features are shown only where the documented structure supports them.

Main entry points: [`src/app/presentations/physics/components/Presentation.tsx`](https://github.com/glacy/presentaciones/blob/main/src/app/presentations/physics/components/Presentation.tsx) (Physics presenter), [`src/app/presentations/proyecto/components/Presentation_Proyecto.tsx`](https://github.com/glacy/presentaciones/blob/main/src/app/presentations/proyecto/components/Presentation_Proyecto.tsx) (Project presenter), [`src/app/presentations/compartir/components/Presentation_Compartir.tsx`](https://github.com/glacy/presentaciones/blob/main/src/app/presentations/compartir/components/Presentation_Compartir.tsx) (Sharing presenter), [`src/app/page.tsx`](https://github.com/glacy/presentaciones/blob/main/src/app/page.tsx) (Module launcher)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_entry["Portal entry"]
  node_launcher["Module launcher<br/>[page.tsx]"]
  node_physics_route["Physics route<br/>[page.tsx]"]
  node_project_route["Project route<br/>[page.tsx]"]
  node_share_route["Sharing route<br/>[page.tsx]"]
end

subgraph group_experiences["Presentation experiences"]
  node_physics_player["Physics presenter<br/>[Presentation.tsx]"]
  node_project_player["Project presenter"]
  node_share_player["Sharing presenter"]
end

subgraph group_content["Slide content"]
  node_physics_meta["Physics metadata"]
  node_project_meta["Project metadata<br/>[slidesMeta.ts]"]
  node_share_meta["Sharing metadata<br/>[slidesMeta.ts]"]
  node_physics_slides["Vector physics slides"]
  node_project_slides["Teamwork project slides"]
  node_share_slides["Open education slides"]
end

subgraph group_shared["Shared playback"]
  node_slide_shell["Slide shell<br/>[SlideShell.tsx]"]
  node_audio_manager["Audio manager<br/>[useAudioManager.ts]"]
  node_audio_player["Audio player<br/>[AudioPlayer.tsx]"]
  node_autoplay["Auto-play toggle<br/>[AutoPlayToggle.tsx]"]
  node_audio_paths["Audio path utilities<br/>[audio.ts]"]
  node_audio_files["Narration files"]
end

node_learner(("Learner"))

node_learner -->|"opens portal"| node_launcher
node_launcher -->|"selects module"| node_physics_route
node_launcher -->|"selects module"| node_project_route
node_launcher -->|"selects module"| node_share_route
node_physics_route -->|"renders presenter"| node_physics_player
node_project_route -->|"renders presenter"| node_project_player
node_share_route -->|"renders presenter"| node_share_player
node_physics_player -->|"reads slide metadata"| node_physics_meta
node_physics_player -->|"selects slide"| node_physics_slides
node_project_player -->|"reads slide metadata"| node_project_meta
node_project_player -->|"selects slide"| node_project_slides
node_share_player -->|"reads slide metadata"| node_share_meta
node_share_player -->|"selects slide"| node_share_slides
node_physics_slides -->|"renders through"| node_slide_shell
node_project_slides -->|"renders through"| node_slide_shell
node_share_slides -->|"renders through"| node_slide_shell
node_physics_player -->|"controls playback"| node_audio_manager
node_share_player -->|"controls playback"| node_audio_manager
node_physics_player -->|"renders controls"| node_audio_player
node_project_player -->|"renders controls"| node_audio_player
node_share_player -->|"renders controls"| node_audio_player
node_physics_player -->|"renders toggle"| node_autoplay
node_project_player -->|"renders toggle"| node_autoplay
node_share_player -->|"renders toggle"| node_autoplay
node_project_player -->|"resolves narration"| node_audio_paths
node_audio_paths -->|"selects audio path"| node_audio_files
node_audio_player -->|"plays narration"| node_audio_files

click node_launcher "https://github.com/glacy/presentaciones/blob/main/src/app/page.tsx"
click node_physics_route "https://github.com/glacy/presentaciones/blob/main/src/app/presentations/physics/page.tsx"
click node_project_route "https://github.com/glacy/presentaciones/blob/main/src/app/presentations/proyecto/page.tsx"
click node_share_route "https://github.com/glacy/presentaciones/blob/main/src/app/presentations/compartir/page.tsx"
click node_physics_player "https://github.com/glacy/presentaciones/blob/main/src/app/presentations/physics/components/Presentation.tsx"
click node_project_player "https://github.com/glacy/presentaciones/blob/main/src/app/presentations/proyecto/components/Presentation_Proyecto.tsx"
click node_share_player "https://github.com/glacy/presentaciones/blob/main/src/app/presentations/compartir/components/Presentation_Compartir.tsx"
click node_physics_meta "https://github.com/glacy/presentaciones/blob/main/src/app/presentations/physics/data/physicsSlidesMeta.ts"
click node_project_meta "https://github.com/glacy/presentaciones/blob/main/src/app/presentations/proyecto/data/slidesMeta.ts"
click node_share_meta "https://github.com/glacy/presentaciones/blob/main/src/app/presentations/compartir/data/slidesMeta.ts"
click node_physics_slides "https://github.com/glacy/presentaciones/tree/main/src/app/presentations/physics/slides"
click node_project_slides "https://github.com/glacy/presentaciones/tree/main/src/app/presentations/proyecto/slides"
click node_share_slides "https://github.com/glacy/presentaciones/tree/main/src/app/presentations/compartir/slides"
click node_slide_shell "https://github.com/glacy/presentaciones/blob/main/src/app/presentations/shared/ui/SlideShell.tsx"
click node_audio_manager "https://github.com/glacy/presentaciones/blob/main/src/app/presentations/shared/hooks/useAudioManager.ts"
click node_audio_player "https://github.com/glacy/presentaciones/blob/main/src/app/presentations/shared/ui/AudioPlayer.tsx"
click node_autoplay "https://github.com/glacy/presentaciones/blob/main/src/app/presentations/shared/ui/AutoPlayToggle.tsx"
click node_audio_paths "https://github.com/glacy/presentaciones/blob/main/src/app/presentations/shared/utils/audio.ts"
click node_audio_files "https://github.com/glacy/presentaciones/tree/main/public/audio"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_launcher,node_physics_route,node_project_route,node_share_route toneBlue
class node_physics_player,node_project_player,node_share_player toneAmber
class node_physics_meta,node_project_meta,node_share_meta,node_physics_slides,node_project_slides,node_share_slides toneMint
class node_slide_shell,node_audio_manager,node_audio_player,node_autoplay,node_audio_paths,node_audio_files toneRose
class node_learner toneIndigo
```

## Components

### Portal entry

- [Module launcher](https://github.com/glacy/presentaciones/blob/main/src/app/page.tsx): `src/app/page.tsx`
- [Physics route](https://github.com/glacy/presentaciones/blob/main/src/app/presentations/physics/page.tsx): `src/app/presentations/physics/page.tsx`
- [Project route](https://github.com/glacy/presentaciones/blob/main/src/app/presentations/proyecto/page.tsx): `src/app/presentations/proyecto/page.tsx`
- [Sharing route](https://github.com/glacy/presentaciones/blob/main/src/app/presentations/compartir/page.tsx): `src/app/presentations/compartir/page.tsx`

### Presentation experiences

- [Physics presenter](https://github.com/glacy/presentaciones/blob/main/src/app/presentations/physics/components/Presentation.tsx): `src/app/presentations/physics/components/Presentation.tsx`
- [Project presenter](https://github.com/glacy/presentaciones/blob/main/src/app/presentations/proyecto/components/Presentation_Proyecto.tsx): `src/app/presentations/proyecto/components/Presentation_Proyecto.tsx`
- [Sharing presenter](https://github.com/glacy/presentaciones/blob/main/src/app/presentations/compartir/components/Presentation_Compartir.tsx): `src/app/presentations/compartir/components/Presentation_Compartir.tsx`

### Slide content

- [Physics metadata](https://github.com/glacy/presentaciones/blob/main/src/app/presentations/physics/data/physicsSlidesMeta.ts): `src/app/presentations/physics/data/physicsSlidesMeta.ts`
- [Project metadata](https://github.com/glacy/presentaciones/blob/main/src/app/presentations/proyecto/data/slidesMeta.ts): `src/app/presentations/proyecto/data/slidesMeta.ts`
- [Sharing metadata](https://github.com/glacy/presentaciones/blob/main/src/app/presentations/compartir/data/slidesMeta.ts): `src/app/presentations/compartir/data/slidesMeta.ts`
- [Vector physics slides](https://github.com/glacy/presentaciones/tree/main/src/app/presentations/physics/slides): `src/app/presentations/physics/slides`
- [Teamwork project slides](https://github.com/glacy/presentaciones/tree/main/src/app/presentations/proyecto/slides): `src/app/presentations/proyecto/slides`
- [Open education slides](https://github.com/glacy/presentaciones/tree/main/src/app/presentations/compartir/slides): `src/app/presentations/compartir/slides`

### Shared playback

- [Slide shell](https://github.com/glacy/presentaciones/blob/main/src/app/presentations/shared/ui/SlideShell.tsx): `src/app/presentations/shared/ui/SlideShell.tsx`
- [Audio manager](https://github.com/glacy/presentaciones/blob/main/src/app/presentations/shared/hooks/useAudioManager.ts): `src/app/presentations/shared/hooks/useAudioManager.ts`
- [Audio player](https://github.com/glacy/presentaciones/blob/main/src/app/presentations/shared/ui/AudioPlayer.tsx): `src/app/presentations/shared/ui/AudioPlayer.tsx`
- [Auto-play toggle](https://github.com/glacy/presentaciones/blob/main/src/app/presentations/shared/ui/AutoPlayToggle.tsx): `src/app/presentations/shared/ui/AutoPlayToggle.tsx`
- [Audio path utilities](https://github.com/glacy/presentaciones/blob/main/src/app/presentations/shared/utils/audio.ts): `src/app/presentations/shared/utils/audio.ts`
- [Narration files](https://github.com/glacy/presentaciones/tree/main/public/audio): `public/audio`

### Other components

- **Learner**

## Connections

- Learner → Module launcher: opens portal
- Module launcher → Physics route: selects module
- Module launcher → Project route: selects module
- Module launcher → Sharing route: selects module
- Physics route → Physics presenter: renders presenter
- Project route → Project presenter: renders presenter
- Sharing route → Sharing presenter: renders presenter
- Physics presenter → Physics metadata: reads slide metadata
- Physics presenter → Vector physics slides: selects slide
- Project presenter → Project metadata: reads slide metadata
- Project presenter → Teamwork project slides: selects slide
- Sharing presenter → Sharing metadata: reads slide metadata
- Sharing presenter → Open education slides: selects slide
- Vector physics slides → Slide shell: renders through
- Teamwork project slides → Slide shell: renders through
- Open education slides → Slide shell: renders through
- Physics presenter → Audio manager: controls playback
- Sharing presenter → Audio manager: controls playback
- Physics presenter → Audio player: renders controls
- Project presenter → Audio player: renders controls
- Sharing presenter → Audio player: renders controls
- Physics presenter → Auto-play toggle: renders toggle
- Project presenter → Auto-play toggle: renders toggle
- Sharing presenter → Auto-play toggle: renders toggle
- Project presenter → Audio path utilities: resolves narration
- Audio path utilities → Narration files: selects audio path
- Audio player → Narration files: plays narration
