# stangirard/seo-audits-toolkit architecture

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

- Interactive diagram: https://gitdiagram.com/stangirard/seo-audits-toolkit
- Repository: https://github.com/stangirard/seo-audits-toolkit

## Overview

OSAT is a web toolkit for organization-scoped website audits and content analysis. Users select a resource in the React Admin app; it communicates with the Django API, while Celery tasks perform time-consuming analyses and persist results for later viewing. The graph preserves the documented audit, extraction, sitemap, keyword, summarization, authentication, and organization capabilities. Task-to-analysis and task-to-model links are supported by sampled task source; API dispatch and several domain implementations were not sampled, so those links are omitted.

Main entry points: [`server/core/urls.py`](https://github.com/stangirard/seo-audits-toolkit/blob/master/server/core/urls.py) (Django API), [`admin/src/App.js`](https://github.com/stangirard/seo-audits-toolkit/blob/master/admin/src/App.js) (React Admin), [`server/extractor/tasks.py`](https://github.com/stangirard/seo-audits-toolkit/blob/master/server/extractor/tasks.py) (Extraction jobs), [`server/lighthouse/tasks.py`](https://github.com/stangirard/seo-audits-toolkit/blob/master/server/lighthouse/tasks.py) (Audit jobs)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_interface["Web interface"]
  node_admin["React Admin<br/>[App.js]"]
  node_auth["Auth provider<br/>[authProvider.js]"]
  node_websites["Website resource<br/>[websiteList.js]"]
  node_auditui["Audit resources<br/>[index.js]"]
  node_contentui["Content resources<br/>[index.js]"]
end

subgraph group_platform["API and access"]
  node_api["Django API<br/>[urls.py]"]
  node_organizations[("Organizations<br/>[models.py]")]
  node_accounts[("User accounts<br/>[models.py]")]
end

subgraph group_website["Website audits"]
  node_extract["Page extraction<br/>[tasks.py]"]
  node_sitemap["Sitemap extraction<br/>[tasks.py]"]
  node_lighthouse["Lighthouse audits<br/>[tasks.py]"]
  node_security["Security audits<br/>[tasks.py]"]
  node_internal["Internal links<br/>[tasks.py]"]
  node_extractdata[("Extraction records<br/>[models.py]")]
  node_auditdata[("Lighthouse records<br/>[models.py]")]
  node_securitydata[("Security records<br/>[models.py]")]
  node_linkdata[("Link records<br/>[models.py]")]
end

subgraph group_content["Content tools"]
  node_keywords["Keyword finder<br/>[tasks.py]"]
  node_summary["Text summarizer<br/>[tasks.py]"]
  node_keyworddata[("Keyword records<br/>[models.py]")]
  node_summarydata[("Summary records<br/>[models.py]")]
end

subgraph group_async["Background work"]
  node_extractjobs["Extraction jobs<br/>[tasks.py]"]
  node_auditjobs["Audit jobs<br/>[tasks.py]"]
  node_securityjobs["Security jobs<br/>[tasks.py]"]
  node_linkjobs["Link jobs<br/>[tasks.py]"]
  node_keywordjobs["Keyword jobs<br/>[tasks.py]"]
  node_summaryjobs["Summary jobs<br/>[tasks.py]"]
end

node_user(("User"))
node_lighthousecli{{"Lighthouse CLI"}}
node_httpobs{{"HTTP Observatory"}}

node_user -->|"uses"| node_admin
node_admin -->|"authenticates via"| node_auth
node_admin -->|"shows"| node_websites
node_admin -->|"shows"| node_auditui
node_admin -->|"shows"| node_contentui
node_admin -->|"requests data"| node_api
node_auth -->|"authenticates"| node_api
node_websites -->|"requests data"| node_api
node_auditui -->|"requests data"| node_api
node_contentui -->|"requests data"| node_api
node_api -->|"uses access data"| node_organizations
node_api -->|"uses account data"| node_accounts
node_extractjobs -->|"runs extraction"| node_extract
node_extractjobs -->|"runs extraction"| node_sitemap
node_extractjobs -->|"updates records"| node_extractdata
node_auditjobs -->|"runs audit"| node_lighthouse
node_auditjobs -->|"saves scores"| node_auditdata
node_auditjobs -->|"invokes"| node_lighthousecli
node_securityjobs -->|"runs audit"| node_security
node_securityjobs -->|"saves results"| node_securitydata
node_securityjobs -->|"invokes"| node_httpobs
node_linkjobs -->|"generates links"| node_internal
node_linkjobs -->|"updates records"| node_linkdata
node_keywordjobs -->|"extracts terms"| node_keywords
node_keywordjobs -->|"updates records"| node_keyworddata
node_summaryjobs -->|"summarizes text"| node_summary
node_summaryjobs -->|"updates records"| node_summarydata

click node_admin "https://github.com/stangirard/seo-audits-toolkit/blob/master/admin/src/App.js"
click node_auth "https://github.com/stangirard/seo-audits-toolkit/blob/master/admin/src/authProvider.js"
click node_websites "https://github.com/stangirard/seo-audits-toolkit/blob/master/admin/src/website/websiteList.js"
click node_auditui "https://github.com/stangirard/seo-audits-toolkit/blob/master/admin/src/lighthouse/index.js"
click node_contentui "https://github.com/stangirard/seo-audits-toolkit/blob/master/admin/src/extractor/index.js"
click node_api "https://github.com/stangirard/seo-audits-toolkit/blob/master/server/core/urls.py"
click node_organizations "https://github.com/stangirard/seo-audits-toolkit/blob/master/server/org/models.py"
click node_accounts "https://github.com/stangirard/seo-audits-toolkit/blob/master/server/users/models.py"
click node_extract "https://github.com/stangirard/seo-audits-toolkit/blob/master/server/extractor/tasks.py"
click node_sitemap "https://github.com/stangirard/seo-audits-toolkit/blob/master/server/extractor/tasks.py"
click node_lighthouse "https://github.com/stangirard/seo-audits-toolkit/blob/master/server/lighthouse/tasks.py"
click node_security "https://github.com/stangirard/seo-audits-toolkit/blob/master/server/security/tasks.py"
click node_internal "https://github.com/stangirard/seo-audits-toolkit/blob/master/server/internalLinks/tasks.py"
click node_keywords "https://github.com/stangirard/seo-audits-toolkit/blob/master/server/keywords/tasks.py"
click node_summary "https://github.com/stangirard/seo-audits-toolkit/blob/master/server/bert/tasks.py"
click node_extractjobs "https://github.com/stangirard/seo-audits-toolkit/blob/master/server/extractor/tasks.py"
click node_auditjobs "https://github.com/stangirard/seo-audits-toolkit/blob/master/server/lighthouse/tasks.py"
click node_securityjobs "https://github.com/stangirard/seo-audits-toolkit/blob/master/server/security/tasks.py"
click node_linkjobs "https://github.com/stangirard/seo-audits-toolkit/blob/master/server/internalLinks/tasks.py"
click node_keywordjobs "https://github.com/stangirard/seo-audits-toolkit/blob/master/server/keywords/tasks.py"
click node_summaryjobs "https://github.com/stangirard/seo-audits-toolkit/blob/master/server/bert/tasks.py"
click node_extractdata "https://github.com/stangirard/seo-audits-toolkit/blob/master/server/extractor/models.py"
click node_auditdata "https://github.com/stangirard/seo-audits-toolkit/blob/master/server/lighthouse/models.py"
click node_securitydata "https://github.com/stangirard/seo-audits-toolkit/blob/master/server/security/models.py"
click node_linkdata "https://github.com/stangirard/seo-audits-toolkit/blob/master/server/internalLinks/models.py"
click node_keyworddata "https://github.com/stangirard/seo-audits-toolkit/blob/master/server/keywords/models.py"
click node_summarydata "https://github.com/stangirard/seo-audits-toolkit/blob/master/server/bert/models.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_admin,node_auth,node_websites,node_auditui,node_contentui,node_user toneBlue
class node_api,node_organizations,node_accounts toneAmber
class node_extract,node_sitemap,node_lighthouse,node_security,node_internal,node_extractdata,node_auditdata,node_securitydata,node_linkdata toneMint
class node_keywords,node_summary,node_keyworddata,node_summarydata toneRose
class node_extractjobs,node_auditjobs,node_securityjobs,node_linkjobs,node_keywordjobs,node_summaryjobs,node_lighthousecli,node_httpobs toneIndigo
```

## Components

### Web interface

- [React Admin](https://github.com/stangirard/seo-audits-toolkit/blob/master/admin/src/App.js): `admin/src/App.js`
- [Auth provider](https://github.com/stangirard/seo-audits-toolkit/blob/master/admin/src/authProvider.js): `admin/src/authProvider.js`
- [Website resource](https://github.com/stangirard/seo-audits-toolkit/blob/master/admin/src/website/websiteList.js): `admin/src/website/websiteList.js`
- [Audit resources](https://github.com/stangirard/seo-audits-toolkit/blob/master/admin/src/lighthouse/index.js): `admin/src/lighthouse/index.js`
- [Content resources](https://github.com/stangirard/seo-audits-toolkit/blob/master/admin/src/extractor/index.js): `admin/src/extractor/index.js`

### API and access

- [Django API](https://github.com/stangirard/seo-audits-toolkit/blob/master/server/core/urls.py): `server/core/urls.py`
- [Organizations](https://github.com/stangirard/seo-audits-toolkit/blob/master/server/org/models.py): `server/org/models.py`
- [User accounts](https://github.com/stangirard/seo-audits-toolkit/blob/master/server/users/models.py): `server/users/models.py`

### Website audits

- [Page extraction](https://github.com/stangirard/seo-audits-toolkit/blob/master/server/extractor/tasks.py): `server/extractor/tasks.py`
- [Sitemap extraction](https://github.com/stangirard/seo-audits-toolkit/blob/master/server/extractor/tasks.py): `server/extractor/tasks.py`
- [Lighthouse audits](https://github.com/stangirard/seo-audits-toolkit/blob/master/server/lighthouse/tasks.py): `server/lighthouse/tasks.py`
- [Security audits](https://github.com/stangirard/seo-audits-toolkit/blob/master/server/security/tasks.py): `server/security/tasks.py`
- [Internal links](https://github.com/stangirard/seo-audits-toolkit/blob/master/server/internalLinks/tasks.py): `server/internalLinks/tasks.py`
- [Extraction records](https://github.com/stangirard/seo-audits-toolkit/blob/master/server/extractor/models.py): `server/extractor/models.py`
- [Lighthouse records](https://github.com/stangirard/seo-audits-toolkit/blob/master/server/lighthouse/models.py): `server/lighthouse/models.py`
- [Security records](https://github.com/stangirard/seo-audits-toolkit/blob/master/server/security/models.py): `server/security/models.py`
- [Link records](https://github.com/stangirard/seo-audits-toolkit/blob/master/server/internalLinks/models.py): `server/internalLinks/models.py`

### Content tools

- [Keyword finder](https://github.com/stangirard/seo-audits-toolkit/blob/master/server/keywords/tasks.py): `server/keywords/tasks.py`
- [Text summarizer](https://github.com/stangirard/seo-audits-toolkit/blob/master/server/bert/tasks.py): `server/bert/tasks.py`
- [Keyword records](https://github.com/stangirard/seo-audits-toolkit/blob/master/server/keywords/models.py): `server/keywords/models.py`
- [Summary records](https://github.com/stangirard/seo-audits-toolkit/blob/master/server/bert/models.py): `server/bert/models.py`

### Background work

- [Extraction jobs](https://github.com/stangirard/seo-audits-toolkit/blob/master/server/extractor/tasks.py): `server/extractor/tasks.py`
- [Audit jobs](https://github.com/stangirard/seo-audits-toolkit/blob/master/server/lighthouse/tasks.py): `server/lighthouse/tasks.py`
- [Security jobs](https://github.com/stangirard/seo-audits-toolkit/blob/master/server/security/tasks.py): `server/security/tasks.py`
- [Link jobs](https://github.com/stangirard/seo-audits-toolkit/blob/master/server/internalLinks/tasks.py): `server/internalLinks/tasks.py`
- [Keyword jobs](https://github.com/stangirard/seo-audits-toolkit/blob/master/server/keywords/tasks.py): `server/keywords/tasks.py`
- [Summary jobs](https://github.com/stangirard/seo-audits-toolkit/blob/master/server/bert/tasks.py): `server/bert/tasks.py`

### Other components

- **User**
- **Lighthouse CLI**
- **HTTP Observatory**

## Connections

- User → React Admin: uses
- React Admin → Auth provider: authenticates via
- React Admin → Website resource: shows
- React Admin → Audit resources: shows
- React Admin → Content resources: shows
- React Admin → Django API: requests data
- Auth provider → Django API: authenticates
- Website resource → Django API: requests data
- Audit resources → Django API: requests data
- Content resources → Django API: requests data
- Django API → Organizations: uses access data
- Django API → User accounts: uses account data
- Extraction jobs → Page extraction: runs extraction
- Extraction jobs → Sitemap extraction: runs extraction
- Extraction jobs → Extraction records: updates records
- Audit jobs → Lighthouse audits: runs audit
- Audit jobs → Lighthouse records: saves scores
- Audit jobs → Lighthouse CLI: invokes
- Security jobs → Security audits: runs audit
- Security jobs → Security records: saves results
- Security jobs → HTTP Observatory: invokes
- Link jobs → Internal links: generates links
- Link jobs → Link records: updates records
- Keyword jobs → Keyword finder: extracts terms
- Keyword jobs → Keyword records: updates records
- Summary jobs → Text summarizer: summarizes text
- Summary jobs → Summary records: updates records
