# decodingai-magazine/second-brain-ai-assistant-course architecture

> Architecture diagram of the GitHub repository decodingai-magazine/second-brain-ai-assistant-course, 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/decodingai-magazine/second-brain-ai-assistant-course
- Repository: https://github.com/decodingai-magazine/second-brain-ai-assistant-course

## Overview

This repository is a hands-on Second Brain AI course with offline knowledge processing, an online agentic assistant, and a standalone RAG workshop implementation. The user-facing workflow is to collect and prepare personal documents, index them for retrieval, then ask questions or request summaries through an assistant. The graph preserves the documented data, retrieval, agent, evaluation, and workshop capabilities. Several subsystems are represented from the README and file tree; their internal connections are left unverified where source was not sampled.

Main entry points: [`workshops/rag/solution/src/rag_workshop/ingestion.py`](https://github.com/decodingai-magazine/second-brain-ai-assistant-course/blob/main/workshops/rag/solution/src/rag_workshop/ingestion.py) (Workshop ingestion), [`apps/second-brain-online/tools/app.py`](https://github.com/decodingai-magazine/second-brain-ai-assistant-course/blob/main/apps/second-brain-online/tools/app.py) (Assistant app), [`apps/second-brain-offline/src/second_brain_offline/infrastructure/mongo/service.py`](https://github.com/decodingai-magazine/second-brain-ai-assistant-course/blob/main/apps/second-brain-offline/src/second_brain_offline/infrastructure/mongo/service.py) (Document database), [`apps/second-brain-offline/pipelines/compute_rag_vector_index.py`](https://github.com/decodingai-magazine/second-brain-ai-assistant-course/blob/main/apps/second-brain-offline/pipelines/compute_rag_vector_index.py) (Vector indexing)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_offline["Offline knowledge pipeline"]
  node_notion["Notion collection"]
  node_crawl["Document crawling<br/>[crawl4ai.py]"]
  node_quality["Quality scoring"]
  node_offline_mongo[("Document database<br/>[service.py]")]
  node_rag_pipeline["Vector indexing"]
  node_dataset["Dataset generation"]
end

subgraph group_online["Online assistant"]
  node_app["Assistant app<br/>[app.py]"]
  node_agents["Agent workflows<br/>[agents.py]"]
  node_agent_tools["Agent tools"]
  node_online_eval["RAG evaluation"]
end

subgraph group_shared["RAG components"]
  node_offline_rag["Offline RAG tools<br/>[rag.py]"]
  node_online_rag["Online retrieval<br/>[retrievers.py]"]
  node_embeddings["Embedding models<br/>[embeddings.py]"]
end

subgraph group_workshop["RAG workshop"]
  node_workshop_ingest["Workshop ingestion<br/>[ingestion.py]"]
  node_workshop_quality["Workshop quality<br/>[quality.py]"]
  node_workshop_retriever["Workshop retriever<br/>[retrievers.py]"]
  node_workshop_mongo[("Workshop MongoDB<br/>[mongodb.py]")]
  node_workshop_generation["RAG answer generation<br/>[generation.py]"]
end

node_user(("Assistant user"))
node_workshop_user(("Workshop user"))

node_user -->|"asks"| node_app
node_app -->|"starts"| node_agents
node_agents -.->|"uses tools"| node_agent_tools
node_agent_tools -.->|"retrieves context"| node_online_rag
node_online_rag -->|"creates embeddings"| node_embeddings
node_app -.->|"evaluates responses"| node_online_eval
node_notion -.->|"supplies documents"| node_crawl
node_crawl -.->|"normalizes content"| node_quality
node_quality -.->|"ingests documents"| node_offline_mongo
node_rag_pipeline -->|"fetches documents"| node_offline_mongo
node_rag_pipeline -.->|"builds index"| node_offline_rag
node_offline_mongo -.->|"provides documents"| node_dataset
node_workshop_user -->|"asks questions"| node_workshop_generation
node_workshop_generation -->|"retrieves context"| node_workshop_retriever
node_workshop_ingest -->|"scores documents"| node_workshop_quality
node_workshop_ingest -->|"creates retriever"| node_workshop_retriever
node_workshop_ingest -->|"stores documents"| node_workshop_mongo

click node_notion "https://github.com/decodingai-magazine/second-brain-ai-assistant-course/tree/main/apps/second-brain-offline/src/second_brain_offline/infrastructure/notion"
click node_crawl "https://github.com/decodingai-magazine/second-brain-ai-assistant-course/blob/main/apps/second-brain-offline/src/second_brain_offline/application/crawlers/crawl4ai.py"
click node_quality "https://github.com/decodingai-magazine/second-brain-ai-assistant-course/blob/main/apps/second-brain-offline/steps/etl/add_quality_score.py"
click node_offline_mongo "https://github.com/decodingai-magazine/second-brain-ai-assistant-course/blob/main/apps/second-brain-offline/src/second_brain_offline/infrastructure/mongo/service.py"
click node_rag_pipeline "https://github.com/decodingai-magazine/second-brain-ai-assistant-course/blob/main/apps/second-brain-offline/pipelines/compute_rag_vector_index.py"
click node_dataset "https://github.com/decodingai-magazine/second-brain-ai-assistant-course/tree/main/apps/second-brain-offline/steps/generate_dataset"
click node_offline_rag "https://github.com/decodingai-magazine/second-brain-ai-assistant-course/blob/main/apps/second-brain-offline/tools/rag.py"
click node_app "https://github.com/decodingai-magazine/second-brain-ai-assistant-course/blob/main/apps/second-brain-online/tools/app.py"
click node_agents "https://github.com/decodingai-magazine/second-brain-ai-assistant-course/blob/main/apps/second-brain-online/src/second_brain_online/application/agents/agents.py"
click node_agent_tools "https://github.com/decodingai-magazine/second-brain-ai-assistant-course/tree/main/apps/second-brain-online/src/second_brain_online/application/agents/tools"
click node_online_rag "https://github.com/decodingai-magazine/second-brain-ai-assistant-course/blob/main/apps/second-brain-online/src/second_brain_online/application/rag/retrievers.py"
click node_embeddings "https://github.com/decodingai-magazine/second-brain-ai-assistant-course/blob/main/apps/second-brain-online/src/second_brain_online/application/rag/embeddings.py"
click node_online_eval "https://github.com/decodingai-magazine/second-brain-ai-assistant-course/tree/main/apps/second-brain-online/src/second_brain_online/application/evaluation"
click node_workshop_ingest "https://github.com/decodingai-magazine/second-brain-ai-assistant-course/blob/main/workshops/rag/solution/src/rag_workshop/ingestion.py"
click node_workshop_quality "https://github.com/decodingai-magazine/second-brain-ai-assistant-course/blob/main/workshops/rag/solution/src/rag_workshop/quality.py"
click node_workshop_retriever "https://github.com/decodingai-magazine/second-brain-ai-assistant-course/blob/main/workshops/rag/solution/src/rag_workshop/retrievers.py"
click node_workshop_mongo "https://github.com/decodingai-magazine/second-brain-ai-assistant-course/blob/main/workshops/rag/solution/src/rag_workshop/mongodb.py"
click node_workshop_generation "https://github.com/decodingai-magazine/second-brain-ai-assistant-course/blob/main/workshops/rag/solution/src/rag_workshop/generation.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_notion,node_crawl,node_quality,node_offline_mongo,node_rag_pipeline,node_dataset,node_user,node_workshop_user toneBlue
class node_app,node_agents,node_agent_tools,node_online_eval toneAmber
class node_offline_rag,node_online_rag,node_embeddings toneMint
class node_workshop_ingest,node_workshop_quality,node_workshop_retriever,node_workshop_mongo,node_workshop_generation toneRose
```

## Components

### Offline knowledge pipeline

- [Notion collection](https://github.com/decodingai-magazine/second-brain-ai-assistant-course/tree/main/apps/second-brain-offline/src/second_brain_offline/infrastructure/notion): `apps/second-brain-offline/src/second_brain_offline/infrastructure/notion`
- [Document crawling](https://github.com/decodingai-magazine/second-brain-ai-assistant-course/blob/main/apps/second-brain-offline/src/second_brain_offline/application/crawlers/crawl4ai.py): `apps/second-brain-offline/src/second_brain_offline/application/crawlers/crawl4ai.py`
- [Quality scoring](https://github.com/decodingai-magazine/second-brain-ai-assistant-course/blob/main/apps/second-brain-offline/steps/etl/add_quality_score.py): `apps/second-brain-offline/steps/etl/add_quality_score.py`
- [Document database](https://github.com/decodingai-magazine/second-brain-ai-assistant-course/blob/main/apps/second-brain-offline/src/second_brain_offline/infrastructure/mongo/service.py): `apps/second-brain-offline/src/second_brain_offline/infrastructure/mongo/service.py`
- [Vector indexing](https://github.com/decodingai-magazine/second-brain-ai-assistant-course/blob/main/apps/second-brain-offline/pipelines/compute_rag_vector_index.py): `apps/second-brain-offline/pipelines/compute_rag_vector_index.py`
- [Dataset generation](https://github.com/decodingai-magazine/second-brain-ai-assistant-course/tree/main/apps/second-brain-offline/steps/generate_dataset): `apps/second-brain-offline/steps/generate_dataset`

### Online assistant

- [Assistant app](https://github.com/decodingai-magazine/second-brain-ai-assistant-course/blob/main/apps/second-brain-online/tools/app.py): `apps/second-brain-online/tools/app.py`
- [Agent workflows](https://github.com/decodingai-magazine/second-brain-ai-assistant-course/blob/main/apps/second-brain-online/src/second_brain_online/application/agents/agents.py): `apps/second-brain-online/src/second_brain_online/application/agents/agents.py`
- [Agent tools](https://github.com/decodingai-magazine/second-brain-ai-assistant-course/tree/main/apps/second-brain-online/src/second_brain_online/application/agents/tools): `apps/second-brain-online/src/second_brain_online/application/agents/tools`
- [RAG evaluation](https://github.com/decodingai-magazine/second-brain-ai-assistant-course/tree/main/apps/second-brain-online/src/second_brain_online/application/evaluation): `apps/second-brain-online/src/second_brain_online/application/evaluation`

### RAG components

- [Offline RAG tools](https://github.com/decodingai-magazine/second-brain-ai-assistant-course/blob/main/apps/second-brain-offline/tools/rag.py): `apps/second-brain-offline/tools/rag.py`
- [Online retrieval](https://github.com/decodingai-magazine/second-brain-ai-assistant-course/blob/main/apps/second-brain-online/src/second_brain_online/application/rag/retrievers.py): `apps/second-brain-online/src/second_brain_online/application/rag/retrievers.py`
- [Embedding models](https://github.com/decodingai-magazine/second-brain-ai-assistant-course/blob/main/apps/second-brain-online/src/second_brain_online/application/rag/embeddings.py): `apps/second-brain-online/src/second_brain_online/application/rag/embeddings.py`

### RAG workshop

- [Workshop ingestion](https://github.com/decodingai-magazine/second-brain-ai-assistant-course/blob/main/workshops/rag/solution/src/rag_workshop/ingestion.py): `workshops/rag/solution/src/rag_workshop/ingestion.py`
- [Workshop quality](https://github.com/decodingai-magazine/second-brain-ai-assistant-course/blob/main/workshops/rag/solution/src/rag_workshop/quality.py): `workshops/rag/solution/src/rag_workshop/quality.py`
- [Workshop retriever](https://github.com/decodingai-magazine/second-brain-ai-assistant-course/blob/main/workshops/rag/solution/src/rag_workshop/retrievers.py): `workshops/rag/solution/src/rag_workshop/retrievers.py`
- [Workshop MongoDB](https://github.com/decodingai-magazine/second-brain-ai-assistant-course/blob/main/workshops/rag/solution/src/rag_workshop/mongodb.py): `workshops/rag/solution/src/rag_workshop/mongodb.py`
- [RAG answer generation](https://github.com/decodingai-magazine/second-brain-ai-assistant-course/blob/main/workshops/rag/solution/src/rag_workshop/generation.py): `workshops/rag/solution/src/rag_workshop/generation.py`

### Other components

- **Assistant user**
- **Workshop user**

## Connections

- Assistant user → Assistant app: asks (evidence: `README.md`)
- Assistant app → Agent workflows: starts (evidence: `apps/second-brain-online/tools/app.py`)
- Agent workflows → Agent tools: uses tools
- Agent tools → Online retrieval: retrieves context
- Online retrieval → Embedding models: creates embeddings (evidence: `apps/second-brain-online/src/second_brain_online/application/rag/retrievers.py`)
- Assistant app → RAG evaluation: evaluates responses
- Notion collection → Document crawling: supplies documents
- Document crawling → Quality scoring: normalizes content (evidence: `README.md`)
- Quality scoring → Document database: ingests documents (evidence: `README.md`)
- Vector indexing → Document database: fetches documents (evidence: `apps/second-brain-offline/pipelines/compute_rag_vector_index.py`)
- Vector indexing → Offline RAG tools: builds index
- Document database → Dataset generation: provides documents
- Workshop user → RAG answer generation: asks questions
- RAG answer generation → Workshop retriever: retrieves context (evidence: `workshops/rag/solution/src/rag_workshop/generation.py`)
- Workshop ingestion → Workshop quality: scores documents (evidence: `workshops/rag/solution/src/rag_workshop/ingestion.py`)
- Workshop ingestion → Workshop retriever: creates retriever (evidence: `workshops/rag/solution/src/rag_workshop/ingestion.py`)
- Workshop ingestion → Workshop MongoDB: stores documents (evidence: `workshops/rag/solution/src/rag_workshop/ingestion.py`)
