# sawqpoi52-droid/graduation-_project architecture

> Architecture diagram of the GitHub repository sawqpoi52-droid/graduation-_project, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-11). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/sawqpoi52-droid/graduation-_project
- Repository: https://github.com/sawqpoi52-droid/graduation-_project

## Overview

SecureCheck lets a user check an email or password for exposure, then supports reviewing and remediating discovered exposures, particularly on GitHub. The backend separates discovery, remediation actions, independent verification, and audit/state handling, with a database for persistent records. The frontend’s main screen composes checking and guidance components. The README is empty; several subsystem links rely on the supplied source index references, while unsampled behavior and runtime wiring are not inferred.

Main entry points: [`backend/routes/remediation.js`](https://github.com/sawqpoi52-droid/graduation-_project/blob/main/backend/routes/remediation.js) (Exposure API), [`backend/utils/crawler.js`](https://github.com/sawqpoi52-droid/graduation-_project/blob/main/backend/utils/crawler.js) (Exposure crawler), [`backend/database/db.js`](https://github.com/sawqpoi52-droid/graduation-_project/blob/main/backend/database/db.js) (Application database), [`frontend/src/App.jsx`](https://github.com/sawqpoi52-droid/graduation-_project/blob/main/frontend/src/App.jsx) (Check interface)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_frontend["User experience"]
  node_app["Check interface<br/>[App.jsx]"]
  node_emailform["Email form<br/>[EmailForm.jsx]"]
  node_removalui["Removal assistant"]
  node_securitytips["Security tips<br/>[SecurityTips.jsx]"]
  node_passwordcheck["Password check<br/>[passwordCheck.js]"]
end

subgraph group_api["API and identity"]
  node_auth["GitHub identity<br/>[auth.js]"]
  node_remediationapi["Exposure API<br/>[remediation.js]"]
  node_server["HTTP server<br/>[server.js]"]
end

subgraph group_exposure["Exposure discovery"]
  node_crawler["Exposure crawler<br/>[crawler.js]"]
  node_classifier["Occurrence classifier<br/>[classifier.js]"]
end

subgraph group_remediation["Remediation workflow"]
  node_lanea["Direct remediation<br/>[laneA.js]"]
  node_lanea2["History rewrite<br/>[laneA2.js]"]
  node_laneb["Fork and pull request<br/>[laneB.js]"]
  node_lanec["Report evidence<br/>[laneC.js]"]
  node_verifier["Independent verifier<br/>[verifier.js]"]
end

subgraph group_core["Security and persistence"]
  node_statemachine["Exposure state rules<br/>[stateMachine.js]"]
  node_audit["Audit logger<br/>[auditLogger.js]"]
  node_emailsecurity["Email protection<br/>[emailSecurity.js]"]
  node_cryptoutil["PII cryptography<br/>[crypto.js]"]
  node_githubclient["GitHub client<br/>[githubClient.js]"]
  node_database[("Application database<br/>[db.js]")]
end

node_user(("User"))
node_github["GitHub API"]
node_hn["Hacker News search"]

node_user -->|"uses"| node_app
node_app -->|"renders"| node_emailform
node_app -->|"checks password"| node_passwordcheck
node_app -->|"renders"| node_removalui
node_app -->|"renders"| node_securitytips
node_server -->|"mounts route"| node_auth
node_server -->|"mounts route"| node_remediationapi
node_server -->|"queries"| node_database
node_remediationapi -->|"scans email"| node_crawler
node_remediationapi -->|"dispatches action"| node_lanea
node_remediationapi -->|"dispatches action"| node_lanea2
node_remediationapi -->|"dispatches action"| node_laneb
node_remediationapi -->|"dispatches action"| node_lanec
node_remediationapi -->|"requests verification"| node_verifier
node_crawler -->|"classifies occurrence"| node_classifier
node_crawler -->|"creates client"| node_githubclient
node_crawler -->|"stores discoveries"| node_database
node_crawler -->|"searches repositories"| node_github
node_crawler -->|"searches stories"| node_hn
node_lanea -->|"creates client"| node_githubclient
node_lanea -->|"verifies occurrence"| node_verifier
node_lanea -->|"updates records"| node_database
node_lanea2 -->|"checks transitions"| node_statemachine
node_laneb -->|"creates client"| node_githubclient
node_laneb -->|"checks transitions"| node_statemachine
node_lanec -->|"checks transitions"| node_statemachine
node_verifier -->|"transitions exposure"| node_statemachine
node_verifier -->|"creates client"| node_githubclient
node_verifier -->|"reads and updates"| node_database
node_auth -->|"reads and updates"| node_database
node_auth -->|"encrypts token"| node_emailsecurity
node_auth -->|"records events"| node_audit
node_audit -->|"writes audit entry"| node_database
node_audit -->|"masks email"| node_emailsecurity
node_emailsecurity -->|"encrypts PII"| node_cryptoutil
node_githubclient -->|"sends API requests"| node_github

click node_app "https://github.com/sawqpoi52-droid/graduation-_project/blob/main/frontend/src/App.jsx"
click node_emailform "https://github.com/sawqpoi52-droid/graduation-_project/blob/main/frontend/src/components/EmailForm.jsx"
click node_removalui "https://github.com/sawqpoi52-droid/graduation-_project/blob/main/frontend/src/components/ExposureRemovalAssistant.jsx"
click node_securitytips "https://github.com/sawqpoi52-droid/graduation-_project/blob/main/frontend/src/components/SecurityTips.jsx"
click node_passwordcheck "https://github.com/sawqpoi52-droid/graduation-_project/blob/main/frontend/src/utils/passwordCheck.js"
click node_auth "https://github.com/sawqpoi52-droid/graduation-_project/blob/main/backend/routes/auth.js"
click node_remediationapi "https://github.com/sawqpoi52-droid/graduation-_project/blob/main/backend/routes/remediation.js"
click node_server "https://github.com/sawqpoi52-droid/graduation-_project/blob/main/backend/server.js"
click node_crawler "https://github.com/sawqpoi52-droid/graduation-_project/blob/main/backend/utils/crawler.js"
click node_classifier "https://github.com/sawqpoi52-droid/graduation-_project/blob/main/backend/services/classifier.js"
click node_lanea "https://github.com/sawqpoi52-droid/graduation-_project/blob/main/backend/services/laneA.js"
click node_lanea2 "https://github.com/sawqpoi52-droid/graduation-_project/blob/main/backend/services/laneA2.js"
click node_laneb "https://github.com/sawqpoi52-droid/graduation-_project/blob/main/backend/services/laneB.js"
click node_lanec "https://github.com/sawqpoi52-droid/graduation-_project/blob/main/backend/services/laneC.js"
click node_verifier "https://github.com/sawqpoi52-droid/graduation-_project/blob/main/backend/services/verifier.js"
click node_statemachine "https://github.com/sawqpoi52-droid/graduation-_project/blob/main/backend/services/stateMachine.js"
click node_audit "https://github.com/sawqpoi52-droid/graduation-_project/blob/main/backend/services/auditLogger.js"
click node_emailsecurity "https://github.com/sawqpoi52-droid/graduation-_project/blob/main/backend/utils/emailSecurity.js"
click node_cryptoutil "https://github.com/sawqpoi52-droid/graduation-_project/blob/main/backend/utils/crypto.js"
click node_githubclient "https://github.com/sawqpoi52-droid/graduation-_project/blob/main/backend/utils/githubClient.js"
click node_database "https://github.com/sawqpoi52-droid/graduation-_project/blob/main/backend/database/db.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_app,node_emailform,node_removalui,node_securitytips,node_passwordcheck,node_user toneBlue
class node_auth,node_remediationapi,node_server toneAmber
class node_crawler,node_classifier,node_github toneMint
class node_lanea,node_lanea2,node_laneb,node_lanec,node_verifier toneRose
class node_statemachine,node_audit,node_emailsecurity,node_cryptoutil,node_githubclient,node_database,node_hn toneIndigo
```

## Components

### User experience

- [Check interface](https://github.com/sawqpoi52-droid/graduation-_project/blob/main/frontend/src/App.jsx): `frontend/src/App.jsx`
- [Email form](https://github.com/sawqpoi52-droid/graduation-_project/blob/main/frontend/src/components/EmailForm.jsx): `frontend/src/components/EmailForm.jsx`
- [Removal assistant](https://github.com/sawqpoi52-droid/graduation-_project/blob/main/frontend/src/components/ExposureRemovalAssistant.jsx): `frontend/src/components/ExposureRemovalAssistant.jsx`
- [Security tips](https://github.com/sawqpoi52-droid/graduation-_project/blob/main/frontend/src/components/SecurityTips.jsx): `frontend/src/components/SecurityTips.jsx`
- [Password check](https://github.com/sawqpoi52-droid/graduation-_project/blob/main/frontend/src/utils/passwordCheck.js): `frontend/src/utils/passwordCheck.js`

### API and identity

- [GitHub identity](https://github.com/sawqpoi52-droid/graduation-_project/blob/main/backend/routes/auth.js): `backend/routes/auth.js`
- [Exposure API](https://github.com/sawqpoi52-droid/graduation-_project/blob/main/backend/routes/remediation.js): `backend/routes/remediation.js`
- [HTTP server](https://github.com/sawqpoi52-droid/graduation-_project/blob/main/backend/server.js): `backend/server.js`

### Exposure discovery

- [Exposure crawler](https://github.com/sawqpoi52-droid/graduation-_project/blob/main/backend/utils/crawler.js): `backend/utils/crawler.js`
- [Occurrence classifier](https://github.com/sawqpoi52-droid/graduation-_project/blob/main/backend/services/classifier.js): `backend/services/classifier.js`

### Remediation workflow

- [Direct remediation](https://github.com/sawqpoi52-droid/graduation-_project/blob/main/backend/services/laneA.js): `backend/services/laneA.js`
- [History rewrite](https://github.com/sawqpoi52-droid/graduation-_project/blob/main/backend/services/laneA2.js): `backend/services/laneA2.js`
- [Fork and pull request](https://github.com/sawqpoi52-droid/graduation-_project/blob/main/backend/services/laneB.js): `backend/services/laneB.js`
- [Report evidence](https://github.com/sawqpoi52-droid/graduation-_project/blob/main/backend/services/laneC.js): `backend/services/laneC.js`
- [Independent verifier](https://github.com/sawqpoi52-droid/graduation-_project/blob/main/backend/services/verifier.js): `backend/services/verifier.js`

### Security and persistence

- [Exposure state rules](https://github.com/sawqpoi52-droid/graduation-_project/blob/main/backend/services/stateMachine.js): `backend/services/stateMachine.js`
- [Audit logger](https://github.com/sawqpoi52-droid/graduation-_project/blob/main/backend/services/auditLogger.js): `backend/services/auditLogger.js`
- [Email protection](https://github.com/sawqpoi52-droid/graduation-_project/blob/main/backend/utils/emailSecurity.js): `backend/utils/emailSecurity.js`
- [PII cryptography](https://github.com/sawqpoi52-droid/graduation-_project/blob/main/backend/utils/crypto.js): `backend/utils/crypto.js`
- [GitHub client](https://github.com/sawqpoi52-droid/graduation-_project/blob/main/backend/utils/githubClient.js): `backend/utils/githubClient.js`
- [Application database](https://github.com/sawqpoi52-droid/graduation-_project/blob/main/backend/database/db.js): `backend/database/db.js`

### Other components

- **User**
- **GitHub API**
- **Hacker News search**

## Connections

- User → Check interface: uses
- Check interface → Email form: renders (evidence: `frontend/src/App.jsx`)
- Check interface → Password check: checks password (evidence: `frontend/src/App.jsx`)
- Check interface → Removal assistant: renders (evidence: `frontend/src/App.jsx`)
- Check interface → Security tips: renders (evidence: `frontend/src/App.jsx`)
- HTTP server → GitHub identity: mounts route (evidence: `backend/server.js`)
- HTTP server → Exposure API: mounts route (evidence: `backend/server.js`)
- HTTP server → Application database: queries (evidence: `backend/server.js`)
- Exposure API → Exposure crawler: scans email (evidence: `backend/routes/remediation.js`)
- Exposure API → Direct remediation: dispatches action (evidence: `backend/routes/remediation.js`)
- Exposure API → History rewrite: dispatches action (evidence: `backend/routes/remediation.js`)
- Exposure API → Fork and pull request: dispatches action (evidence: `backend/routes/remediation.js`)
- Exposure API → Report evidence: dispatches action (evidence: `backend/routes/remediation.js`)
- Exposure API → Independent verifier: requests verification (evidence: `backend/routes/remediation.js`)
- Exposure crawler → Occurrence classifier: classifies occurrence (evidence: `backend/utils/crawler.js`)
- Exposure crawler → GitHub client: creates client (evidence: `backend/utils/crawler.js`)
- Exposure crawler → Application database: stores discoveries (evidence: `backend/utils/crawler.js`)
- Exposure crawler → GitHub API: searches repositories (evidence: `backend/utils/crawler.js`)
- Exposure crawler → Hacker News search: searches stories (evidence: `backend/utils/crawler.js`)
- Direct remediation → GitHub client: creates client (evidence: `backend/services/laneA.js`)
- Direct remediation → Independent verifier: verifies occurrence (evidence: `backend/services/laneA.js`)
- Direct remediation → Application database: updates records (evidence: `backend/services/laneA.js`)
- History rewrite → Exposure state rules: checks transitions (evidence: `backend/services/laneA2.js`)
- Fork and pull request → GitHub client: creates client (evidence: `backend/services/laneB.js`)
- Fork and pull request → Exposure state rules: checks transitions (evidence: `backend/services/laneB.js`)
- Report evidence → Exposure state rules: checks transitions (evidence: `backend/services/laneC.js`)
- Independent verifier → Exposure state rules: transitions exposure (evidence: `backend/services/verifier.js`)
- Independent verifier → GitHub client: creates client (evidence: `backend/services/verifier.js`)
- Independent verifier → Application database: reads and updates (evidence: `backend/services/verifier.js`)
- GitHub identity → Application database: reads and updates (evidence: `backend/routes/auth.js`)
- GitHub identity → Email protection: encrypts token (evidence: `backend/routes/auth.js`)
- GitHub identity → Audit logger: records events (evidence: `backend/routes/auth.js`)
- Audit logger → Application database: writes audit entry (evidence: `backend/services/auditLogger.js`)
- Audit logger → Email protection: masks email (evidence: `backend/services/auditLogger.js`)
- Email protection → PII cryptography: encrypts PII (evidence: `backend/utils/emailSecurity.js`)
- GitHub client → GitHub API: sends API requests (evidence: `backend/utils/githubClient.js`)
