> ## Documentation Index
> Fetch the complete documentation index at: https://docs.kair.is/llms.txt
> Use this file to discover all available pages before exploring further.

# Session Recording Flow

> Sequence diagram: how recording state is managed between client, API, and Redis.

```mermaid theme={null}
sequenceDiagram
    participant User
    participant VoiceRecorder
    participant LocalStorage
    participant API
    participant Redis

    User->>VoiceRecorder: Load Page
    VoiceRecorder->>API: GET /recording-status
    API->>Redis: GET session_recording_status:sessionId
    Redis-->>API: {status: recording/paused/inactive}
    API-->>VoiceRecorder: recording_status

    alt Has localStorage owner token
        VoiceRecorder->>VoiceRecorder: Auto-resume recording
    else No localStorage token & status=recording
        VoiceRecorder->>User: Show "Recording in progress, take over?"
    else status=inactive
        VoiceRecorder->>VoiceRecorder: Ready to start new recording
    end

    User->>VoiceRecorder: Start Recording
    VoiceRecorder->>API: GET /recording-status?status=recording
    API->>Redis: SET session_recording_status:sessionId + TTL 1h
    API-->>VoiceRecorder: Success
    VoiceRecorder->>LocalStorage: Save recording_owner_sessionId

    User->>VoiceRecorder: Stop Recording
    VoiceRecorder->>API: Upload final chunk (triggers jobs)
    API->>Redis: SET session_recording_status:sessionId = inactive
    VoiceRecorder->>LocalStorage: Clear recording_owner_sessionId
```
