# azure-samples/sonic-brief architecture

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

- Interactive diagram: https://gitdiagram.com/azure-samples/sonic-brief
- Repository: https://github.com/azure-samples/sonic-brief

## Overview

Sonic Brief is an audio transcription and reporting application: users upload recordings, asynchronous processing produces transcripts and summaries, and users review or download results. The repository separates a React frontend, FastAPI backend, and Azure Functions processing service. Prompt customization and authentication are additional product capabilities. Several backend and processing relationships are documented in the README; the excerpts do not establish every internal call, so unverified wiring is omitted.

Main entry points: [`frontend_app/src/main.tsx`](https://github.com/azure-samples/sonic-brief/blob/main/frontend_app/src/main.tsx) (Web UI), [`az-func-audio/function_app.py`](https://github.com/azure-samples/sonic-brief/blob/main/az-func-audio/function_app.py) (Blob-triggered worker), [`backend_app/app/main.py`](https://github.com/azure-samples/sonic-brief/blob/main/backend_app/app/main.py) (FastAPI application), [`backend_app/app/routers/upload.py`](https://github.com/azure-samples/sonic-brief/blob/main/backend_app/app/routers/upload.py) (Upload and jobs)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_web["Web application"]
  node_frontend["Web UI<br/>[main.tsx]"]
  node_upload_ui["Audio upload"]
  node_recordings_ui["Recording views"]
  node_prompt_ui["Prompt management<br/>[content.tsx]"]
  node_auth_ui["Login and register<br/>[auth-form.tsx]"]
  node_api_client["API client<br/>[api.ts]"]
end

subgraph group_api["Backend API"]
  node_api_server["FastAPI application<br/>[main.py]"]
  node_auth_routes["Authentication routes<br/>[auth.py]"]
  node_upload_routes["Upload and jobs<br/>[upload.py]"]
  node_prompt_routes["Prompt routes<br/>[prompts.py]"]
  node_backend_storage["Blob storage service<br/>[storage_service.py]"]
end

subgraph group_processing["Audio processing"]
  node_function["Blob-triggered worker<br/>[function_app.py]"]
  node_download["Audio retrieval<br/>[azure_storage.py]"]
  node_transcription["Speech transcription"]
  node_analysis["Summary analysis"]
  node_function_storage["Result storage<br/>[storage_service.py]"]
  node_function_cosmos["Job and prompt data<br/>[cosmos_service.py]"]
end

subgraph group_data["Cloud data services"]
  node_recording_blobs[("Recording blobs")]
  node_result_blobs[("Transcript and report blobs")]
  node_cosmos[("Cosmos DB")]
  node_speech_service["Azure AI Speech"]
  node_openai["Azure OpenAI"]
end

node_user(("User"))

node_user -->|"uses"| node_frontend
node_frontend -->|"offers upload"| node_upload_ui
node_frontend -->|"shows recordings"| node_recordings_ui
node_frontend -->|"customizes prompts"| node_prompt_ui
node_frontend -->|"supports login"| node_auth_ui
node_frontend -.->|"makes API calls"| node_api_client
node_api_server -->|"registers routes"| node_auth_routes
node_api_server -->|"registers routes"| node_upload_routes
node_api_server -->|"registers routes"| node_prompt_routes
node_auth_routes -->|"reads and writes users"| node_cosmos
node_upload_routes -->|"stores recordings"| node_backend_storage
node_upload_routes -->|"reads job data"| node_cosmos
node_prompt_routes -->|"manages prompts"| node_cosmos
node_user -->|"uploads audio"| node_upload_ui
node_backend_storage -->|"stores recording"| node_recording_blobs
node_recording_blobs -->|"triggers processing"| node_function
node_function -->|"gets audio"| node_download
node_function -->|"submits transcription"| node_transcription
node_transcription -->|"transcribes audio"| node_speech_service
node_function -->|"updates job state"| node_function_cosmos
node_function_cosmos -->|"reads prompts and writes status"| node_cosmos
node_function -->|"summarizes transcript"| node_analysis
node_analysis -->|"requests summary"| node_openai
node_function -->|"stores outputs"| node_function_storage
node_function_storage -->|"writes transcript and report"| node_result_blobs
node_recordings_ui -.->|"requests job results"| node_api_client
node_user -->|"reviews reports"| node_recordings_ui

click node_frontend "https://github.com/azure-samples/sonic-brief/blob/main/frontend_app/src/main.tsx"
click node_upload_ui "https://github.com/azure-samples/sonic-brief/blob/main/frontend_app/src/components/dashboard/audio-upload-form.tsx"
click node_recordings_ui "https://github.com/azure-samples/sonic-brief/blob/main/frontend_app/src/components/audio-recordings/AudioRecordingsCombined.tsx"
click node_prompt_ui "https://github.com/azure-samples/sonic-brief/blob/main/frontend_app/src/components/prompt-management/content.tsx"
click node_auth_ui "https://github.com/azure-samples/sonic-brief/blob/main/frontend_app/src/components/auth-form.tsx"
click node_api_client "https://github.com/azure-samples/sonic-brief/blob/main/frontend_app/src/lib/api.ts"
click node_api_server "https://github.com/azure-samples/sonic-brief/blob/main/backend_app/app/main.py"
click node_auth_routes "https://github.com/azure-samples/sonic-brief/blob/main/backend_app/app/routers/auth.py"
click node_upload_routes "https://github.com/azure-samples/sonic-brief/blob/main/backend_app/app/routers/upload.py"
click node_prompt_routes "https://github.com/azure-samples/sonic-brief/blob/main/backend_app/app/routers/prompts.py"
click node_backend_storage "https://github.com/azure-samples/sonic-brief/blob/main/backend_app/app/services/storage_service.py"
click node_function "https://github.com/azure-samples/sonic-brief/blob/main/az-func-audio/function_app.py"
click node_download "https://github.com/azure-samples/sonic-brief/blob/main/az-func-audio/azure_storage.py"
click node_transcription "https://github.com/azure-samples/sonic-brief/blob/main/az-func-audio/transcription_service.py"
click node_analysis "https://github.com/azure-samples/sonic-brief/blob/main/az-func-audio/analysis_service.py"
click node_function_storage "https://github.com/azure-samples/sonic-brief/blob/main/az-func-audio/storage_service.py"
click node_function_cosmos "https://github.com/azure-samples/sonic-brief/blob/main/az-func-audio/cosmos_service.py"

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_frontend,node_upload_ui,node_recordings_ui,node_prompt_ui,node_auth_ui,node_api_client,node_user toneBlue
class node_api_server,node_auth_routes,node_upload_routes,node_prompt_routes,node_backend_storage toneAmber
class node_function,node_download,node_transcription,node_analysis,node_function_storage,node_function_cosmos toneMint
class node_recording_blobs,node_result_blobs,node_cosmos,node_speech_service,node_openai toneRose
```

## Components

### Web application

- [Web UI](https://github.com/azure-samples/sonic-brief/blob/main/frontend_app/src/main.tsx): `frontend_app/src/main.tsx`
- [Audio upload](https://github.com/azure-samples/sonic-brief/blob/main/frontend_app/src/components/dashboard/audio-upload-form.tsx): `frontend_app/src/components/dashboard/audio-upload-form.tsx`
- [Recording views](https://github.com/azure-samples/sonic-brief/blob/main/frontend_app/src/components/audio-recordings/AudioRecordingsCombined.tsx): `frontend_app/src/components/audio-recordings/AudioRecordingsCombined.tsx`
- [Prompt management](https://github.com/azure-samples/sonic-brief/blob/main/frontend_app/src/components/prompt-management/content.tsx): `frontend_app/src/components/prompt-management/content.tsx`
- [Login and register](https://github.com/azure-samples/sonic-brief/blob/main/frontend_app/src/components/auth-form.tsx): `frontend_app/src/components/auth-form.tsx`
- [API client](https://github.com/azure-samples/sonic-brief/blob/main/frontend_app/src/lib/api.ts): `frontend_app/src/lib/api.ts`

### Backend API

- [FastAPI application](https://github.com/azure-samples/sonic-brief/blob/main/backend_app/app/main.py): `backend_app/app/main.py`
- [Authentication routes](https://github.com/azure-samples/sonic-brief/blob/main/backend_app/app/routers/auth.py): `backend_app/app/routers/auth.py`
- [Upload and jobs](https://github.com/azure-samples/sonic-brief/blob/main/backend_app/app/routers/upload.py): `backend_app/app/routers/upload.py`
- [Prompt routes](https://github.com/azure-samples/sonic-brief/blob/main/backend_app/app/routers/prompts.py): `backend_app/app/routers/prompts.py`
- [Blob storage service](https://github.com/azure-samples/sonic-brief/blob/main/backend_app/app/services/storage_service.py): `backend_app/app/services/storage_service.py`

### Audio processing

- [Blob-triggered worker](https://github.com/azure-samples/sonic-brief/blob/main/az-func-audio/function_app.py): `az-func-audio/function_app.py`
- [Audio retrieval](https://github.com/azure-samples/sonic-brief/blob/main/az-func-audio/azure_storage.py): `az-func-audio/azure_storage.py`
- [Speech transcription](https://github.com/azure-samples/sonic-brief/blob/main/az-func-audio/transcription_service.py): `az-func-audio/transcription_service.py`
- [Summary analysis](https://github.com/azure-samples/sonic-brief/blob/main/az-func-audio/analysis_service.py): `az-func-audio/analysis_service.py`
- [Result storage](https://github.com/azure-samples/sonic-brief/blob/main/az-func-audio/storage_service.py): `az-func-audio/storage_service.py`
- [Job and prompt data](https://github.com/azure-samples/sonic-brief/blob/main/az-func-audio/cosmos_service.py): `az-func-audio/cosmos_service.py`

### Cloud data services

- **Recording blobs**
- **Transcript and report blobs**
- **Cosmos DB**
- **Azure AI Speech**
- **Azure OpenAI**

### Other components

- **User**

## Connections

- User → Web UI: uses (evidence: `README.md`)
- Web UI → Audio upload: offers upload (evidence: `README.md`)
- Web UI → Recording views: shows recordings (evidence: `README.md`)
- Web UI → Prompt management: customizes prompts (evidence: `README.md`)
- Web UI → Login and register: supports login (evidence: `README.md`)
- Web UI → API client: makes API calls
- FastAPI application → Authentication routes: registers routes (evidence: `backend_app/app/main.py`)
- FastAPI application → Upload and jobs: registers routes (evidence: `backend_app/app/main.py`)
- FastAPI application → Prompt routes: registers routes (evidence: `backend_app/app/main.py`)
- Authentication routes → Cosmos DB: reads and writes users (evidence: `README.md`)
- Upload and jobs → Blob storage service: stores recordings (evidence: `backend_app/app/routers/upload.py`)
- Upload and jobs → Cosmos DB: reads job data (evidence: `README.md`)
- Prompt routes → Cosmos DB: manages prompts (evidence: `README.md`)
- User → Audio upload: uploads audio (evidence: `README.md`)
- Blob storage service → Recording blobs: stores recording (evidence: `README.md`)
- Recording blobs → Blob-triggered worker: triggers processing (evidence: `README.md`)
- Blob-triggered worker → Audio retrieval: gets audio (evidence: `README.md`)
- Blob-triggered worker → Speech transcription: submits transcription (evidence: `README.md`)
- Speech transcription → Azure AI Speech: transcribes audio (evidence: `README.md`)
- Blob-triggered worker → Job and prompt data: updates job state (evidence: `README.md`)
- Job and prompt data → Cosmos DB: reads prompts and writes status (evidence: `README.md`)
- Blob-triggered worker → Summary analysis: summarizes transcript (evidence: `README.md`)
- Summary analysis → Azure OpenAI: requests summary (evidence: `README.md`)
- Blob-triggered worker → Result storage: stores outputs (evidence: `README.md`)
- Result storage → Transcript and report blobs: writes transcript and report (evidence: `README.md`)
- Recording views → API client: requests job results
- User → Recording views: reviews reports (evidence: `README.md`)
