# tulio8998/linketinder-project architecture

> Architecture diagram of the GitHub repository tulio8998/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/tulio8998/linketinder-project
- Repository: https://github.com/tulio8998/linketinder-project

## Overview

Linketinder is a candidate–employer matching product with a Vanilla TypeScript browser interface and a Groovy backend. The documented product workflow covers account creation and sign-in, profile and vacancy management, skill-based discovery, likes or passes, mutual matches, and match-gated identity plus skill analytics. The supplied frontend excerpt shows browser-local storage; the README separately describes a PostgreSQL-backed backend exposed through a terminal CLI. No frontend-to-backend connection is evidenced, so these are shown as separate runtime paths. Some frontend wiring and backend implementations are unsampled.

Main entry points: [`Frontend/src/main.ts`](https://github.com/tulio8998/linketinder-project/blob/master/Frontend/src/main.ts) (App entry), [`Frontend/src/components/empresa.ts`](https://github.com/tulio8998/linketinder-project/blob/master/Frontend/src/components/empresa.ts) (Employer actions), [`Frontend/src/ts/services/CurtidaService.ts`](https://github.com/tulio8998/linketinder-project/blob/master/Frontend/src/ts/services/CurtidaService.ts) (Likes and matches), [`Frontend/src/components/candidato.ts`](https://github.com/tulio8998/linketinder-project/blob/master/Frontend/src/components/candidato.ts) (Candidate actions)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_browser["Browser experience"]
  node_main["App entry<br/>[main.ts]"]
end

subgraph group_frontend["Frontend workflows"]
  node_auth["Sign-in and signup<br/>[signIn.ts]"]
  node_signupcand["Candidate signup<br/>[signUpCandidato.ts]"]
  node_signupemp["Employer signup<br/>[signUpEmpresa.ts]"]
  node_canddash["Candidate dashboard<br/>[candidatoDash.ts]"]
  node_empdash["Employer dashboard<br/>[empresaDash.ts]"]
  node_candui["Candidate actions<br/>[candidato.ts]"]
  node_empui["Employer actions<br/>[empresa.ts]"]
  node_affinity["Affinity and history<br/>[CurtidaService.ts]"]
  node_analytics["Skill analytics<br/>[empresa.ts]"]
end

subgraph group_backend["Backend CLI"]
  node_backendmain["Backend entry<br/>[Main.groovy]"]
  node_menus["Interactive menus"]
  node_services["Domain services"]
  node_daos["Data access objects"]
  node_models["Domain models"]
end

subgraph group_persistence["Persistence"]
  node_candservice["Candidate storage service"]
  node_empservice["Employer storage service<br/>[EmpresaService.ts]"]
  node_vagaservice["Vacancy service<br/>[VagaService.ts]"]
  node_curtidaservice["Likes and matches<br/>[CurtidaService.ts]"]
  node_localstorage[("Browser local storage")]
  node_schema["Relational schema<br/>[tables.sql]"]
  node_postgres[("PostgreSQL")]
end

node_user(("Candidate or employer"))
node_terminal(("CLI user"))

node_user -->|"uses"| node_main
node_main -->|"renders"| node_auth
node_main -->|"renders"| node_signupcand
node_main -->|"renders"| node_signupemp
node_main -->|"renders"| node_canddash
node_main -->|"renders"| node_empdash
node_main -->|"initializes"| node_candui
node_main -->|"initializes"| node_empui
node_main -->|"initializes"| node_candservice
node_main -->|"initializes"| node_empservice
node_main -->|"initializes"| node_vagaservice
node_main -->|"initializes"| node_curtidaservice
node_candui -->|"reads and writes"| node_candservice
node_candui -->|"reads and writes"| node_vagaservice
node_candui -->|"records choices"| node_curtidaservice
node_empui -->|"reads and writes"| node_empservice
node_empui -->|"reads and writes"| node_vagaservice
node_empui -->|"reads"| node_candservice
node_empui -->|"records choices"| node_curtidaservice
node_curtidaservice -->|"calculates"| node_affinity
node_empui -->|"renders"| node_analytics
node_candservice -->|"reads and writes"| node_localstorage
node_empservice -->|"reads and writes"| node_localstorage
node_vagaservice -->|"reads and writes"| node_localstorage
node_curtidaservice -->|"reads and writes"| node_localstorage
node_terminal -->|"starts"| node_backendmain
node_backendmain -->|"dispatches"| node_menus
node_menus -->|"invokes"| node_services
node_services -->|"uses"| node_daos
node_daos -->|"queries"| node_postgres
node_schema -->|"defines tables"| node_postgres
node_services -->|"uses domain data"| node_models

click node_main "https://github.com/tulio8998/linketinder-project/blob/master/Frontend/src/main.ts"
click node_auth "https://github.com/tulio8998/linketinder-project/blob/master/Frontend/src/pages/signIn.ts"
click node_signupcand "https://github.com/tulio8998/linketinder-project/blob/master/Frontend/src/pages/signUpCandidato.ts"
click node_signupemp "https://github.com/tulio8998/linketinder-project/blob/master/Frontend/src/pages/signUpEmpresa.ts"
click node_canddash "https://github.com/tulio8998/linketinder-project/blob/master/Frontend/src/pages/candidatoDash.ts"
click node_empdash "https://github.com/tulio8998/linketinder-project/blob/master/Frontend/src/pages/empresaDash.ts"
click node_candui "https://github.com/tulio8998/linketinder-project/blob/master/Frontend/src/components/candidato.ts"
click node_empui "https://github.com/tulio8998/linketinder-project/blob/master/Frontend/src/components/empresa.ts"
click node_candservice "https://github.com/tulio8998/linketinder-project/blob/master/Frontend/src/ts/services/CandidatoService.ts"
click node_empservice "https://github.com/tulio8998/linketinder-project/blob/master/Frontend/src/ts/services/EmpresaService.ts"
click node_vagaservice "https://github.com/tulio8998/linketinder-project/blob/master/Frontend/src/ts/services/VagaService.ts"
click node_curtidaservice "https://github.com/tulio8998/linketinder-project/blob/master/Frontend/src/ts/services/CurtidaService.ts"
click node_affinity "https://github.com/tulio8998/linketinder-project/blob/master/Frontend/src/ts/services/CurtidaService.ts"
click node_analytics "https://github.com/tulio8998/linketinder-project/blob/master/Frontend/src/components/empresa.ts"
click node_backendmain "https://github.com/tulio8998/linketinder-project/blob/master/Backend/src/main/groovy/com/zg/linketinder/Main.groovy"
click node_menus "https://github.com/tulio8998/linketinder-project/tree/master/Backend/src/main/groovy/com/zg/linketinder/cli"
click node_services "https://github.com/tulio8998/linketinder-project/tree/master/Backend/src/main/groovy/com/zg/linketinder/service"
click node_daos "https://github.com/tulio8998/linketinder-project/tree/master/Backend/src/main/groovy/com/zg/linketinder/dao"
click node_models "https://github.com/tulio8998/linketinder-project/tree/master/Backend/src/main/groovy/com/zg/linketinder/model"
click node_schema "https://github.com/tulio8998/linketinder-project/blob/master/Backend/src/main/groovy/com/zg/linketinder/schema/tables.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_main,node_terminal toneBlue
class node_auth,node_signupcand,node_signupemp,node_canddash,node_empdash,node_candui,node_empui,node_affinity,node_analytics toneAmber
class node_backendmain,node_menus,node_services,node_daos,node_models toneMint
class node_candservice,node_empservice,node_vagaservice,node_curtidaservice,node_localstorage,node_schema,node_postgres toneRose
class node_user toneIndigo
```

## Components

### Browser experience

- [App entry](https://github.com/tulio8998/linketinder-project/blob/master/Frontend/src/main.ts): `Frontend/src/main.ts`

### Frontend workflows

- [Sign-in and signup](https://github.com/tulio8998/linketinder-project/blob/master/Frontend/src/pages/signIn.ts): `Frontend/src/pages/signIn.ts`
- [Candidate signup](https://github.com/tulio8998/linketinder-project/blob/master/Frontend/src/pages/signUpCandidato.ts): `Frontend/src/pages/signUpCandidato.ts`
- [Employer signup](https://github.com/tulio8998/linketinder-project/blob/master/Frontend/src/pages/signUpEmpresa.ts): `Frontend/src/pages/signUpEmpresa.ts`
- [Candidate dashboard](https://github.com/tulio8998/linketinder-project/blob/master/Frontend/src/pages/candidatoDash.ts): `Frontend/src/pages/candidatoDash.ts`
- [Employer dashboard](https://github.com/tulio8998/linketinder-project/blob/master/Frontend/src/pages/empresaDash.ts): `Frontend/src/pages/empresaDash.ts`
- [Candidate actions](https://github.com/tulio8998/linketinder-project/blob/master/Frontend/src/components/candidato.ts): `Frontend/src/components/candidato.ts`
- [Employer actions](https://github.com/tulio8998/linketinder-project/blob/master/Frontend/src/components/empresa.ts): `Frontend/src/components/empresa.ts`
- [Affinity and history](https://github.com/tulio8998/linketinder-project/blob/master/Frontend/src/ts/services/CurtidaService.ts): `Frontend/src/ts/services/CurtidaService.ts`
- [Skill analytics](https://github.com/tulio8998/linketinder-project/blob/master/Frontend/src/components/empresa.ts): `Frontend/src/components/empresa.ts`

### Backend CLI

- [Backend entry](https://github.com/tulio8998/linketinder-project/blob/master/Backend/src/main/groovy/com/zg/linketinder/Main.groovy): `Backend/src/main/groovy/com/zg/linketinder/Main.groovy`
- [Interactive menus](https://github.com/tulio8998/linketinder-project/tree/master/Backend/src/main/groovy/com/zg/linketinder/cli): `Backend/src/main/groovy/com/zg/linketinder/cli`
- [Domain services](https://github.com/tulio8998/linketinder-project/tree/master/Backend/src/main/groovy/com/zg/linketinder/service): `Backend/src/main/groovy/com/zg/linketinder/service`
- [Data access objects](https://github.com/tulio8998/linketinder-project/tree/master/Backend/src/main/groovy/com/zg/linketinder/dao): `Backend/src/main/groovy/com/zg/linketinder/dao`
- [Domain models](https://github.com/tulio8998/linketinder-project/tree/master/Backend/src/main/groovy/com/zg/linketinder/model): `Backend/src/main/groovy/com/zg/linketinder/model`

### Persistence

- [Candidate storage service](https://github.com/tulio8998/linketinder-project/blob/master/Frontend/src/ts/services/CandidatoService.ts): `Frontend/src/ts/services/CandidatoService.ts`
- [Employer storage service](https://github.com/tulio8998/linketinder-project/blob/master/Frontend/src/ts/services/EmpresaService.ts): `Frontend/src/ts/services/EmpresaService.ts`
- [Vacancy service](https://github.com/tulio8998/linketinder-project/blob/master/Frontend/src/ts/services/VagaService.ts): `Frontend/src/ts/services/VagaService.ts`
- [Likes and matches](https://github.com/tulio8998/linketinder-project/blob/master/Frontend/src/ts/services/CurtidaService.ts): `Frontend/src/ts/services/CurtidaService.ts`
- **Browser local storage**
- [Relational schema](https://github.com/tulio8998/linketinder-project/blob/master/Backend/src/main/groovy/com/zg/linketinder/schema/tables.sql): `Backend/src/main/groovy/com/zg/linketinder/schema/tables.sql`
- **PostgreSQL**

### Other components

- **Candidate or employer**
- **CLI user**

## Connections

- Candidate or employer → App entry: uses
- App entry → Sign-in and signup: renders
- App entry → Candidate signup: renders
- App entry → Employer signup: renders
- App entry → Candidate dashboard: renders
- App entry → Employer dashboard: renders
- App entry → Candidate actions: initializes
- App entry → Employer actions: initializes
- App entry → Candidate storage service: initializes
- App entry → Employer storage service: initializes
- App entry → Vacancy service: initializes
- App entry → Likes and matches: initializes
- Candidate actions → Candidate storage service: reads and writes
- Candidate actions → Vacancy service: reads and writes
- Candidate actions → Likes and matches: records choices
- Employer actions → Employer storage service: reads and writes
- Employer actions → Vacancy service: reads and writes
- Employer actions → Candidate storage service: reads
- Employer actions → Likes and matches: records choices
- Likes and matches → Affinity and history: calculates
- Employer actions → Skill analytics: renders
- Candidate storage service → Browser local storage: reads and writes
- Employer storage service → Browser local storage: reads and writes
- Vacancy service → Browser local storage: reads and writes
- Likes and matches → Browser local storage: reads and writes
- CLI user → Backend entry: starts
- Backend entry → Interactive menus: dispatches
- Interactive menus → Domain services: invokes
- Domain services → Data access objects: uses
- Data access objects → PostgreSQL: queries
- Relational schema → PostgreSQL: defines tables
- Domain services → Domain models: uses domain data
