# aliishov/multi-platform-scarper architecture

> Architecture diagram of the GitHub repository aliishov/multi-platform-scarper, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-25). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/aliishov/multi-platform-scarper
- Repository: https://github.com/aliishov/multi-platform-scarper

## Overview

This browser extension collects social-media posts for user-supplied keywords on X or Facebook, with optional count/date limits, skip/stop controls, server submission, and JSONL export. The principal flow is popup configuration → shared scrape state → page interaction and post collection → optional export or server submission. The excerpts show state handling, parts of platform scraping, and server dispatch; some scraping details and extension wiring are not visible, so uncertain links are omitted.

Main entry points: [`content.js`](https://github.com/aliishov/multi-platform-scarper/blob/main/content.js) (Scrape coordinator), [`popup.js`](https://github.com/aliishov/multi-platform-scarper/blob/main/popup.js) (Run controls), [`popup.html`](https://github.com/aliishov/multi-platform-scarper/blob/main/popup.html) (Popup interface), [`background.js`](https://github.com/aliishov/multi-platform-scarper/blob/main/background.js) (Message handler)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_control["User controls"]
  node_popup["Popup interface<br/>[popup.html]"]
  node_popup_logic["Run controls<br/>[popup.js]"]
end

subgraph group_scrape["Scraping"]
  node_scraper["Scrape coordinator<br/>[content.js]"]
  node_login["Platform login<br/>[content.js]"]
  node_search["Search and settings<br/>[content.js]"]
  node_extract["Post extraction<br/>[content.js]"]
  node_date_count["Date and count limits<br/>[content.js]"]
  node_keyword_queue["Keyword progress<br/>[content.js]"]
end

subgraph group_state["Shared state"]
  node_storage[("Extension state")]
end

subgraph group_integration["Outputs and integrations"]
  node_background["Message handler<br/>[background.js]"]
  node_download["JSONL download<br/>[popup.js]"]
end

node_user(("User"))
node_platforms["X and Facebook"]
node_server["Local API"]
node_local_file["Local file"]
node_browser_tabs["Browser tabs"]

node_user -->|"uses"| node_popup
node_popup -->|"controls"| node_popup_logic
node_popup_logic -->|"writes state"| node_storage
node_popup_logic -->|"reads state"| node_storage
node_storage -->|"updates UI"| node_popup_logic
node_popup_logic -->|"navigates"| node_browser_tabs
node_scraper -->|"reads state"| node_storage
node_scraper -->|"writes state"| node_storage
node_storage -->|"supplies state"| node_scraper
node_scraper -->|"runs checks"| node_login
node_scraper -->|"configures search"| node_search
node_scraper -->|"collects posts"| node_extract
node_scraper -->|"applies limits"| node_date_count
node_scraper -->|"advances keywords"| node_keyword_queue
node_login -->|"interacts"| node_platforms
node_search -->|"searches"| node_platforms
node_platforms -->|"provides posts"| node_extract
node_scraper -.->|"dispatches posts"| node_background
node_background -->|"POSTs posts"| node_server
node_popup_logic -->|"exports results"| node_download
node_download -->|"downloads"| node_local_file

click node_popup "https://github.com/aliishov/multi-platform-scarper/blob/main/popup.html"
click node_popup_logic "https://github.com/aliishov/multi-platform-scarper/blob/main/popup.js"
click node_scraper "https://github.com/aliishov/multi-platform-scarper/blob/main/content.js"
click node_login "https://github.com/aliishov/multi-platform-scarper/blob/main/content.js"
click node_search "https://github.com/aliishov/multi-platform-scarper/blob/main/content.js"
click node_extract "https://github.com/aliishov/multi-platform-scarper/blob/main/content.js"
click node_date_count "https://github.com/aliishov/multi-platform-scarper/blob/main/content.js"
click node_keyword_queue "https://github.com/aliishov/multi-platform-scarper/blob/main/content.js"
click node_background "https://github.com/aliishov/multi-platform-scarper/blob/main/background.js"
click node_download "https://github.com/aliishov/multi-platform-scarper/blob/main/popup.js"

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_popup,node_popup_logic,node_user,node_browser_tabs toneBlue
class node_scraper,node_login,node_search,node_extract,node_date_count,node_keyword_queue toneAmber
class node_storage,node_server toneMint
class node_background,node_download toneRose
class node_platforms,node_local_file toneIndigo
```

## Components

### User controls

- [Popup interface](https://github.com/aliishov/multi-platform-scarper/blob/main/popup.html): `popup.html`
- [Run controls](https://github.com/aliishov/multi-platform-scarper/blob/main/popup.js): `popup.js`

### Scraping

- [Scrape coordinator](https://github.com/aliishov/multi-platform-scarper/blob/main/content.js): `content.js`
- [Platform login](https://github.com/aliishov/multi-platform-scarper/blob/main/content.js): `content.js`
- [Search and settings](https://github.com/aliishov/multi-platform-scarper/blob/main/content.js): `content.js`
- [Post extraction](https://github.com/aliishov/multi-platform-scarper/blob/main/content.js): `content.js`
- [Date and count limits](https://github.com/aliishov/multi-platform-scarper/blob/main/content.js): `content.js`
- [Keyword progress](https://github.com/aliishov/multi-platform-scarper/blob/main/content.js): `content.js`

### Shared state

- **Extension state**

### Outputs and integrations

- [Message handler](https://github.com/aliishov/multi-platform-scarper/blob/main/background.js): `background.js`
- [JSONL download](https://github.com/aliishov/multi-platform-scarper/blob/main/popup.js): `popup.js`

### Other components

- **User**
- **X and Facebook**
- **Local API**
- **Local file**
- **Browser tabs**

## Connections

- User → Popup interface: uses
- Popup interface → Run controls: controls
- Run controls → Extension state: writes state
- Run controls → Extension state: reads state
- Extension state → Run controls: updates UI
- Run controls → Browser tabs: navigates
- Scrape coordinator → Extension state: reads state
- Scrape coordinator → Extension state: writes state
- Extension state → Scrape coordinator: supplies state
- Scrape coordinator → Platform login: runs checks
- Scrape coordinator → Search and settings: configures search
- Scrape coordinator → Post extraction: collects posts
- Scrape coordinator → Date and count limits: applies limits
- Scrape coordinator → Keyword progress: advances keywords
- Platform login → X and Facebook: interacts
- Search and settings → X and Facebook: searches
- X and Facebook → Post extraction: provides posts
- Scrape coordinator → Message handler: dispatches posts
- Message handler → Local API: POSTs posts
- Run controls → JSONL download: exports results
- JSONL download → Local file: downloads
