# vickykriger/rutaverde_backend architecture

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

- Interactive diagram: https://gitdiagram.com/vickykriger/rutaverde_backend
- Repository: https://github.com/vickykriger/rutaverde_backend

## Overview

RutaVerde is an Express backend for account access, ecological region and native-plant browsing, and user-submitted tile contributions. A client sends requests to the server, which dispatches them through route modules to controllers and services. Registration and login validate credentials and access user records; region endpoints return region data and plant associations; tile submission validates metadata, resolves a plant, uploads an image, and records the contribution. The server also serves ecoregion data from a local JSON file. Source excerpts were unavailable for the Supabase configuration and upload middleware, so their internal behavior is not detailed.

Main entry points: [`index.js`](https://github.com/vickykriger/rutaverde_backend/blob/main/index.js) (Express server), [`src/services/baldosaService.js`](https://github.com/vickykriger/rutaverde_backend/blob/main/src/services/baldosaService.js) (Tile service), [`src/services/authService.js`](https://github.com/vickykriger/rutaverde_backend/blob/main/src/services/authService.js) (Auth service), [`src/services/regionService.js`](https://github.com/vickykriger/rutaverde_backend/blob/main/src/services/regionService.js) (Region service)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_server["API server"]
  node_server["Express server<br/>[index.js]"]
end

subgraph group_identity["Account access"]
  node_auth_routes["Auth routes<br/>[authRoutes.js]"]
  node_auth_controller["Auth controller<br/>[authController.js]"]
  node_auth_service["Auth service<br/>[authService.js]"]
end

subgraph group_ecology["Ecological catalog"]
  node_region_routes["Region routes<br/>[regionRoutes.js]"]
  node_region_controller["Region controller"]
  node_region_service["Region service<br/>[regionService.js]"]
  node_ecoregion_file["Ecoregion data<br/>[ecorregiones.json]"]
end

subgraph group_contributions["Tile contributions"]
  node_baldosa_routes["Tile routes<br/>[baldosaRoutes.js]"]
  node_upload_middleware["Image upload<br/>[multer.js]"]
  node_baldosa_controller["Tile controller"]
  node_baldosa_service["Tile service<br/>[baldosaService.js]"]
end

subgraph group_data["Data services"]
  node_supabase_config["Supabase client<br/>[supabase.js]"]
  node_database[("Supabase database")]
  node_storage[("Supabase image storage")]
end

node_client(("API client"))

node_client -->|"sends requests"| node_server
node_server -->|"mounts routes"| node_auth_routes
node_server -->|"mounts routes"| node_region_routes
node_server -->|"mounts routes"| node_baldosa_routes
node_auth_routes -->|"dispatches"| node_auth_controller
node_auth_controller -->|"calls"| node_auth_service
node_auth_service -->|"uses client"| node_supabase_config
node_auth_service -->|"reads/writes users"| node_database
node_region_routes -->|"dispatches"| node_region_controller
node_region_controller -->|"calls"| node_region_service
node_region_service -->|"uses client"| node_supabase_config
node_region_service -->|"reads regions"| node_database
node_baldosa_routes -->|"processes image"| node_upload_middleware
node_baldosa_routes -->|"dispatches"| node_baldosa_controller
node_baldosa_controller -->|"calls"| node_baldosa_service
node_baldosa_service -->|"uses client"| node_supabase_config
node_baldosa_service -->|"looks up plant"| node_database
node_baldosa_service -->|"uploads image"| node_storage
node_baldosa_service -->|"writes tile"| node_database
node_server -->|"reads data"| node_ecoregion_file

click node_server "https://github.com/vickykriger/rutaverde_backend/blob/main/index.js"
click node_auth_routes "https://github.com/vickykriger/rutaverde_backend/blob/main/src/routes/authRoutes.js"
click node_auth_controller "https://github.com/vickykriger/rutaverde_backend/blob/main/src/controllers/authController.js"
click node_auth_service "https://github.com/vickykriger/rutaverde_backend/blob/main/src/services/authService.js"
click node_region_routes "https://github.com/vickykriger/rutaverde_backend/blob/main/src/routes/regionRoutes.js"
click node_region_controller "https://github.com/vickykriger/rutaverde_backend/blob/main/src/controllers/regionController.js"
click node_region_service "https://github.com/vickykriger/rutaverde_backend/blob/main/src/services/regionService.js"
click node_baldosa_routes "https://github.com/vickykriger/rutaverde_backend/blob/main/src/routes/baldosaRoutes.js"
click node_upload_middleware "https://github.com/vickykriger/rutaverde_backend/blob/main/src/middlewares/multer.js"
click node_baldosa_controller "https://github.com/vickykriger/rutaverde_backend/blob/main/src/controllers/baldosaController.js"
click node_baldosa_service "https://github.com/vickykriger/rutaverde_backend/blob/main/src/services/baldosaService.js"
click node_supabase_config "https://github.com/vickykriger/rutaverde_backend/blob/main/src/config/supabase.js"
click node_ecoregion_file "https://github.com/vickykriger/rutaverde_backend/blob/main/ecorregiones.json"

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_auth_routes,node_auth_controller,node_auth_service toneAmber
class node_region_routes,node_region_controller,node_region_service,node_ecoregion_file toneMint
class node_baldosa_routes,node_upload_middleware,node_baldosa_controller,node_baldosa_service toneRose
class node_supabase_config,node_database,node_storage toneIndigo
```

## Components

### API server

- [Express server](https://github.com/vickykriger/rutaverde_backend/blob/main/index.js): `index.js`

### Account access

- [Auth routes](https://github.com/vickykriger/rutaverde_backend/blob/main/src/routes/authRoutes.js): `src/routes/authRoutes.js`
- [Auth controller](https://github.com/vickykriger/rutaverde_backend/blob/main/src/controllers/authController.js): `src/controllers/authController.js`
- [Auth service](https://github.com/vickykriger/rutaverde_backend/blob/main/src/services/authService.js): `src/services/authService.js`

### Ecological catalog

- [Region routes](https://github.com/vickykriger/rutaverde_backend/blob/main/src/routes/regionRoutes.js): `src/routes/regionRoutes.js`
- [Region controller](https://github.com/vickykriger/rutaverde_backend/blob/main/src/controllers/regionController.js): `src/controllers/regionController.js`
- [Region service](https://github.com/vickykriger/rutaverde_backend/blob/main/src/services/regionService.js): `src/services/regionService.js`
- [Ecoregion data](https://github.com/vickykriger/rutaverde_backend/blob/main/ecorregiones.json): `ecorregiones.json`

### Tile contributions

- [Tile routes](https://github.com/vickykriger/rutaverde_backend/blob/main/src/routes/baldosaRoutes.js): `src/routes/baldosaRoutes.js`
- [Image upload](https://github.com/vickykriger/rutaverde_backend/blob/main/src/middlewares/multer.js): `src/middlewares/multer.js`
- [Tile controller](https://github.com/vickykriger/rutaverde_backend/blob/main/src/controllers/baldosaController.js): `src/controllers/baldosaController.js`
- [Tile service](https://github.com/vickykriger/rutaverde_backend/blob/main/src/services/baldosaService.js): `src/services/baldosaService.js`

### Data services

- [Supabase client](https://github.com/vickykriger/rutaverde_backend/blob/main/src/config/supabase.js): `src/config/supabase.js`
- **Supabase database**
- **Supabase image storage**

### Other components

- **API client**

## Connections

- API client → Express server: sends requests
- Express server → Auth routes: mounts routes
- Express server → Region routes: mounts routes
- Express server → Tile routes: mounts routes
- Auth routes → Auth controller: dispatches
- Auth controller → Auth service: calls
- Auth service → Supabase client: uses client
- Auth service → Supabase database: reads/writes users
- Region routes → Region controller: dispatches
- Region controller → Region service: calls
- Region service → Supabase client: uses client
- Region service → Supabase database: reads regions
- Tile routes → Image upload: processes image
- Tile routes → Tile controller: dispatches
- Tile controller → Tile service: calls
- Tile service → Supabase client: uses client
- Tile service → Supabase database: looks up plant
- Tile service → Supabase image storage: uploads image
- Tile service → Supabase database: writes tile
- Express server → Ecoregion data: reads data
