# ahmedoshelmy/ai-career-copilot architecture

> Architecture diagram of the GitHub repository ahmedoshelmy/ai-career-copilot, 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/ahmedoshelmy/ai-career-copilot
- Repository: https://github.com/ahmedoshelmy/ai-career-copilot

## Overview

AI Career Copilot is a stateful career-assistance workflow with a Gradio dashboard. A candidate submits a resume, job posting, and action; the LangGraph workflow extracts role and company, routes to resume tailoring, cover-letter drafting, or interview preparation, and sends cover letters through an editor revision loop and a human approval pause. The dashboard can resume paused sessions and inspect state. The README and starter scaffold describe these workflow stages, but several starter functions are TODOs; links to their intended behavior reflect the documented design, not verified working execution.

Main entry points: [`app.py`](https://github.com/ahmedoshelmy/ai-career-copilot/blob/main/app.py) (Gradio Dashboard), [`starter.py`](https://github.com/ahmedoshelmy/ai-career-copilot/blob/main/starter.py) (Compiled Workflow)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_interface["User Interface"]
  node_dashboard["Gradio Dashboard<br/>[app.py]"]
end

subgraph group_workflow["Workflow Orchestration"]
  node_workflow_graph{{"Compiled Workflow<br/>[starter.py]"}}
  node_intake["Request Intake<br/>[starter.py]"]
  node_action_router["Action Router<br/>[starter.py]"]
  node_revision_router["Revision Router<br/>[starter.py]"]
  node_approval_gate["Human Approval Gate<br/>[starter.py]"]
end

subgraph group_career["Career Services"]
  node_resume_tailoring["Resume Tailoring<br/>[starter.py]"]
  node_cover_writer["Cover Letter Writer<br/>[starter.py]"]
  node_editor["Draft Editor<br/>[starter.py]"]
  node_interview_prep["Mock Interview Prep<br/>[starter.py]"]
end

subgraph group_services["Model And State"]
  node_groq{{"Groq LLM"}}
  node_checkpoint[("MemorySaver Checkpoints<br/>[starter.py]")]
end

node_candidate(("Candidate"))

node_candidate -->|"submits request"| node_dashboard
node_dashboard -->|"starts workflow"| node_workflow_graph
node_workflow_graph -->|"dispatches"| node_intake
node_intake -->|"extracts details"| node_groq
node_intake -->|"routes by action"| node_action_router
node_action_router -->|"selects resume"| node_resume_tailoring
node_action_router -->|"selects letter"| node_cover_writer
node_action_router -->|"selects interview"| node_interview_prep
node_resume_tailoring -->|"rewrites bullets"| node_groq
node_cover_writer -->|"drafts letter"| node_groq
node_cover_writer -->|"sends draft"| node_editor
node_editor -->|"scores draft"| node_groq
node_editor -->|"returns review"| node_revision_router
node_revision_router -->|"revises if needed"| node_cover_writer
node_revision_router -->|"proceeds to approval"| node_approval_gate
node_interview_prep -->|"generates questions"| node_groq
node_dashboard -->|"reads session state"| node_checkpoint
node_workflow_graph -->|"saves snapshots"| node_checkpoint
node_dashboard -->|"resumes paused session"| node_approval_gate
node_approval_gate -->|"returns final state"| node_dashboard
node_workflow_graph -->|"streams results"| node_dashboard

click node_dashboard "https://github.com/ahmedoshelmy/ai-career-copilot/blob/main/app.py"
click node_workflow_graph "https://github.com/ahmedoshelmy/ai-career-copilot/blob/main/starter.py"
click node_intake "https://github.com/ahmedoshelmy/ai-career-copilot/blob/main/starter.py"
click node_action_router "https://github.com/ahmedoshelmy/ai-career-copilot/blob/main/starter.py"
click node_resume_tailoring "https://github.com/ahmedoshelmy/ai-career-copilot/blob/main/starter.py"
click node_cover_writer "https://github.com/ahmedoshelmy/ai-career-copilot/blob/main/starter.py"
click node_editor "https://github.com/ahmedoshelmy/ai-career-copilot/blob/main/starter.py"
click node_revision_router "https://github.com/ahmedoshelmy/ai-career-copilot/blob/main/starter.py"
click node_interview_prep "https://github.com/ahmedoshelmy/ai-career-copilot/blob/main/starter.py"
click node_approval_gate "https://github.com/ahmedoshelmy/ai-career-copilot/blob/main/starter.py"
click node_checkpoint "https://github.com/ahmedoshelmy/ai-career-copilot/blob/main/starter.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 toneBlue
class node_workflow_graph,node_intake,node_action_router,node_revision_router,node_approval_gate toneAmber
class node_resume_tailoring,node_cover_writer,node_editor,node_interview_prep toneMint
class node_groq,node_checkpoint toneRose
class node_candidate toneIndigo
```

## Components

### User Interface

- [Gradio Dashboard](https://github.com/ahmedoshelmy/ai-career-copilot/blob/main/app.py): `app.py`

### Workflow Orchestration

- [Compiled Workflow](https://github.com/ahmedoshelmy/ai-career-copilot/blob/main/starter.py): `starter.py`
- [Request Intake](https://github.com/ahmedoshelmy/ai-career-copilot/blob/main/starter.py): `starter.py`
- [Action Router](https://github.com/ahmedoshelmy/ai-career-copilot/blob/main/starter.py): `starter.py`
- [Revision Router](https://github.com/ahmedoshelmy/ai-career-copilot/blob/main/starter.py): `starter.py`
- [Human Approval Gate](https://github.com/ahmedoshelmy/ai-career-copilot/blob/main/starter.py): `starter.py`

### Career Services

- [Resume Tailoring](https://github.com/ahmedoshelmy/ai-career-copilot/blob/main/starter.py): `starter.py`
- [Cover Letter Writer](https://github.com/ahmedoshelmy/ai-career-copilot/blob/main/starter.py): `starter.py`
- [Draft Editor](https://github.com/ahmedoshelmy/ai-career-copilot/blob/main/starter.py): `starter.py`
- [Mock Interview Prep](https://github.com/ahmedoshelmy/ai-career-copilot/blob/main/starter.py): `starter.py`

### Model And State

- **Groq LLM**
- [MemorySaver Checkpoints](https://github.com/ahmedoshelmy/ai-career-copilot/blob/main/starter.py): `starter.py`

### Other components

- **Candidate**

## Connections

- Candidate → Gradio Dashboard: submits request
- Gradio Dashboard → Compiled Workflow: starts workflow
- Compiled Workflow → Request Intake: dispatches
- Request Intake → Groq LLM: extracts details
- Request Intake → Action Router: routes by action
- Action Router → Resume Tailoring: selects resume
- Action Router → Cover Letter Writer: selects letter
- Action Router → Mock Interview Prep: selects interview
- Resume Tailoring → Groq LLM: rewrites bullets
- Cover Letter Writer → Groq LLM: drafts letter
- Cover Letter Writer → Draft Editor: sends draft
- Draft Editor → Groq LLM: scores draft
- Draft Editor → Revision Router: returns review
- Revision Router → Cover Letter Writer: revises if needed
- Revision Router → Human Approval Gate: proceeds to approval
- Mock Interview Prep → Groq LLM: generates questions
- Gradio Dashboard → MemorySaver Checkpoints: reads session state
- Compiled Workflow → MemorySaver Checkpoints: saves snapshots
- Gradio Dashboard → Human Approval Gate: resumes paused session
- Human Approval Gate → Gradio Dashboard: returns final state
- Compiled Workflow → Gradio Dashboard: streams results
