# doyouhavetheguts/studyforge_render architecture

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

- Interactive diagram: https://gitdiagram.com/doyouhavetheguts/studyforge_render
- Repository: https://github.com/doyouhavetheguts/studyforge_render

## Overview

StudyForge turns learning materials into section-based study outputs and delivers them locally or by email; its web dashboard and CLI initiate that workflow. The product also includes language-learning assessments, interview/case practice, and job-offer comparison. The graph uses the documented workflow and sampled excerpts; several subsystem links rely on the SOURCE INDEX’s references, so unsampled internal details and routes are not expanded.

Main entry points: [`studyforge/pipeline.py`](https://github.com/doyouhavetheguts/studyforge_render/blob/main/studyforge/pipeline.py) (Workflow Orchestrator), [`studyforge/web.py`](https://github.com/doyouhavetheguts/studyforge_render/blob/main/studyforge/web.py) (Web Dashboard), [`studyforge/cli.py`](https://github.com/doyouhavetheguts/studyforge_render/blob/main/studyforge/cli.py) (CLI), [`studyforge/agents.py`](https://github.com/doyouhavetheguts/studyforge_render/blob/main/studyforge/agents.py) (Study Agents)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_entry["User Entry"]
  node_cli["CLI<br/>[cli.py]"]
  node_web["Web Dashboard<br/>[web.py]"]
end

subgraph group_study["Study Pipeline"]
  node_pipeline["Workflow Orchestrator<br/>[pipeline.py]"]
  node_ingest["Material Extraction<br/>[ingest.py]"]
  node_structure["Section Mapping<br/>[structure.py]"]
  node_agents["Study Agents<br/>[agents.py]"]
  node_render["Output Rendering<br/>[render.py]"]
end

subgraph group_learning["Learning Tools"]
  node_language["Language Learning<br/>[language.py]"]
end

subgraph group_career["Career Tools"]
  node_interview["Interview Preparation<br/>[interview.py]"]
  node_case["Case Practice<br/>[case_study.py]"]
  node_offers["Offer Comparison<br/>[offers.py]"]
end

subgraph group_platform["Storage And Delivery"]
  node_database[("SQLite Data<br/>[db.py]")]
  node_config["Settings And Secrets<br/>[config.py]"]
  node_email["Email Delivery<br/>[email_delivery.py]"]
  node_scheduler["Scheduled Delivery<br/>[scheduler.py]"]
  node_managed["Managed Agent Prompts<br/>[managed_agents.py]"]
end

node_user(("Learner"))
node_anthropic{{"Anthropic API"}}
node_mail{{"Email Service"}}

node_user -->|"runs commands"| node_cli
node_user -->|"uses dashboard"| node_web
node_cli -->|"starts workflow"| node_pipeline
node_web -->|"starts workflow"| node_pipeline
node_pipeline -->|"extracts material"| node_ingest
node_pipeline -->|"maps sections"| node_structure
node_pipeline -->|"runs agents"| node_agents
node_pipeline -->|"renders outputs"| node_render
node_pipeline -->|"reads and writes"| node_database
node_pipeline -->|"requests delivery"| node_email
node_pipeline -->|"loads settings"| node_config
node_pipeline -->|"runs language tasks"| node_language
node_pipeline -->|"supports interview prep"| node_interview
node_pipeline -->|"generates and scores cases"| node_case
node_pipeline -->|"generates comparisons"| node_offers
node_agents -->|"calls model"| node_anthropic
node_language -->|"calls model"| node_anthropic
node_interview -->|"calls model"| node_anthropic
node_case -->|"calls model"| node_anthropic
node_offers -->|"calls model"| node_anthropic
node_email -->|"sends message"| node_mail
node_web -->|"starts schedule"| node_scheduler
node_scheduler -->|"triggers delivery"| node_pipeline
node_web -->|"syncs prompts"| node_managed
node_web -->|"reads and writes"| node_database
node_web -->|"loads settings"| node_config

click node_cli "https://github.com/doyouhavetheguts/studyforge_render/blob/main/studyforge/cli.py"
click node_web "https://github.com/doyouhavetheguts/studyforge_render/blob/main/studyforge/web.py"
click node_pipeline "https://github.com/doyouhavetheguts/studyforge_render/blob/main/studyforge/pipeline.py"
click node_ingest "https://github.com/doyouhavetheguts/studyforge_render/blob/main/studyforge/ingest.py"
click node_structure "https://github.com/doyouhavetheguts/studyforge_render/blob/main/studyforge/structure.py"
click node_agents "https://github.com/doyouhavetheguts/studyforge_render/blob/main/studyforge/agents.py"
click node_render "https://github.com/doyouhavetheguts/studyforge_render/blob/main/studyforge/render.py"
click node_language "https://github.com/doyouhavetheguts/studyforge_render/blob/main/studyforge/language.py"
click node_interview "https://github.com/doyouhavetheguts/studyforge_render/blob/main/studyforge/interview.py"
click node_case "https://github.com/doyouhavetheguts/studyforge_render/blob/main/studyforge/case_study.py"
click node_offers "https://github.com/doyouhavetheguts/studyforge_render/blob/main/studyforge/offers.py"
click node_database "https://github.com/doyouhavetheguts/studyforge_render/blob/main/studyforge/db.py"
click node_config "https://github.com/doyouhavetheguts/studyforge_render/blob/main/studyforge/config.py"
click node_email "https://github.com/doyouhavetheguts/studyforge_render/blob/main/studyforge/email_delivery.py"
click node_scheduler "https://github.com/doyouhavetheguts/studyforge_render/blob/main/studyforge/scheduler.py"
click node_managed "https://github.com/doyouhavetheguts/studyforge_render/blob/main/studyforge/managed_agents.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_cli,node_web toneBlue
class node_pipeline,node_ingest,node_structure,node_agents,node_render toneAmber
class node_language,node_anthropic toneMint
class node_interview,node_case,node_offers toneRose
class node_database,node_config,node_email,node_scheduler,node_managed,node_user,node_mail toneIndigo
```

## Components

### User Entry

- [CLI](https://github.com/doyouhavetheguts/studyforge_render/blob/main/studyforge/cli.py): `studyforge/cli.py`
- [Web Dashboard](https://github.com/doyouhavetheguts/studyforge_render/blob/main/studyforge/web.py): `studyforge/web.py`

### Study Pipeline

- [Workflow Orchestrator](https://github.com/doyouhavetheguts/studyforge_render/blob/main/studyforge/pipeline.py): `studyforge/pipeline.py`
- [Material Extraction](https://github.com/doyouhavetheguts/studyforge_render/blob/main/studyforge/ingest.py): `studyforge/ingest.py`
- [Section Mapping](https://github.com/doyouhavetheguts/studyforge_render/blob/main/studyforge/structure.py): `studyforge/structure.py`
- [Study Agents](https://github.com/doyouhavetheguts/studyforge_render/blob/main/studyforge/agents.py): `studyforge/agents.py`
- [Output Rendering](https://github.com/doyouhavetheguts/studyforge_render/blob/main/studyforge/render.py): `studyforge/render.py`

### Learning Tools

- [Language Learning](https://github.com/doyouhavetheguts/studyforge_render/blob/main/studyforge/language.py): `studyforge/language.py`

### Career Tools

- [Interview Preparation](https://github.com/doyouhavetheguts/studyforge_render/blob/main/studyforge/interview.py): `studyforge/interview.py`
- [Case Practice](https://github.com/doyouhavetheguts/studyforge_render/blob/main/studyforge/case_study.py): `studyforge/case_study.py`
- [Offer Comparison](https://github.com/doyouhavetheguts/studyforge_render/blob/main/studyforge/offers.py): `studyforge/offers.py`

### Storage And Delivery

- [SQLite Data](https://github.com/doyouhavetheguts/studyforge_render/blob/main/studyforge/db.py): `studyforge/db.py`
- [Settings And Secrets](https://github.com/doyouhavetheguts/studyforge_render/blob/main/studyforge/config.py): `studyforge/config.py`
- [Email Delivery](https://github.com/doyouhavetheguts/studyforge_render/blob/main/studyforge/email_delivery.py): `studyforge/email_delivery.py`
- [Scheduled Delivery](https://github.com/doyouhavetheguts/studyforge_render/blob/main/studyforge/scheduler.py): `studyforge/scheduler.py`
- [Managed Agent Prompts](https://github.com/doyouhavetheguts/studyforge_render/blob/main/studyforge/managed_agents.py): `studyforge/managed_agents.py`

### Other components

- **Learner**
- **Anthropic API**
- **Email Service**

## Connections

- Learner → CLI: runs commands (evidence: `README.md`)
- Learner → Web Dashboard: uses dashboard (evidence: `README.md`)
- CLI → Workflow Orchestrator: starts workflow (evidence: `studyforge/cli.py`)
- Web Dashboard → Workflow Orchestrator: starts workflow (evidence: `studyforge/web.py`)
- Workflow Orchestrator → Material Extraction: extracts material (evidence: `README.md`)
- Workflow Orchestrator → Section Mapping: maps sections (evidence: `README.md`)
- Workflow Orchestrator → Study Agents: runs agents (evidence: `README.md`)
- Workflow Orchestrator → Output Rendering: renders outputs (evidence: `studyforge/pipeline.py`)
- Workflow Orchestrator → SQLite Data: reads and writes (evidence: `studyforge/pipeline.py`)
- Workflow Orchestrator → Email Delivery: requests delivery (evidence: `studyforge/pipeline.py`)
- Workflow Orchestrator → Settings And Secrets: loads settings (evidence: `studyforge/pipeline.py`)
- Workflow Orchestrator → Language Learning: runs language tasks (evidence: `studyforge/pipeline.py`)
- Workflow Orchestrator → Interview Preparation: supports interview prep (evidence: `studyforge/pipeline.py`)
- Workflow Orchestrator → Case Practice: generates and scores cases (evidence: `studyforge/pipeline.py`)
- Workflow Orchestrator → Offer Comparison: generates comparisons (evidence: `studyforge/pipeline.py`)
- Study Agents → Anthropic API: calls model (evidence: `README.md`)
- Language Learning → Anthropic API: calls model (evidence: `studyforge/language.py`)
- Interview Preparation → Anthropic API: calls model (evidence: `studyforge/interview.py`)
- Case Practice → Anthropic API: calls model (evidence: `studyforge/case_study.py`)
- Offer Comparison → Anthropic API: calls model (evidence: `studyforge/offers.py`)
- Email Delivery → Email Service: sends message (evidence: `studyforge/email_delivery.py`)
- Web Dashboard → Scheduled Delivery: starts schedule (evidence: `studyforge/web.py`)
- Scheduled Delivery → Workflow Orchestrator: triggers delivery (evidence: `studyforge/scheduler.py`)
- Web Dashboard → Managed Agent Prompts: syncs prompts (evidence: `studyforge/web.py`)
- Web Dashboard → SQLite Data: reads and writes (evidence: `studyforge/web.py`)
- Web Dashboard → Settings And Secrets: loads settings (evidence: `studyforge/web.py`)
