# nathan-oliveira/semana_omnistack_8 architecture

> Architecture diagram of the GitHub repository nathan-oliveira/semana_omnistack_8, 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/nathan-oliveira/semana_omnistack_8
- Repository: https://github.com/nathan-oliveira/semana_omnistack_8

## Overview

Tindev is a developer-discovery and mutual-like matching app with web and React Native clients backed by an Express/MongoDB service. Users enter through a login view, browse developers, like or dislike profiles, and see a match when likes are mutual. The sampled source confirms profile lookup/creation, browsing filters, reactions, and Socket.IO match delivery. Login internals and the data model definition were not sampled, so their detailed wiring is not represented.

Main entry points: [`backend/src/routes.js`](https://github.com/nathan-oliveira/semana_omnistack_8/blob/master/backend/src/routes.js) (API Routes), [`backend/src/server.js`](https://github.com/nathan-oliveira/semana_omnistack_8/blob/master/backend/src/server.js) (HTTP Server), [`backend/src/models/Dev.js`](https://github.com/nathan-oliveira/semana_omnistack_8/blob/master/backend/src/models/Dev.js) (Developer Model), [`frontend/src/routes.js`](https://github.com/nathan-oliveira/semana_omnistack_8/blob/master/frontend/src/routes.js) (Web Routes)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_clients["Client Apps"]
  node_web_routes["Web Routes<br/>[routes.js]"]
  node_web_login["Web Login<br/>[Login.js]"]
  node_web_main["Web Discovery<br/>[Main.js]"]
  node_web_api["Web API Client<br/>[api.js]"]
  node_native_routes["Mobile Routes<br/>[routes.js]"]
  node_native_login["Mobile Login<br/>[Login.js]"]
  node_native_main["Mobile Discovery<br/>[Main.js]"]
  node_native_api["Mobile API Client<br/>[api.js]"]
end

subgraph group_service["Backend Service"]
  node_server["HTTP Server<br/>[server.js]"]
  node_routes["API Routes<br/>[routes.js]"]
  node_dev_controller["Profile Controller<br/>[DevController.js]"]
  node_like_controller["Like Controller<br/>[LikeController.js]"]
  node_dislike_controller["Dislike Controller"]
end

subgraph group_state["Profiles and State"]
  node_dev_model["Developer Model<br/>[Dev.js]"]
  node_mongo[("MongoDB")]
end

subgraph group_realtime["Match Notifications"]
  node_socket["Socket.IO<br/>[server.js]"]
end

node_person(("User"))
node_github["GitHub API"]

node_person -->|"opens"| node_web_routes
node_person -->|"opens"| node_native_routes
node_web_routes -->|"routes to"| node_web_login
node_web_routes -->|"routes to"| node_web_main
node_native_routes -->|"routes to"| node_native_login
node_native_routes -->|"routes to"| node_native_main
node_web_main -->|"requests"| node_web_api
node_native_main -->|"requests"| node_native_api
node_web_api -->|"HTTP calls"| node_server
node_native_api -->|"HTTP calls"| node_server
node_server -->|"dispatches"| node_routes
node_routes -->|"dispatches"| node_dev_controller
node_routes -->|"dispatches"| node_like_controller
node_routes -->|"dispatches"| node_dislike_controller
node_dev_controller -->|"queries"| node_dev_model
node_like_controller -->|"queries and saves"| node_dev_model
node_dislike_controller -->|"queries and saves"| node_dev_model
node_dev_model -->|"persists"| node_mongo
node_dev_controller -->|"fetches profiles"| node_github
node_server -->|"accepts connections"| node_socket
node_like_controller -->|"emits match"| node_socket
node_web_main -->|"listens for match"| node_socket
node_native_main -->|"listens for match"| node_socket

click node_web_routes "https://github.com/nathan-oliveira/semana_omnistack_8/blob/master/frontend/src/routes.js"
click node_web_login "https://github.com/nathan-oliveira/semana_omnistack_8/blob/master/frontend/src/pages/Login.js"
click node_web_main "https://github.com/nathan-oliveira/semana_omnistack_8/blob/master/frontend/src/pages/Main.js"
click node_web_api "https://github.com/nathan-oliveira/semana_omnistack_8/blob/master/frontend/src/services/api.js"
click node_native_routes "https://github.com/nathan-oliveira/semana_omnistack_8/blob/master/tindev/src/routes.js"
click node_native_login "https://github.com/nathan-oliveira/semana_omnistack_8/blob/master/tindev/src/pages/Login.js"
click node_native_main "https://github.com/nathan-oliveira/semana_omnistack_8/blob/master/tindev/src/pages/Main.js"
click node_native_api "https://github.com/nathan-oliveira/semana_omnistack_8/blob/master/tindev/src/services/api.js"
click node_server "https://github.com/nathan-oliveira/semana_omnistack_8/blob/master/backend/src/server.js"
click node_routes "https://github.com/nathan-oliveira/semana_omnistack_8/blob/master/backend/src/routes.js"
click node_dev_controller "https://github.com/nathan-oliveira/semana_omnistack_8/blob/master/backend/src/controllers/DevController.js"
click node_like_controller "https://github.com/nathan-oliveira/semana_omnistack_8/blob/master/backend/src/controllers/LikeController.js"
click node_dislike_controller "https://github.com/nathan-oliveira/semana_omnistack_8/blob/master/backend/src/controllers/DislikeController.js"
click node_dev_model "https://github.com/nathan-oliveira/semana_omnistack_8/blob/master/backend/src/models/Dev.js"
click node_socket "https://github.com/nathan-oliveira/semana_omnistack_8/blob/master/backend/src/server.js"

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_web_routes,node_web_login,node_web_main,node_web_api,node_native_routes,node_native_login,node_native_main,node_native_api,node_person toneBlue
class node_server,node_routes,node_dev_controller,node_like_controller,node_dislike_controller toneAmber
class node_dev_model,node_mongo,node_github toneMint
class node_socket toneRose
```

## Components

### Client Apps

- [Web Routes](https://github.com/nathan-oliveira/semana_omnistack_8/blob/master/frontend/src/routes.js): `frontend/src/routes.js`
- [Web Login](https://github.com/nathan-oliveira/semana_omnistack_8/blob/master/frontend/src/pages/Login.js): `frontend/src/pages/Login.js`
- [Web Discovery](https://github.com/nathan-oliveira/semana_omnistack_8/blob/master/frontend/src/pages/Main.js): `frontend/src/pages/Main.js`
- [Web API Client](https://github.com/nathan-oliveira/semana_omnistack_8/blob/master/frontend/src/services/api.js): `frontend/src/services/api.js`
- [Mobile Routes](https://github.com/nathan-oliveira/semana_omnistack_8/blob/master/tindev/src/routes.js): `tindev/src/routes.js`
- [Mobile Login](https://github.com/nathan-oliveira/semana_omnistack_8/blob/master/tindev/src/pages/Login.js): `tindev/src/pages/Login.js`
- [Mobile Discovery](https://github.com/nathan-oliveira/semana_omnistack_8/blob/master/tindev/src/pages/Main.js): `tindev/src/pages/Main.js`
- [Mobile API Client](https://github.com/nathan-oliveira/semana_omnistack_8/blob/master/tindev/src/services/api.js): `tindev/src/services/api.js`

### Backend Service

- [HTTP Server](https://github.com/nathan-oliveira/semana_omnistack_8/blob/master/backend/src/server.js): `backend/src/server.js`
- [API Routes](https://github.com/nathan-oliveira/semana_omnistack_8/blob/master/backend/src/routes.js): `backend/src/routes.js`
- [Profile Controller](https://github.com/nathan-oliveira/semana_omnistack_8/blob/master/backend/src/controllers/DevController.js): `backend/src/controllers/DevController.js`
- [Like Controller](https://github.com/nathan-oliveira/semana_omnistack_8/blob/master/backend/src/controllers/LikeController.js): `backend/src/controllers/LikeController.js`
- [Dislike Controller](https://github.com/nathan-oliveira/semana_omnistack_8/blob/master/backend/src/controllers/DislikeController.js): `backend/src/controllers/DislikeController.js`

### Profiles and State

- [Developer Model](https://github.com/nathan-oliveira/semana_omnistack_8/blob/master/backend/src/models/Dev.js): `backend/src/models/Dev.js`
- **MongoDB**

### Match Notifications

- [Socket.IO](https://github.com/nathan-oliveira/semana_omnistack_8/blob/master/backend/src/server.js): `backend/src/server.js`

### Other components

- **User**
- **GitHub API**

## Connections

- User → Web Routes: opens
- User → Mobile Routes: opens
- Web Routes → Web Login: routes to
- Web Routes → Web Discovery: routes to
- Mobile Routes → Mobile Login: routes to
- Mobile Routes → Mobile Discovery: routes to
- Web Discovery → Web API Client: requests
- Mobile Discovery → Mobile API Client: requests
- Web API Client → HTTP Server: HTTP calls
- Mobile API Client → HTTP Server: HTTP calls
- HTTP Server → API Routes: dispatches
- API Routes → Profile Controller: dispatches
- API Routes → Like Controller: dispatches
- API Routes → Dislike Controller: dispatches
- Profile Controller → Developer Model: queries
- Like Controller → Developer Model: queries and saves
- Dislike Controller → Developer Model: queries and saves
- Developer Model → MongoDB: persists
- Profile Controller → GitHub API: fetches profiles
- HTTP Server → Socket.IO: accepts connections
- Like Controller → Socket.IO: emits match
- Web Discovery → Socket.IO: listens for match
- Mobile Discovery → Socket.IO: listens for match
