# ecarrera72/controlvisits architecture

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

- Interactive diagram: https://gitdiagram.com/ecarrera72/controlvisits
- Repository: https://github.com/ecarrera72/controlvisits

## Overview

controlVisits is an Express application for visit-control workflows, with authentication, an area catalog, and link-management pages. The main runtime path is browser request → Express routing and authentication → route-specific data access or rendering. Configuration is read from a local SQLite database to configure MySQL and email. The README and tree identify link-management views, but the sampled application entry point does not mount the links router; that integration is therefore left unasserted.

Main entry points: [`src/index.js`](https://github.com/ecarrera72/controlvisits/blob/main/src/index.js) (Express app), [`src/routes/authentication.js`](https://github.com/ecarrera72/controlvisits/blob/main/src/routes/authentication.js) (Account routes), [`src/database.js`](https://github.com/ecarrera72/controlvisits/blob/main/src/database.js) (MySQL connector), [`src/routes/catalogs/area.js`](https://github.com/ecarrera72/controlvisits/blob/main/src/routes/catalogs/area.js) (Area catalog routes)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_runtime["Web runtime"]
  node_app["Express app<br/>[index.js]"]
  node_home["Home routes<br/>[index.js]"]
  node_viewengine["View engine<br/>[handlebars.js]"]
end

subgraph group_identity["Authentication"]
  node_authroutes["Account routes<br/>[authentication.js]"]
  node_authguard["Login guards<br/>[auth.js]"]
  node_passport["Local strategies<br/>[passport.js]"]
  node_passwords["Password helpers<br/>[helpers.js]"]
  node_authviews["Account views"]
  node_profileview["Profile view<br/>[profile.hbs]"]
end

subgraph group_domain["Visit-control features"]
  node_areas["Area catalog routes<br/>[area.js]"]
  node_areaview["Area catalog view<br/>[area.hbs]"]
  node_areabrowser["Area browser code<br/>[catArea.js]"]
  node_links["Link management routes<br/>[links.js]"]
  node_linkviews["Link management views"]
end

subgraph group_data["Data and messaging"]
  node_database["MySQL connector<br/>[database.js]"]
  node_mysql[("MySQL database")]
  node_settings["Settings reader<br/>[sqlite.js]"]
  node_settingsdb[("SQLite configuration<br/>[configuration.db]")]
  node_email["Email service<br/>[email.js]"]
  node_emailtemplates["Email templates"]
  node_smtp["SMTP service"]
end

node_browser(("Browser user"))

node_browser -->|"sends requests"| node_app
node_app -->|"mounts routes"| node_home
node_app -->|"mounts routes"| node_authroutes
node_app -->|"mounts routes"| node_areas
node_app -->|"loads strategies"| node_passport
node_app -->|"configures helpers"| node_viewengine
node_app -->|"loads DB settings"| node_settings
node_home -->|"checks login"| node_authguard
node_home -->|"renders home"| node_app
node_authroutes -->|"checks login"| node_authguard
node_authroutes -->|"authenticates users"| node_passport
node_authroutes -->|"resets password"| node_database
node_authroutes -->|"sends reset email"| node_email
node_authroutes -->|"renders account pages"| node_authviews
node_authroutes -->|"renders profile"| node_profileview
node_passport -->|"queries users"| node_database
node_passport -->|"hashes passwords"| node_passwords
node_areas -->|"checks login"| node_authguard
node_areas -->|"reads and writes areas"| node_database
node_areas -->|"renders catalog"| node_areaview
node_database -->|"gets connection settings"| node_settings
node_database -->|"queries"| node_mysql
node_settings -->|"reads settings"| node_settingsdb
node_email -->|"gets mail settings"| node_settings
node_email -->|"configures templates"| node_emailtemplates
node_email -->|"sends messages"| node_smtp
node_browser -.->|"requests links"| node_links

click node_app "https://github.com/ecarrera72/controlvisits/blob/main/src/index.js"
click node_home "https://github.com/ecarrera72/controlvisits/blob/main/src/routes/index.js"
click node_viewengine "https://github.com/ecarrera72/controlvisits/blob/main/src/lib/handlebars.js"
click node_authroutes "https://github.com/ecarrera72/controlvisits/blob/main/src/routes/authentication.js"
click node_authguard "https://github.com/ecarrera72/controlvisits/blob/main/src/lib/auth.js"
click node_passport "https://github.com/ecarrera72/controlvisits/blob/main/src/lib/passport.js"
click node_passwords "https://github.com/ecarrera72/controlvisits/blob/main/src/lib/helpers.js"
click node_authviews "https://github.com/ecarrera72/controlvisits/tree/main/src/views/auth"
click node_profileview "https://github.com/ecarrera72/controlvisits/blob/main/src/views/profile.hbs"
click node_areas "https://github.com/ecarrera72/controlvisits/blob/main/src/routes/catalogs/area.js"
click node_areaview "https://github.com/ecarrera72/controlvisits/blob/main/src/views/catalogs/area.hbs"
click node_areabrowser "https://github.com/ecarrera72/controlvisits/blob/main/src/public/js/catalogs/catArea.js"
click node_links "https://github.com/ecarrera72/controlvisits/blob/main/src/routes/links.js"
click node_linkviews "https://github.com/ecarrera72/controlvisits/tree/main/src/views/links"
click node_database "https://github.com/ecarrera72/controlvisits/blob/main/src/database.js"
click node_settings "https://github.com/ecarrera72/controlvisits/blob/main/src/sqlite.js"
click node_settingsdb "https://github.com/ecarrera72/controlvisits/blob/main/src/dbSqlite/configuration.db"
click node_email "https://github.com/ecarrera72/controlvisits/blob/main/src/service/email.js"
click node_emailtemplates "https://github.com/ecarrera72/controlvisits/tree/main/src/templates"

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_home,node_viewengine,node_browser toneBlue
class node_authroutes,node_authguard,node_passport,node_passwords,node_authviews,node_profileview toneAmber
class node_areas,node_areaview,node_areabrowser,node_links,node_linkviews toneMint
class node_database,node_mysql,node_settings,node_settingsdb,node_email,node_emailtemplates,node_smtp toneRose
```

## Components

### Web runtime

- [Express app](https://github.com/ecarrera72/controlvisits/blob/main/src/index.js): `src/index.js`
- [Home routes](https://github.com/ecarrera72/controlvisits/blob/main/src/routes/index.js): `src/routes/index.js`
- [View engine](https://github.com/ecarrera72/controlvisits/blob/main/src/lib/handlebars.js): `src/lib/handlebars.js`

### Authentication

- [Account routes](https://github.com/ecarrera72/controlvisits/blob/main/src/routes/authentication.js): `src/routes/authentication.js`
- [Login guards](https://github.com/ecarrera72/controlvisits/blob/main/src/lib/auth.js): `src/lib/auth.js`
- [Local strategies](https://github.com/ecarrera72/controlvisits/blob/main/src/lib/passport.js): `src/lib/passport.js`
- [Password helpers](https://github.com/ecarrera72/controlvisits/blob/main/src/lib/helpers.js): `src/lib/helpers.js`
- [Account views](https://github.com/ecarrera72/controlvisits/tree/main/src/views/auth): `src/views/auth`
- [Profile view](https://github.com/ecarrera72/controlvisits/blob/main/src/views/profile.hbs): `src/views/profile.hbs`

### Visit-control features

- [Area catalog routes](https://github.com/ecarrera72/controlvisits/blob/main/src/routes/catalogs/area.js): `src/routes/catalogs/area.js`
- [Area catalog view](https://github.com/ecarrera72/controlvisits/blob/main/src/views/catalogs/area.hbs): `src/views/catalogs/area.hbs`
- [Area browser code](https://github.com/ecarrera72/controlvisits/blob/main/src/public/js/catalogs/catArea.js): `src/public/js/catalogs/catArea.js`
- [Link management routes](https://github.com/ecarrera72/controlvisits/blob/main/src/routes/links.js): `src/routes/links.js`
- [Link management views](https://github.com/ecarrera72/controlvisits/tree/main/src/views/links): `src/views/links`

### Data and messaging

- [MySQL connector](https://github.com/ecarrera72/controlvisits/blob/main/src/database.js): `src/database.js`
- **MySQL database**
- [Settings reader](https://github.com/ecarrera72/controlvisits/blob/main/src/sqlite.js): `src/sqlite.js`
- [SQLite configuration](https://github.com/ecarrera72/controlvisits/blob/main/src/dbSqlite/configuration.db): `src/dbSqlite/configuration.db`
- [Email service](https://github.com/ecarrera72/controlvisits/blob/main/src/service/email.js): `src/service/email.js`
- [Email templates](https://github.com/ecarrera72/controlvisits/tree/main/src/templates): `src/templates`
- **SMTP service**

### Other components

- **Browser user**

## Connections

- Browser user → Express app: sends requests (evidence: `src/index.js`)
- Express app → Home routes: mounts routes (evidence: `src/index.js`)
- Express app → Account routes: mounts routes (evidence: `src/index.js`)
- Express app → Area catalog routes: mounts routes (evidence: `src/index.js`)
- Express app → Local strategies: loads strategies (evidence: `src/index.js`)
- Express app → View engine: configures helpers (evidence: `src/index.js`)
- Express app → Settings reader: loads DB settings (evidence: `src/index.js`)
- Home routes → Login guards: checks login (evidence: `src/routes/index.js`)
- Home routes → Express app: renders home (evidence: `src/routes/index.js`)
- Account routes → Login guards: checks login (evidence: `src/routes/authentication.js`)
- Account routes → Local strategies: authenticates users (evidence: `src/routes/authentication.js`)
- Account routes → MySQL connector: resets password (evidence: `src/routes/authentication.js`)
- Account routes → Email service: sends reset email (evidence: `src/routes/authentication.js`)
- Account routes → Account views: renders account pages (evidence: `src/routes/authentication.js`)
- Account routes → Profile view: renders profile (evidence: `src/routes/authentication.js`)
- Local strategies → MySQL connector: queries users (evidence: `src/lib/passport.js`)
- Local strategies → Password helpers: hashes passwords (evidence: `src/lib/passport.js`)
- Area catalog routes → Login guards: checks login (evidence: `src/routes/catalogs/area.js`)
- Area catalog routes → MySQL connector: reads and writes areas (evidence: `src/routes/catalogs/area.js`)
- Area catalog routes → Area catalog view: renders catalog (evidence: `src/routes/catalogs/area.js`)
- MySQL connector → Settings reader: gets connection settings (evidence: `src/database.js`)
- MySQL connector → MySQL database: queries (evidence: `src/database.js`)
- Settings reader → SQLite configuration: reads settings (evidence: `src/sqlite.js`)
- Email service → Settings reader: gets mail settings (evidence: `src/service/email.js`)
- Email service → Email templates: configures templates (evidence: `src/service/email.js`)
- Email service → SMTP service: sends messages (evidence: `src/service/email.js`)
- Browser user → Link management routes: requests links
