# khaan25/session-coach architecture

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

- Interactive diagram: https://gitdiagram.com/khaan25/session-coach
- Repository: https://github.com/khaan25/session-coach

## Overview

Session Coach captures Claude Code logs through a CLI, turns them into evidence-checked decision cards, and schedules learner reviews. The graph combines the documented end-to-end workflow with sampled CLI and session-registration code. Pipeline, review, dashboard, and email internals are represented at their listed source paths; their detailed calls were not sampled, so those relationships rely on README statements or are omitted where unsupported.

Main entry points: [`packages/cli/src/upload.ts`](https://github.com/khaan25/session-coach/blob/main/packages/cli/src/upload.ts) (Log uploader), [`packages/cli/src/sync.ts`](https://github.com/khaan25/session-coach/blob/main/packages/cli/src/sync.ts) (Hook sync), [`packages/cli/src/cli.ts`](https://github.com/khaan25/session-coach/blob/main/packages/cli/src/cli.ts) (CLI commands), [`apps/web/src/lib/pipeline/process.ts`](https://github.com/khaan25/session-coach/blob/main/apps/web/src/lib/pipeline/process.ts) (Card pipeline)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_capture["Session capture"]
  node_cli["CLI commands<br/>[cli.ts]"]
  node_init["Hook setup<br/>[init.ts]"]
  node_sync["Hook sync<br/>[sync.ts]"]
  node_discovery["Log discovery<br/>[latest.ts]"]
  node_config["CLI config<br/>[config.ts]"]
end

subgraph group_ingest["Upload and processing"]
  node_upload["Log uploader<br/>[upload.ts]"]
  node_push["Redact and gzip<br/>[push.ts]"]
  node_http["HTTP transport<br/>[http.ts]"]
  node_register["Session registration<br/>[route.ts]"]
  node_storage[("Log storage<br/>[upload.ts]")]
  node_process_route["Processing endpoint<br/>[route.ts]"]
  node_pipeline["Card pipeline<br/>[process.ts]"]
  node_extract["Decision extraction<br/>[extract.ts]"]
  node_evidence["Evidence checks<br/>[evidence.ts]"]
end

subgraph group_learning["Learning loop"]
  node_dashboard["Session dashboard"]
  node_review["Answer grading<br/>[route.ts]"]
  node_schedule["Review scheduling<br/>[schedule.ts]"]
end

subgraph group_platform["Account platform"]
  node_device["Device login<br/>[device.ts]"]
end

subgraph group_insights["Insights and reminders"]
  node_progress["Progress views<br/>[progress.ts]"]
  node_daily["Daily reminders<br/>[daily-review.ts]"]
end

node_claude(("Claude Code"))
node_learner(("Learner"))
node_email["Email service"]
node_model["Language model"]

node_claude -->|"enables hooks"| node_init
node_claude -->|"signals session end"| node_sync
node_cli -->|"runs setup"| node_init
node_cli -->|"uploads logs"| node_upload
node_cli -->|"runs login"| node_device
node_sync -->|"finds recent logs"| node_discovery
node_sync -->|"pushes logs"| node_upload
node_sync -->|"loads credentials"| node_config
node_upload -->|"prepares log"| node_push
node_upload -->|"sends requests"| node_http
node_upload -->|"registers session"| node_register
node_upload -->|"puts compressed log"| node_storage
node_upload -->|"starts processing"| node_process_route
node_register -->|"signs upload URL"| node_storage
node_process_route -->|"starts pipeline"| node_pipeline
node_pipeline -->|"extracts decisions"| node_extract
node_pipeline -->|"checks quotes"| node_evidence
node_extract -->|"requests extraction"| node_model
node_learner -->|"views sessions"| node_dashboard
node_learner -->|"submits answer"| node_review
node_review -->|"grades answer"| node_model
node_review -->|"updates interval"| node_schedule
node_learner -->|"checks progress"| node_progress
node_daily -->|"sends reminder"| node_email

click node_cli "https://github.com/khaan25/session-coach/blob/main/packages/cli/src/cli.ts"
click node_init "https://github.com/khaan25/session-coach/blob/main/packages/cli/src/init.ts"
click node_sync "https://github.com/khaan25/session-coach/blob/main/packages/cli/src/sync.ts"
click node_discovery "https://github.com/khaan25/session-coach/blob/main/packages/cli/src/latest.ts"
click node_config "https://github.com/khaan25/session-coach/blob/main/packages/cli/src/config.ts"
click node_device "https://github.com/khaan25/session-coach/blob/main/packages/cli/src/device.ts"
click node_upload "https://github.com/khaan25/session-coach/blob/main/packages/cli/src/upload.ts"
click node_push "https://github.com/khaan25/session-coach/blob/main/packages/cli/src/push.ts"
click node_http "https://github.com/khaan25/session-coach/blob/main/packages/cli/src/http.ts"
click node_register "https://github.com/khaan25/session-coach/blob/main/apps/web/src/app/api/sessions/route.ts"
click node_storage "https://github.com/khaan25/session-coach/blob/main/apps/web/src/lib/sessions/upload.ts"
click node_process_route "https://github.com/khaan25/session-coach/blob/main/apps/web/src/app/api/sessions/%5Bid%5D/process/route.ts"
click node_pipeline "https://github.com/khaan25/session-coach/blob/main/apps/web/src/lib/pipeline/process.ts"
click node_extract "https://github.com/khaan25/session-coach/blob/main/apps/web/src/lib/pipeline/extract.ts"
click node_evidence "https://github.com/khaan25/session-coach/blob/main/apps/web/src/lib/pipeline/evidence.ts"
click node_dashboard "https://github.com/khaan25/session-coach/blob/main/apps/web/src/app/(app)/dashboard/dashboard-sample-view.tsx"
click node_review "https://github.com/khaan25/session-coach/blob/main/apps/web/src/app/api/review/answer/route.ts"
click node_schedule "https://github.com/khaan25/session-coach/blob/main/apps/web/src/lib/review/schedule.ts"
click node_progress "https://github.com/khaan25/session-coach/blob/main/apps/web/src/lib/progress/progress.ts"
click node_daily "https://github.com/khaan25/session-coach/blob/main/apps/web/src/lib/email/daily-review.ts"

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_cli,node_init,node_sync,node_discovery,node_config toneBlue
class node_upload,node_push,node_http,node_register,node_storage,node_process_route,node_pipeline,node_extract,node_evidence toneAmber
class node_dashboard,node_review,node_schedule toneMint
class node_device toneRose
class node_progress,node_daily,node_claude,node_learner,node_email,node_model toneIndigo
```

## Components

### Session capture

- [CLI commands](https://github.com/khaan25/session-coach/blob/main/packages/cli/src/cli.ts): `packages/cli/src/cli.ts`
- [Hook setup](https://github.com/khaan25/session-coach/blob/main/packages/cli/src/init.ts): `packages/cli/src/init.ts`
- [Hook sync](https://github.com/khaan25/session-coach/blob/main/packages/cli/src/sync.ts): `packages/cli/src/sync.ts`
- [Log discovery](https://github.com/khaan25/session-coach/blob/main/packages/cli/src/latest.ts): `packages/cli/src/latest.ts`
- [CLI config](https://github.com/khaan25/session-coach/blob/main/packages/cli/src/config.ts): `packages/cli/src/config.ts`

### Upload and processing

- [Log uploader](https://github.com/khaan25/session-coach/blob/main/packages/cli/src/upload.ts): `packages/cli/src/upload.ts`
- [Redact and gzip](https://github.com/khaan25/session-coach/blob/main/packages/cli/src/push.ts): `packages/cli/src/push.ts`
- [HTTP transport](https://github.com/khaan25/session-coach/blob/main/packages/cli/src/http.ts): `packages/cli/src/http.ts`
- [Session registration](https://github.com/khaan25/session-coach/blob/main/apps/web/src/app/api/sessions/route.ts): `apps/web/src/app/api/sessions/route.ts`
- [Log storage](https://github.com/khaan25/session-coach/blob/main/apps/web/src/lib/sessions/upload.ts): `apps/web/src/lib/sessions/upload.ts`
- [Processing endpoint](https://github.com/khaan25/session-coach/blob/main/apps/web/src/app/api/sessions/%5Bid%5D/process/route.ts): `apps/web/src/app/api/sessions/[id]/process/route.ts`
- [Card pipeline](https://github.com/khaan25/session-coach/blob/main/apps/web/src/lib/pipeline/process.ts): `apps/web/src/lib/pipeline/process.ts`
- [Decision extraction](https://github.com/khaan25/session-coach/blob/main/apps/web/src/lib/pipeline/extract.ts): `apps/web/src/lib/pipeline/extract.ts`
- [Evidence checks](https://github.com/khaan25/session-coach/blob/main/apps/web/src/lib/pipeline/evidence.ts): `apps/web/src/lib/pipeline/evidence.ts`

### Learning loop

- [Session dashboard](https://github.com/khaan25/session-coach/blob/main/apps/web/src/app/(app)/dashboard/dashboard-sample-view.tsx): `apps/web/src/app/(app)/dashboard/dashboard-sample-view.tsx`
- [Answer grading](https://github.com/khaan25/session-coach/blob/main/apps/web/src/app/api/review/answer/route.ts): `apps/web/src/app/api/review/answer/route.ts`
- [Review scheduling](https://github.com/khaan25/session-coach/blob/main/apps/web/src/lib/review/schedule.ts): `apps/web/src/lib/review/schedule.ts`

### Account platform

- [Device login](https://github.com/khaan25/session-coach/blob/main/packages/cli/src/device.ts): `packages/cli/src/device.ts`

### Insights and reminders

- [Progress views](https://github.com/khaan25/session-coach/blob/main/apps/web/src/lib/progress/progress.ts): `apps/web/src/lib/progress/progress.ts`
- [Daily reminders](https://github.com/khaan25/session-coach/blob/main/apps/web/src/lib/email/daily-review.ts): `apps/web/src/lib/email/daily-review.ts`

### Other components

- **Claude Code**
- **Learner**
- **Email service**
- **Language model**

## Connections

- Claude Code → Hook setup: enables hooks (evidence: `README.md`)
- Claude Code → Hook sync: signals session end (evidence: `README.md`)
- CLI commands → Hook setup: runs setup (evidence: `packages/cli/src/cli.ts`)
- CLI commands → Log uploader: uploads logs (evidence: `packages/cli/src/cli.ts`)
- CLI commands → Device login: runs login (evidence: `packages/cli/src/cli.ts`)
- Hook sync → Log discovery: finds recent logs (evidence: `packages/cli/src/sync.ts`)
- Hook sync → Log uploader: pushes logs (evidence: `packages/cli/src/sync.ts`)
- Hook sync → CLI config: loads credentials (evidence: `packages/cli/src/sync.ts`)
- Log uploader → Redact and gzip: prepares log (evidence: `packages/cli/src/upload.ts`)
- Log uploader → HTTP transport: sends requests (evidence: `packages/cli/src/upload.ts`)
- Log uploader → Session registration: registers session (evidence: `README.md`)
- Log uploader → Log storage: puts compressed log (evidence: `README.md`)
- Log uploader → Processing endpoint: starts processing (evidence: `README.md`)
- Session registration → Log storage: signs upload URL (evidence: `apps/web/src/app/api/sessions/route.ts`)
- Processing endpoint → Card pipeline: starts pipeline (evidence: `README.md`)
- Card pipeline → Decision extraction: extracts decisions (evidence: `README.md`)
- Card pipeline → Evidence checks: checks quotes (evidence: `README.md`)
- Decision extraction → Language model: requests extraction (evidence: `README.md`)
- Learner → Session dashboard: views sessions (evidence: `README.md`)
- Learner → Answer grading: submits answer (evidence: `README.md`)
- Answer grading → Language model: grades answer (evidence: `README.md`)
- Answer grading → Review scheduling: updates interval (evidence: `README.md`)
- Learner → Progress views: checks progress (evidence: `README.md`)
- Daily reminders → Email service: sends reminder (evidence: `README.md`)
