# victoriakaey/code-snippet-reviewer architecture

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

- Interactive diagram: https://gitdiagram.com/victoriakaey/code-snippet-reviewer
- Repository: https://github.com/victoriakaey/code-snippet-reviewer
- Video tour (about a minute): https://gitdiagram.com/victoriakaey/code-snippet-reviewer/video

## Overview

Code Snippet Reviewer lets a user create a code snippet, request an AI review, inspect and navigate structured findings, record decisions, and discuss a finding with the AI. The backend queues review work, calls a configured provider, validates its output, and persists review history and decisions. The README documents mock, Ollama, and OpenAI providers. Some worker and UI internals were only partially excerpted, so uncertain connections are omitted; the unsampled review-history and rubric UI capabilities are retained where supported by the README and source tree.

Main entry points: [`frontend/src/pages/SnippetDetail.tsx`](https://github.com/victoriakaey/code-snippet-reviewer/blob/main/frontend/src/pages/SnippetDetail.tsx) (Review detail), [`frontend/src/api.ts`](https://github.com/victoriakaey/code-snippet-reviewer/blob/main/frontend/src/api.ts) (Typed API client), [`backend/app/main.py`](https://github.com/victoriakaey/code-snippet-reviewer/blob/main/backend/app/main.py) (FastAPI application), [`backend/app/db.py`](https://github.com/victoriakaey/code-snippet-reviewer/blob/main/backend/app/db.py) (SQLite database)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_ui["Review interface"]
  node_dashboard["Snippet dashboard<br/>[Dashboard.tsx]"]
  node_create["Snippet editor<br/>[CreateSnippet.tsx]"]
  node_detail["Review detail<br/>[SnippetDetail.tsx]"]
  node_editor["Code editor<br/>[CodeEditor.tsx]"]
  node_findings_ui["Findings panel<br/>[FindingsPanel.tsx]"]
  node_discussion_ui["Finding discussion<br/>[DiscussionView.tsx]"]
  node_history_ui["Review history"]
  node_polling["Review polling"]
  node_client["Typed API client<br/>[api.ts]"]
end

subgraph group_api["API and domain"]
  node_api_app["FastAPI application<br/>[main.py]"]
  node_snippets["Snippet endpoints<br/>[snippets.py]"]
  node_reviews["Review endpoints<br/>[reviews.py]"]
  node_findings["Finding decisions<br/>[findings.py]"]
  node_messages["Finding messages<br/>[messages.py]"]
  node_rubric_api["Rubric endpoint<br/>[rubric.py]"]
end

subgraph group_review["Review processing"]
  node_worker["Background worker<br/>[worker.py]"]
  node_pipeline["Output validation<br/>[review_pipeline.py]"]
  node_provider_factory["Provider selection<br/>[factory.py]"]
  node_provider_iface["Provider interface<br/>[base.py]"]
  node_ollama["Ollama provider<br/>[ollama.py]"]
  node_openai["OpenAI provider<br/>[openai.py]"]
  node_mock["Mock provider<br/>[mock.py]"]
  node_rubric["Review rubric<br/>[rubric.py]"]
end

subgraph group_data["Persistence"]
  node_database[("SQLite database<br/>[db.py]")]
  node_models["Domain records<br/>[models.py]"]
end

node_user(("Reviewer"))
node_llm_service{{"Configured model service"}}

node_user -->|"uses"| node_dashboard
node_dashboard -->|"opens"| node_create
node_user -->|"reviews snippet"| node_detail
node_detail -->|"renders"| node_editor
node_detail -->|"renders"| node_findings_ui
node_detail -->|"renders"| node_discussion_ui
node_detail -->|"renders"| node_history_ui
node_detail -->|"polls with"| node_polling
node_create -->|"uses"| node_editor
node_dashboard -->|"requests snippets"| node_client
node_create -->|"creates snippet"| node_client
node_detail -->|"loads and starts"| node_client
node_findings_ui -->|"updates decisions"| node_client
node_discussion_ui -->|"sends messages"| node_client
node_history_ui -->|"loads history"| node_client
node_polling -->|"polls reviews"| node_client
node_client -->|"calls API"| node_api_app
node_api_app -->|"registers"| node_snippets
node_api_app -->|"registers"| node_reviews
node_api_app -->|"registers"| node_findings
node_api_app -->|"registers"| node_messages
node_api_app -->|"registers"| node_rubric_api
node_reviews -->|"enqueues review"| node_worker
node_worker -->|"validates output"| node_pipeline
node_worker -->|"selects provider"| node_provider_factory
node_provider_factory -->|"returns implementation"| node_provider_iface
node_provider_factory -->|"selects"| node_ollama
node_provider_factory -->|"selects"| node_openai
node_provider_factory -->|"selects"| node_mock
node_ollama -->|"implements"| node_provider_iface
node_openai -->|"implements"| node_provider_iface
node_mock -->|"implements"| node_provider_iface
node_ollama -.->|"calls model"| node_llm_service
node_openai -.->|"calls model"| node_llm_service
node_worker -->|"reads and writes"| node_database
node_snippets -->|"reads and writes"| node_database
node_reviews -->|"reads"| node_database
node_findings -->|"reads and writes"| node_database
node_messages -->|"reads and writes"| node_database
node_rubric_api -->|"serves"| node_rubric
node_database -->|"maps records"| node_models
node_worker -->|"persists reviews"| node_models
node_snippets -->|"uses records"| node_models
node_findings -->|"uses records"| node_models
node_messages -->|"requests discussion"| node_provider_iface
node_ollama -->|"uses prompts"| node_rubric
node_openai -->|"uses prompts"| node_rubric

click node_dashboard "https://github.com/victoriakaey/code-snippet-reviewer/blob/main/frontend/src/pages/Dashboard.tsx"
click node_create "https://github.com/victoriakaey/code-snippet-reviewer/blob/main/frontend/src/components/CreateSnippet.tsx"
click node_detail "https://github.com/victoriakaey/code-snippet-reviewer/blob/main/frontend/src/pages/SnippetDetail.tsx"
click node_editor "https://github.com/victoriakaey/code-snippet-reviewer/blob/main/frontend/src/components/CodeEditor.tsx"
click node_findings_ui "https://github.com/victoriakaey/code-snippet-reviewer/blob/main/frontend/src/components/FindingsPanel.tsx"
click node_discussion_ui "https://github.com/victoriakaey/code-snippet-reviewer/blob/main/frontend/src/components/DiscussionView.tsx"
click node_history_ui "https://github.com/victoriakaey/code-snippet-reviewer/blob/main/frontend/src/components/ReviewDetailsDrawer.tsx"
click node_polling "https://github.com/victoriakaey/code-snippet-reviewer/blob/main/frontend/src/hooks/useReviewPolling.ts"
click node_client "https://github.com/victoriakaey/code-snippet-reviewer/blob/main/frontend/src/api.ts"
click node_api_app "https://github.com/victoriakaey/code-snippet-reviewer/blob/main/backend/app/main.py"
click node_snippets "https://github.com/victoriakaey/code-snippet-reviewer/blob/main/backend/app/routers/snippets.py"
click node_reviews "https://github.com/victoriakaey/code-snippet-reviewer/blob/main/backend/app/routers/reviews.py"
click node_findings "https://github.com/victoriakaey/code-snippet-reviewer/blob/main/backend/app/routers/findings.py"
click node_messages "https://github.com/victoriakaey/code-snippet-reviewer/blob/main/backend/app/routers/messages.py"
click node_rubric_api "https://github.com/victoriakaey/code-snippet-reviewer/blob/main/backend/app/routers/rubric.py"
click node_worker "https://github.com/victoriakaey/code-snippet-reviewer/blob/main/backend/app/worker.py"
click node_pipeline "https://github.com/victoriakaey/code-snippet-reviewer/blob/main/backend/app/review_pipeline.py"
click node_provider_factory "https://github.com/victoriakaey/code-snippet-reviewer/blob/main/backend/app/providers/factory.py"
click node_provider_iface "https://github.com/victoriakaey/code-snippet-reviewer/blob/main/backend/app/providers/base.py"
click node_ollama "https://github.com/victoriakaey/code-snippet-reviewer/blob/main/backend/app/providers/ollama.py"
click node_openai "https://github.com/victoriakaey/code-snippet-reviewer/blob/main/backend/app/providers/openai.py"
click node_mock "https://github.com/victoriakaey/code-snippet-reviewer/blob/main/backend/app/providers/mock.py"
click node_rubric "https://github.com/victoriakaey/code-snippet-reviewer/blob/main/backend/app/rubric.py"
click node_database "https://github.com/victoriakaey/code-snippet-reviewer/blob/main/backend/app/db.py"
click node_models "https://github.com/victoriakaey/code-snippet-reviewer/blob/main/backend/app/models.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_dashboard,node_create,node_detail,node_editor,node_findings_ui,node_discussion_ui,node_history_ui,node_polling,node_client,node_user toneBlue
class node_api_app,node_snippets,node_reviews,node_findings,node_messages,node_rubric_api toneAmber
class node_worker,node_pipeline,node_provider_factory,node_provider_iface,node_ollama,node_openai,node_mock,node_rubric toneMint
class node_database,node_models toneRose
class node_llm_service toneIndigo
```

## Components

### Review interface

- [Snippet dashboard](https://github.com/victoriakaey/code-snippet-reviewer/blob/main/frontend/src/pages/Dashboard.tsx): `frontend/src/pages/Dashboard.tsx`
- [Snippet editor](https://github.com/victoriakaey/code-snippet-reviewer/blob/main/frontend/src/components/CreateSnippet.tsx): `frontend/src/components/CreateSnippet.tsx`
- [Review detail](https://github.com/victoriakaey/code-snippet-reviewer/blob/main/frontend/src/pages/SnippetDetail.tsx): `frontend/src/pages/SnippetDetail.tsx`
- [Code editor](https://github.com/victoriakaey/code-snippet-reviewer/blob/main/frontend/src/components/CodeEditor.tsx): `frontend/src/components/CodeEditor.tsx`
- [Findings panel](https://github.com/victoriakaey/code-snippet-reviewer/blob/main/frontend/src/components/FindingsPanel.tsx): `frontend/src/components/FindingsPanel.tsx`
- [Finding discussion](https://github.com/victoriakaey/code-snippet-reviewer/blob/main/frontend/src/components/DiscussionView.tsx): `frontend/src/components/DiscussionView.tsx`
- [Review history](https://github.com/victoriakaey/code-snippet-reviewer/blob/main/frontend/src/components/ReviewDetailsDrawer.tsx): `frontend/src/components/ReviewDetailsDrawer.tsx`
- [Review polling](https://github.com/victoriakaey/code-snippet-reviewer/blob/main/frontend/src/hooks/useReviewPolling.ts): `frontend/src/hooks/useReviewPolling.ts`
- [Typed API client](https://github.com/victoriakaey/code-snippet-reviewer/blob/main/frontend/src/api.ts): `frontend/src/api.ts`

### API and domain

- [FastAPI application](https://github.com/victoriakaey/code-snippet-reviewer/blob/main/backend/app/main.py): `backend/app/main.py`
- [Snippet endpoints](https://github.com/victoriakaey/code-snippet-reviewer/blob/main/backend/app/routers/snippets.py): `backend/app/routers/snippets.py`
- [Review endpoints](https://github.com/victoriakaey/code-snippet-reviewer/blob/main/backend/app/routers/reviews.py): `backend/app/routers/reviews.py`
- [Finding decisions](https://github.com/victoriakaey/code-snippet-reviewer/blob/main/backend/app/routers/findings.py): `backend/app/routers/findings.py`
- [Finding messages](https://github.com/victoriakaey/code-snippet-reviewer/blob/main/backend/app/routers/messages.py): `backend/app/routers/messages.py`
- [Rubric endpoint](https://github.com/victoriakaey/code-snippet-reviewer/blob/main/backend/app/routers/rubric.py): `backend/app/routers/rubric.py`

### Review processing

- [Background worker](https://github.com/victoriakaey/code-snippet-reviewer/blob/main/backend/app/worker.py): `backend/app/worker.py`
- [Output validation](https://github.com/victoriakaey/code-snippet-reviewer/blob/main/backend/app/review_pipeline.py): `backend/app/review_pipeline.py`
- [Provider selection](https://github.com/victoriakaey/code-snippet-reviewer/blob/main/backend/app/providers/factory.py): `backend/app/providers/factory.py`
- [Provider interface](https://github.com/victoriakaey/code-snippet-reviewer/blob/main/backend/app/providers/base.py): `backend/app/providers/base.py`
- [Ollama provider](https://github.com/victoriakaey/code-snippet-reviewer/blob/main/backend/app/providers/ollama.py): `backend/app/providers/ollama.py`
- [OpenAI provider](https://github.com/victoriakaey/code-snippet-reviewer/blob/main/backend/app/providers/openai.py): `backend/app/providers/openai.py`
- [Mock provider](https://github.com/victoriakaey/code-snippet-reviewer/blob/main/backend/app/providers/mock.py): `backend/app/providers/mock.py`
- [Review rubric](https://github.com/victoriakaey/code-snippet-reviewer/blob/main/backend/app/rubric.py): `backend/app/rubric.py`

### Persistence

- [SQLite database](https://github.com/victoriakaey/code-snippet-reviewer/blob/main/backend/app/db.py): `backend/app/db.py`
- [Domain records](https://github.com/victoriakaey/code-snippet-reviewer/blob/main/backend/app/models.py): `backend/app/models.py`

### Other components

- **Reviewer**
- **Configured model service**

## Connections

- Reviewer → Snippet dashboard: uses (evidence: `README.md`)
- Snippet dashboard → Snippet editor: opens (evidence: `frontend/src/pages/Dashboard.tsx`)
- Reviewer → Review detail: reviews snippet (evidence: `README.md`)
- Review detail → Code editor: renders (evidence: `frontend/src/pages/SnippetDetail.tsx`)
- Review detail → Findings panel: renders (evidence: `frontend/src/pages/SnippetDetail.tsx`)
- Review detail → Finding discussion: renders (evidence: `frontend/src/pages/SnippetDetail.tsx`)
- Review detail → Review history: renders (evidence: `frontend/src/pages/SnippetDetail.tsx`)
- Review detail → Review polling: polls with (evidence: `frontend/src/pages/SnippetDetail.tsx`)
- Snippet editor → Code editor: uses (evidence: `frontend/src/components/CreateSnippet.tsx`)
- Snippet dashboard → Typed API client: requests snippets (evidence: `frontend/src/pages/Dashboard.tsx`)
- Snippet editor → Typed API client: creates snippet (evidence: `frontend/src/components/CreateSnippet.tsx`)
- Review detail → Typed API client: loads and starts (evidence: `frontend/src/pages/SnippetDetail.tsx`)
- Findings panel → Typed API client: updates decisions (evidence: `frontend/src/components/FindingsPanel.tsx`)
- Finding discussion → Typed API client: sends messages (evidence: `frontend/src/components/DiscussionView.tsx`)
- Review history → Typed API client: loads history (evidence: `frontend/src/components/ReviewDetailsDrawer.tsx`)
- Review polling → Typed API client: polls reviews (evidence: `frontend/src/hooks/useReviewPolling.ts`)
- Typed API client → FastAPI application: calls API (evidence: `README.md`)
- FastAPI application → Snippet endpoints: registers (evidence: `backend/app/main.py`)
- FastAPI application → Review endpoints: registers (evidence: `backend/app/main.py`)
- FastAPI application → Finding decisions: registers (evidence: `backend/app/main.py`)
- FastAPI application → Finding messages: registers (evidence: `backend/app/main.py`)
- FastAPI application → Rubric endpoint: registers (evidence: `backend/app/main.py`)
- Review endpoints → Background worker: enqueues review (evidence: `backend/app/routers/reviews.py`)
- Background worker → Output validation: validates output (evidence: `backend/app/worker.py`)
- Background worker → Provider selection: selects provider (evidence: `backend/app/worker.py`)
- Provider selection → Provider interface: returns implementation (evidence: `backend/app/providers/factory.py`)
- Provider selection → Ollama provider: selects (evidence: `backend/app/providers/factory.py`)
- Provider selection → OpenAI provider: selects (evidence: `backend/app/providers/factory.py`)
- Provider selection → Mock provider: selects (evidence: `backend/app/providers/factory.py`)
- Ollama provider → Provider interface: implements (evidence: `backend/app/providers/ollama.py`)
- OpenAI provider → Provider interface: implements (evidence: `backend/app/providers/openai.py`)
- Mock provider → Provider interface: implements (evidence: `backend/app/providers/mock.py`)
- Ollama provider → Configured model service: calls model (evidence: `README.md`)
- OpenAI provider → Configured model service: calls model (evidence: `README.md`)
- Background worker → SQLite database: reads and writes (evidence: `backend/app/worker.py`)
- Snippet endpoints → SQLite database: reads and writes (evidence: `backend/app/routers/snippets.py`)
- Review endpoints → SQLite database: reads (evidence: `backend/app/routers/reviews.py`)
- Finding decisions → SQLite database: reads and writes (evidence: `backend/app/routers/findings.py`)
- Finding messages → SQLite database: reads and writes (evidence: `backend/app/routers/messages.py`)
- Rubric endpoint → Review rubric: serves (evidence: `backend/app/routers/rubric.py`)
- SQLite database → Domain records: maps records (evidence: `backend/app/models.py`)
- Background worker → Domain records: persists reviews (evidence: `backend/app/worker.py`)
- Snippet endpoints → Domain records: uses records (evidence: `backend/app/routers/snippets.py`)
- Finding decisions → Domain records: uses records (evidence: `backend/app/routers/findings.py`)
- Finding messages → Provider interface: requests discussion (evidence: `backend/app/routers/messages.py`)
- Ollama provider → Review rubric: uses prompts (evidence: `backend/app/providers/ollama.py`)
- OpenAI provider → Review rubric: uses prompts (evidence: `backend/app/providers/openai.py`)
