# pari-kulkarni/email-tracker architecture

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

- Interactive diagram: https://gitdiagram.com/pari-kulkarni/email-tracker
- Repository: https://github.com/pari-kulkarni/email-tracker

## Overview

AIMC Email Study is a browser-based research app for collecting two sequential email drafts and the interaction history behind them. Participants start or resume by PID, write with chat and autocomplete available, send each email, then review a log and comparison; researchers reopen sessions and export or delete study data. The server coordinates sessions, event storage, and AI endpoints, while shared analysis derives revisions and other measures for logs and exports. The README documents several capabilities whose implementation was not sampled, so those links are shown only where documented.

Main entry points: [`server.js`](https://github.com/pari-kulkarni/email-tracker/blob/main/server.js) (HTTP study server), [`public/app.js`](https://github.com/pari-kulkarni/email-tracker/blob/main/public/app.js) (Writing app), [`public/researcher.js`](https://github.com/pari-kulkarni/email-tracker/blob/main/public/researcher.js) (Researcher page), [`public/analysis.js`](https://github.com/pari-kulkarni/email-tracker/blob/main/public/analysis.js) (Event analysis)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_participant["Participant workflow"]
  node_participant_app["Writing app<br/>[app.js]"]
  node_scenario_config["Study scenarios<br/>[scenarios.json]"]
  node_study_roster["Participant roster<br/>[participants.csv]"]
  node_core_logic["Edit and replay logic<br/>[core.js]"]
end

subgraph group_server["Session services"]
  node_server_runtime["HTTP study server<br/>[server.js]"]
  node_session_store[("Session and event files<br/>[server.js]")]
  node_study_config["Study settings<br/>[config.json]"]
  node_chat_service["AI chat service<br/>[server.js]"]
  node_autocomplete_service["Autocomplete service<br/>[server.js]"]
  node_llm_provider["Anthropic API"]
end

subgraph group_review["Review and analysis"]
  node_analysis_engine["Event analysis<br/>[analysis.js]"]
  node_log_view["Email log view<br/>[logview.js]"]
  node_comparison_view["Email comparison<br/>[logview.js]"]
end

subgraph group_research["Researcher tools"]
  node_researcher_page["Researcher page<br/>[researcher.js]"]
  node_exports["CSV and data exports<br/>[server.js]"]
  node_delete_session["Session deletion<br/>[server.js]"]
end

node_participant_actor(("Participant"))
node_researcher_actor(("Researcher"))

node_participant_actor -->|"starts writing"| node_participant_app
node_participant_app -->|"starts session"| node_server_runtime
node_server_runtime -->|"checks PID"| node_study_roster
node_server_runtime -->|"loads scenarios"| node_scenario_config
node_participant_app -->|"loads settings"| node_study_config
node_participant_app -->|"uses edit logic"| node_core_logic
node_participant_app -->|"sends events"| node_server_runtime
node_participant_app -->|"sends email"| node_server_runtime
node_server_runtime -->|"writes session data"| node_session_store
node_server_runtime -->|"replays edits"| node_core_logic
node_server_runtime -->|"builds exports"| node_analysis_engine
node_participant_app -->|"requests chat"| node_chat_service
node_participant_app -->|"requests suggestions"| node_autocomplete_service
node_chat_service -.->|"calls when configured"| node_llm_provider
node_autocomplete_service -.->|"calls when configured"| node_llm_provider
node_participant_actor -->|"reviews sent email"| node_log_view
node_log_view -->|"renders analysis"| node_analysis_engine
node_participant_actor -->|"compares emails"| node_comparison_view
node_comparison_view -->|"renders analysis"| node_analysis_engine
node_researcher_actor -->|"opens sessions"| node_researcher_page
node_researcher_page -->|"loads session data"| node_server_runtime
node_researcher_page -->|"downloads data"| node_exports
node_exports -->|"derives CSV rows"| node_analysis_engine
node_researcher_page -->|"requests deletion"| node_delete_session
node_delete_session -.->|"removes participant data"| node_session_store

click node_participant_app "https://github.com/pari-kulkarni/email-tracker/blob/main/public/app.js"
click node_scenario_config "https://github.com/pari-kulkarni/email-tracker/blob/main/config/scenarios.json"
click node_study_roster "https://github.com/pari-kulkarni/email-tracker/blob/main/config/participants.csv"
click node_core_logic "https://github.com/pari-kulkarni/email-tracker/blob/main/public/core.js"
click node_server_runtime "https://github.com/pari-kulkarni/email-tracker/blob/main/server.js"
click node_session_store "https://github.com/pari-kulkarni/email-tracker/blob/main/server.js"
click node_study_config "https://github.com/pari-kulkarni/email-tracker/blob/main/config/config.json"
click node_chat_service "https://github.com/pari-kulkarni/email-tracker/blob/main/server.js"
click node_autocomplete_service "https://github.com/pari-kulkarni/email-tracker/blob/main/server.js"
click node_analysis_engine "https://github.com/pari-kulkarni/email-tracker/blob/main/public/analysis.js"
click node_log_view "https://github.com/pari-kulkarni/email-tracker/blob/main/public/logview.js"
click node_comparison_view "https://github.com/pari-kulkarni/email-tracker/blob/main/public/logview.js"
click node_researcher_page "https://github.com/pari-kulkarni/email-tracker/blob/main/public/researcher.js"
click node_exports "https://github.com/pari-kulkarni/email-tracker/blob/main/server.js"
click node_delete_session "https://github.com/pari-kulkarni/email-tracker/blob/main/server.js"

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_participant_app,node_scenario_config,node_study_roster,node_core_logic toneBlue
class node_server_runtime,node_session_store,node_study_config,node_chat_service,node_autocomplete_service,node_llm_provider toneAmber
class node_analysis_engine,node_log_view,node_comparison_view toneMint
class node_researcher_page,node_exports,node_delete_session toneRose
class node_participant_actor,node_researcher_actor toneIndigo
```

## Components

### Participant workflow

- [Writing app](https://github.com/pari-kulkarni/email-tracker/blob/main/public/app.js): `public/app.js`
- [Study scenarios](https://github.com/pari-kulkarni/email-tracker/blob/main/config/scenarios.json): `config/scenarios.json`
- [Participant roster](https://github.com/pari-kulkarni/email-tracker/blob/main/config/participants.csv): `config/participants.csv`
- [Edit and replay logic](https://github.com/pari-kulkarni/email-tracker/blob/main/public/core.js): `public/core.js`

### Session services

- [HTTP study server](https://github.com/pari-kulkarni/email-tracker/blob/main/server.js): `server.js`
- [Session and event files](https://github.com/pari-kulkarni/email-tracker/blob/main/server.js): `server.js`
- [Study settings](https://github.com/pari-kulkarni/email-tracker/blob/main/config/config.json): `config/config.json`
- [AI chat service](https://github.com/pari-kulkarni/email-tracker/blob/main/server.js): `server.js`
- [Autocomplete service](https://github.com/pari-kulkarni/email-tracker/blob/main/server.js): `server.js`
- **Anthropic API**

### Review and analysis

- [Event analysis](https://github.com/pari-kulkarni/email-tracker/blob/main/public/analysis.js): `public/analysis.js`
- [Email log view](https://github.com/pari-kulkarni/email-tracker/blob/main/public/logview.js): `public/logview.js`
- [Email comparison](https://github.com/pari-kulkarni/email-tracker/blob/main/public/logview.js): `public/logview.js`

### Researcher tools

- [Researcher page](https://github.com/pari-kulkarni/email-tracker/blob/main/public/researcher.js): `public/researcher.js`
- [CSV and data exports](https://github.com/pari-kulkarni/email-tracker/blob/main/server.js): `server.js`
- [Session deletion](https://github.com/pari-kulkarni/email-tracker/blob/main/server.js): `server.js`

### Other components

- **Participant**
- **Researcher**

## Connections

- Participant → Writing app: starts writing (evidence: `README.md`)
- Writing app → HTTP study server: starts session (evidence: `public/app.js`)
- HTTP study server → Participant roster: checks PID (evidence: `README.md`)
- HTTP study server → Study scenarios: loads scenarios (evidence: `README.md`)
- Writing app → Study settings: loads settings (evidence: `README.md`)
- Writing app → Edit and replay logic: uses edit logic (evidence: `README.md`)
- Writing app → HTTP study server: sends events
- Writing app → HTTP study server: sends email (evidence: `public/app.js`)
- HTTP study server → Session and event files: writes session data (evidence: `server.js`)
- HTTP study server → Edit and replay logic: replays edits (evidence: `server.js`)
- HTTP study server → Event analysis: builds exports (evidence: `server.js`)
- Writing app → AI chat service: requests chat (evidence: `public/app.js`)
- Writing app → Autocomplete service: requests suggestions (evidence: `public/app.js`)
- AI chat service → Anthropic API: calls when configured (evidence: `README.md`)
- Autocomplete service → Anthropic API: calls when configured (evidence: `README.md`)
- Participant → Email log view: reviews sent email (evidence: `README.md`)
- Email log view → Event analysis: renders analysis (evidence: `public/logview.js`)
- Participant → Email comparison: compares emails (evidence: `README.md`)
- Email comparison → Event analysis: renders analysis (evidence: `public/logview.js`)
- Researcher → Researcher page: opens sessions (evidence: `README.md`)
- Researcher page → HTTP study server: loads session data (evidence: `public/researcher.js`)
- Researcher page → CSV and data exports: downloads data (evidence: `public/researcher.js`)
- CSV and data exports → Event analysis: derives CSV rows (evidence: `server.js`)
- Researcher page → Session deletion: requests deletion (evidence: `public/researcher.js`)
- Session deletion → Session and event files: removes participant data (evidence: `README.md`)
