# ayimmam/access architecture

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

- Interactive diagram: https://gitdiagram.com/ayimmam/access
- Repository: https://github.com/ayimmam/access

## Overview

Access is an accessible-learning-media product: learners consume video, captions and transcripts through a drop-in web component and can download lesson content; the API serves public lesson data and signing manifests. Separate branches cover career listings, avatar review, demo security and the planned publishing/offline-reader surfaces. The README documents several future or scaffolded subsystems; where sampled source does not show their wiring, no runtime connection is asserted.

Main entry points: [`services/api/src/access_api/main.py`](https://github.com/ayimmam/access/blob/main/services/api/src/access_api/main.py) (Public API), [`packages/lesson-component/src/lesson-element.ts`](https://github.com/ayimmam/access/blob/main/packages/lesson-component/src/lesson-element.ts) (Lesson component), [`packages/lesson-component/src/media-view.ts`](https://github.com/ayimmam/access/blob/main/packages/lesson-component/src/media-view.ts) (Media viewer), [`packages/lesson-component/src/timing-avatar.ts`](https://github.com/ayimmam/access/blob/main/packages/lesson-component/src/timing-avatar.ts) (Timing avatar)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_client["Learner experiences"]
  node_lesson_ui["Lesson component<br/>[lesson-element.ts]"]
  node_media["Media viewer<br/>[media-view.ts]"]
  node_career["Career listings<br/>[career-element.ts]"]
  node_reader["Offline reader<br/>[main.ts]"]
  node_console["Publishing console<br/>[main.tsx]"]
end

subgraph group_service["Public lesson service"]
  node_api["Public API<br/>[main.py]"]
  node_lessons["Lesson rules<br/>[lessons.py]"]
  node_jobs["Job fixtures<br/>[jobs.py]"]
  node_security["Demo security<br/>[security.py]"]
  node_security_store[("Session store<br/>[security_store.py]")]
end

subgraph group_signing["Signing workflow"]
  node_signing["Signing manifests<br/>[signing.py]"]
  node_avatar["Timing avatar<br/>[timing-avatar.ts]"]
  node_player["Signing player<br/>[signing-player.ts]"]
  node_review["Avatar review<br/>[avatar-review.ts]"]
end

subgraph group_other["Supporting capabilities"]
  node_worker["Conversion worker<br/>[capture.py]"]
  node_savanna["Savanna adapters"]
end

node_learner(("Learner"))

node_learner -->|"uses"| node_lesson_ui
node_lesson_ui -->|"renders"| node_media
node_lesson_ui -.->|"loads lesson data"| node_api
node_api -->|"resolves lessons"| node_lessons
node_api -->|"loads manifests"| node_signing
node_api -->|"uses job rules"| node_jobs
node_security -->|"uses sessions"| node_security_store
node_media -->|"updates timing"| node_avatar
node_media -->|"loads manifest"| node_signing
node_review -->|"loads draft"| node_avatar
node_avatar -->|"creates player"| node_player
node_learner -.->|"uses"| node_career

click node_lesson_ui "https://github.com/ayimmam/access/blob/main/packages/lesson-component/src/lesson-element.ts"
click node_media "https://github.com/ayimmam/access/blob/main/packages/lesson-component/src/media-view.ts"
click node_career "https://github.com/ayimmam/access/blob/main/packages/lesson-component/src/career-element.ts"
click node_reader "https://github.com/ayimmam/access/blob/main/apps/offline-reader/src/main.ts"
click node_console "https://github.com/ayimmam/access/blob/main/apps/publishing-console/src/main.tsx"
click node_api "https://github.com/ayimmam/access/blob/main/services/api/src/access_api/main.py"
click node_lessons "https://github.com/ayimmam/access/blob/main/services/core/src/access_core/lessons.py"
click node_jobs "https://github.com/ayimmam/access/blob/main/services/core/src/access_core/jobs.py"
click node_security "https://github.com/ayimmam/access/blob/main/services/api/src/access_api/security.py"
click node_security_store "https://github.com/ayimmam/access/blob/main/services/api/src/access_api/security_store.py"
click node_signing "https://github.com/ayimmam/access/blob/main/services/core/src/access_core/signing.py"
click node_avatar "https://github.com/ayimmam/access/blob/main/packages/lesson-component/src/timing-avatar.ts"
click node_player "https://github.com/ayimmam/access/blob/main/packages/lesson-component/src/signing-player.ts"
click node_review "https://github.com/ayimmam/access/blob/main/packages/lesson-component/src/avatar-review.ts"
click node_worker "https://github.com/ayimmam/access/blob/main/services/worker/src/access_worker/capture.py"
click node_savanna "https://github.com/ayimmam/access/tree/main/integrations/savanna/src"

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_lesson_ui,node_media,node_career,node_reader,node_console toneBlue
class node_api,node_lessons,node_jobs,node_security,node_security_store toneAmber
class node_signing,node_avatar,node_player,node_review toneMint
class node_worker,node_savanna toneRose
class node_learner toneIndigo
```

## Components

### Learner experiences

- [Lesson component](https://github.com/ayimmam/access/blob/main/packages/lesson-component/src/lesson-element.ts): `packages/lesson-component/src/lesson-element.ts`
- [Media viewer](https://github.com/ayimmam/access/blob/main/packages/lesson-component/src/media-view.ts): `packages/lesson-component/src/media-view.ts`
- [Career listings](https://github.com/ayimmam/access/blob/main/packages/lesson-component/src/career-element.ts): `packages/lesson-component/src/career-element.ts`
- [Offline reader](https://github.com/ayimmam/access/blob/main/apps/offline-reader/src/main.ts): `apps/offline-reader/src/main.ts`
- [Publishing console](https://github.com/ayimmam/access/blob/main/apps/publishing-console/src/main.tsx): `apps/publishing-console/src/main.tsx`

### Public lesson service

- [Public API](https://github.com/ayimmam/access/blob/main/services/api/src/access_api/main.py): `services/api/src/access_api/main.py`
- [Lesson rules](https://github.com/ayimmam/access/blob/main/services/core/src/access_core/lessons.py): `services/core/src/access_core/lessons.py`
- [Job fixtures](https://github.com/ayimmam/access/blob/main/services/core/src/access_core/jobs.py): `services/core/src/access_core/jobs.py`
- [Demo security](https://github.com/ayimmam/access/blob/main/services/api/src/access_api/security.py): `services/api/src/access_api/security.py`
- [Session store](https://github.com/ayimmam/access/blob/main/services/api/src/access_api/security_store.py): `services/api/src/access_api/security_store.py`

### Signing workflow

- [Signing manifests](https://github.com/ayimmam/access/blob/main/services/core/src/access_core/signing.py): `services/core/src/access_core/signing.py`
- [Timing avatar](https://github.com/ayimmam/access/blob/main/packages/lesson-component/src/timing-avatar.ts): `packages/lesson-component/src/timing-avatar.ts`
- [Signing player](https://github.com/ayimmam/access/blob/main/packages/lesson-component/src/signing-player.ts): `packages/lesson-component/src/signing-player.ts`
- [Avatar review](https://github.com/ayimmam/access/blob/main/packages/lesson-component/src/avatar-review.ts): `packages/lesson-component/src/avatar-review.ts`

### Supporting capabilities

- [Conversion worker](https://github.com/ayimmam/access/blob/main/services/worker/src/access_worker/capture.py): `services/worker/src/access_worker/capture.py`
- [Savanna adapters](https://github.com/ayimmam/access/tree/main/integrations/savanna/src): `integrations/savanna/src`

### Other components

- **Learner**

## Connections

- Learner → Lesson component: uses (evidence: `README.md`)
- Lesson component → Media viewer: renders (evidence: `packages/lesson-component/src/lesson-element.ts`)
- Lesson component → Public API: loads lesson data (evidence: `README.md`)
- Public API → Lesson rules: resolves lessons (evidence: `services/api/src/access_api/main.py`)
- Public API → Signing manifests: loads manifests (evidence: `services/api/src/access_api/main.py`)
- Public API → Job fixtures: uses job rules (evidence: `services/api/src/access_api/main.py`)
- Demo security → Session store: uses sessions (evidence: `services/api/src/access_api/security.py`)
- Media viewer → Timing avatar: updates timing (evidence: `packages/lesson-component/src/media-view.ts`)
- Media viewer → Signing manifests: loads manifest (evidence: `packages/lesson-component/src/media-view.ts`)
- Avatar review → Timing avatar: loads draft (evidence: `packages/lesson-component/src/avatar-review.ts`)
- Timing avatar → Signing player: creates player (evidence: `packages/lesson-component/src/timing-avatar.ts`)
- Learner → Career listings: uses (evidence: `README.md`)
