# aymaan-mulla/ai-powered-financial-linkedin-data-pipeline architecture

> Architecture diagram of the GitHub repository aymaan-mulla/ai-powered-financial-linkedin-data-pipeline, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-30). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/aymaan-mulla/ai-powered-financial-linkedin-data-pipeline
- Repository: https://github.com/aymaan-mulla/ai-powered-financial-linkedin-data-pipeline

## Overview

The README describes an AI-powered financial and LinkedIn pipeline, but the tree and sampled source show a collection of separate applications and experiments rather than one verifiable end-to-end runtime. The clearest workflows are LinkedIn profile scraping to JSON, image-to-table OCR, a notes frontend, and contact management. Spark, ELK, MongoDB, Postgres, and financial processing are documented or present in the tree, but their integration is not established by the excerpts; those connections are therefore omitted.

Main entry points: [`new/app/scrap/main.js`](https://github.com/aymaan-mulla/ai-powered-financial-linkedin-data-pipeline/blob/main/new/app/scrap/main.js) (Scraper web app), [`CV engenering/paddleocr/New folder/fnfokasn/main.py`](https://github.com/aymaan-mulla/ai-powered-financial-linkedin-data-pipeline/blob/main/CV%20engenering/paddleocr/New%20folder/fnfokasn/main.py) (OCR workflow), [`react frontend/src/App.jsx`](https://github.com/aymaan-mulla/ai-powered-financial-linkedin-data-pipeline/blob/main/react%20frontend/src/App.jsx) (Frontend routes), [`react frontend/src/pages/Home.jsx`](https://github.com/aymaan-mulla/ai-powered-financial-linkedin-data-pipeline/blob/main/react%20frontend/src/pages/Home.jsx) (Notes page)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_linkedin["LinkedIn scraper"]
  node_scrape_server["Scraper web app<br/>[main.js]"]
  node_profile_urls["URL input JSON<br/>[main.js]"]
  node_profile_scraper["Profile scraper<br/>[scraper.js]"]
  node_profile_json["Profile JSON output<br/>[main.js]"]
end

subgraph group_ocr["Image table OCR"]
  node_ocr_entry["OCR workflow<br/>[main.py]"]
  node_table_extract["Table extraction<br/>[TableExtractor.py]"]
  node_line_removal["Line removal"]
  node_table_ocr["OCR to table<br/>[OcrToTableTool.py]"]
end

subgraph group_notes["Notes application"]
  node_notes_app["Frontend routes<br/>[App.jsx]"]
  node_protected_route["Protected route<br/>[ProtectedRoute.jsx]"]
  node_notes_home["Notes page<br/>[Home.jsx]"]
  node_notes_api["API client<br/>[api.js]"]
  node_note_view["Note component<br/>[Note.jsx]"]
end

subgraph group_contacts["Contact API"]
  node_contact_service["Contact service"]
  node_contact_repo["Contact repository<br/>[ContactRepo.java]"]
  node_contact_model[("Contact entity<br/>[Contact.java]")]
  node_photo_files[("Photo files<br/>[Constant.java]")]
end

node_scrape_user(("Scraping user"))
node_linkedin_site["LinkedIn profiles"]
node_image_user(("Image analyst"))
node_notes_user(("Notes user"))

node_scrape_user -->|"triggers scrape"| node_scrape_server
node_scrape_server -->|"reads URLs"| node_profile_urls
node_scrape_server -->|"scrapes profile"| node_profile_scraper
node_profile_scraper -.->|"retrieves profile"| node_linkedin_site
node_scrape_server -->|"writes profile"| node_profile_json
node_image_user -->|"runs workflow"| node_ocr_entry
node_ocr_entry -->|"extracts table"| node_table_extract
node_ocr_entry -->|"removes lines"| node_line_removal
node_ocr_entry -->|"recognizes table"| node_table_ocr
node_notes_user -.->|"uses app"| node_notes_app
node_notes_app -->|"routes through"| node_protected_route
node_notes_app -->|"routes to"| node_notes_home
node_notes_home -->|"requests notes"| node_notes_api
node_notes_home -->|"renders notes"| node_note_view
node_contact_service -->|"reads and saves"| node_contact_repo
node_contact_repo -->|"persists entity"| node_contact_model
node_contact_service -->|"stores photos"| node_photo_files

click node_scrape_server "https://github.com/aymaan-mulla/ai-powered-financial-linkedin-data-pipeline/blob/main/new/app/scrap/main.js"
click node_profile_urls "https://github.com/aymaan-mulla/ai-powered-financial-linkedin-data-pipeline/blob/main/new/app/scrap/main.js"
click node_profile_scraper "https://github.com/aymaan-mulla/ai-powered-financial-linkedin-data-pipeline/blob/main/new/app/scrap/scraper.js"
click node_profile_json "https://github.com/aymaan-mulla/ai-powered-financial-linkedin-data-pipeline/blob/main/new/app/scrap/main.js"
click node_ocr_entry "https://github.com/aymaan-mulla/ai-powered-financial-linkedin-data-pipeline/blob/main/CV%20engenering/paddleocr/New%20folder/fnfokasn/main.py"
click node_table_extract "https://github.com/aymaan-mulla/ai-powered-financial-linkedin-data-pipeline/blob/main/CV%20engenering/paddleocr/New%20folder/fnfokasn/TableExtractor.py"
click node_line_removal "https://github.com/aymaan-mulla/ai-powered-financial-linkedin-data-pipeline/blob/main/CV%20engenering/paddleocr/New%20folder/fnfokasn/TableLinesRemover.py"
click node_table_ocr "https://github.com/aymaan-mulla/ai-powered-financial-linkedin-data-pipeline/blob/main/CV%20engenering/paddleocr/New%20folder/fnfokasn/OcrToTableTool.py"
click node_notes_app "https://github.com/aymaan-mulla/ai-powered-financial-linkedin-data-pipeline/blob/main/react%20frontend/src/App.jsx"
click node_protected_route "https://github.com/aymaan-mulla/ai-powered-financial-linkedin-data-pipeline/blob/main/react%20frontend/src/components/ProtectedRoute.jsx"
click node_notes_home "https://github.com/aymaan-mulla/ai-powered-financial-linkedin-data-pipeline/blob/main/react%20frontend/src/pages/Home.jsx"
click node_notes_api "https://github.com/aymaan-mulla/ai-powered-financial-linkedin-data-pipeline/blob/main/react%20frontend/src/api.js"
click node_note_view "https://github.com/aymaan-mulla/ai-powered-financial-linkedin-data-pipeline/blob/main/react%20frontend/src/components/Note.jsx"
click node_contact_service "https://github.com/aymaan-mulla/ai-powered-financial-linkedin-data-pipeline/blob/main/java%20backend/backends/src/main/java/io/getarrays/contactapi/service/ContactService.java"
click node_contact_repo "https://github.com/aymaan-mulla/ai-powered-financial-linkedin-data-pipeline/blob/main/java%20backend/backends/src/main/java/io/getarrays/contactapi/repo/ContactRepo.java"
click node_contact_model "https://github.com/aymaan-mulla/ai-powered-financial-linkedin-data-pipeline/blob/main/java%20backend/backends/src/main/java/io/getarrays/contactapi/domain/Contact.java"
click node_photo_files "https://github.com/aymaan-mulla/ai-powered-financial-linkedin-data-pipeline/blob/main/java%20backend/backends/src/main/java/io/getarrays/contactapi/constant/Constant.java"

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_scrape_server,node_profile_urls,node_profile_scraper,node_profile_json,node_scrape_user,node_notes_user toneBlue
class node_ocr_entry,node_table_extract,node_line_removal,node_table_ocr toneAmber
class node_notes_app,node_protected_route,node_notes_home,node_notes_api,node_note_view toneMint
class node_contact_service,node_contact_repo,node_contact_model,node_photo_files toneRose
class node_linkedin_site,node_image_user toneIndigo
```

## Components

### LinkedIn scraper

- [Scraper web app](https://github.com/aymaan-mulla/ai-powered-financial-linkedin-data-pipeline/blob/main/new/app/scrap/main.js): `new/app/scrap/main.js`
- [URL input JSON](https://github.com/aymaan-mulla/ai-powered-financial-linkedin-data-pipeline/blob/main/new/app/scrap/main.js): `new/app/scrap/main.js`
- [Profile scraper](https://github.com/aymaan-mulla/ai-powered-financial-linkedin-data-pipeline/blob/main/new/app/scrap/scraper.js): `new/app/scrap/scraper.js`
- [Profile JSON output](https://github.com/aymaan-mulla/ai-powered-financial-linkedin-data-pipeline/blob/main/new/app/scrap/main.js): `new/app/scrap/main.js`

### Image table OCR

- [OCR workflow](https://github.com/aymaan-mulla/ai-powered-financial-linkedin-data-pipeline/blob/main/CV%20engenering/paddleocr/New%20folder/fnfokasn/main.py): `CV engenering/paddleocr/New folder/fnfokasn/main.py`
- [Table extraction](https://github.com/aymaan-mulla/ai-powered-financial-linkedin-data-pipeline/blob/main/CV%20engenering/paddleocr/New%20folder/fnfokasn/TableExtractor.py): `CV engenering/paddleocr/New folder/fnfokasn/TableExtractor.py`
- [Line removal](https://github.com/aymaan-mulla/ai-powered-financial-linkedin-data-pipeline/blob/main/CV%20engenering/paddleocr/New%20folder/fnfokasn/TableLinesRemover.py): `CV engenering/paddleocr/New folder/fnfokasn/TableLinesRemover.py`
- [OCR to table](https://github.com/aymaan-mulla/ai-powered-financial-linkedin-data-pipeline/blob/main/CV%20engenering/paddleocr/New%20folder/fnfokasn/OcrToTableTool.py): `CV engenering/paddleocr/New folder/fnfokasn/OcrToTableTool.py`

### Notes application

- [Frontend routes](https://github.com/aymaan-mulla/ai-powered-financial-linkedin-data-pipeline/blob/main/react%20frontend/src/App.jsx): `react frontend/src/App.jsx`
- [Protected route](https://github.com/aymaan-mulla/ai-powered-financial-linkedin-data-pipeline/blob/main/react%20frontend/src/components/ProtectedRoute.jsx): `react frontend/src/components/ProtectedRoute.jsx`
- [Notes page](https://github.com/aymaan-mulla/ai-powered-financial-linkedin-data-pipeline/blob/main/react%20frontend/src/pages/Home.jsx): `react frontend/src/pages/Home.jsx`
- [API client](https://github.com/aymaan-mulla/ai-powered-financial-linkedin-data-pipeline/blob/main/react%20frontend/src/api.js): `react frontend/src/api.js`
- [Note component](https://github.com/aymaan-mulla/ai-powered-financial-linkedin-data-pipeline/blob/main/react%20frontend/src/components/Note.jsx): `react frontend/src/components/Note.jsx`

### Contact API

- [Contact service](https://github.com/aymaan-mulla/ai-powered-financial-linkedin-data-pipeline/blob/main/java%20backend/backends/src/main/java/io/getarrays/contactapi/service/ContactService.java): `java backend/backends/src/main/java/io/getarrays/contactapi/service/ContactService.java`
- [Contact repository](https://github.com/aymaan-mulla/ai-powered-financial-linkedin-data-pipeline/blob/main/java%20backend/backends/src/main/java/io/getarrays/contactapi/repo/ContactRepo.java): `java backend/backends/src/main/java/io/getarrays/contactapi/repo/ContactRepo.java`
- [Contact entity](https://github.com/aymaan-mulla/ai-powered-financial-linkedin-data-pipeline/blob/main/java%20backend/backends/src/main/java/io/getarrays/contactapi/domain/Contact.java): `java backend/backends/src/main/java/io/getarrays/contactapi/domain/Contact.java`
- [Photo files](https://github.com/aymaan-mulla/ai-powered-financial-linkedin-data-pipeline/blob/main/java%20backend/backends/src/main/java/io/getarrays/contactapi/constant/Constant.java): `java backend/backends/src/main/java/io/getarrays/contactapi/constant/Constant.java`

### Other components

- **Scraping user**
- **LinkedIn profiles**
- **Image analyst**
- **Notes user**

## Connections

- Scraping user → Scraper web app: triggers scrape (evidence: `new/app/scrap/main.js`)
- Scraper web app → URL input JSON: reads URLs (evidence: `new/app/scrap/main.js`)
- Scraper web app → Profile scraper: scrapes profile (evidence: `new/app/scrap/main.js`)
- Profile scraper → LinkedIn profiles: retrieves profile
- Scraper web app → Profile JSON output: writes profile (evidence: `new/app/scrap/main.js`)
- Image analyst → OCR workflow: runs workflow (evidence: `CV engenering/paddleocr/New folder/fnfokasn/main.py`)
- OCR workflow → Table extraction: extracts table (evidence: `CV engenering/paddleocr/New folder/fnfokasn/main.py`)
- OCR workflow → Line removal: removes lines (evidence: `CV engenering/paddleocr/New folder/fnfokasn/main.py`)
- OCR workflow → OCR to table: recognizes table (evidence: `CV engenering/paddleocr/New folder/fnfokasn/main.py`)
- Notes user → Frontend routes: uses app
- Frontend routes → Protected route: routes through (evidence: `react frontend/src/App.jsx`)
- Frontend routes → Notes page: routes to (evidence: `react frontend/src/App.jsx`)
- Notes page → API client: requests notes (evidence: `react frontend/src/pages/Home.jsx`)
- Notes page → Note component: renders notes (evidence: `react frontend/src/pages/Home.jsx`)
- Contact service → Contact repository: reads and saves (evidence: `java backend/backends/src/main/java/io/getarrays/contactapi/service/ContactService.java`)
- Contact repository → Contact entity: persists entity (evidence: `java backend/backends/src/main/java/io/getarrays/contactapi/repo/ContactRepo.java`)
- Contact service → Photo files: stores photos (evidence: `java backend/backends/src/main/java/io/getarrays/contactapi/service/ContactService.java`)
