# weld-io/name-guesser architecture

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

- Interactive diagram: https://gitdiagram.com/weld-io/name-guesser
- Repository: https://github.com/weld-io/name-guesser

## Overview

Name Guesser is an Express JSON API with a small web page for guessing a person’s name and company from an email address. A client request reaches the server and Express routes; the formatted API route invokes the email-processing module, which infers name patterns, applies name replacements, and looks up the email domain in company data before returning JSON. The root route renders the web page instead. The README documents supported address formats. Source excerpts show the runtime wiring and data imports; the README supplies the documented capability details.

Main entry points: [`lib/emailtools.js`](https://github.com/weld-io/name-guesser/blob/master/lib/emailtools.js) (Email processor), [`lib/app.js`](https://github.com/weld-io/name-guesser/blob/master/lib/app.js) (Express application), [`routes/index.js`](https://github.com/weld-io/name-guesser/blob/master/routes/index.js) (Request routes), [`lib/server.js`](https://github.com/weld-io/name-guesser/blob/master/lib/server.js) (HTTP server)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_runtime["HTTP Runtime"]
  node_server["HTTP server<br/>[server.js]"]
  node_express["Express application<br/>[app.js]"]
  node_routes["Request routes<br/>[index.js]"]
end

subgraph group_inference["Email Inference"]
  node_emailtools["Email processor<br/>[emailtools.js]"]
  node_name_patterns["Name pattern inference<br/>[emailtools.js]"]
  node_name_formatting["Name replacements and casing<br/>[emailtools.js]"]
  node_company_lookup["Company domain lookup<br/>[emailtools.js]"]
end

subgraph group_reference["Lookup Data"]
  node_first_names["First-name data<br/>[firstNames.json]"]
  node_last_names["Last-name data<br/>[lastNames.json]"]
  node_name_replacements["Name replacement data"]
  node_last_replacements["Last-name replacement data"]
  node_companies["Company domain data<br/>[companies.json]"]
end

subgraph group_web["Web Interface"]
  node_web_page["Name Guesser page<br/>[index.ejs]"]
  node_styles["Page styling<br/>[style.css]"]
end

node_client(("API or browser client"))

node_client -->|"sends request"| node_server
node_server -->|"starts"| node_express
node_express -->|"routes requests"| node_routes
node_routes -->|"processes JSON"| node_emailtools
node_emailtools -->|"infers names"| node_name_patterns
node_emailtools -->|"formats names"| node_name_formatting
node_emailtools -->|"looks up company"| node_company_lookup
node_name_patterns -->|"reads"| node_first_names
node_name_patterns -->|"reads"| node_last_names
node_name_formatting -->|"reads"| node_name_replacements
node_name_formatting -->|"reads"| node_last_replacements
node_company_lookup -->|"matches domain"| node_companies
node_routes -->|"renders page"| node_web_page
node_client -->|"requests page"| node_express
node_express -->|"serves static files"| node_styles

click node_server "https://github.com/weld-io/name-guesser/blob/master/lib/server.js"
click node_express "https://github.com/weld-io/name-guesser/blob/master/lib/app.js"
click node_routes "https://github.com/weld-io/name-guesser/blob/master/routes/index.js"
click node_emailtools "https://github.com/weld-io/name-guesser/blob/master/lib/emailtools.js"
click node_name_patterns "https://github.com/weld-io/name-guesser/blob/master/lib/emailtools.js"
click node_name_formatting "https://github.com/weld-io/name-guesser/blob/master/lib/emailtools.js"
click node_company_lookup "https://github.com/weld-io/name-guesser/blob/master/lib/emailtools.js"
click node_first_names "https://github.com/weld-io/name-guesser/blob/master/config/firstNames.json"
click node_last_names "https://github.com/weld-io/name-guesser/blob/master/config/lastNames.json"
click node_name_replacements "https://github.com/weld-io/name-guesser/blob/master/config/firstNameReplacements.json"
click node_last_replacements "https://github.com/weld-io/name-guesser/blob/master/config/lastNameReplacements.json"
click node_companies "https://github.com/weld-io/name-guesser/blob/master/config/companies.json"
click node_web_page "https://github.com/weld-io/name-guesser/blob/master/views/index.ejs"
click node_styles "https://github.com/weld-io/name-guesser/blob/master/public/css/style.css"

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_server,node_express,node_routes,node_client toneBlue
class node_emailtools,node_name_patterns,node_name_formatting,node_company_lookup toneAmber
class node_first_names,node_last_names,node_name_replacements,node_last_replacements,node_companies toneMint
class node_web_page,node_styles toneRose
```

## Components

### HTTP Runtime

- [HTTP server](https://github.com/weld-io/name-guesser/blob/master/lib/server.js): `lib/server.js`
- [Express application](https://github.com/weld-io/name-guesser/blob/master/lib/app.js): `lib/app.js`
- [Request routes](https://github.com/weld-io/name-guesser/blob/master/routes/index.js): `routes/index.js`

### Email Inference

- [Email processor](https://github.com/weld-io/name-guesser/blob/master/lib/emailtools.js): `lib/emailtools.js`
- [Name pattern inference](https://github.com/weld-io/name-guesser/blob/master/lib/emailtools.js): `lib/emailtools.js`
- [Name replacements and casing](https://github.com/weld-io/name-guesser/blob/master/lib/emailtools.js): `lib/emailtools.js`
- [Company domain lookup](https://github.com/weld-io/name-guesser/blob/master/lib/emailtools.js): `lib/emailtools.js`

### Lookup Data

- [First-name data](https://github.com/weld-io/name-guesser/blob/master/config/firstNames.json): `config/firstNames.json`
- [Last-name data](https://github.com/weld-io/name-guesser/blob/master/config/lastNames.json): `config/lastNames.json`
- [Name replacement data](https://github.com/weld-io/name-guesser/blob/master/config/firstNameReplacements.json): `config/firstNameReplacements.json`
- [Last-name replacement data](https://github.com/weld-io/name-guesser/blob/master/config/lastNameReplacements.json): `config/lastNameReplacements.json`
- [Company domain data](https://github.com/weld-io/name-guesser/blob/master/config/companies.json): `config/companies.json`

### Web Interface

- [Name Guesser page](https://github.com/weld-io/name-guesser/blob/master/views/index.ejs): `views/index.ejs`
- [Page styling](https://github.com/weld-io/name-guesser/blob/master/public/css/style.css): `public/css/style.css`

### Other components

- **API or browser client**

## Connections

- API or browser client → HTTP server: sends request (evidence: `README.md`)
- HTTP server → Express application: starts (evidence: `lib/server.js`)
- Express application → Request routes: routes requests (evidence: `lib/app.js`)
- Request routes → Email processor: processes JSON (evidence: `routes/index.js`)
- Email processor → Name pattern inference: infers names (evidence: `lib/emailtools.js`)
- Email processor → Name replacements and casing: formats names (evidence: `lib/emailtools.js`)
- Email processor → Company domain lookup: looks up company (evidence: `lib/emailtools.js`)
- Name pattern inference → First-name data: reads (evidence: `lib/emailtools.js`)
- Name pattern inference → Last-name data: reads (evidence: `lib/emailtools.js`)
- Name replacements and casing → Name replacement data: reads (evidence: `lib/emailtools.js`)
- Name replacements and casing → Last-name replacement data: reads (evidence: `lib/emailtools.js`)
- Company domain lookup → Company domain data: matches domain (evidence: `lib/emailtools.js`)
- Request routes → Name Guesser page: renders page (evidence: `routes/index.js`)
- API or browser client → Express application: requests page (evidence: `lib/app.js`)
- Express application → Page styling: serves static files (evidence: `lib/app.js`)
