# doo0h/sign-all architecture

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

- Interactive diagram: https://gitdiagram.com/doo0h/sign-all
- Repository: https://github.com/doo0h/sign-all

## Overview

Sign-All is an interview-practice web MVP for Deaf and hard-of-hearing users. Its documented flow is company exploration, résumé upload and review, generated interview questions, then typed answers and AI feedback; it also offers sign-reference lookup. The frontend communicates with a Node.js backend, which manages temporary sessions and coordinates AI, document extraction, postings, and reference data. SQLite stores reference catalogs, not résumé or answer sessions. Some route-to-module calls are omitted from the excerpts, so those links are marked unverified rather than asserted as observed calls.

Main entry points: [`backend/src/app.js`](https://github.com/doo0h/sign-all/blob/main/backend/src/app.js) (HTTP API), [`backend/src/postings.js`](https://github.com/doo0h/sign-all/blob/main/backend/src/postings.js) (Posting Search), [`backend/src/db.js`](https://github.com/doo0h/sign-all/blob/main/backend/src/db.js) (Reference Catalog), [`backend/src/server.js`](https://github.com/doo0h/sign-all/blob/main/backend/src/server.js) (Backend Server)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_client["User Interface"]
  node_frontend["Practice Web App<br/>[app.js]"]
end

subgraph group_practice["Interview Practice"]
  node_sessions["Practice Sessions<br/>[app.js]"]
  node_documents["Document Extraction<br/>[documents.js]"]
  node_parser["Document Parser"]
  node_ai["AI Analysis and Feedback<br/>[ai.js]"]
end

subgraph group_references["Reference Services"]
  node_postings["Posting Search<br/>[postings.js]"]
  node_domestic["Domestic Postings"]
  node_public["Public Postings<br/>[public-postings.js]"]
  node_catalog[("Reference Catalog<br/>[db.js]")]
end

subgraph group_runtime["Runtime Infrastructure"]
  node_api["HTTP API<br/>[app.js]"]
  node_server["Backend Server<br/>[server.js]"]
  node_common["Input and Config<br/>[common.js]"]
end

node_user(("Interview Candidate"))
node_provider{{"AI Provider"}}
node_boards{{"External Job Boards"}}
node_sqlite[("SQLite")]

node_user -->|"uses"| node_frontend
node_frontend -->|"calls API"| node_api
node_server -->|"creates"| node_api
node_server -->|"imports dataset"| node_catalog
node_api -->|"uses validation"| node_common
node_api -->|"manages"| node_sessions
node_api -->|"invokes"| node_ai
node_api -.->|"dispatches to"| node_documents
node_documents -->|"spawns"| node_parser
node_ai -->|"sends requests"| node_provider
node_api -.->|"dispatches to"| node_postings
node_postings -->|"delegates to"| node_domestic
node_postings -->|"delegates to"| node_public
node_postings -->|"fetches listings"| node_boards
node_api -.->|"reads references"| node_catalog
node_catalog -->|"reads and writes"| node_sqlite

click node_frontend "https://github.com/doo0h/sign-all/blob/main/frontend/app.js"
click node_api "https://github.com/doo0h/sign-all/blob/main/backend/src/app.js"
click node_server "https://github.com/doo0h/sign-all/blob/main/backend/src/server.js"
click node_common "https://github.com/doo0h/sign-all/blob/main/backend/src/common.js"
click node_sessions "https://github.com/doo0h/sign-all/blob/main/backend/src/app.js"
click node_documents "https://github.com/doo0h/sign-all/blob/main/backend/src/documents.js"
click node_parser "https://github.com/doo0h/sign-all/blob/main/backend/scripts/extract-document.py"
click node_ai "https://github.com/doo0h/sign-all/blob/main/backend/src/ai.js"
click node_postings "https://github.com/doo0h/sign-all/blob/main/backend/src/postings.js"
click node_domestic "https://github.com/doo0h/sign-all/blob/main/backend/src/domestic-postings.js"
click node_public "https://github.com/doo0h/sign-all/blob/main/backend/src/public-postings.js"
click node_catalog "https://github.com/doo0h/sign-all/blob/main/backend/src/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_frontend,node_user toneBlue
class node_sessions,node_documents,node_parser,node_ai,node_sqlite toneAmber
class node_postings,node_domestic,node_public,node_catalog toneMint
class node_api,node_server,node_common toneRose
class node_provider,node_boards toneIndigo
```

## Components

### User Interface

- [Practice Web App](https://github.com/doo0h/sign-all/blob/main/frontend/app.js): `frontend/app.js`

### Interview Practice

- [Practice Sessions](https://github.com/doo0h/sign-all/blob/main/backend/src/app.js): `backend/src/app.js`
- [Document Extraction](https://github.com/doo0h/sign-all/blob/main/backend/src/documents.js): `backend/src/documents.js`
- [Document Parser](https://github.com/doo0h/sign-all/blob/main/backend/scripts/extract-document.py): `backend/scripts/extract-document.py`
- [AI Analysis and Feedback](https://github.com/doo0h/sign-all/blob/main/backend/src/ai.js): `backend/src/ai.js`

### Reference Services

- [Posting Search](https://github.com/doo0h/sign-all/blob/main/backend/src/postings.js): `backend/src/postings.js`
- [Domestic Postings](https://github.com/doo0h/sign-all/blob/main/backend/src/domestic-postings.js): `backend/src/domestic-postings.js`
- [Public Postings](https://github.com/doo0h/sign-all/blob/main/backend/src/public-postings.js): `backend/src/public-postings.js`
- [Reference Catalog](https://github.com/doo0h/sign-all/blob/main/backend/src/db.js): `backend/src/db.js`

### Runtime Infrastructure

- [HTTP API](https://github.com/doo0h/sign-all/blob/main/backend/src/app.js): `backend/src/app.js`
- [Backend Server](https://github.com/doo0h/sign-all/blob/main/backend/src/server.js): `backend/src/server.js`
- [Input and Config](https://github.com/doo0h/sign-all/blob/main/backend/src/common.js): `backend/src/common.js`

### Other components

- **Interview Candidate**
- **AI Provider**
- **External Job Boards**
- **SQLite**

## Connections

- Interview Candidate → Practice Web App: uses (evidence: `README.md`)
- Practice Web App → HTTP API: calls API (evidence: `README.md`)
- Backend Server → HTTP API: creates (evidence: `backend/src/server.js`)
- Backend Server → Reference Catalog: imports dataset (evidence: `backend/src/server.js`)
- HTTP API → Input and Config: uses validation (evidence: `backend/src/app.js`)
- HTTP API → Practice Sessions: manages (evidence: `backend/src/app.js`)
- HTTP API → AI Analysis and Feedback: invokes (evidence: `backend/src/app.js`)
- HTTP API → Document Extraction: dispatches to (evidence: `backend/src/app.js`)
- Document Extraction → Document Parser: spawns (evidence: `backend/src/documents.js`)
- AI Analysis and Feedback → AI Provider: sends requests (evidence: `backend/src/ai.js`)
- HTTP API → Posting Search: dispatches to (evidence: `backend/src/app.js`)
- Posting Search → Domestic Postings: delegates to (evidence: `backend/src/postings.js`)
- Posting Search → Public Postings: delegates to (evidence: `backend/src/postings.js`)
- Posting Search → External Job Boards: fetches listings (evidence: `backend/src/postings.js`)
- HTTP API → Reference Catalog: reads references (evidence: `backend/src/app.js`)
- Reference Catalog → SQLite: reads and writes (evidence: `backend/src/db.js`)
