# lucas-t-neves/kawztatto architecture

> Architecture diagram of the GitHub repository lucas-t-neves/kawztatto, 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/lucas-t-neves/kawztatto
- Repository: https://github.com/lucas-t-neves/kawztatto

## Overview

Kawz Tattoo is studio-management software: a tattoo artist uses the frontend to manage clients and their health/preferences, develop projects and contracts, schedule sessions and follow-ups, and track finances and reference images. The frontend’s feature view models call repositories over a shared HTTP layer; the backend exposes REST endpoints, applies domain services, and persists data. Documented integrations generate contract PDFs, store images, and sync session events with a calendar. The graph captures documented capabilities, but several subsystem internals are unsampled, so their detailed call relationships are omitted.

Main entry points: [`backend/src/main/java/com/kawz/tattoo/api/controller`](https://github.com/lucas-t-neves/kawztatto/tree/main/backend/src/main/java/com/kawz/tattoo/api/controller) (REST API), [`backend/src/main/java/com/kawz/tattoo/domain/service/ProjetoService.java`](https://github.com/lucas-t-neves/kawztatto/blob/main/backend/src/main/java/com/kawz/tattoo/domain/service/ProjetoService.java) (Project domain), [`backend/src/main/java/com/kawz/tattoo/domain/service/SessaoService.java`](https://github.com/lucas-t-neves/kawztatto/blob/main/backend/src/main/java/com/kawz/tattoo/domain/service/SessaoService.java) (Session domain), [`backend/src/main/java/com/kawz/tattoo/domain/service/ContratoService.java`](https://github.com/lucas-t-neves/kawztatto/blob/main/backend/src/main/java/com/kawz/tattoo/domain/service/ContratoService.java) (Contracts and PDFs)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_client["Client management"]
  node_clients["Client records"]
  node_clientservices["Client domain"]
  node_health["Health and preferences"]
end

subgraph group_work["Projects and contracts"]
  node_projects["Project workflow"]
  node_projectservice["Project domain"]
  node_contracts["Contracts and PDFs"]
  node_template["PDF provider"]
  node_cloudinary["Image storage"]
  node_otherfeatures["Budgets and contracts UI"]
end

subgraph group_operations["Scheduling and finance"]
  node_agenda["Agenda and sessions"]
  node_session["Session domain<br/>[SessaoService.java]"]
  node_nylas["Calendar provider"]
  node_finance["Finance management"]
  node_financebackend["Financial domain"]
  node_followups["Follow-ups"]
  node_dashboard["Dashboard"]
end

subgraph group_platform["Application platform"]
  node_frontend["Studio frontend<br/>[App.jsx]"]
  node_http["HTTP client<br/>[http.js]"]
  node_backend["REST API"]
  node_auth["Authentication"]
  node_dto["API models<br/>[ApiModels.java]"]
  node_mapper["API mapping<br/>[ApiMapper.java]"]
  node_errors["API errors"]
  node_db[("Relational database")]
end

node_artist(("Tattoo artist"))

node_artist -->|"uses"| node_frontend
node_frontend -->|"requests API"| node_http
node_http -->|"sends REST requests"| node_backend
node_backend -->|"secures routes"| node_auth
node_backend -->|"exchanges models"| node_dto
node_backend -->|"formats errors"| node_errors
node_artist -->|"manages"| node_clients
node_clients -->|"loads and saves"| node_clientservices
node_artist -->|"manages"| node_projects
node_projects -->|"uses API"| node_projectservice
node_projectservice -->|"maps responses"| node_mapper
node_projectservice -->|"removes image files"| node_cloudinary
node_artist -->|"manages"| node_contracts
node_contracts -->|"generates PDF"| node_template
node_artist -->|"schedules work"| node_agenda
node_agenda -->|"uses API"| node_session
node_session -->|"syncs events"| node_nylas
node_artist -->|"tracks finances"| node_finance
node_finance -.->|"uses API"| node_financebackend
node_artist -->|"manages follow-ups"| node_followups
node_backend -.->|"routes client operations"| node_clientservices
node_backend -.->|"routes health records"| node_health
node_backend -->|"routes project operations"| node_projectservice
node_backend -->|"routes session operations"| node_session
node_backend -.->|"routes transactions"| node_financebackend
node_backend -.->|"serves dashboard"| node_dashboard
node_contracts -.->|"persists contracts"| node_db
node_projectservice -.->|"persists projects"| node_db
node_session -.->|"persists sessions"| node_db
node_financebackend -.->|"persists transactions"| node_db
node_otherfeatures -.->|"calls shared client"| node_http

click node_frontend "https://github.com/lucas-t-neves/kawztatto/blob/main/frontend/src/App.jsx"
click node_http "https://github.com/lucas-t-neves/kawztatto/blob/main/frontend/src/shared/model/http.js"
click node_backend "https://github.com/lucas-t-neves/kawztatto/tree/main/backend/src/main/java/com/kawz/tattoo/api/controller"
click node_auth "https://github.com/lucas-t-neves/kawztatto/blob/main/backend/src/main/java/com/kawz/tattoo/config/SecurityConfig.java"
click node_dto "https://github.com/lucas-t-neves/kawztatto/blob/main/backend/src/main/java/com/kawz/tattoo/api/dto/ApiModels.java"
click node_mapper "https://github.com/lucas-t-neves/kawztatto/blob/main/backend/src/main/java/com/kawz/tattoo/api/dto/ApiMapper.java"
click node_errors "https://github.com/lucas-t-neves/kawztatto/blob/main/backend/src/main/java/com/kawz/tattoo/api/exception/ApiExceptionHandler.java"
click node_clients "https://github.com/lucas-t-neves/kawztatto/tree/main/frontend/src/features/clients"
click node_clientservices "https://github.com/lucas-t-neves/kawztatto/blob/main/backend/src/main/java/com/kawz/tattoo/domain/service/ClienteService.java"
click node_health "https://github.com/lucas-t-neves/kawztatto/tree/main/backend/src/main/java/com/kawz/tattoo/domain/service"
click node_projects "https://github.com/lucas-t-neves/kawztatto/tree/main/frontend/src/features/projects"
click node_projectservice "https://github.com/lucas-t-neves/kawztatto/blob/main/backend/src/main/java/com/kawz/tattoo/domain/service/ProjetoService.java"
click node_contracts "https://github.com/lucas-t-neves/kawztatto/blob/main/backend/src/main/java/com/kawz/tattoo/domain/service/ContratoService.java"
click node_template "https://github.com/lucas-t-neves/kawztatto/blob/main/backend/src/main/java/com/kawz/tattoo/integration/ApiTemplateClient.java"
click node_cloudinary "https://github.com/lucas-t-neves/kawztatto/blob/main/backend/src/main/java/com/kawz/tattoo/integration/CloudinaryClient.java"
click node_agenda "https://github.com/lucas-t-neves/kawztatto/tree/main/frontend/src/features/agenda"
click node_session "https://github.com/lucas-t-neves/kawztatto/blob/main/backend/src/main/java/com/kawz/tattoo/domain/service/SessaoService.java"
click node_nylas "https://github.com/lucas-t-neves/kawztatto/blob/main/backend/src/main/java/com/kawz/tattoo/integration/NylasCalendarClient.java"
click node_finance "https://github.com/lucas-t-neves/kawztatto/tree/main/frontend/src/features/finance"
click node_financebackend "https://github.com/lucas-t-neves/kawztatto/blob/main/backend/src/main/java/com/kawz/tattoo/domain/service/MovimentacaoService.java"
click node_followups "https://github.com/lucas-t-neves/kawztatto/tree/main/frontend/src/features/followups"
click node_otherfeatures "https://github.com/lucas-t-neves/kawztatto/tree/main/frontend/src/features"
click node_dashboard "https://github.com/lucas-t-neves/kawztatto/blob/main/backend/src/main/java/com/kawz/tattoo/domain/service/DashboardService.java"

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_clients,node_clientservices,node_health toneBlue
class node_projects,node_projectservice,node_contracts,node_template,node_cloudinary,node_otherfeatures toneAmber
class node_agenda,node_session,node_nylas,node_finance,node_financebackend,node_followups,node_dashboard toneMint
class node_frontend,node_http,node_backend,node_auth,node_dto,node_mapper,node_errors,node_db toneRose
class node_artist toneIndigo
```

## Components

### Client management

- [Client records](https://github.com/lucas-t-neves/kawztatto/tree/main/frontend/src/features/clients): `frontend/src/features/clients`
- [Client domain](https://github.com/lucas-t-neves/kawztatto/blob/main/backend/src/main/java/com/kawz/tattoo/domain/service/ClienteService.java): `backend/src/main/java/com/kawz/tattoo/domain/service/ClienteService.java`
- [Health and preferences](https://github.com/lucas-t-neves/kawztatto/tree/main/backend/src/main/java/com/kawz/tattoo/domain/service): `backend/src/main/java/com/kawz/tattoo/domain/service`

### Projects and contracts

- [Project workflow](https://github.com/lucas-t-neves/kawztatto/tree/main/frontend/src/features/projects): `frontend/src/features/projects`
- [Project domain](https://github.com/lucas-t-neves/kawztatto/blob/main/backend/src/main/java/com/kawz/tattoo/domain/service/ProjetoService.java): `backend/src/main/java/com/kawz/tattoo/domain/service/ProjetoService.java`
- [Contracts and PDFs](https://github.com/lucas-t-neves/kawztatto/blob/main/backend/src/main/java/com/kawz/tattoo/domain/service/ContratoService.java): `backend/src/main/java/com/kawz/tattoo/domain/service/ContratoService.java`
- [PDF provider](https://github.com/lucas-t-neves/kawztatto/blob/main/backend/src/main/java/com/kawz/tattoo/integration/ApiTemplateClient.java): `backend/src/main/java/com/kawz/tattoo/integration/ApiTemplateClient.java`
- [Image storage](https://github.com/lucas-t-neves/kawztatto/blob/main/backend/src/main/java/com/kawz/tattoo/integration/CloudinaryClient.java): `backend/src/main/java/com/kawz/tattoo/integration/CloudinaryClient.java`
- [Budgets and contracts UI](https://github.com/lucas-t-neves/kawztatto/tree/main/frontend/src/features): `frontend/src/features`

### Scheduling and finance

- [Agenda and sessions](https://github.com/lucas-t-neves/kawztatto/tree/main/frontend/src/features/agenda): `frontend/src/features/agenda`
- [Session domain](https://github.com/lucas-t-neves/kawztatto/blob/main/backend/src/main/java/com/kawz/tattoo/domain/service/SessaoService.java): `backend/src/main/java/com/kawz/tattoo/domain/service/SessaoService.java`
- [Calendar provider](https://github.com/lucas-t-neves/kawztatto/blob/main/backend/src/main/java/com/kawz/tattoo/integration/NylasCalendarClient.java): `backend/src/main/java/com/kawz/tattoo/integration/NylasCalendarClient.java`
- [Finance management](https://github.com/lucas-t-neves/kawztatto/tree/main/frontend/src/features/finance): `frontend/src/features/finance`
- [Financial domain](https://github.com/lucas-t-neves/kawztatto/blob/main/backend/src/main/java/com/kawz/tattoo/domain/service/MovimentacaoService.java): `backend/src/main/java/com/kawz/tattoo/domain/service/MovimentacaoService.java`
- [Follow-ups](https://github.com/lucas-t-neves/kawztatto/tree/main/frontend/src/features/followups): `frontend/src/features/followups`
- [Dashboard](https://github.com/lucas-t-neves/kawztatto/blob/main/backend/src/main/java/com/kawz/tattoo/domain/service/DashboardService.java): `backend/src/main/java/com/kawz/tattoo/domain/service/DashboardService.java`

### Application platform

- [Studio frontend](https://github.com/lucas-t-neves/kawztatto/blob/main/frontend/src/App.jsx): `frontend/src/App.jsx`
- [HTTP client](https://github.com/lucas-t-neves/kawztatto/blob/main/frontend/src/shared/model/http.js): `frontend/src/shared/model/http.js`
- [REST API](https://github.com/lucas-t-neves/kawztatto/tree/main/backend/src/main/java/com/kawz/tattoo/api/controller): `backend/src/main/java/com/kawz/tattoo/api/controller`
- [Authentication](https://github.com/lucas-t-neves/kawztatto/blob/main/backend/src/main/java/com/kawz/tattoo/config/SecurityConfig.java): `backend/src/main/java/com/kawz/tattoo/config/SecurityConfig.java`
- [API models](https://github.com/lucas-t-neves/kawztatto/blob/main/backend/src/main/java/com/kawz/tattoo/api/dto/ApiModels.java): `backend/src/main/java/com/kawz/tattoo/api/dto/ApiModels.java`
- [API mapping](https://github.com/lucas-t-neves/kawztatto/blob/main/backend/src/main/java/com/kawz/tattoo/api/dto/ApiMapper.java): `backend/src/main/java/com/kawz/tattoo/api/dto/ApiMapper.java`
- [API errors](https://github.com/lucas-t-neves/kawztatto/blob/main/backend/src/main/java/com/kawz/tattoo/api/exception/ApiExceptionHandler.java): `backend/src/main/java/com/kawz/tattoo/api/exception/ApiExceptionHandler.java`
- **Relational database**

### Other components

- **Tattoo artist**

## Connections

- Tattoo artist → Studio frontend: uses (evidence: `README.md`)
- Studio frontend → HTTP client: requests API (evidence: `frontend/src/App.jsx`)
- HTTP client → REST API: sends REST requests (evidence: `README.md`)
- REST API → Authentication: secures routes (evidence: `README.md`)
- REST API → API models: exchanges models (evidence: `backend/src/main/java/com/kawz/tattoo/api/controller/ProjetoEscopoController.java`)
- REST API → API errors: formats errors (evidence: `backend/src/main/java/com/kawz/tattoo/api/exception/ApiExceptionHandler.java`)
- Tattoo artist → Client records: manages (evidence: `README.md`)
- Client records → Client domain: loads and saves (evidence: `frontend/src/features/clients/viewmodel/useApiClientsViewModel.js`)
- Tattoo artist → Project workflow: manages (evidence: `README.md`)
- Project workflow → Project domain: uses API (evidence: `frontend/src/features/projects/viewmodel/useApiProjectsViewModel.js`)
- Project domain → API mapping: maps responses (evidence: `backend/src/main/java/com/kawz/tattoo/domain/service/ProjetoService.java`)
- Project domain → Image storage: removes image files (evidence: `backend/src/main/java/com/kawz/tattoo/domain/service/ProjetoService.java`)
- Tattoo artist → Contracts and PDFs: manages (evidence: `README.md`)
- Contracts and PDFs → PDF provider: generates PDF (evidence: `backend/src/main/java/com/kawz/tattoo/domain/service/ContratoService.java`)
- Tattoo artist → Agenda and sessions: schedules work (evidence: `README.md`)
- Agenda and sessions → Session domain: uses API (evidence: `frontend/src/features/agenda/viewmodel/useApiAgendaViewModel.js`)
- Session domain → Calendar provider: syncs events (evidence: `backend/src/main/java/com/kawz/tattoo/domain/service/SessaoService.java`)
- Tattoo artist → Finance management: tracks finances (evidence: `README.md`)
- Finance management → Financial domain: uses API
- Tattoo artist → Follow-ups: manages follow-ups (evidence: `README.md`)
- REST API → Client domain: routes client operations
- REST API → Health and preferences: routes health records (evidence: `backend/src/main/java/com/kawz/tattoo/api/controller/ProjetoEscopoController.java`)
- REST API → Project domain: routes project operations (evidence: `backend/src/main/java/com/kawz/tattoo/api/controller/ProjetoEscopoController.java`)
- REST API → Session domain: routes session operations (evidence: `backend/src/main/java/com/kawz/tattoo/api/controller/SessaoController.java`)
- REST API → Financial domain: routes transactions (evidence: `backend/src/main/java/com/kawz/tattoo/api/controller/ProjetoEscopoController.java`)
- REST API → Dashboard: serves dashboard
- Contracts and PDFs → Relational database: persists contracts
- Project domain → Relational database: persists projects
- Session domain → Relational database: persists sessions
- Financial domain → Relational database: persists transactions
- Budgets and contracts UI → HTTP client: calls shared client (evidence: `frontend/src/features/auth/model/ApiAuthRepository.js`)
