# henriquereinaldi/linketinder-project architecture

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

- Interactive diagram: https://gitdiagram.com/henriquereinaldi/linketinder-project
- Repository: https://github.com/henriquereinaldi/linketinder-project

## Overview

Linketinder is a recruiting application combining professional profiles, job listings, and candidate–vacancy likes/matches. Its principal documented workflow is browsing candidates or vacancies and comparing skills for affinity; the frontend implements this locally and is explicitly independent of the backend. The repository also contains a Groovy terminal backend and PostgreSQL persistence. Backend source was not sampled, so its internal call wiring is left unspecified; the backend components and documented matching capability are still represented.

Main entry points: [`frontend/scripts/service`](https://github.com/henriquereinaldi/linketinder-project/tree/main/frontend/scripts/service) (Frontend services), [`frontend/scripts/persistencia/dados.ts`](https://github.com/henriquereinaldi/linketinder-project/blob/main/frontend/scripts/persistencia/dados.ts) (Browser persistence), [`frontend/scripts/view/view_cand.ts`](https://github.com/henriquereinaldi/linketinder-project/blob/main/frontend/scripts/view/view_cand.ts) (Vacancy browsing), [`frontend/scripts/view/view_emp.ts`](https://github.com/henriquereinaldi/linketinder-project/blob/main/frontend/scripts/view/view_emp.ts) (Candidate browsing)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_frontend["Browser frontend"]
  node_front_entry["Frontend startup<br/>[main.ts]"]
  node_registration["Registration forms"]
  node_candidate_browse["Vacancy browsing<br/>[view_cand.ts]"]
  node_company_browse["Candidate browsing<br/>[view_emp.ts]"]
  node_front_services["Frontend services"]
end

subgraph group_domain["Recruiting domain"]
  node_candidate_model["Candidate profile<br/>[candidato.ts]"]
  node_company_model["Company profile<br/>[empresa.ts]"]
  node_vacancy_model["Vacancy<br/>[vaga.ts]"]
  node_affinity["Skill affinity"]
  node_models["Backend models"]
end

subgraph group_backend["Terminal backend"]
  node_terminal["Terminal interface"]
  node_controllers["Domain controllers"]
  node_services["Domain services"]
  node_likes["Like and match<br/>[CurtidaDAO.groovy]"]
end

subgraph group_persistence["Persistence"]
  node_daos["Database access"]
  node_frontend_storage["Browser persistence<br/>[dados.ts]"]
  node_postgres[("PostgreSQL database<br/>[entrega.sql]")]
end

node_user(("User"))
node_browser["Browser storage"]

node_user -->|"submits details"| node_registration
node_user -->|"browses vacancies"| node_candidate_browse
node_user -->|"browses candidates"| node_company_browse
node_front_entry -->|"loads and saves"| node_frontend_storage
node_front_entry -->|"populates data"| node_front_services
node_registration -->|"registers profile"| node_front_services
node_candidate_browse -->|"reads listings"| node_frontend_storage
node_company_browse -->|"reads profiles"| node_frontend_storage
node_candidate_browse -->|"scores skills"| node_affinity
node_company_browse -->|"scores skills"| node_affinity
node_front_services -->|"creates profiles"| node_candidate_model
node_front_services -->|"creates profiles"| node_company_model
node_front_services -->|"creates vacancies"| node_vacancy_model
node_frontend_storage -->|"reads and writes"| node_browser

click node_front_entry "https://github.com/henriquereinaldi/linketinder-project/blob/main/frontend/scripts/main.ts"
click node_registration "https://github.com/henriquereinaldi/linketinder-project/tree/main/frontend/scripts/view"
click node_candidate_browse "https://github.com/henriquereinaldi/linketinder-project/blob/main/frontend/scripts/view/view_cand.ts"
click node_company_browse "https://github.com/henriquereinaldi/linketinder-project/blob/main/frontend/scripts/view/view_emp.ts"
click node_front_services "https://github.com/henriquereinaldi/linketinder-project/tree/main/frontend/scripts/service"
click node_candidate_model "https://github.com/henriquereinaldi/linketinder-project/blob/main/frontend/scripts/model/candidato.ts"
click node_company_model "https://github.com/henriquereinaldi/linketinder-project/blob/main/frontend/scripts/model/empresa.ts"
click node_vacancy_model "https://github.com/henriquereinaldi/linketinder-project/blob/main/frontend/scripts/model/vaga.ts"
click node_affinity "https://github.com/henriquereinaldi/linketinder-project/tree/main/frontend/scripts/view"
click node_terminal "https://github.com/henriquereinaldi/linketinder-project/tree/main/src/main/groovy/org/linketinder/view/terminal"
click node_controllers "https://github.com/henriquereinaldi/linketinder-project/tree/main/src/main/groovy/org/linketinder/controller"
click node_services "https://github.com/henriquereinaldi/linketinder-project/tree/main/src/main/groovy/org/linketinder/service"
click node_models "https://github.com/henriquereinaldi/linketinder-project/tree/main/src/main/groovy/org/linketinder/model/objetos"
click node_likes "https://github.com/henriquereinaldi/linketinder-project/blob/main/src/main/groovy/org/linketinder/DAO/CurtidaDAO.groovy"
click node_daos "https://github.com/henriquereinaldi/linketinder-project/tree/main/src/main/groovy/org/linketinder/DAO"
click node_frontend_storage "https://github.com/henriquereinaldi/linketinder-project/blob/main/frontend/scripts/persistencia/dados.ts"
click node_postgres "https://github.com/henriquereinaldi/linketinder-project/blob/main/banco_de_dados/entrega.sql"

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_front_entry,node_registration,node_candidate_browse,node_company_browse,node_front_services,node_user toneBlue
class node_candidate_model,node_company_model,node_vacancy_model,node_affinity,node_models,node_browser toneAmber
class node_terminal,node_controllers,node_services,node_likes toneMint
class node_daos,node_frontend_storage,node_postgres toneRose
```

## Components

### Browser frontend

- [Frontend startup](https://github.com/henriquereinaldi/linketinder-project/blob/main/frontend/scripts/main.ts): `frontend/scripts/main.ts`
- [Registration forms](https://github.com/henriquereinaldi/linketinder-project/tree/main/frontend/scripts/view): `frontend/scripts/view`
- [Vacancy browsing](https://github.com/henriquereinaldi/linketinder-project/blob/main/frontend/scripts/view/view_cand.ts): `frontend/scripts/view/view_cand.ts`
- [Candidate browsing](https://github.com/henriquereinaldi/linketinder-project/blob/main/frontend/scripts/view/view_emp.ts): `frontend/scripts/view/view_emp.ts`
- [Frontend services](https://github.com/henriquereinaldi/linketinder-project/tree/main/frontend/scripts/service): `frontend/scripts/service`

### Recruiting domain

- [Candidate profile](https://github.com/henriquereinaldi/linketinder-project/blob/main/frontend/scripts/model/candidato.ts): `frontend/scripts/model/candidato.ts`
- [Company profile](https://github.com/henriquereinaldi/linketinder-project/blob/main/frontend/scripts/model/empresa.ts): `frontend/scripts/model/empresa.ts`
- [Vacancy](https://github.com/henriquereinaldi/linketinder-project/blob/main/frontend/scripts/model/vaga.ts): `frontend/scripts/model/vaga.ts`
- [Skill affinity](https://github.com/henriquereinaldi/linketinder-project/tree/main/frontend/scripts/view): `frontend/scripts/view`
- [Backend models](https://github.com/henriquereinaldi/linketinder-project/tree/main/src/main/groovy/org/linketinder/model/objetos): `src/main/groovy/org/linketinder/model/objetos`

### Terminal backend

- [Terminal interface](https://github.com/henriquereinaldi/linketinder-project/tree/main/src/main/groovy/org/linketinder/view/terminal): `src/main/groovy/org/linketinder/view/terminal`
- [Domain controllers](https://github.com/henriquereinaldi/linketinder-project/tree/main/src/main/groovy/org/linketinder/controller): `src/main/groovy/org/linketinder/controller`
- [Domain services](https://github.com/henriquereinaldi/linketinder-project/tree/main/src/main/groovy/org/linketinder/service): `src/main/groovy/org/linketinder/service`
- [Like and match](https://github.com/henriquereinaldi/linketinder-project/blob/main/src/main/groovy/org/linketinder/DAO/CurtidaDAO.groovy): `src/main/groovy/org/linketinder/DAO/CurtidaDAO.groovy`

### Persistence

- [Database access](https://github.com/henriquereinaldi/linketinder-project/tree/main/src/main/groovy/org/linketinder/DAO): `src/main/groovy/org/linketinder/DAO`
- [Browser persistence](https://github.com/henriquereinaldi/linketinder-project/blob/main/frontend/scripts/persistencia/dados.ts): `frontend/scripts/persistencia/dados.ts`
- [PostgreSQL database](https://github.com/henriquereinaldi/linketinder-project/blob/main/banco_de_dados/entrega.sql): `banco_de_dados/entrega.sql`

### Other components

- **User**
- **Browser storage**

## Connections

- User → Registration forms: submits details
- User → Vacancy browsing: browses vacancies
- User → Candidate browsing: browses candidates
- Frontend startup → Browser persistence: loads and saves
- Frontend startup → Frontend services: populates data
- Registration forms → Frontend services: registers profile
- Vacancy browsing → Browser persistence: reads listings
- Candidate browsing → Browser persistence: reads profiles
- Vacancy browsing → Skill affinity: scores skills
- Candidate browsing → Skill affinity: scores skills
- Frontend services → Candidate profile: creates profiles
- Frontend services → Company profile: creates profiles
- Frontend services → Vacancy: creates vacancies
- Browser persistence → Browser storage: reads and writes
