# devhome915/central-residencial architecture

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

- Interactive diagram: https://gitdiagram.com/devhome915/central-residencial
- Repository: https://github.com/devhome915/central-residencial

## Overview

Central Residencial is a LAN-hosted home-event dashboard and API: users connect with a token, view device status and event history, and can simulate or submit events; camera monitoring is a separate static page backed by MediaMTX. The backend separates HTTP entry points, application use cases, domain models, repository ports, and SQLite/WebSocket adapters. The README documents the intended event-to-panel flow and camera capabilities; source-index references and excerpts support the wiring shown, while some route and client details remain unsampled.

Main entry points: [`src/app.ts`](https://github.com/devhome915/central-residencial/blob/main/src/app.ts) (App composition), [`src/application/use-cases`](https://github.com/devhome915/central-residencial/tree/main/src/application/use-cases) (Event use cases), [`src/adapters/http/event.routes.ts`](https://github.com/devhome915/central-residencial/blob/main/src/adapters/http/event.routes.ts) (Event routes), [`src/adapters/http/device.routes.ts`](https://github.com/devhome915/central-residencial/blob/main/src/adapters/http/device.routes.ts) (Device routes)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_client["User interfaces"]
  node_dashboard["Event dashboard<br/>[app.js]"]
  node_camera_page["Camera monitor<br/>[cameras.js]"]
end

subgraph group_http["HTTP access"]
  node_event_routes["Event routes<br/>[event.routes.ts]"]
  node_event_controller["Event controller"]
  node_device_routes["Device routes<br/>[device.routes.ts]"]
  node_device_controller["Device controller"]
  node_auth["Token authentication<br/>[auth.middleware.ts]"]
end

subgraph group_application["Application logic"]
  node_composition["App composition<br/>[app.ts]"]
  node_event_service["Event service<br/>[event.service.ts]"]
  node_device_service["Device service<br/>[device.service.ts]"]
  node_event_cases["Event use cases"]
  node_device_cases["Device use cases"]
  node_event_dto["Event DTOs"]
  node_server["Node server<br/>[server.ts]"]
end

subgraph group_domain["Domain model"]
  node_device_model["Device model<br/>[device.ts]"]
  node_event_model["Event model<br/>[event.ts]"]
  node_device_port["Device repository port"]
  node_event_port["Event repository port"]
  node_publisher_port["Publisher port"]
end

subgraph group_adapters["Persistence and realtime"]
  node_sqlite_device["SQLite device adapter"]
  node_sqlite_event["SQLite event adapter"]
  node_database[("SQLite database<br/>[database.ts]")]
  node_ws_server["WebSocket server"]
  node_ws_publisher["WebSocket publisher"]
end

node_resident(("Resident"))
node_camera_streams["MediaMTX streams"]

node_resident -->|"uses"| node_dashboard
node_dashboard -->|"requests events"| node_event_routes
node_dashboard -->|"manages devices"| node_device_routes
node_resident -->|"opens monitor"| node_camera_page
node_camera_page -->|"loads streams"| node_camera_streams
node_event_routes -->|"guards routes"| node_auth
node_event_routes -->|"dispatches to"| node_event_controller
node_device_routes -->|"guards routes"| node_auth
node_device_routes -->|"dispatches to"| node_device_controller
node_event_controller -->|"calls"| node_event_service
node_device_controller -->|"calls"| node_device_service
node_composition -->|"constructs"| node_event_service
node_composition -->|"constructs"| node_device_service
node_composition -->|"mounts"| node_event_routes
node_composition -->|"mounts"| node_device_routes
node_event_service -->|"delegates to"| node_event_cases
node_device_service -->|"delegates to"| node_device_cases
node_event_cases -->|"uses"| node_event_dto
node_event_cases -->|"persists through"| node_event_port
node_event_cases -->|"publishes through"| node_publisher_port
node_event_cases -->|"looks up devices"| node_device_port
node_device_cases -->|"uses"| node_device_port
node_device_cases -->|"reads event history"| node_event_port
node_event_cases -->|"creates events"| node_event_model
node_device_cases -->|"creates devices"| node_device_model
node_composition -->|"configures"| node_sqlite_event
node_composition -->|"configures"| node_sqlite_device
node_sqlite_event -->|"reads and writes"| node_database
node_sqlite_device -->|"reads and writes"| node_database
node_sqlite_event -->|"maps events"| node_event_model
node_sqlite_device -->|"maps devices"| node_device_model
node_server -->|"starts app"| node_composition
node_server -->|"starts realtime"| node_ws_server
node_ws_server -->|"registers publisher"| node_ws_publisher
node_ws_publisher -->|"implements"| node_publisher_port
node_composition -.->|"injects publisher"| node_ws_publisher

click node_dashboard "https://github.com/devhome915/central-residencial/blob/main/public/app.js"
click node_camera_page "https://github.com/devhome915/central-residencial/blob/main/public/cameras.js"
click node_event_routes "https://github.com/devhome915/central-residencial/blob/main/src/adapters/http/event.routes.ts"
click node_event_controller "https://github.com/devhome915/central-residencial/blob/main/src/adapters/http/event.controller.ts"
click node_device_routes "https://github.com/devhome915/central-residencial/blob/main/src/adapters/http/device.routes.ts"
click node_device_controller "https://github.com/devhome915/central-residencial/blob/main/src/adapters/http/device.controller.ts"
click node_auth "https://github.com/devhome915/central-residencial/blob/main/src/middlewares/auth.middleware.ts"
click node_composition "https://github.com/devhome915/central-residencial/blob/main/src/app.ts"
click node_event_service "https://github.com/devhome915/central-residencial/blob/main/src/application/event.service.ts"
click node_device_service "https://github.com/devhome915/central-residencial/blob/main/src/application/device.service.ts"
click node_event_cases "https://github.com/devhome915/central-residencial/tree/main/src/application/use-cases"
click node_device_cases "https://github.com/devhome915/central-residencial/tree/main/src/application/use-cases"
click node_event_dto "https://github.com/devhome915/central-residencial/tree/main/src/application/dto"
click node_device_model "https://github.com/devhome915/central-residencial/blob/main/src/domain/device.ts"
click node_event_model "https://github.com/devhome915/central-residencial/blob/main/src/domain/event.ts"
click node_device_port "https://github.com/devhome915/central-residencial/blob/main/src/ports/device-repository.port.ts"
click node_event_port "https://github.com/devhome915/central-residencial/blob/main/src/ports/event-repository.port.ts"
click node_publisher_port "https://github.com/devhome915/central-residencial/blob/main/src/ports/event-publisher.port.ts"
click node_sqlite_device "https://github.com/devhome915/central-residencial/blob/main/src/adapters/repositories/sqlite-device.repository.ts"
click node_sqlite_event "https://github.com/devhome915/central-residencial/blob/main/src/adapters/repositories/sqlite-event.repository.ts"
click node_database "https://github.com/devhome915/central-residencial/blob/main/src/database/database.ts"
click node_ws_server "https://github.com/devhome915/central-residencial/blob/main/src/adapters/websocket/websocket-server.ts"
click node_ws_publisher "https://github.com/devhome915/central-residencial/blob/main/src/adapters/websocket/websocket-event.publisher.ts"
click node_server "https://github.com/devhome915/central-residencial/blob/main/src/server.ts"

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_dashboard,node_camera_page toneBlue
class node_event_routes,node_event_controller,node_device_routes,node_device_controller,node_auth toneAmber
class node_composition,node_event_service,node_device_service,node_event_cases,node_device_cases,node_event_dto,node_server toneMint
class node_device_model,node_event_model,node_device_port,node_event_port,node_publisher_port toneRose
class node_sqlite_device,node_sqlite_event,node_database,node_ws_server,node_ws_publisher,node_resident,node_camera_streams toneIndigo
```

## Components

### User interfaces

- [Event dashboard](https://github.com/devhome915/central-residencial/blob/main/public/app.js): `public/app.js`
- [Camera monitor](https://github.com/devhome915/central-residencial/blob/main/public/cameras.js): `public/cameras.js`

### HTTP access

- [Event routes](https://github.com/devhome915/central-residencial/blob/main/src/adapters/http/event.routes.ts): `src/adapters/http/event.routes.ts`
- [Event controller](https://github.com/devhome915/central-residencial/blob/main/src/adapters/http/event.controller.ts): `src/adapters/http/event.controller.ts`
- [Device routes](https://github.com/devhome915/central-residencial/blob/main/src/adapters/http/device.routes.ts): `src/adapters/http/device.routes.ts`
- [Device controller](https://github.com/devhome915/central-residencial/blob/main/src/adapters/http/device.controller.ts): `src/adapters/http/device.controller.ts`
- [Token authentication](https://github.com/devhome915/central-residencial/blob/main/src/middlewares/auth.middleware.ts): `src/middlewares/auth.middleware.ts`

### Application logic

- [App composition](https://github.com/devhome915/central-residencial/blob/main/src/app.ts): `src/app.ts`
- [Event service](https://github.com/devhome915/central-residencial/blob/main/src/application/event.service.ts): `src/application/event.service.ts`
- [Device service](https://github.com/devhome915/central-residencial/blob/main/src/application/device.service.ts): `src/application/device.service.ts`
- [Event use cases](https://github.com/devhome915/central-residencial/tree/main/src/application/use-cases): `src/application/use-cases`
- [Device use cases](https://github.com/devhome915/central-residencial/tree/main/src/application/use-cases): `src/application/use-cases`
- [Event DTOs](https://github.com/devhome915/central-residencial/tree/main/src/application/dto): `src/application/dto`
- [Node server](https://github.com/devhome915/central-residencial/blob/main/src/server.ts): `src/server.ts`

### Domain model

- [Device model](https://github.com/devhome915/central-residencial/blob/main/src/domain/device.ts): `src/domain/device.ts`
- [Event model](https://github.com/devhome915/central-residencial/blob/main/src/domain/event.ts): `src/domain/event.ts`
- [Device repository port](https://github.com/devhome915/central-residencial/blob/main/src/ports/device-repository.port.ts): `src/ports/device-repository.port.ts`
- [Event repository port](https://github.com/devhome915/central-residencial/blob/main/src/ports/event-repository.port.ts): `src/ports/event-repository.port.ts`
- [Publisher port](https://github.com/devhome915/central-residencial/blob/main/src/ports/event-publisher.port.ts): `src/ports/event-publisher.port.ts`

### Persistence and realtime

- [SQLite device adapter](https://github.com/devhome915/central-residencial/blob/main/src/adapters/repositories/sqlite-device.repository.ts): `src/adapters/repositories/sqlite-device.repository.ts`
- [SQLite event adapter](https://github.com/devhome915/central-residencial/blob/main/src/adapters/repositories/sqlite-event.repository.ts): `src/adapters/repositories/sqlite-event.repository.ts`
- [SQLite database](https://github.com/devhome915/central-residencial/blob/main/src/database/database.ts): `src/database/database.ts`
- [WebSocket server](https://github.com/devhome915/central-residencial/blob/main/src/adapters/websocket/websocket-server.ts): `src/adapters/websocket/websocket-server.ts`
- [WebSocket publisher](https://github.com/devhome915/central-residencial/blob/main/src/adapters/websocket/websocket-event.publisher.ts): `src/adapters/websocket/websocket-event.publisher.ts`

### Other components

- **Resident**
- **MediaMTX streams**

## Connections

- Resident → Event dashboard: uses (evidence: `README.md`)
- Event dashboard → Event routes: requests events (evidence: `README.md`)
- Event dashboard → Device routes: manages devices (evidence: `README.md`)
- Resident → Camera monitor: opens monitor (evidence: `README.md`)
- Camera monitor → MediaMTX streams: loads streams (evidence: `README.md`)
- Event routes → Token authentication: guards routes (evidence: `src/adapters/http/event.routes.ts`)
- Event routes → Event controller: dispatches to (evidence: `src/adapters/http/event.routes.ts`)
- Device routes → Token authentication: guards routes (evidence: `src/adapters/http/device.routes.ts`)
- Device routes → Device controller: dispatches to (evidence: `src/adapters/http/device.routes.ts`)
- Event controller → Event service: calls (evidence: `src/adapters/http/event.controller.ts`)
- Device controller → Device service: calls (evidence: `src/adapters/http/device.controller.ts`)
- App composition → Event service: constructs (evidence: `src/app.ts`)
- App composition → Device service: constructs (evidence: `src/app.ts`)
- App composition → Event routes: mounts (evidence: `src/app.ts`)
- App composition → Device routes: mounts (evidence: `src/app.ts`)
- Event service → Event use cases: delegates to (evidence: `src/application/event.service.ts`)
- Device service → Device use cases: delegates to (evidence: `src/application/device.service.ts`)
- Event use cases → Event DTOs: uses (evidence: `src/application/use-cases/create-event.use-case.ts`)
- Event use cases → Event repository port: persists through (evidence: `src/application/use-cases/create-event.use-case.ts`)
- Event use cases → Publisher port: publishes through (evidence: `src/application/use-cases/create-event.use-case.ts`)
- Event use cases → Device repository port: looks up devices (evidence: `src/application/use-cases/create-event.use-case.ts`)
- Device use cases → Device repository port: uses (evidence: `src/application/use-cases/create-device.use-case.ts`)
- Device use cases → Event repository port: reads event history (evidence: `src/application/use-cases/list-devices.use-case.ts`)
- Event use cases → Event model: creates events (evidence: `src/application/use-cases/create-event.use-case.ts`)
- Device use cases → Device model: creates devices (evidence: `src/application/use-cases/create-device.use-case.ts`)
- App composition → SQLite event adapter: configures (evidence: `src/app.ts`)
- App composition → SQLite device adapter: configures (evidence: `src/app.ts`)
- SQLite event adapter → SQLite database: reads and writes (evidence: `src/adapters/repositories/sqlite-event.repository.ts`)
- SQLite device adapter → SQLite database: reads and writes (evidence: `src/adapters/repositories/sqlite-device.repository.ts`)
- SQLite event adapter → Event model: maps events (evidence: `src/adapters/repositories/sqlite-event.repository.ts`)
- SQLite device adapter → Device model: maps devices (evidence: `src/adapters/repositories/sqlite-device.repository.ts`)
- Node server → App composition: starts app (evidence: `src/server.ts`)
- Node server → WebSocket server: starts realtime (evidence: `src/server.ts`)
- WebSocket server → WebSocket publisher: registers publisher (evidence: `src/adapters/websocket/websocket-server.ts`)
- WebSocket publisher → Publisher port: implements (evidence: `src/adapters/websocket/websocket-event.publisher.ts`)
- App composition → WebSocket publisher: injects publisher
