# thps-hendrick/speech-analyzer architecture

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

- Interactive diagram: https://gitdiagram.com/thps-hendrick/speech-analyzer
- Repository: https://github.com/thps-hendrick/speech-analyzer

## Overview

Speech-analyzer combines a browser-based speaking practice and analysis dashboard, speech transcription/scoring, and a separate coaching CRM plus learner portal. The main analysis workflow captures microphone audio or accepts an upload, sends audio for transcription, and presents assessment data through dashboard widgets; the broader product also includes practice games, courses, progress reporting, and portal challenges. Edges are limited to calls and event/data relationships visible in excerpts or explicit documentation; unsampled capabilities are represented by their implementing modules without inferred wiring.

Main entry points: [`components/medium/upload-med.js`](https://github.com/thps-hendrick/speech-analyzer/blob/main/components/medium/upload-med.js) (Audio Upload), [`api/transcribe.js`](https://github.com/thps-hendrick/speech-analyzer/blob/main/api/transcribe.js) (Transcription API), [`components/dashboard-manager.js`](https://github.com/thps-hendrick/speech-analyzer/blob/main/components/dashboard-manager.js) (Dashboard Manager), [`portal/app.js`](https://github.com/thps-hendrick/speech-analyzer/blob/main/portal/app.js) (Learner Portal)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_capture["Audio Capture"]
  node_audio_engine["Live Audio Engine"]
  node_upload_widget["Audio Upload<br/>[upload-med.js]"]
end

subgraph group_assessment["Speech Assessment"]
  node_transcribe_api["Transcription API<br/>[transcribe.js]"]
  node_audio_processor["Audio Processor<br/>[audio-processor.js]"]
  node_nlp_scorer["NLP Scorer<br/>[nlp-scorer.js]"]
  node_scoring_matrix["Report Scoring"]
  node_coach_api["AI Coach API<br/>[coach.js]"]
  node_save_attempt["Save Attempt API<br/>[save-rc-attempt.js]"]
end

subgraph group_dashboard["Practice Dashboard"]
  node_dashboard_manager["Dashboard Manager"]
  node_game_board["Challenge Game Board<br/>[game-board.js]"]
  node_course_widget["Course Widget<br/>[course-widget.js]"]
  node_diagnostic["Diagnostic<br/>[diagnostic.js]"]
  node_results["Results And Reports<br/>[results.js]"]
  node_progress["Progress Views<br/>[progress.js]"]
  node_metrics_widgets["Metric Widgets<br/>[gauge-mumble.js]"]
  node_metric_pills["Metric Pills<br/>[pill-runtime.js]"]
end

subgraph group_services["Learning And CRM"]
  node_portal["Learner Portal<br/>[app.js]"]
  node_wreath["Trophy Artwork<br/>[wreath.js]"]
  node_crm_app["CRM Dashboard<br/>[app.js]"]
  node_booking_api["Session Booking<br/>[book-session.js]"]
  node_crm_apis["CRM Operations<br/>[submit-enquiry.js]"]
end

node_speaker(("Speaker"))
node_firebase[("Firebase")]
node_google_speech["Google Speech"]
node_google_calendar["Google Calendar"]

node_speaker -->|"records speech"| node_audio_engine
node_speaker -->|"uploads audio"| node_upload_widget
node_audio_engine -->|"posts audio chunks"| node_transcribe_api
node_upload_widget -->|"posts audio chunks"| node_transcribe_api
node_transcribe_api -->|"recognizes audio"| node_google_speech
node_upload_widget -->|"dispatches results"| node_metrics_widgets
node_upload_widget -.->|"dispatches results"| node_metric_pills
node_dashboard_manager -->|"spawns widget"| node_game_board
node_dashboard_manager -->|"spawns widget"| node_course_widget
node_portal -->|"renders artwork"| node_wreath
node_portal -->|"reads and updates"| node_firebase
node_crm_app -->|"loads and adds clients"| node_firebase
node_booking_api -->|"creates event"| node_google_calendar
node_booking_api -->|"adds client record"| node_firebase

click node_audio_engine "https://github.com/thps-hendrick/speech-analyzer/blob/main/engines/audio-engine-headless.js"
click node_upload_widget "https://github.com/thps-hendrick/speech-analyzer/blob/main/components/medium/upload-med.js"
click node_transcribe_api "https://github.com/thps-hendrick/speech-analyzer/blob/main/api/transcribe.js"
click node_audio_processor "https://github.com/thps-hendrick/speech-analyzer/blob/main/engines/audio-processor.js"
click node_nlp_scorer "https://github.com/thps-hendrick/speech-analyzer/blob/main/engines/nlp-scorer.js"
click node_scoring_matrix "https://github.com/thps-hendrick/speech-analyzer/blob/main/engines/report-scoring-matrix.js"
click node_coach_api "https://github.com/thps-hendrick/speech-analyzer/blob/main/api/coach.js"
click node_save_attempt "https://github.com/thps-hendrick/speech-analyzer/blob/main/api/save-rc-attempt.js"
click node_dashboard_manager "https://github.com/thps-hendrick/speech-analyzer/blob/main/components/dashboard-manager.js"
click node_game_board "https://github.com/thps-hendrick/speech-analyzer/blob/main/components/core/game-board.js"
click node_course_widget "https://github.com/thps-hendrick/speech-analyzer/blob/main/components/large/course-widget.js"
click node_diagnostic "https://github.com/thps-hendrick/speech-analyzer/blob/main/components/large/diagnostic.js"
click node_results "https://github.com/thps-hendrick/speech-analyzer/blob/main/components/large/results.js"
click node_progress "https://github.com/thps-hendrick/speech-analyzer/blob/main/components/large/progress.js"
click node_metrics_widgets "https://github.com/thps-hendrick/speech-analyzer/blob/main/components/medium/gauge-mumble.js"
click node_metric_pills "https://github.com/thps-hendrick/speech-analyzer/blob/main/components/small/pill-runtime.js"
click node_portal "https://github.com/thps-hendrick/speech-analyzer/blob/main/portal/app.js"
click node_wreath "https://github.com/thps-hendrick/speech-analyzer/blob/main/portal/wreath.js"
click node_crm_app "https://github.com/thps-hendrick/speech-analyzer/blob/main/crm/app.js"
click node_booking_api "https://github.com/thps-hendrick/speech-analyzer/blob/main/crm/api/book-session.js"
click node_crm_apis "https://github.com/thps-hendrick/speech-analyzer/blob/main/crm/api/submit-enquiry.js"

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_audio_engine,node_upload_widget toneBlue
class node_transcribe_api,node_audio_processor,node_nlp_scorer,node_scoring_matrix,node_coach_api,node_save_attempt,node_firebase toneAmber
class node_dashboard_manager,node_game_board,node_course_widget,node_diagnostic,node_results,node_progress,node_metrics_widgets,node_metric_pills toneMint
class node_portal,node_wreath,node_crm_app,node_booking_api,node_crm_apis toneRose
class node_speaker,node_google_speech,node_google_calendar toneIndigo
```

## Components

### Audio Capture

- [Live Audio Engine](https://github.com/thps-hendrick/speech-analyzer/blob/main/engines/audio-engine-headless.js): `engines/audio-engine-headless.js`
- [Audio Upload](https://github.com/thps-hendrick/speech-analyzer/blob/main/components/medium/upload-med.js): `components/medium/upload-med.js`

### Speech Assessment

- [Transcription API](https://github.com/thps-hendrick/speech-analyzer/blob/main/api/transcribe.js): `api/transcribe.js`
- [Audio Processor](https://github.com/thps-hendrick/speech-analyzer/blob/main/engines/audio-processor.js): `engines/audio-processor.js`
- [NLP Scorer](https://github.com/thps-hendrick/speech-analyzer/blob/main/engines/nlp-scorer.js): `engines/nlp-scorer.js`
- [Report Scoring](https://github.com/thps-hendrick/speech-analyzer/blob/main/engines/report-scoring-matrix.js): `engines/report-scoring-matrix.js`
- [AI Coach API](https://github.com/thps-hendrick/speech-analyzer/blob/main/api/coach.js): `api/coach.js`
- [Save Attempt API](https://github.com/thps-hendrick/speech-analyzer/blob/main/api/save-rc-attempt.js): `api/save-rc-attempt.js`

### Practice Dashboard

- [Dashboard Manager](https://github.com/thps-hendrick/speech-analyzer/blob/main/components/dashboard-manager.js): `components/dashboard-manager.js`
- [Challenge Game Board](https://github.com/thps-hendrick/speech-analyzer/blob/main/components/core/game-board.js): `components/core/game-board.js`
- [Course Widget](https://github.com/thps-hendrick/speech-analyzer/blob/main/components/large/course-widget.js): `components/large/course-widget.js`
- [Diagnostic](https://github.com/thps-hendrick/speech-analyzer/blob/main/components/large/diagnostic.js): `components/large/diagnostic.js`
- [Results And Reports](https://github.com/thps-hendrick/speech-analyzer/blob/main/components/large/results.js): `components/large/results.js`
- [Progress Views](https://github.com/thps-hendrick/speech-analyzer/blob/main/components/large/progress.js): `components/large/progress.js`
- [Metric Widgets](https://github.com/thps-hendrick/speech-analyzer/blob/main/components/medium/gauge-mumble.js): `components/medium/gauge-mumble.js`
- [Metric Pills](https://github.com/thps-hendrick/speech-analyzer/blob/main/components/small/pill-runtime.js): `components/small/pill-runtime.js`

### Learning And CRM

- [Learner Portal](https://github.com/thps-hendrick/speech-analyzer/blob/main/portal/app.js): `portal/app.js`
- [Trophy Artwork](https://github.com/thps-hendrick/speech-analyzer/blob/main/portal/wreath.js): `portal/wreath.js`
- [CRM Dashboard](https://github.com/thps-hendrick/speech-analyzer/blob/main/crm/app.js): `crm/app.js`
- [Session Booking](https://github.com/thps-hendrick/speech-analyzer/blob/main/crm/api/book-session.js): `crm/api/book-session.js`
- [CRM Operations](https://github.com/thps-hendrick/speech-analyzer/blob/main/crm/api/submit-enquiry.js): `crm/api/submit-enquiry.js`

### Other components

- **Speaker**
- **Firebase**
- **Google Speech**
- **Google Calendar**

## Connections

- Speaker → Live Audio Engine: records speech (evidence: `engines/audio-engine-headless.js`)
- Speaker → Audio Upload: uploads audio (evidence: `components/medium/upload-med.js`)
- Live Audio Engine → Transcription API: posts audio chunks (evidence: `engines/audio-engine-headless.js`)
- Audio Upload → Transcription API: posts audio chunks (evidence: `components/medium/upload-med.js`)
- Transcription API → Google Speech: recognizes audio (evidence: `api/transcribe.js`)
- Audio Upload → Metric Widgets: dispatches results (evidence: `components/medium/upload-med.js`)
- Audio Upload → Metric Pills: dispatches results
- Dashboard Manager → Challenge Game Board: spawns widget (evidence: `components/dashboard-manager.js`)
- Dashboard Manager → Course Widget: spawns widget (evidence: `components/dashboard-manager.js`)
- Learner Portal → Trophy Artwork: renders artwork (evidence: `portal/app.js`)
- Learner Portal → Firebase: reads and updates (evidence: `portal/app.js`)
- CRM Dashboard → Firebase: loads and adds clients (evidence: `crm/app.js`)
- Session Booking → Google Calendar: creates event (evidence: `crm/api/book-session.js`)
- Session Booking → Firebase: adds client record (evidence: `crm/api/book-session.js`)
