# salasjimenez/proy.dale architecture

> Architecture diagram of the GitHub repository salasjimenez/proy.dale, 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/salasjimenez/proy.dale
- Repository: https://github.com/salasjimenez/proy.dale

## Overview

Dale is a Spanish-language practice platform for rehearsing real conversations with Charmy and reviewing communication progress. The main workflow is to choose a scenario, practice by text or voice, complete a session, and inspect feedback and progress. The graph includes the frontend entry points and documented product areas, plus API, authentication, session, and persistence layers. Some frontend modules and backend services were not sampled; their role is based on the README and source index, so uncertain connections are omitted.

Main entry points: [`backend/src/routes/index.ts`](https://github.com/salasjimenez/proy.dale/blob/main/backend/src/routes/index.ts) (API route registry), [`frontend/src/lib/api.ts`](https://github.com/salasjimenez/proy.dale/blob/main/frontend/src/lib/api.ts) (API client), [`backend/src/middleware/auth.ts`](https://github.com/salasjimenez/proy.dale/blob/main/backend/src/middleware/auth.ts) (Authentication guard), [`backend/src/routes/auth.routes.ts`](https://github.com/salasjimenez/proy.dale/blob/main/backend/src/routes/auth.routes.ts) (Authentication routes)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_practice["Practice experience"]
  node_simulator["Practice simulator"]
  node_voice["Voice capture<br/>[VoiceCapture.vue]"]
  node_sequence["Scenario sequence<br/>[sequence.ts]"]
  node_charmy["Charmy trial<br/>[charmyTrial.ts]"]
  node_planner["Training planner<br/>[training.ts]"]
end

subgraph group_frontend["Frontend experience"]
  node_authform["Sign-in form<br/>[AuthForm.vue]"]
  node_frontendapi["API client<br/>[api.ts]"]
  node_catalog["Scenario catalog"]
  node_progressui["Progress dashboard"]
  node_mapui["Scenario map"]
  node_voiceanalytics["Voice analytics"]
end

subgraph group_api["Backend API"]
  node_server["HTTP server<br/>[server.ts]"]
  node_app["API middleware<br/>[app.ts]"]
  node_routes["API route registry<br/>[index.ts]"]
  node_authroutes["Authentication routes<br/>[auth.routes.ts]"]
  node_authguard["Authentication guard<br/>[auth.ts]"]
  node_scenroutes["Scenario routes"]
  node_sessionroutes["Session routes<br/>[sesiones.routes.ts]"]
  node_progressroutes["Progress routes<br/>[progreso.routes.ts]"]
  node_maproutes["Map routes<br/>[mapa.routes.ts]"]
end

subgraph group_data["Domain and data"]
  node_authservice["Account service<br/>[auth.service.ts]"]
  node_scenarios["Scenario service"]
  node_sessions["Session and feedback"]
  node_progress["Progress service"]
  node_mapservice["Scenario map service<br/>[mapa.service.ts]"]
  node_database[("PostgreSQL data<br/>[prisma.ts]")]
end

node_learner(("Learner"))
node_browser(("Browser client"))

node_learner -->|"submits credentials"| node_authform
node_authform -->|"posts credentials"| node_frontendapi
node_browser -.->|"requests API"| node_frontendapi
node_frontendapi -.->|"sends API requests"| node_authroutes
node_learner -.->|"chooses scenario"| node_catalog
node_catalog -.->|"loads scenarios"| node_frontendapi
node_learner -.->|"practices conversation"| node_simulator
node_simulator -.->|"captures speech"| node_voice
node_sequence -->|"uses capture"| node_voice
node_simulator -.->|"submits session"| node_frontendapi
node_learner -.->|"tries Charmy"| node_charmy
node_learner -.->|"plans training"| node_planner
node_learner -.->|"reviews progress"| node_progressui
node_learner -.->|"explores map"| node_mapui
node_learner -.->|"reviews voice metrics"| node_voiceanalytics
node_server -->|"serves requests"| node_app
node_app -->|"mounts API"| node_routes
node_routes -->|"registers routes"| node_authroutes
node_routes -->|"registers routes"| node_scenroutes
node_routes -->|"registers routes"| node_sessionroutes
node_routes -->|"registers routes"| node_progressroutes
node_routes -->|"registers routes"| node_maproutes
node_authroutes -->|"guards account routes"| node_authguard
node_authroutes -->|"calls account actions"| node_authservice
node_authguard -->|"verifies user"| node_authservice
node_scenroutes -->|"calls scenario queries"| node_scenarios
node_sessionroutes -->|"guards sessions"| node_authguard
node_sessionroutes -->|"calls session actions"| node_sessions
node_sessions -->|"reads scenario labels"| node_scenarios
node_progressroutes -->|"guards progress"| node_authguard
node_progressroutes -->|"calls progress queries"| node_progress
node_progress -->|"uses scenario data"| node_scenarios
node_maproutes -->|"guards map"| node_authguard
node_maproutes -->|"calls map queries"| node_mapservice
node_authservice -->|"reads and writes"| node_database
node_scenarios -->|"reads scenarios"| node_database
node_sessions -->|"stores sessions"| node_database
node_progress -->|"reads progress"| node_database

click node_authform "https://github.com/salasjimenez/proy.dale/blob/main/frontend/src/components/vue/AuthForm.vue"
click node_frontendapi "https://github.com/salasjimenez/proy.dale/blob/main/frontend/src/lib/api.ts"
click node_catalog "https://github.com/salasjimenez/proy.dale/blob/main/frontend/src/components/vue/ScenarioCatalog.vue"
click node_simulator "https://github.com/salasjimenez/proy.dale/blob/main/frontend/src/components/vue/PracticeSimulator.vue"
click node_voice "https://github.com/salasjimenez/proy.dale/blob/main/frontend/src/components/vue/VoiceCapture.vue"
click node_sequence "https://github.com/salasjimenez/proy.dale/blob/main/frontend/src/lib/sequence.ts"
click node_charmy "https://github.com/salasjimenez/proy.dale/blob/main/frontend/src/lib/charmyTrial.ts"
click node_planner "https://github.com/salasjimenez/proy.dale/blob/main/frontend/src/lib/training.ts"
click node_progressui "https://github.com/salasjimenez/proy.dale/blob/main/frontend/src/components/vue/ProgressDashboard.vue"
click node_mapui "https://github.com/salasjimenez/proy.dale/blob/main/frontend/src/components/vue/ScenarioMapDashboard.vue"
click node_voiceanalytics "https://github.com/salasjimenez/proy.dale/blob/main/frontend/src/components/vue/VoiceAnalyticsDashboard.vue"
click node_server "https://github.com/salasjimenez/proy.dale/blob/main/backend/src/server.ts"
click node_app "https://github.com/salasjimenez/proy.dale/blob/main/backend/src/app.ts"
click node_routes "https://github.com/salasjimenez/proy.dale/blob/main/backend/src/routes/index.ts"
click node_authroutes "https://github.com/salasjimenez/proy.dale/blob/main/backend/src/routes/auth.routes.ts"
click node_authguard "https://github.com/salasjimenez/proy.dale/blob/main/backend/src/middleware/auth.ts"
click node_authservice "https://github.com/salasjimenez/proy.dale/blob/main/backend/src/services/auth.service.ts"
click node_scenroutes "https://github.com/salasjimenez/proy.dale/blob/main/backend/src/routes/escenarios.routes.ts"
click node_scenarios "https://github.com/salasjimenez/proy.dale/blob/main/backend/src/services/escenarios.service.ts"
click node_sessionroutes "https://github.com/salasjimenez/proy.dale/blob/main/backend/src/routes/sesiones.routes.ts"
click node_sessions "https://github.com/salasjimenez/proy.dale/blob/main/backend/src/services/sesiones.service.ts"
click node_progressroutes "https://github.com/salasjimenez/proy.dale/blob/main/backend/src/routes/progreso.routes.ts"
click node_progress "https://github.com/salasjimenez/proy.dale/blob/main/backend/src/services/progreso.service.ts"
click node_maproutes "https://github.com/salasjimenez/proy.dale/blob/main/backend/src/routes/mapa.routes.ts"
click node_mapservice "https://github.com/salasjimenez/proy.dale/blob/main/backend/src/services/mapa.service.ts"
click node_database "https://github.com/salasjimenez/proy.dale/blob/main/backend/src/lib/prisma.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_simulator,node_voice,node_sequence,node_charmy,node_planner,node_browser toneBlue
class node_authform,node_frontendapi,node_catalog,node_progressui,node_mapui,node_voiceanalytics toneAmber
class node_server,node_app,node_routes,node_authroutes,node_authguard,node_scenroutes,node_sessionroutes,node_progressroutes,node_maproutes toneMint
class node_authservice,node_scenarios,node_sessions,node_progress,node_mapservice,node_database toneRose
class node_learner toneIndigo
```

## Components

### Practice experience

- [Practice simulator](https://github.com/salasjimenez/proy.dale/blob/main/frontend/src/components/vue/PracticeSimulator.vue): `frontend/src/components/vue/PracticeSimulator.vue`
- [Voice capture](https://github.com/salasjimenez/proy.dale/blob/main/frontend/src/components/vue/VoiceCapture.vue): `frontend/src/components/vue/VoiceCapture.vue`
- [Scenario sequence](https://github.com/salasjimenez/proy.dale/blob/main/frontend/src/lib/sequence.ts): `frontend/src/lib/sequence.ts`
- [Charmy trial](https://github.com/salasjimenez/proy.dale/blob/main/frontend/src/lib/charmyTrial.ts): `frontend/src/lib/charmyTrial.ts`
- [Training planner](https://github.com/salasjimenez/proy.dale/blob/main/frontend/src/lib/training.ts): `frontend/src/lib/training.ts`

### Frontend experience

- [Sign-in form](https://github.com/salasjimenez/proy.dale/blob/main/frontend/src/components/vue/AuthForm.vue): `frontend/src/components/vue/AuthForm.vue`
- [API client](https://github.com/salasjimenez/proy.dale/blob/main/frontend/src/lib/api.ts): `frontend/src/lib/api.ts`
- [Scenario catalog](https://github.com/salasjimenez/proy.dale/blob/main/frontend/src/components/vue/ScenarioCatalog.vue): `frontend/src/components/vue/ScenarioCatalog.vue`
- [Progress dashboard](https://github.com/salasjimenez/proy.dale/blob/main/frontend/src/components/vue/ProgressDashboard.vue): `frontend/src/components/vue/ProgressDashboard.vue`
- [Scenario map](https://github.com/salasjimenez/proy.dale/blob/main/frontend/src/components/vue/ScenarioMapDashboard.vue): `frontend/src/components/vue/ScenarioMapDashboard.vue`
- [Voice analytics](https://github.com/salasjimenez/proy.dale/blob/main/frontend/src/components/vue/VoiceAnalyticsDashboard.vue): `frontend/src/components/vue/VoiceAnalyticsDashboard.vue`

### Backend API

- [HTTP server](https://github.com/salasjimenez/proy.dale/blob/main/backend/src/server.ts): `backend/src/server.ts`
- [API middleware](https://github.com/salasjimenez/proy.dale/blob/main/backend/src/app.ts): `backend/src/app.ts`
- [API route registry](https://github.com/salasjimenez/proy.dale/blob/main/backend/src/routes/index.ts): `backend/src/routes/index.ts`
- [Authentication routes](https://github.com/salasjimenez/proy.dale/blob/main/backend/src/routes/auth.routes.ts): `backend/src/routes/auth.routes.ts`
- [Authentication guard](https://github.com/salasjimenez/proy.dale/blob/main/backend/src/middleware/auth.ts): `backend/src/middleware/auth.ts`
- [Scenario routes](https://github.com/salasjimenez/proy.dale/blob/main/backend/src/routes/escenarios.routes.ts): `backend/src/routes/escenarios.routes.ts`
- [Session routes](https://github.com/salasjimenez/proy.dale/blob/main/backend/src/routes/sesiones.routes.ts): `backend/src/routes/sesiones.routes.ts`
- [Progress routes](https://github.com/salasjimenez/proy.dale/blob/main/backend/src/routes/progreso.routes.ts): `backend/src/routes/progreso.routes.ts`
- [Map routes](https://github.com/salasjimenez/proy.dale/blob/main/backend/src/routes/mapa.routes.ts): `backend/src/routes/mapa.routes.ts`

### Domain and data

- [Account service](https://github.com/salasjimenez/proy.dale/blob/main/backend/src/services/auth.service.ts): `backend/src/services/auth.service.ts`
- [Scenario service](https://github.com/salasjimenez/proy.dale/blob/main/backend/src/services/escenarios.service.ts): `backend/src/services/escenarios.service.ts`
- [Session and feedback](https://github.com/salasjimenez/proy.dale/blob/main/backend/src/services/sesiones.service.ts): `backend/src/services/sesiones.service.ts`
- [Progress service](https://github.com/salasjimenez/proy.dale/blob/main/backend/src/services/progreso.service.ts): `backend/src/services/progreso.service.ts`
- [Scenario map service](https://github.com/salasjimenez/proy.dale/blob/main/backend/src/services/mapa.service.ts): `backend/src/services/mapa.service.ts`
- [PostgreSQL data](https://github.com/salasjimenez/proy.dale/blob/main/backend/src/lib/prisma.ts): `backend/src/lib/prisma.ts`

### Other components

- **Learner**
- **Browser client**

## Connections

- Learner → Sign-in form: submits credentials (evidence: `frontend/src/components/vue/AuthForm.vue`)
- Sign-in form → API client: posts credentials (evidence: `frontend/src/components/vue/AuthForm.vue`)
- Browser client → API client: requests API
- API client → Authentication routes: sends API requests
- Learner → Scenario catalog: chooses scenario
- Scenario catalog → API client: loads scenarios
- Learner → Practice simulator: practices conversation
- Practice simulator → Voice capture: captures speech
- Scenario sequence → Voice capture: uses capture (evidence: `frontend/src/lib/sequence.ts`)
- Practice simulator → API client: submits session
- Learner → Charmy trial: tries Charmy
- Learner → Training planner: plans training
- Learner → Progress dashboard: reviews progress
- Learner → Scenario map: explores map
- Learner → Voice analytics: reviews voice metrics
- HTTP server → API middleware: serves requests (evidence: `backend/src/server.ts`)
- API middleware → API route registry: mounts API (evidence: `backend/src/app.ts`)
- API route registry → Authentication routes: registers routes (evidence: `backend/src/routes/index.ts`)
- API route registry → Scenario routes: registers routes (evidence: `backend/src/routes/index.ts`)
- API route registry → Session routes: registers routes (evidence: `backend/src/routes/index.ts`)
- API route registry → Progress routes: registers routes (evidence: `backend/src/routes/index.ts`)
- API route registry → Map routes: registers routes (evidence: `backend/src/routes/index.ts`)
- Authentication routes → Authentication guard: guards account routes (evidence: `backend/src/routes/auth.routes.ts`)
- Authentication routes → Account service: calls account actions (evidence: `backend/src/routes/auth.routes.ts`)
- Authentication guard → Account service: verifies user (evidence: `backend/src/middleware/auth.ts`)
- Scenario routes → Scenario service: calls scenario queries (evidence: `backend/src/routes/escenarios.routes.ts`)
- Session routes → Authentication guard: guards sessions (evidence: `backend/src/routes/sesiones.routes.ts`)
- Session routes → Session and feedback: calls session actions (evidence: `backend/src/routes/sesiones.routes.ts`)
- Session and feedback → Scenario service: reads scenario labels (evidence: `backend/src/services/sesiones.service.ts`)
- Progress routes → Authentication guard: guards progress (evidence: `backend/src/routes/progreso.routes.ts`)
- Progress routes → Progress service: calls progress queries (evidence: `backend/src/routes/progreso.routes.ts`)
- Progress service → Scenario service: uses scenario data (evidence: `backend/src/services/progreso.service.ts`)
- Map routes → Authentication guard: guards map (evidence: `backend/src/routes/mapa.routes.ts`)
- Map routes → Scenario map service: calls map queries (evidence: `backend/src/routes/mapa.routes.ts`)
- Account service → PostgreSQL data: reads and writes (evidence: `backend/src/services/auth.service.ts`)
- Scenario service → PostgreSQL data: reads scenarios (evidence: `backend/src/services/escenarios.service.ts`)
- Session and feedback → PostgreSQL data: stores sessions (evidence: `backend/src/services/sesiones.service.ts`)
- Progress service → PostgreSQL data: reads progress (evidence: `backend/src/services/progreso.service.ts`)
