# irunga1/flgtbkend architecture

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

- Interactive diagram: https://gitdiagram.com/irunga1/flgtbkend
- Repository: https://github.com/irunga1/flgtbkend

## Overview

FreelanceGT is an Express API for a Guatemala-focused freelance marketplace. A client request enters through the server’s mounted routes; domain handlers validate and sanitize input, use JWT protection where enabled, access SQLite, and return JSON. The API covers account access and user management, roles and skills, project discovery and applications, freelancer-project relationships, profiles, and messaging. The excerpts and source index support the main route-to-database and middleware links; some route implementations were not sampled, so their internal behavior is not expanded here.

Main entry points: [`server.js`](https://github.com/irunga1/flgtbkend/blob/main/server.js) (Express server), [`db.js`](https://github.com/irunga1/flgtbkend/blob/main/db.js) (SQLite database), [`routes/profile.js`](https://github.com/irunga1/flgtbkend/blob/main/routes/profile.js) (Profile management), [`middlewares/authJwt.js`](https://github.com/irunga1/flgtbkend/blob/main/middlewares/authJwt.js) (JWT middleware)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_entry["API entry"]
  node_server["Express server<br/>[server.js]"]
end

subgraph group_identity["Identity and accounts"]
  node_login["Login<br/>[login.js]"]
  node_users["User management<br/>[user.js]"]
  node_roles["Role management<br/>[roles.js]"]
  node_profile["Profile management<br/>[profile.js]"]
end

subgraph group_marketplace["Marketplace domains"]
  node_projects["Project listings<br/>[proyectos.js]"]
  node_applications["Project applications<br/>[aplicar.js]"]
  node_freelancer_projects["Freelancer projects"]
  node_skills["Skills catalog<br/>[skills.js]"]
  node_user_skills["User skills<br/>[usuario_skills.js]"]
  node_messages["Messaging<br/>[messages.js]"]
end

subgraph group_shared["Shared services"]
  node_auth["JWT middleware<br/>[authJwt.js]"]
  node_validation["Data validation<br/>[datavalidator.js]"]
  node_sanitization["Input sanitization<br/>[utilery.js]"]
  node_password["Password encoding<br/>[cripter.js]"]
  node_database[("SQLite database<br/>[db.js]")]
end

node_client(("API client"))
node_email(("Mail relay"))

node_client -->|"sends requests"| node_server
node_server -->|"mounts /users"| node_users
node_server -->|"mounts /roles"| node_roles
node_server -->|"mounts /skills"| node_skills
node_server -->|"mounts /proyectos"| node_projects
node_server -->|"mounts route"| node_freelancer_projects
node_server -->|"mounts route"| node_user_skills
node_server -->|"mounts /perfil"| node_profile
node_server -->|"mounts /aplicar"| node_applications
node_server -->|"mounts /login"| node_login
node_server -->|"mounts /messages"| node_messages
node_login -->|"queries"| node_database
node_login -->|"encodes password"| node_password
node_users -->|"reads and writes"| node_database
node_users -->|"encodes password"| node_password
node_users -.->|"sends verification mail"| node_email
node_roles -->|"queries"| node_database
node_profile -->|"reads and updates"| node_database
node_profile -->|"encodes password"| node_password
node_projects -->|"queries"| node_database
node_applications -->|"queries"| node_database
node_freelancer_projects -->|"queries"| node_database
node_skills -->|"queries"| node_database
node_user_skills -->|"queries"| node_database
node_messages -->|"stores messages"| node_database
node_users -->|"uses JWT guard"| node_auth
node_projects -->|"uses JWT guard"| node_auth
node_profile -->|"uses JWT guard"| node_auth
node_applications -->|"uses JWT guard"| node_auth
node_freelancer_projects -->|"uses JWT guard"| node_auth
node_user_skills -->|"uses JWT guard"| node_auth
node_messages -->|"sanitizes input"| node_sanitization
node_messages -->|"validates input"| node_validation
node_projects -->|"sanitizes input"| node_sanitization
node_projects -->|"validates input"| node_validation
node_profile -->|"sanitizes input"| node_sanitization
node_profile -->|"validates input"| node_validation

click node_server "https://github.com/irunga1/flgtbkend/blob/main/server.js"
click node_login "https://github.com/irunga1/flgtbkend/blob/main/routes/login.js"
click node_users "https://github.com/irunga1/flgtbkend/blob/main/routes/user.js"
click node_roles "https://github.com/irunga1/flgtbkend/blob/main/routes/roles.js"
click node_profile "https://github.com/irunga1/flgtbkend/blob/main/routes/profile.js"
click node_projects "https://github.com/irunga1/flgtbkend/blob/main/routes/proyectos.js"
click node_applications "https://github.com/irunga1/flgtbkend/blob/main/routes/aplicar.js"
click node_freelancer_projects "https://github.com/irunga1/flgtbkend/blob/main/routes/freelancer_proyectos.js"
click node_skills "https://github.com/irunga1/flgtbkend/blob/main/routes/skills.js"
click node_user_skills "https://github.com/irunga1/flgtbkend/blob/main/routes/usuario_skills.js"
click node_messages "https://github.com/irunga1/flgtbkend/blob/main/routes/messages.js"
click node_auth "https://github.com/irunga1/flgtbkend/blob/main/middlewares/authJwt.js"
click node_validation "https://github.com/irunga1/flgtbkend/blob/main/libs/datavalidator.js"
click node_sanitization "https://github.com/irunga1/flgtbkend/blob/main/libs/utilery.js"
click node_password "https://github.com/irunga1/flgtbkend/blob/main/libs/cripter.js"
click node_database "https://github.com/irunga1/flgtbkend/blob/main/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_server,node_client toneBlue
class node_login,node_users,node_roles,node_profile toneAmber
class node_projects,node_applications,node_freelancer_projects,node_skills,node_user_skills,node_messages toneMint
class node_auth,node_validation,node_sanitization,node_password,node_database toneRose
class node_email toneIndigo
```

## Components

### API entry

- [Express server](https://github.com/irunga1/flgtbkend/blob/main/server.js): `server.js`

### Identity and accounts

- [Login](https://github.com/irunga1/flgtbkend/blob/main/routes/login.js): `routes/login.js`
- [User management](https://github.com/irunga1/flgtbkend/blob/main/routes/user.js): `routes/user.js`
- [Role management](https://github.com/irunga1/flgtbkend/blob/main/routes/roles.js): `routes/roles.js`
- [Profile management](https://github.com/irunga1/flgtbkend/blob/main/routes/profile.js): `routes/profile.js`

### Marketplace domains

- [Project listings](https://github.com/irunga1/flgtbkend/blob/main/routes/proyectos.js): `routes/proyectos.js`
- [Project applications](https://github.com/irunga1/flgtbkend/blob/main/routes/aplicar.js): `routes/aplicar.js`
- [Freelancer projects](https://github.com/irunga1/flgtbkend/blob/main/routes/freelancer_proyectos.js): `routes/freelancer_proyectos.js`
- [Skills catalog](https://github.com/irunga1/flgtbkend/blob/main/routes/skills.js): `routes/skills.js`
- [User skills](https://github.com/irunga1/flgtbkend/blob/main/routes/usuario_skills.js): `routes/usuario_skills.js`
- [Messaging](https://github.com/irunga1/flgtbkend/blob/main/routes/messages.js): `routes/messages.js`

### Shared services

- [JWT middleware](https://github.com/irunga1/flgtbkend/blob/main/middlewares/authJwt.js): `middlewares/authJwt.js`
- [Data validation](https://github.com/irunga1/flgtbkend/blob/main/libs/datavalidator.js): `libs/datavalidator.js`
- [Input sanitization](https://github.com/irunga1/flgtbkend/blob/main/libs/utilery.js): `libs/utilery.js`
- [Password encoding](https://github.com/irunga1/flgtbkend/blob/main/libs/cripter.js): `libs/cripter.js`
- [SQLite database](https://github.com/irunga1/flgtbkend/blob/main/db.js): `db.js`

### Other components

- **API client**
- **Mail relay**

## Connections

- API client → Express server: sends requests (evidence: `README.md`)
- Express server → User management: mounts /users (evidence: `server.js`)
- Express server → Role management: mounts /roles (evidence: `server.js`)
- Express server → Skills catalog: mounts /skills (evidence: `server.js`)
- Express server → Project listings: mounts /proyectos (evidence: `server.js`)
- Express server → Freelancer projects: mounts route (evidence: `server.js`)
- Express server → User skills: mounts route (evidence: `server.js`)
- Express server → Profile management: mounts /perfil (evidence: `server.js`)
- Express server → Project applications: mounts /aplicar (evidence: `server.js`)
- Express server → Login: mounts /login (evidence: `server.js`)
- Express server → Messaging: mounts /messages (evidence: `server.js`)
- Login → SQLite database: queries (evidence: `routes/login.js`)
- Login → Password encoding: encodes password (evidence: `routes/login.js`)
- User management → SQLite database: reads and writes (evidence: `routes/user.js`)
- User management → Password encoding: encodes password (evidence: `routes/user.js`)
- User management → Mail relay: sends verification mail (evidence: `routes/user.js`)
- Role management → SQLite database: queries (evidence: `routes/roles.js`)
- Profile management → SQLite database: reads and updates (evidence: `routes/profile.js`)
- Profile management → Password encoding: encodes password (evidence: `routes/profile.js`)
- Project listings → SQLite database: queries (evidence: `routes/proyectos.js`)
- Project applications → SQLite database: queries (evidence: `routes/aplicar.js`)
- Freelancer projects → SQLite database: queries (evidence: `routes/freelancer_proyectos.js`)
- Skills catalog → SQLite database: queries (evidence: `routes/skills.js`)
- User skills → SQLite database: queries (evidence: `routes/usuario_skills.js`)
- Messaging → SQLite database: stores messages (evidence: `routes/messages.js`)
- User management → JWT middleware: uses JWT guard (evidence: `routes/user.js`)
- Project listings → JWT middleware: uses JWT guard (evidence: `routes/proyectos.js`)
- Profile management → JWT middleware: uses JWT guard (evidence: `routes/profile.js`)
- Project applications → JWT middleware: uses JWT guard (evidence: `routes/aplicar.js`)
- Freelancer projects → JWT middleware: uses JWT guard (evidence: `routes/freelancer_proyectos.js`)
- User skills → JWT middleware: uses JWT guard (evidence: `routes/usuario_skills.js`)
- Messaging → Input sanitization: sanitizes input (evidence: `routes/messages.js`)
- Messaging → Data validation: validates input (evidence: `routes/messages.js`)
- Project listings → Input sanitization: sanitizes input (evidence: `routes/proyectos.js`)
- Project listings → Data validation: validates input (evidence: `routes/proyectos.js`)
- Profile management → Input sanitization: sanitizes input (evidence: `routes/profile.js`)
- Profile management → Data validation: validates input (evidence: `routes/profile.js`)
