# bariskisir/jevtalks architecture

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

- Interactive diagram: https://gitdiagram.com/bariskisir/jevtalks
- Repository: https://github.com/bariskisir/jevtalks

## Overview

Jev Talks is a decision-driven chat app: visitors submit a message, then the app repeatedly requests one character or one of 250 words until the model returns STOP. Optional rechecking reviews and may replace the completed answer. Chats, personal keys, and custom prompt profiles are browser-persisted; the API routes decisions to TypeSafe. The main component wiring and server behavior are only partially excerpted, so uncertain internal calls are omitted; documented capabilities are retained.

Main entry points: [`src/App.tsx`](https://github.com/bariskisir/jevtalks/blob/master/src/App.tsx) (App), [`api/jev.ts`](https://github.com/bariskisir/jevtalks/blob/master/api/jev.ts) (Jev API), [`src/lib/api.ts`](https://github.com/bariskisir/jevtalks/blob/master/src/lib/api.ts) (API client), [`src/components/Composer.tsx`](https://github.com/bariskisir/jevtalks/blob/master/src/components/Composer.tsx) (Composer)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_interface["Chat interface"]
  node_composer["Composer<br/>[Composer.tsx]"]
  node_timeline["Chat timeline<br/>[ChatTimeline.tsx]"]
  node_sidebar["Chat sidebar<br/>[Sidebar.tsx]"]
  node_settings["Settings dialog<br/>[SettingsDialog.tsx]"]
  node_profilesui["Profile editor"]
end

subgraph group_orchestration["Chat orchestration"]
  node_app["App<br/>[App.tsx]"]
  node_chatstate["Chat storage<br/>[chatStorage.ts]"]
  node_keystore["Key storage<br/>[keyStorage.ts]"]
  node_profiles["Prompt profiles<br/>[promptProfiles.ts]"]
end

subgraph group_generation["Generation and review"]
  node_lettergen["Letter generation<br/>[generateReply.ts]"]
  node_wordgen["Word generation"]
  node_letterreview["Letter recheck<br/>[recheckReply.ts]"]
  node_wordreview["Word recheck"]
  node_clientapi["API client<br/>[api.ts]"]
end

subgraph group_service["Decision service"]
  node_server["Jev API<br/>[jev.ts]"]
  node_letterprotocol["Letter protocol<br/>[jevProtocol.ts]"]
  node_wordprotocol["Word protocol<br/>[wordProtocol.ts]"]
  node_requestlog[("Request log<br/>[jev.ts]")]
end

node_visitor(("Visitor"))
node_chatstore[("Browser chat store")]
node_keydb[("Browser key store")]
node_profiledb[("Browser profile store")]
node_typesafe{{"TypeSafe service"}}

node_visitor -->|"writes message"| node_composer
node_composer -->|"submits"| node_app
node_app -->|"renders conversation"| node_timeline
node_app -->|"supplies chats"| node_sidebar
node_app -->|"opens settings"| node_settings
node_settings -->|"shows profiles"| node_profilesui
node_app -->|"loads and saves"| node_chatstate
node_chatstate -->|"reads and writes"| node_chatstore
node_app -->|"loads and saves key"| node_keystore
node_keystore -->|"reads and writes"| node_keydb
node_app -->|"selects profiles"| node_profiles
node_profiles -->|"reads and writes"| node_profiledb
node_profilesui -->|"changes profiles"| node_app
node_app -->|"starts letter mode"| node_lettergen
node_app -->|"starts word mode"| node_wordgen
node_app -->|"starts letter recheck"| node_letterreview
node_app -->|"starts word recheck"| node_wordreview
node_lettergen -->|"requests choices"| node_clientapi
node_wordgen -->|"requests choices"| node_clientapi
node_letterreview -->|"requests review"| node_clientapi
node_wordreview -->|"requests review"| node_clientapi
node_clientapi -->|"posts decisions"| node_server
node_server -->|"builds and decodes"| node_letterprotocol
node_server -->|"builds and decodes"| node_wordprotocol
node_server -->|"sends evaluation"| node_typesafe
node_server -->|"appends events"| node_requestlog

click node_app "https://github.com/bariskisir/jevtalks/blob/master/src/App.tsx"
click node_composer "https://github.com/bariskisir/jevtalks/blob/master/src/components/Composer.tsx"
click node_timeline "https://github.com/bariskisir/jevtalks/blob/master/src/components/ChatTimeline.tsx"
click node_sidebar "https://github.com/bariskisir/jevtalks/blob/master/src/components/Sidebar.tsx"
click node_settings "https://github.com/bariskisir/jevtalks/blob/master/src/components/SettingsDialog.tsx"
click node_profilesui "https://github.com/bariskisir/jevtalks/blob/master/src/components/PromptProfilesSettings.tsx"
click node_chatstate "https://github.com/bariskisir/jevtalks/blob/master/src/lib/chatStorage.ts"
click node_keystore "https://github.com/bariskisir/jevtalks/blob/master/src/lib/keyStorage.ts"
click node_profiles "https://github.com/bariskisir/jevtalks/blob/master/src/lib/promptProfiles.ts"
click node_lettergen "https://github.com/bariskisir/jevtalks/blob/master/src/lib/generateReply.ts"
click node_wordgen "https://github.com/bariskisir/jevtalks/blob/master/src/lib/generateWordReply.ts"
click node_letterreview "https://github.com/bariskisir/jevtalks/blob/master/src/lib/recheckReply.ts"
click node_wordreview "https://github.com/bariskisir/jevtalks/blob/master/src/lib/recheckWordReply.ts"
click node_clientapi "https://github.com/bariskisir/jevtalks/blob/master/src/lib/api.ts"
click node_server "https://github.com/bariskisir/jevtalks/blob/master/api/jev.ts"
click node_letterprotocol "https://github.com/bariskisir/jevtalks/blob/master/src/lib/jevProtocol.ts"
click node_wordprotocol "https://github.com/bariskisir/jevtalks/blob/master/src/lib/wordProtocol.ts"
click node_requestlog "https://github.com/bariskisir/jevtalks/blob/master/api/jev.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_composer,node_timeline,node_sidebar,node_settings,node_profilesui toneBlue
class node_app,node_chatstate,node_keystore,node_profiles,node_chatstore,node_keydb,node_profiledb toneAmber
class node_lettergen,node_wordgen,node_letterreview,node_wordreview,node_clientapi toneMint
class node_server,node_letterprotocol,node_wordprotocol,node_requestlog toneRose
class node_visitor,node_typesafe toneIndigo
```

## Components

### Chat interface

- [Composer](https://github.com/bariskisir/jevtalks/blob/master/src/components/Composer.tsx): `src/components/Composer.tsx`
- [Chat timeline](https://github.com/bariskisir/jevtalks/blob/master/src/components/ChatTimeline.tsx): `src/components/ChatTimeline.tsx`
- [Chat sidebar](https://github.com/bariskisir/jevtalks/blob/master/src/components/Sidebar.tsx): `src/components/Sidebar.tsx`
- [Settings dialog](https://github.com/bariskisir/jevtalks/blob/master/src/components/SettingsDialog.tsx): `src/components/SettingsDialog.tsx`
- [Profile editor](https://github.com/bariskisir/jevtalks/blob/master/src/components/PromptProfilesSettings.tsx): `src/components/PromptProfilesSettings.tsx`

### Chat orchestration

- [App](https://github.com/bariskisir/jevtalks/blob/master/src/App.tsx): `src/App.tsx`
- [Chat storage](https://github.com/bariskisir/jevtalks/blob/master/src/lib/chatStorage.ts): `src/lib/chatStorage.ts`
- [Key storage](https://github.com/bariskisir/jevtalks/blob/master/src/lib/keyStorage.ts): `src/lib/keyStorage.ts`
- [Prompt profiles](https://github.com/bariskisir/jevtalks/blob/master/src/lib/promptProfiles.ts): `src/lib/promptProfiles.ts`

### Generation and review

- [Letter generation](https://github.com/bariskisir/jevtalks/blob/master/src/lib/generateReply.ts): `src/lib/generateReply.ts`
- [Word generation](https://github.com/bariskisir/jevtalks/blob/master/src/lib/generateWordReply.ts): `src/lib/generateWordReply.ts`
- [Letter recheck](https://github.com/bariskisir/jevtalks/blob/master/src/lib/recheckReply.ts): `src/lib/recheckReply.ts`
- [Word recheck](https://github.com/bariskisir/jevtalks/blob/master/src/lib/recheckWordReply.ts): `src/lib/recheckWordReply.ts`
- [API client](https://github.com/bariskisir/jevtalks/blob/master/src/lib/api.ts): `src/lib/api.ts`

### Decision service

- [Jev API](https://github.com/bariskisir/jevtalks/blob/master/api/jev.ts): `api/jev.ts`
- [Letter protocol](https://github.com/bariskisir/jevtalks/blob/master/src/lib/jevProtocol.ts): `src/lib/jevProtocol.ts`
- [Word protocol](https://github.com/bariskisir/jevtalks/blob/master/src/lib/wordProtocol.ts): `src/lib/wordProtocol.ts`
- [Request log](https://github.com/bariskisir/jevtalks/blob/master/api/jev.ts): `api/jev.ts`

### Other components

- **Visitor**
- **Browser chat store**
- **Browser key store**
- **Browser profile store**
- **TypeSafe service**

## Connections

- Visitor → Composer: writes message
- Composer → App: submits
- App → Chat timeline: renders conversation
- App → Chat sidebar: supplies chats
- App → Settings dialog: opens settings
- Settings dialog → Profile editor: shows profiles
- App → Chat storage: loads and saves
- Chat storage → Browser chat store: reads and writes
- App → Key storage: loads and saves key
- Key storage → Browser key store: reads and writes
- App → Prompt profiles: selects profiles
- Prompt profiles → Browser profile store: reads and writes
- Profile editor → App: changes profiles
- App → Letter generation: starts letter mode
- App → Word generation: starts word mode
- App → Letter recheck: starts letter recheck
- App → Word recheck: starts word recheck
- Letter generation → API client: requests choices
- Word generation → API client: requests choices
- Letter recheck → API client: requests review
- Word recheck → API client: requests review
- API client → Jev API: posts decisions
- Jev API → Letter protocol: builds and decodes
- Jev API → Word protocol: builds and decodes
- Jev API → TypeSafe service: sends evaluation
- Jev API → Request log: appends events
