# kelvnnicolas/saudeconecta architecture

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

- Interactive diagram: https://gitdiagram.com/kelvnnicolas/saudeconecta
- Repository: https://github.com/kelvnnicolas/saudeconecta

## Overview

SaúdeConecta is a two-sided healthcare-services marketplace: professionals create profiles and are discovered by people and organizations seeking care, who can contact and later review them. Businesses also subscribe to publish demands; compatible professionals can express interest, creating an ordinary contact. The Next.js screens use the API client to reach the FastAPI backend, with Supabase handling sign-in and avatar storage and Stripe/Resend supporting billing and email. Relationships for unsampled routes and services follow README-documented capabilities; detailed internal wiring is shown only where source excerpts support it.

Main entry points: [`apps/api/app/models`](https://github.com/kelvnnicolas/saudeconecta/tree/main/apps/api/app/models) (Domain models), [`apps/api/app/routers`](https://github.com/kelvnnicolas/saudeconecta/tree/main/apps/api/app/routers) (Marketplace routes), [`apps/api/app/main.py`](https://github.com/kelvnnicolas/saudeconecta/blob/main/apps/api/app/main.py) (FastAPI app), [`apps/web/app`](https://github.com/kelvnnicolas/saudeconecta/tree/main/apps/web/app) (Web screens)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_web["Web application"]
  node_webpages["Web screens"]
  node_webapi["API client<br/>[api.ts]"]
  node_supaclient["Auth client<br/>[supabase-client.ts]"]
end

subgraph group_market["Marketplace"]
  node_marketplaces["Marketplace routes"]
  node_profile["Profile service<br/>[profile_service.py]"]
  node_professionals["Professional search"]
  node_contacts["Contact service<br/>[contato_service.py]"]
  node_reviews["Review service"]
end

subgraph group_business["Business features"]
  node_businessroutes["Business routes"]
  node_analyticsroute["Analytics route<br/>[analytics.py]"]
  node_billing["Billing service<br/>[billing.py]"]
  node_demands["Demand service<br/>[demandas.py]"]
  node_analytics["Report service"]
  node_reports["Report calculations<br/>[relatorio.py]"]
end

subgraph group_platform["Platform services"]
  node_api["FastAPI app<br/>[main.py]"]
  node_authroutes["Auth routes<br/>[auth.py]"]
  node_models["Domain models"]
  node_database[("Postgres database")]
end

node_visitor(("Marketplace users"))
node_supabaseauth["Supabase Auth"]
node_jwks["Supabase JWKS"]
node_storage["Supabase Storage"]
node_stripe["Stripe"]
node_resend["Resend email"]

node_visitor -->|"uses"| node_webpages
node_webpages -->|"calls"| node_webapi
node_webpages -->|"signs in"| node_supaclient
node_supaclient -->|"authenticates"| node_supabaseauth
node_webapi -->|"sends requests"| node_api
node_api -->|"dispatches"| node_authroutes
node_api -->|"dispatches"| node_marketplaces
node_api -->|"dispatches"| node_businessroutes
node_api -->|"dispatches"| node_analyticsroute
node_authroutes -->|"validates tokens"| node_jwks
node_marketplaces -->|"handles profiles"| node_profile
node_marketplaces -->|"searches"| node_professionals
node_marketplaces -->|"records contacts"| node_contacts
node_marketplaces -->|"creates reviews"| node_reviews
node_businessroutes -->|"handles billing"| node_billing
node_businessroutes -->|"handles demands"| node_demands
node_analyticsroute -->|"builds reports"| node_analytics
node_analytics -->|"calculates metrics"| node_reports
node_profile -->|"uploads avatars"| node_storage
node_contacts -.->|"sends email"| node_resend
node_billing -->|"manages subscriptions"| node_stripe
node_authroutes -->|"syncs profiles"| node_models
node_profile -->|"reads and writes"| node_models
node_professionals -->|"searches"| node_models
node_contacts -->|"reads and writes"| node_models
node_reviews -->|"reads and writes"| node_models
node_billing -->|"reads and writes"| node_models
node_demands -->|"reads and writes"| node_models
node_analytics -->|"reads metrics"| node_models
node_models -->|"persisted in"| node_database

click node_webpages "https://github.com/kelvnnicolas/saudeconecta/tree/main/apps/web/app"
click node_webapi "https://github.com/kelvnnicolas/saudeconecta/blob/main/apps/web/lib/api.ts"
click node_supaclient "https://github.com/kelvnnicolas/saudeconecta/blob/main/apps/web/lib/supabase-client.ts"
click node_api "https://github.com/kelvnnicolas/saudeconecta/blob/main/apps/api/app/main.py"
click node_authroutes "https://github.com/kelvnnicolas/saudeconecta/blob/main/apps/api/app/routers/auth.py"
click node_marketplaces "https://github.com/kelvnnicolas/saudeconecta/tree/main/apps/api/app/routers"
click node_businessroutes "https://github.com/kelvnnicolas/saudeconecta/tree/main/apps/api/app/routers"
click node_analyticsroute "https://github.com/kelvnnicolas/saudeconecta/blob/main/apps/api/app/routers/analytics.py"
click node_profile "https://github.com/kelvnnicolas/saudeconecta/blob/main/apps/api/app/services/profile_service.py"
click node_professionals "https://github.com/kelvnnicolas/saudeconecta/blob/main/apps/api/app/services/profissional_service.py"
click node_contacts "https://github.com/kelvnnicolas/saudeconecta/blob/main/apps/api/app/services/contato_service.py"
click node_reviews "https://github.com/kelvnnicolas/saudeconecta/blob/main/apps/api/app/services/avaliacao_service.py"
click node_billing "https://github.com/kelvnnicolas/saudeconecta/blob/main/apps/api/app/services/billing.py"
click node_demands "https://github.com/kelvnnicolas/saudeconecta/blob/main/apps/api/app/services/demandas.py"
click node_analytics "https://github.com/kelvnnicolas/saudeconecta/blob/main/apps/api/app/services/relatorio_service.py"
click node_models "https://github.com/kelvnnicolas/saudeconecta/tree/main/apps/api/app/models"
click node_reports "https://github.com/kelvnnicolas/saudeconecta/blob/main/apps/api/app/analytics/relatorio.py"

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_webpages,node_webapi,node_supaclient,node_visitor toneBlue
class node_marketplaces,node_profile,node_professionals,node_contacts,node_reviews,node_storage toneAmber
class node_businessroutes,node_analyticsroute,node_billing,node_demands,node_analytics,node_reports toneMint
class node_api,node_authroutes,node_models,node_database toneRose
class node_supabaseauth,node_jwks,node_stripe,node_resend toneIndigo
```

## Components

### Web application

- [Web screens](https://github.com/kelvnnicolas/saudeconecta/tree/main/apps/web/app): `apps/web/app`
- [API client](https://github.com/kelvnnicolas/saudeconecta/blob/main/apps/web/lib/api.ts): `apps/web/lib/api.ts`
- [Auth client](https://github.com/kelvnnicolas/saudeconecta/blob/main/apps/web/lib/supabase-client.ts): `apps/web/lib/supabase-client.ts`

### Marketplace

- [Marketplace routes](https://github.com/kelvnnicolas/saudeconecta/tree/main/apps/api/app/routers): `apps/api/app/routers`
- [Profile service](https://github.com/kelvnnicolas/saudeconecta/blob/main/apps/api/app/services/profile_service.py): `apps/api/app/services/profile_service.py`
- [Professional search](https://github.com/kelvnnicolas/saudeconecta/blob/main/apps/api/app/services/profissional_service.py): `apps/api/app/services/profissional_service.py`
- [Contact service](https://github.com/kelvnnicolas/saudeconecta/blob/main/apps/api/app/services/contato_service.py): `apps/api/app/services/contato_service.py`
- [Review service](https://github.com/kelvnnicolas/saudeconecta/blob/main/apps/api/app/services/avaliacao_service.py): `apps/api/app/services/avaliacao_service.py`

### Business features

- [Business routes](https://github.com/kelvnnicolas/saudeconecta/tree/main/apps/api/app/routers): `apps/api/app/routers`
- [Analytics route](https://github.com/kelvnnicolas/saudeconecta/blob/main/apps/api/app/routers/analytics.py): `apps/api/app/routers/analytics.py`
- [Billing service](https://github.com/kelvnnicolas/saudeconecta/blob/main/apps/api/app/services/billing.py): `apps/api/app/services/billing.py`
- [Demand service](https://github.com/kelvnnicolas/saudeconecta/blob/main/apps/api/app/services/demandas.py): `apps/api/app/services/demandas.py`
- [Report service](https://github.com/kelvnnicolas/saudeconecta/blob/main/apps/api/app/services/relatorio_service.py): `apps/api/app/services/relatorio_service.py`
- [Report calculations](https://github.com/kelvnnicolas/saudeconecta/blob/main/apps/api/app/analytics/relatorio.py): `apps/api/app/analytics/relatorio.py`

### Platform services

- [FastAPI app](https://github.com/kelvnnicolas/saudeconecta/blob/main/apps/api/app/main.py): `apps/api/app/main.py`
- [Auth routes](https://github.com/kelvnnicolas/saudeconecta/blob/main/apps/api/app/routers/auth.py): `apps/api/app/routers/auth.py`
- [Domain models](https://github.com/kelvnnicolas/saudeconecta/tree/main/apps/api/app/models): `apps/api/app/models`
- **Postgres database**

### Other components

- **Marketplace users**
- **Supabase Auth**
- **Supabase JWKS**
- **Supabase Storage**
- **Stripe**
- **Resend email**

## Connections

- Marketplace users → Web screens: uses
- Web screens → API client: calls
- Web screens → Auth client: signs in
- Auth client → Supabase Auth: authenticates
- API client → FastAPI app: sends requests
- FastAPI app → Auth routes: dispatches
- FastAPI app → Marketplace routes: dispatches
- FastAPI app → Business routes: dispatches
- FastAPI app → Analytics route: dispatches
- Auth routes → Supabase JWKS: validates tokens
- Marketplace routes → Profile service: handles profiles
- Marketplace routes → Professional search: searches
- Marketplace routes → Contact service: records contacts
- Marketplace routes → Review service: creates reviews
- Business routes → Billing service: handles billing
- Business routes → Demand service: handles demands
- Analytics route → Report service: builds reports
- Report service → Report calculations: calculates metrics
- Profile service → Supabase Storage: uploads avatars
- Contact service → Resend email: sends email
- Billing service → Stripe: manages subscriptions
- Auth routes → Domain models: syncs profiles
- Profile service → Domain models: reads and writes
- Professional search → Domain models: searches
- Contact service → Domain models: reads and writes
- Review service → Domain models: reads and writes
- Billing service → Domain models: reads and writes
- Demand service → Domain models: reads and writes
- Report service → Domain models: reads metrics
- Domain models → Postgres database: persisted in
