# puj-course/fis_2630_1204_g4 architecture

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

- Interactive diagram: https://gitdiagram.com/puj-course/fis_2630_1204_g4
- Repository: https://github.com/puj-course/fis_2630_1204_g4

## Overview

SignIA is a web platform for learning and recognizing the Colombian Sign Language alphabet. The main practice flow captures camera frames, requests recognition, presents the detected letter, and records practice results and learning progress. The backend also supports accounts, profiles, sessions, history, administration, and password recovery. Recognition and practice orchestration are shown where the index or excerpts support them; many route and service implementations were not sampled, so uncertain links are omitted.

Main entry points: [`src/front/srcFront/hooks/useReconocimiento.ts`](https://github.com/puj-course/fis_2630_1204_g4/blob/main/src/front/srcFront/hooks/useReconocimiento.ts) (Recognition polling), [`app/main.py`](https://github.com/puj-course/fis_2630_1204_g4/blob/main/app/main.py) (FastAPI entry), [`app/services/vision_service.py`](https://github.com/puj-course/fis_2630_1204_g4/blob/main/app/services/vision_service.py) (Vision service), [`app/services/resultados_service.py`](https://github.com/puj-course/fis_2630_1204_g4/blob/main/app/services/resultados_service.py) (Practice results)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_client["Web client"]
  node_app["App navigation<br/>[App.tsx]"]
  node_practice["Practice screen<br/>[Practica.tsx]"]
  node_camera["Camera capture<br/>[useCamara.ts]"]
  node_recognition_hook["Recognition polling"]
  node_result_view["Recognition result"]
  node_web_vision["Vision API client<br/>[vision.ts]"]
  node_practice_facade["Practice recorder"]
end

subgraph group_api["API and identity"]
  node_api_entry["FastAPI entry<br/>[main.py]"]
  node_auth_routes["Authentication routes<br/>[autenticacion.py]"]
  node_identity["Authentication service"]
  node_security["Token security<br/>[security.py]"]
  node_other_routes["Domain API routes"]
end

subgraph group_recognition["Sign recognition"]
  node_vision_route["Vision route<br/>[vision.py]"]
  node_vision_service["Vision service<br/>[vision_service.py]"]
  node_recognition_engine["Recognition engine<br/>[reconocimiento.py]"]
  node_detector_manager["Detector manager"]
  node_vowels["Vowel recognition<br/>[vocales.py]"]
end

subgraph group_learning["Practice and learning"]
  node_result_service["Practice results"]
  node_progress_service["Learning progress"]
  node_attempt_service["Attempt tracking"]
  node_learning_service["Learning evaluation"]
  node_repository["Learning repository"]
end

subgraph group_persistence["Data and integrations"]
  node_database[("PostgreSQL<br/>[database.py]")]
  node_recovery_mail["Recovery email"]
  node_microsoft_oauth["Microsoft OAuth"]
end

node_user(("Learner"))

node_user -->|"uses"| node_app
node_app -->|"routes to"| node_practice
node_practice -.->|"captures with"| node_camera
node_practice -.->|"uses"| node_recognition_hook
node_recognition_hook -->|"requests recognition"| node_web_vision
node_recognition_hook -->|"captures frames"| node_camera
node_web_vision -.->|"calls backend"| node_api_entry
node_recognition_hook -->|"updates result"| node_result_view
node_api_entry -->|"registers route"| node_auth_routes
node_api_entry -->|"registers route"| node_vision_route
node_api_entry -->|"registers routes"| node_other_routes
node_auth_routes -->|"delegates authentication"| node_identity
node_auth_routes -->|"checks tokens"| node_security
node_security -->|"loads user"| node_identity
node_security -->|"checks revocation"| node_database
node_vision_route -.->|"delegates recognition"| node_vision_service
node_vision_service -->|"uses detectors"| node_detector_manager
node_vision_service -->|"uses recognition"| node_recognition_engine
node_vision_service -->|"closes detectors"| node_app
node_user -.->|"submits practice"| node_practice_facade
node_practice_facade -.->|"records result"| node_result_service
node_practice_facade -.->|"records progress"| node_progress_service
node_result_service -->|"registers attempt"| node_attempt_service
node_result_service -->|"evaluates learning"| node_learning_service
node_progress_service -->|"reads and writes"| node_database
node_result_service -->|"reads and writes"| node_database
node_identity -->|"connects through"| node_database
node_recovery_mail -->|"obtains authorization"| node_microsoft_oauth

click node_app "https://github.com/puj-course/fis_2630_1204_g4/blob/main/src/front/srcFront/App.tsx"
click node_practice "https://github.com/puj-course/fis_2630_1204_g4/blob/main/src/front/srcFront/Practica.tsx"
click node_camera "https://github.com/puj-course/fis_2630_1204_g4/blob/main/src/front/srcFront/hooks/useCamara.ts"
click node_recognition_hook "https://github.com/puj-course/fis_2630_1204_g4/blob/main/src/front/srcFront/hooks/useReconocimiento.ts"
click node_result_view "https://github.com/puj-course/fis_2630_1204_g4/blob/main/src/front/srcFront/components/ResultadoReconocimiento.tsx"
click node_web_vision "https://github.com/puj-course/fis_2630_1204_g4/blob/main/src/front/srcFront/services/vision.ts"
click node_practice_facade "https://github.com/puj-course/fis_2630_1204_g4/blob/main/src/front/srcFront/services/FachadaRegistroPractica.ts"
click node_api_entry "https://github.com/puj-course/fis_2630_1204_g4/blob/main/app/main.py"
click node_auth_routes "https://github.com/puj-course/fis_2630_1204_g4/blob/main/app/routes/autenticacion.py"
click node_identity "https://github.com/puj-course/fis_2630_1204_g4/blob/main/app/services/autenticacion_service.py"
click node_security "https://github.com/puj-course/fis_2630_1204_g4/blob/main/app/security.py"
click node_other_routes "https://github.com/puj-course/fis_2630_1204_g4/tree/main/app/routes"
click node_vision_route "https://github.com/puj-course/fis_2630_1204_g4/blob/main/app/routes/vision.py"
click node_vision_service "https://github.com/puj-course/fis_2630_1204_g4/blob/main/app/services/vision_service.py"
click node_recognition_engine "https://github.com/puj-course/fis_2630_1204_g4/blob/main/app/vision/reconocimiento.py"
click node_detector_manager "https://github.com/puj-course/fis_2630_1204_g4/blob/main/app/vision/gestor_detectores.py"
click node_vowels "https://github.com/puj-course/fis_2630_1204_g4/blob/main/app/vision/vocales.py"
click node_result_service "https://github.com/puj-course/fis_2630_1204_g4/blob/main/app/services/resultados_service.py"
click node_progress_service "https://github.com/puj-course/fis_2630_1204_g4/blob/main/app/services/progreso_service.py"
click node_attempt_service "https://github.com/puj-course/fis_2630_1204_g4/blob/main/app/services/intentos_service.py"
click node_learning_service "https://github.com/puj-course/fis_2630_1204_g4/blob/main/app/services/aprendizaje_service.py"
click node_repository "https://github.com/puj-course/fis_2630_1204_g4/blob/main/app/repositories/aprendizaje_repository.py"
click node_database "https://github.com/puj-course/fis_2630_1204_g4/blob/main/conf/database.py"
click node_recovery_mail "https://github.com/puj-course/fis_2630_1204_g4/blob/main/app/services/correo_recuperacion_service.py"
click node_microsoft_oauth "https://github.com/puj-course/fis_2630_1204_g4/blob/main/app/services/microsoft_oauth_service.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_app,node_practice,node_camera,node_recognition_hook,node_result_view,node_web_vision,node_practice_facade toneBlue
class node_api_entry,node_auth_routes,node_identity,node_security,node_other_routes toneAmber
class node_vision_route,node_vision_service,node_recognition_engine,node_detector_manager,node_vowels toneMint
class node_result_service,node_progress_service,node_attempt_service,node_learning_service,node_repository toneRose
class node_database,node_recovery_mail,node_microsoft_oauth,node_user toneIndigo
```

## Components

### Web client

- [App navigation](https://github.com/puj-course/fis_2630_1204_g4/blob/main/src/front/srcFront/App.tsx): `src/front/srcFront/App.tsx`
- [Practice screen](https://github.com/puj-course/fis_2630_1204_g4/blob/main/src/front/srcFront/Practica.tsx): `src/front/srcFront/Practica.tsx`
- [Camera capture](https://github.com/puj-course/fis_2630_1204_g4/blob/main/src/front/srcFront/hooks/useCamara.ts): `src/front/srcFront/hooks/useCamara.ts`
- [Recognition polling](https://github.com/puj-course/fis_2630_1204_g4/blob/main/src/front/srcFront/hooks/useReconocimiento.ts): `src/front/srcFront/hooks/useReconocimiento.ts`
- [Recognition result](https://github.com/puj-course/fis_2630_1204_g4/blob/main/src/front/srcFront/components/ResultadoReconocimiento.tsx): `src/front/srcFront/components/ResultadoReconocimiento.tsx`
- [Vision API client](https://github.com/puj-course/fis_2630_1204_g4/blob/main/src/front/srcFront/services/vision.ts): `src/front/srcFront/services/vision.ts`
- [Practice recorder](https://github.com/puj-course/fis_2630_1204_g4/blob/main/src/front/srcFront/services/FachadaRegistroPractica.ts): `src/front/srcFront/services/FachadaRegistroPractica.ts`

### API and identity

- [FastAPI entry](https://github.com/puj-course/fis_2630_1204_g4/blob/main/app/main.py): `app/main.py`
- [Authentication routes](https://github.com/puj-course/fis_2630_1204_g4/blob/main/app/routes/autenticacion.py): `app/routes/autenticacion.py`
- [Authentication service](https://github.com/puj-course/fis_2630_1204_g4/blob/main/app/services/autenticacion_service.py): `app/services/autenticacion_service.py`
- [Token security](https://github.com/puj-course/fis_2630_1204_g4/blob/main/app/security.py): `app/security.py`
- [Domain API routes](https://github.com/puj-course/fis_2630_1204_g4/tree/main/app/routes): `app/routes`

### Sign recognition

- [Vision route](https://github.com/puj-course/fis_2630_1204_g4/blob/main/app/routes/vision.py): `app/routes/vision.py`
- [Vision service](https://github.com/puj-course/fis_2630_1204_g4/blob/main/app/services/vision_service.py): `app/services/vision_service.py`
- [Recognition engine](https://github.com/puj-course/fis_2630_1204_g4/blob/main/app/vision/reconocimiento.py): `app/vision/reconocimiento.py`
- [Detector manager](https://github.com/puj-course/fis_2630_1204_g4/blob/main/app/vision/gestor_detectores.py): `app/vision/gestor_detectores.py`
- [Vowel recognition](https://github.com/puj-course/fis_2630_1204_g4/blob/main/app/vision/vocales.py): `app/vision/vocales.py`

### Practice and learning

- [Practice results](https://github.com/puj-course/fis_2630_1204_g4/blob/main/app/services/resultados_service.py): `app/services/resultados_service.py`
- [Learning progress](https://github.com/puj-course/fis_2630_1204_g4/blob/main/app/services/progreso_service.py): `app/services/progreso_service.py`
- [Attempt tracking](https://github.com/puj-course/fis_2630_1204_g4/blob/main/app/services/intentos_service.py): `app/services/intentos_service.py`
- [Learning evaluation](https://github.com/puj-course/fis_2630_1204_g4/blob/main/app/services/aprendizaje_service.py): `app/services/aprendizaje_service.py`
- [Learning repository](https://github.com/puj-course/fis_2630_1204_g4/blob/main/app/repositories/aprendizaje_repository.py): `app/repositories/aprendizaje_repository.py`

### Data and integrations

- [PostgreSQL](https://github.com/puj-course/fis_2630_1204_g4/blob/main/conf/database.py): `conf/database.py`
- [Recovery email](https://github.com/puj-course/fis_2630_1204_g4/blob/main/app/services/correo_recuperacion_service.py): `app/services/correo_recuperacion_service.py`
- [Microsoft OAuth](https://github.com/puj-course/fis_2630_1204_g4/blob/main/app/services/microsoft_oauth_service.py): `app/services/microsoft_oauth_service.py`

### Other components

- **Learner**

## Connections

- Learner → App navigation: uses (evidence: `README.md`)
- App navigation → Practice screen: routes to (evidence: `src/front/srcFront/App.tsx`)
- Practice screen → Camera capture: captures with
- Practice screen → Recognition polling: uses
- Recognition polling → Vision API client: requests recognition (evidence: `src/front/srcFront/hooks/useReconocimiento.ts`)
- Recognition polling → Camera capture: captures frames (evidence: `src/front/srcFront/hooks/useReconocimiento.ts`)
- Vision API client → FastAPI entry: calls backend
- Recognition polling → Recognition result: updates result (evidence: `src/front/srcFront/components/ResultadoReconocimiento.tsx`)
- FastAPI entry → Authentication routes: registers route (evidence: `app/main.py`)
- FastAPI entry → Vision route: registers route (evidence: `app/main.py`)
- FastAPI entry → Domain API routes: registers routes (evidence: `app/main.py`)
- Authentication routes → Authentication service: delegates authentication (evidence: `app/routes/autenticacion.py`)
- Authentication routes → Token security: checks tokens (evidence: `app/routes/autenticacion.py`)
- Token security → Authentication service: loads user (evidence: `app/security.py`)
- Token security → PostgreSQL: checks revocation (evidence: `app/security.py`)
- Vision route → Vision service: delegates recognition
- Vision service → Detector manager: uses detectors (evidence: `app/services/vision_service.py`)
- Vision service → Recognition engine: uses recognition (evidence: `app/services/vision_service.py`)
- Vision service → App navigation: closes detectors
- Learner → Practice recorder: submits practice
- Practice recorder → Practice results: records result
- Practice recorder → Learning progress: records progress
- Practice results → Attempt tracking: registers attempt (evidence: `app/services/resultados_service.py`)
- Practice results → Learning evaluation: evaluates learning (evidence: `app/services/resultados_service.py`)
- Learning progress → PostgreSQL: reads and writes (evidence: `app/services/progreso_service.py`)
- Practice results → PostgreSQL: reads and writes (evidence: `app/services/resultados_service.py`)
- Authentication service → PostgreSQL: connects through (evidence: `app/services/autenticacion_service.py`)
- Recovery email → Microsoft OAuth: obtains authorization (evidence: `app/services/correo_recuperacion_service.py`)
