# kasturimaheshbabu2316-mc/email_agent architecture

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

- Interactive diagram: https://gitdiagram.com/kasturimaheshbabu2316-mc/email_agent
- Repository: https://github.com/kasturimaheshbabu2316-mc/email_agent

## Overview

The repository is an email-outreach tool: users load and select contacts, generate personalized messages, optionally rewrite them, review or edit them, then send, draft, or skip while recording outcomes. The tree contains both a terminal workflow and Streamlit front ends, plus overlapping root-level and `the-closer` implementations; the graph centers on the more fully evidenced `the-closer` workflow and includes the root Streamlit entry point. Logger internals were not sampled, so its storage destination is left unspecified.

Main entry points: [`EMAIL/the-closer/email_generator.py`](https://github.com/kasturimaheshbabu2316-mc/email_agent/blob/main/EMAIL/the-closer/email_generator.py) (Template generator), [`EMAIL/the-closer/main.py`](https://github.com/kasturimaheshbabu2316-mc/email_agent/blob/main/EMAIL/the-closer/main.py) (Terminal workflow), [`EMAIL/streamlit_app.py`](https://github.com/kasturimaheshbabu2316-mc/email_agent/blob/main/EMAIL/streamlit_app.py) (Streamlit outreach), [`EMAIL/the-closer/app.py`](https://github.com/kasturimaheshbabu2316-mc/email_agent/blob/main/EMAIL/the-closer/app.py) (Contact draft UI)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_inputs["Contact inputs"]
  node_contacts["Contact files<br/>[contacts.json]"]
  node_loader["Contact loader<br/>[loader.py]"]
end

subgraph group_compose["Email composition"]
  node_generator["Template generator<br/>[email_generator.py]"]
  node_template["Email template<br/>[email_template.txt]"]
  node_llm["Rewrite client<br/>[llm_client.py]"]
end

subgraph group_experience["User workflows"]
  node_terminal["Terminal workflow<br/>[main.py]"]
  node_streamlit["Streamlit outreach<br/>[streamlit_app.py]"]
  node_closer_ui["Contact draft UI<br/>[app.py]"]
  node_preview["Preview and choice<br/>[preview.py]"]
end

subgraph group_delivery["Delivery and records"]
  node_sender["Email sender<br/>[email_sender.py]"]
  node_logger["Outreach logger<br/>[logger.py]"]
  node_logfile["Outreach log"]
end

node_user(("Outreach user"))
node_smtp{{"SMTP service"}}
node_recipient(("Email recipient"))

node_user -->|"starts workflow"| node_terminal
node_user -->|"uses interface"| node_streamlit
node_user -->|"selects contact"| node_closer_ui
node_contacts -->|"contact data"| node_loader
node_terminal -->|"loads contacts"| node_loader
node_streamlit -->|"loads contacts"| node_loader
node_closer_ui -->|"loads contacts"| node_loader
node_terminal -->|"renders email"| node_generator
node_streamlit -->|"renders email"| node_generator
node_closer_ui -->|"renders email"| node_generator
node_generator -->|"renders from"| node_template
node_terminal -.->|"requests rewrite"| node_generator
node_streamlit -.->|"requests rewrite"| node_generator
node_closer_ui -.->|"requests rewrite"| node_generator
node_generator -.->|"rewrites body"| node_llm
node_terminal -->|"shows and confirms"| node_preview
node_terminal -->|"sends or drafts"| node_sender
node_streamlit -->|"sends or drafts"| node_sender
node_closer_ui -->|"sends or drafts"| node_sender
node_sender -.->|"sends message"| node_smtp
node_smtp -->|"delivers email"| node_recipient
node_terminal -->|"records outcome"| node_logger
node_streamlit -->|"records outcome"| node_logger
node_closer_ui -->|"records outcome"| node_logger
node_logger -->|"writes entries"| node_logfile

click node_contacts "https://github.com/kasturimaheshbabu2316-mc/email_agent/blob/main/EMAIL/contacts.json"
click node_loader "https://github.com/kasturimaheshbabu2316-mc/email_agent/blob/main/EMAIL/the-closer/loader.py"
click node_terminal "https://github.com/kasturimaheshbabu2316-mc/email_agent/blob/main/EMAIL/the-closer/main.py"
click node_streamlit "https://github.com/kasturimaheshbabu2316-mc/email_agent/blob/main/EMAIL/streamlit_app.py"
click node_closer_ui "https://github.com/kasturimaheshbabu2316-mc/email_agent/blob/main/EMAIL/the-closer/app.py"
click node_preview "https://github.com/kasturimaheshbabu2316-mc/email_agent/blob/main/EMAIL/the-closer/preview.py"
click node_generator "https://github.com/kasturimaheshbabu2316-mc/email_agent/blob/main/EMAIL/the-closer/email_generator.py"
click node_template "https://github.com/kasturimaheshbabu2316-mc/email_agent/blob/main/EMAIL/the-closer/templates/email_template.txt"
click node_llm "https://github.com/kasturimaheshbabu2316-mc/email_agent/blob/main/EMAIL/the-closer/llm_client.py"
click node_sender "https://github.com/kasturimaheshbabu2316-mc/email_agent/blob/main/EMAIL/the-closer/email_sender.py"
click node_logger "https://github.com/kasturimaheshbabu2316-mc/email_agent/blob/main/EMAIL/the-closer/logger.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_contacts,node_loader,node_user toneBlue
class node_generator,node_template,node_llm toneAmber
class node_terminal,node_streamlit,node_closer_ui,node_preview toneMint
class node_sender,node_logger,node_logfile toneRose
class node_smtp,node_recipient toneIndigo
```

## Components

### Contact inputs

- [Contact files](https://github.com/kasturimaheshbabu2316-mc/email_agent/blob/main/EMAIL/contacts.json): `EMAIL/contacts.json`
- [Contact loader](https://github.com/kasturimaheshbabu2316-mc/email_agent/blob/main/EMAIL/the-closer/loader.py): `EMAIL/the-closer/loader.py`

### Email composition

- [Template generator](https://github.com/kasturimaheshbabu2316-mc/email_agent/blob/main/EMAIL/the-closer/email_generator.py): `EMAIL/the-closer/email_generator.py`
- [Email template](https://github.com/kasturimaheshbabu2316-mc/email_agent/blob/main/EMAIL/the-closer/templates/email_template.txt): `EMAIL/the-closer/templates/email_template.txt`
- [Rewrite client](https://github.com/kasturimaheshbabu2316-mc/email_agent/blob/main/EMAIL/the-closer/llm_client.py): `EMAIL/the-closer/llm_client.py`

### User workflows

- [Terminal workflow](https://github.com/kasturimaheshbabu2316-mc/email_agent/blob/main/EMAIL/the-closer/main.py): `EMAIL/the-closer/main.py`
- [Streamlit outreach](https://github.com/kasturimaheshbabu2316-mc/email_agent/blob/main/EMAIL/streamlit_app.py): `EMAIL/streamlit_app.py`
- [Contact draft UI](https://github.com/kasturimaheshbabu2316-mc/email_agent/blob/main/EMAIL/the-closer/app.py): `EMAIL/the-closer/app.py`
- [Preview and choice](https://github.com/kasturimaheshbabu2316-mc/email_agent/blob/main/EMAIL/the-closer/preview.py): `EMAIL/the-closer/preview.py`

### Delivery and records

- [Email sender](https://github.com/kasturimaheshbabu2316-mc/email_agent/blob/main/EMAIL/the-closer/email_sender.py): `EMAIL/the-closer/email_sender.py`
- [Outreach logger](https://github.com/kasturimaheshbabu2316-mc/email_agent/blob/main/EMAIL/the-closer/logger.py): `EMAIL/the-closer/logger.py`
- **Outreach log**

### Other components

- **Outreach user**
- **SMTP service**
- **Email recipient**

## Connections

- Outreach user → Terminal workflow: starts workflow
- Outreach user → Streamlit outreach: uses interface
- Outreach user → Contact draft UI: selects contact
- Contact files → Contact loader: contact data
- Terminal workflow → Contact loader: loads contacts
- Streamlit outreach → Contact loader: loads contacts
- Contact draft UI → Contact loader: loads contacts
- Terminal workflow → Template generator: renders email
- Streamlit outreach → Template generator: renders email
- Contact draft UI → Template generator: renders email
- Template generator → Email template: renders from
- Terminal workflow → Template generator: requests rewrite
- Streamlit outreach → Template generator: requests rewrite
- Contact draft UI → Template generator: requests rewrite
- Template generator → Rewrite client: rewrites body
- Terminal workflow → Preview and choice: shows and confirms
- Terminal workflow → Email sender: sends or drafts
- Streamlit outreach → Email sender: sends or drafts
- Contact draft UI → Email sender: sends or drafts
- Email sender → SMTP service: sends message
- SMTP service → Email recipient: delivers email
- Terminal workflow → Outreach logger: records outcome
- Streamlit outreach → Outreach logger: records outcome
- Contact draft UI → Outreach logger: records outcome
- Outreach logger → Outreach log: writes entries
