File size: 2,526 Bytes
4260a62
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
%%{init: {
  'theme': 'base',
  'themeVariables': {
    'primaryColor': '#E1F5FE',
    'primaryTextColor': '#01579B',
    'lineColor': '#546E7A',
    'clusterBkg': '#FAFAFA',
    'clusterBorder': '#CFD8DC'
  },
  'flowchart': {
    'curve': 'basis'
  }
}}%%

graph TD

    %% === STYLING DEFINITIONS ===
    classDef user fill:#fff9c4,stroke:#fbc02d,stroke-width:2px,rx:10;
    classDef ui fill:#e1f5fe,stroke:#0288d1,stroke-width:2px,rx:5;
    classDef ai fill:#ffe0b2,stroke:#f57c00,stroke-width:2px,rx:10;
    classDef process fill:#ffffff,stroke:#78909c,stroke-width:2px,rx:5;
    classDef data fill:#e1bee7,stroke:#8e24aa,stroke-width:2px,shape:cylinder;
    classDef output fill:#c8e6c9,stroke:#2e7d32,stroke-width:2px,rx:5;

    %% === THE DIAGRAM ===

    %% 1. USER INTERFACE LAYER
    subgraph UI_Layer ["πŸ–₯️ Frontend / Interface"]
        User([πŸ‘€ User]):::user
        Streamlit[/"πŸ’» Streamlit UI"/]:::ui
        LLM["🧠 LLM Provider<br/>(OpenAI / Gemini / Claude)"]:::ui
        
        User -->|Uploads Files| Streamlit
        Streamlit -.->|Configures| LLM
    end

    %% 2. THE PIPELINE (BACKEND)
    %% Phase 1: Ingestion
    subgraph P1 ["Phase 1: Input Processing"]
        Parser["πŸ“„ Resume Parser<br/>(PyMuPDF4LLM)"]:::process
        Scraper["🌐 Job Scraper<br/>(Web Engine)"]:::process
    end

    %% Phase 2: Understanding
    subgraph P2 ["Phase 2: AI Orchestration"]
        Extractor{{"πŸ€– Data Extractor"}}:::ai
        Planner["πŸ“‹ Content Planner"]:::ai
        
        %% Connecting P1 to P2
        Parser --> Extractor
        Scraper --> Extractor
        Extractor --> Planner
    end

    %% Phase 3: Writing
    subgraph P3 ["Phase 3: Parallel Writing"]
        Workers{{"⚑ Async Workers"}}:::ai
        
        S1["πŸ“ Summary"]:::process
        S2["πŸ’Ό Experience"]:::process
        S3["πŸ› οΈ Skills"]:::process
        S4["πŸš€ Projects"]:::process

        Planner --> Workers
        Workers --> S1
        Workers --> S2
        Workers --> S3
        Workers --> S4
    end

    %% Phase 4: Assembly
    subgraph P4 ["Phase 4: Generation"]
        Merger["πŸ”— Jinja2 Merger"]:::process
        Compiler["βš™οΈ PDF Compiler<br/>(LaTeX)"]:::process
        
        S1 --> Merger
        S2 --> Merger
        S3 --> Merger
        S4 --> Merger
        Merger --> Compiler
    end

    %% 3. OUTPUT
    Result([πŸ“„ Final PDF]):::output

    %% === CROSS CONNECTIONS ===
    Streamlit --> Parser
    Streamlit --> Scraper
    
    Compiler --> Result