Skip to content

Comments

finalproject-TPV#112

Open
Tomypv wants to merge 1 commit intoLIDR-academy:mainfrom
Tomypv:finalproject-TPV
Open

finalproject-TPV#112
Tomypv wants to merge 1 commit intoLIDR-academy:mainfrom
Tomypv:finalproject-TPV

Conversation

@Tomypv
Copy link

@Tomypv Tomypv commented Feb 17, 2026

Descripción de la entrega

Esta Pull Request representa la entrega final del proyecto Salmantour, una aplicación móvil gamificada para el descubrimiento de lugares de interés en Salamanca, desarrollada con React Native + Expo SDK 53, TypeScript y Supabase como Backend as a Service, siguiendo una arquitectura por capas y metodología Scrumban a lo largo de 6 sprints de desarrollo + 1 sprint de auditoría y testing.

Funcionalidades principales del MVP

1. Registro y autenticación de usuarios

  • Registro con email, contraseña y nombre de usuario único con validación en tiempo real.
  • Verificación de correo electrónico con polling automático.
  • Login con persistencia de sesión entre reinicios de la aplicación (JWT).
  • Recuperación de contraseña vía email.
  • Generación automática de código de amistad único de 8 caracteres por usuario.

2. Mapa interactivo con geolocalización

  • Mapa de Google Maps con 40 puntos de interés reales de Salamanca.
  • Marcadores personalizados con colores e iconos diferenciados por categoría (8 categorías).
  • Geolocalización en tiempo real con tracking continuo.
  • Filtrado por categoría y búsqueda por nombre de lugar.
  • Feedback visual de proximidad: marcadores con borde azul al acercarse a menos de 10 metros.

3. Sistema de medallas por proximidad

  • Detección automática de proximidad mediante algoritmo de Haversine (radio configurable, 10m por defecto).
  • Desbloqueo de medalla al capturar foto dentro del radio de proximidad.
  • Celebración animada con confetti al obtener una nueva medalla.
  • Restricción de duplicados (UNIQUE constraint en user_medals).

4. Cámara y captura fotográfica

  • Cámara integrada con expo-camera y detección de orientación mediante acelerómetro (expo-sensors).
  • Vista previa con opciones de confirmar o repetir la foto.
  • Tres modos de cámara: medalla (desbloquear), retake (cambiar foto) y perfil (actualizar avatar).
  • Compresión automática de imágenes y subida a Supabase Storage.

5. Progreso y galería de colección

  • Pantalla de progreso con estadísticas globales y barras de progreso animadas por categoría.
  • Galería de medallas con filtros (todas/obtenidas/bloqueadas), ordenamiento y búsqueda.
  • Grid de fotos con expansión a pantalla completa.
  • Sistema de favoritos sincronizado en todas las vistas (mapa, progreso, galería).

6. Sistema social

  • Conexión con amigos mediante código de amistad con validación en tiempo real.
  • Gestión de solicitudes de amistad (enviar, aceptar, rechazar).
  • Perfil de amigo con estadísticas y galería de medallas obtenidas.
  • Comparación de progreso lado a lado con filtros (todas, solo amigo, solo yo, en común, bloqueadas) y filtrado por categoría.

7. Edición de perfil

  • Cambio de nombre de usuario con validación de unicidad.
  • Actualización de foto de perfil desde cámara o galería del dispositivo.
  • Visualización de estadísticas personales y código de amistad copiable.

8. Seguridad y control de acceso

  • Row Level Security (RLS) en todas las tablas de PostgreSQL con políticas granulares.
  • Funciones RPC con SECURITY DEFINER para bypass controlado de RLS (búsqueda de amigos).
  • Políticas de Storage: cada usuario solo puede gestionar sus propias fotos.
  • Limpieza completa de stores al cerrar sesión para evitar filtraciones de datos entre usuarios.

9. Arquitectura y calidad de código

  • Monorepo con workspaces npm (frontend/ + backend/).
  • Arquitectura por capas: UI → Hooks → State (Zustand) → Services → Supabase Client.
  • 5 stores globales con Zustand (auth, location, medals, favorites, friends).
  • Sistema de diseño con Shopify Restyle y tokens centralizados.
  • 6 migraciones SQL incrementales + 2 scripts de seed data.
  • TypeScript strict mode en todo el proyecto.

10. Testing y auditoría

  • 156 tests unitarios distribuidos en 7 suites (Jest + React Native Testing Library).
  • Cobertura de lógica de negocio aislada: validadores, stores, utilidades (Haversine).
  • Auditoría técnica completa con eliminación de 15+ archivos placeholder innecesarios.
  • Linting y type checking configurados en pipeline de build.

Documentación

  • Documentación técnica completa en docs/: arquitectura, historias de usuario, seguridad, setup y despliegue.
  • Documentación de backend en backend/docs/: modelo de datos, API de servicios, funciones RPC.
  • 28 historias de usuario documentadas con criterios de aceptación (105 Story Points totales).
  • 11 archivos de prompts del desarrollo completo en docs/AI4DEVS/Prompts proyecto final AI4DEVS/.
  • Entrega final (readme + prompts) en docs/AI4DEVS/Entrega final/.

Stack tecnológico

Capa Tecnología
Frontend React Native + Expo SDK 53 + TypeScript
Navegación Expo Router (file-based)
Estado global Zustand (5 stores)
Diseño Shopify Restyle
Mapas react-native-maps (Google Maps)
Geolocalización expo-location + Haversine
Cámara expo-camera + expo-sensors
Backend Supabase (Auth + PostgreSQL + Storage + RPC)
Testing Jest + React Native Testing Library
Build Expo EAS Build (APK/AAB)

Summary by CodeRabbit

  • Documentation
    • Added comprehensive planning and development guidance documents for upcoming feature sprints, including authentication, mapping, progress tracking, favorites management, and social features.
    • Updated project README with detailed system architecture, data model specifications, API descriptions, and deployment information.
    • Added prompt sequencing guide to organize development workflow across multiple feature implementations.

- Added comprehensive project description, objectives, and features in README
- Detailed installation instructions and environment setup for local development
- Included architecture diagrams and system design explanations
- Documented data model with ER diagrams and entity descriptions
- Specified API interactions and user stories for clarity on functionality
- Implemented security practices and testing strategies for robust application
- Organized project structure with clear folder hierarchy and component descriptions
Copilot AI review requested due to automatic review settings February 17, 2026 22:34
@coderabbitai
Copy link

coderabbitai bot commented Feb 17, 2026

📝 Walkthrough

Walkthrough

This PR introduces a comprehensive suite of Spanish-language prompt documents and planning guides for the Salmantour mobile gamification project, alongside substantive updates to readme.md and prompts.md. The additions establish a multi-sprint development roadmap, implementation workflows, and detailed guidance for features including authentication, geolocation mapping, medals, gallery/favorites, social features, and documentation artifacts.

Changes

Cohort / File(s) Summary
Project Context & Sprint Planning
proyecto_final_AI4DEVS/contexto_prototipo.md, proyecto_final_AI4DEVS/Índice de prompts.txt
Defines 16-prompt project initialization workflow covering repository analysis, sprint 1–6 planning, issue/milestone creation, documentation generation, and multi-model AI agent coordination.
Feature-Specific Implementation Prompts
proyecto_final_AI4DEVS/prompts_autenticacion.md, proyecto_final_AI4DEVS/prompts_mapa_medallas.md, proyecto_final_AI4DEVS/prompts_vista_progreso.md, proyecto_final_AI4DEVS/prompts_favoritos_gallery.md, proyecto_final_AI4DEVS/prompts_vista_friends.md
Provides phased implementation guidance for authentication (React Native/Supabase), map/medal geolocation (Sprint 2), progress/gamification (Sprint 3), gallery/favorites redesign (Sprint 5), and friendship system (Sprint 6).
Documentation & Quality Prompts
proyecto_final_AI4DEVS/prompts_casos_de_uso.md, proyecto_final_AI4DEVS/prompts_revision_tests.md, proyecto_final_AI4DEVS/prompts_redaccion_memoria.md, proyecto_final_AI4DEVS/prompts_redaccion_anexos.md
Establishes workflows for generating formal use case documentation (CU catalog), auditing/testing strategies (JUnit/Jest patterns), memory/annex section writing (Anexo III–IV), and quality assurance protocols.
Primary Documentation
prompts.md, readme.md
Expands prompts.md with reworded sections, multi-part role definitions, and explicit justifications for each development phase; substantially enriches readme.md with architecture diagrams, data models (Mermaid ERD), API specifications (RPC services), deployment notes, security practices (RLS, DEFINER), and end-to-end project structure.

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~55 minutes

Poem

🐰 Hops through prompts both long and bright,
Salmantour's path now crystal-bright!
Maps and medals, friends so true,
Six sprints planned—let's see it through!
Documentation blooming wide,
With every feature—take the ride!

🚥 Pre-merge checks | ✅ 2 | ❌ 1

❌ Failed checks (1 inconclusive)

Check name Status Explanation Resolution
Title check ❓ Inconclusive The title 'finalproject-TPV' is vague and does not meaningfully describe the changeset. It appears to reference an acronym/author initials rather than the actual content, which comprises extensive documentation, prompts, configuration files, and project metadata for the Salmantour mobile application. Revise the title to clearly describe the main change, such as 'Add comprehensive project documentation and prompts for Salmantour MVP' or 'Complete Salmantour MVP with documentation, prompts, and configuration files'.
✅ Passed checks (2 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment

Tip

Issue Planner is now in beta. Read the docs and try it out! Share your feedback on Discord.


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This pull request represents the final delivery documentation for Salmantour, a React Native mobile application for gamified exploration of points of interest in Salamanca, Spain. The PR adds comprehensive project documentation including a complete readme with technical specifications and a detailed record of AI-assisted development prompts.

Changes:

  • Added complete project documentation to readme.md covering architecture, data model, API specification, user stories, tickets, and pull requests
  • Added detailed AI development prompts documentation to prompts.md demonstrating AI assistant usage throughout all development phases
  • Provided comprehensive technical specifications including installation instructions, security practices, testing approach, and infrastructure details

Reviewed changes

Copilot reviewed 13 out of 14 changed files in this pull request and generated 5 comments.

File Description
readme.md Complete project documentation with 798 lines covering all aspects of the Salmantour application from architecture to deployment
prompts.md Detailed documentation of AI-assisted development prompts showing the use of AI throughout the project lifecycle

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.


**Criterios de Aceptación:**

1. El formulario solicita: correo electrónico (formato válido), contraseña (mín. 6 caracteres, 1 número), nombre de usuario (3-20 chars, alfanumérico), confirmación de contraseña
Copy link

Copilot AI Feb 17, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Inconsistent username length constraint: the database model specifies "3-50 chars" for username (line 391), but the user story acceptance criteria specifies "3-20 chars" (line 556). These constraints should match throughout the documentation.

Suggested change
1. El formulario solicita: correo electrónico (formato válido), contraseña (mín. 6 caracteres, 1 número), nombre de usuario (3-20 chars, alfanumérico), confirmación de contraseña
1. El formulario solicita: correo electrónico (formato válido), contraseña (mín. 6 caracteres, 1 número), nombre de usuario (3-50 chars, alfanumérico), confirmación de contraseña

Copilot uses AI. Check for mistakes.
**Prompt 2:**

**Prompt 1:**
> Crea el script SQL de seed data para la tabla `medals` con lugares reales de Salamanca. Necesito un mínimo de 40 puntos de interés distribuidos entre las 8 categorías (Monumentos, Gastronomía, Leyendas, Naturaleza, Deporte, Educación, Cultura, Religión). Cada registro debe incluir: nombre real del lugar, descripción informativa, dirección postal, y coordenadas GPS precisas (latitud con DECIMAL(10,8) y longitud con DECIMAL(11,8)). Las coordenadas deben ser exactas, ya que el algoritmo de Haversine las utilizará para calcular la distancia del usuario y activar el desbloqueo de medallas a menos de 10 metros. Genera el archivo `medals.sql` compatible con el esquema definido en `001_initial_schema.sql`.
Copy link

Copilot AI Feb 17, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The category names are inconsistent between documents. The prompt documentation (prompts.md line 89) lists categories as "Monumentos, Gastronomía, Leyendas, Naturaleza, Deporte, Educación, Cultura, Religión", while readme.md line 451 lists them as "Monumentos y Cultura, Bibliotecas, Gastronomía, Bares y Pubs, Discotecas, Deporte, Ocio Alternativo, Naturaleza". These are two completely different sets of categories. The documentation should use consistent category names throughout.

Suggested change
> Crea el script SQL de seed data para la tabla `medals` con lugares reales de Salamanca. Necesito un mínimo de 40 puntos de interés distribuidos entre las 8 categorías (Monumentos, Gastronomía, Leyendas, Naturaleza, Deporte, Educación, Cultura, Religión). Cada registro debe incluir: nombre real del lugar, descripción informativa, dirección postal, y coordenadas GPS precisas (latitud con DECIMAL(10,8) y longitud con DECIMAL(11,8)). Las coordenadas deben ser exactas, ya que el algoritmo de Haversine las utilizará para calcular la distancia del usuario y activar el desbloqueo de medallas a menos de 10 metros. Genera el archivo `medals.sql` compatible con el esquema definido en `001_initial_schema.sql`.
> Crea el script SQL de seed data para la tabla `medals` con lugares reales de Salamanca. Necesito un mínimo de 40 puntos de interés distribuidos entre las 8 categorías (Monumentos y Cultura, Bibliotecas, Gastronomía, Bares y Pubs, Discotecas, Deporte, Ocio Alternativo, Naturaleza). Cada registro debe incluir: nombre real del lugar, descripción informativa, dirección postal, y coordenadas GPS precisas (latitud con DECIMAL(10,8) y longitud con DECIMAL(11,8)). Las coordenadas deben ser exactas, ya que el algoritmo de Haversine las utilizará para calcular la distancia del usuario y activar el desbloqueo de medallas a menos de 10 metros. Genera el archivo `medals.sql` compatible con el esquema definido en `001_initial_schema.sql`.

Copilot uses AI. Check for mistakes.
#### 1. Clonar e instalar dependencias

```bash
git clone https://github.com/tomypv/salmantour.git
Copy link

Copilot AI Feb 17, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Discrepancy between stated repository availability and installation instructions. Section 0.5 (line 34) explicitly states "No comparto el código al tratarse de un proyecto académico (TFG) privado" (I don't share the code as it's a private academic project), but the installation instructions (line 125) provide a git clone command with a public GitHub URL. If the repository is private, the installation instructions should clarify how authorized users can access it, or if it's public, section 0.5 should be updated accordingly.

Copilot uses AI. Check for mistakes.
Comment on lines +359 to +369
Salmantour implementa **156 tests unitarios** distribuidos en 7 suites, enfocados en lógica de negocio aislada de servicios externos:

| Suite | Tests | Qué valida |
|-------|-------|-----------|
| AuthValidator | ~50 | Validación de email, contraseña, username, formularios completos |
| authStore | ~25 | Estado de autenticación, setters, limpieza de sesión |
| medalsStore | ~20 | Cache de medallas, estados de carga, reinicio |
| locationStore | ~20 | Estado de ubicación, permisos, tracking |
| favoritesStore | ~20 | Estado de favoritos, toggle, limpieza |
| friendsStore | ~25 | Estado de amigos, solicitudes, limpieza |
| distanceCalculator | ~15 | Haversine, isWithinRadius, casos límite geográficos |
Copy link

Copilot AI Feb 17, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The total number of tests documented doesn't match the sum of individual test suite counts. The document states 156 tests total, but adding the approximate counts from each suite (50 + 25 + 20 + 20 + 20 + 25 + 15 = 175) gives a higher number. While the "~" symbols indicate these are approximations, the total should be consistent with the sum, or the individual counts should be adjusted to match the stated total.

Copilot uses AI. Check for mistakes.

### **0.2. Nombre del proyecto:**

Salmantour - Aplicación móvil ludificada para el descubrimiento de lugares de interés en entornos urbanos (Salamanca)
Copy link

Copilot AI Feb 17, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Inconsistent terminology: the project name uses "ludificada" (line 22) while the description uses "gamificada" (line 26). Both terms mean the same (gamified), but for consistency, the same Spanish term should be used throughout. "Gamificada" is more commonly used in Spanish technical contexts.

Suggested change
Salmantour - Aplicación móvil ludificada para el descubrimiento de lugares de interés en entornos urbanos (Salamanca)
Salmantour - Aplicación móvil gamificada para el descubrimiento de lugares de interés en entornos urbanos (Salamanca)

Copilot uses AI. Check for mistakes.
Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 12

🧹 Nitpick comments (12)
Prompts proyecto final AI4DEVS/prompts_vista_progreso.md (2)

474-476: Avoid duplicate headings (MD024).

There are repeated headings with identical text; consider renaming one to keep structure unique.

🧹 Suggested fix
-# Prompt 6:
+# Prompt 6 (ajustes finales):
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@Prompts` proyecto final AI4DEVS/prompts_vista_progreso.md around lines 474 -
476, There are duplicate headings "Prompt 6:" causing MD024; locate the repeated
heading lines with the exact text "Prompt 6:" in prompts_vista_progreso.md and
rename one of them to a unique heading (e.g., "Prompt 6: Adjustments" or "Prompt
6a: ...") so headings are not identical, then update any nearby references or
internal links to match the new heading text.

65-91: Add language identifiers to fenced blocks (MD040).

Use text, markdown, or ts depending on the content.

🧹 Suggested fix
-```
+```text
 frontend/
 ├── app/
 ...

```diff
-```
+```text
 UI (Screens) → Hooks → State (Zustand) → Services → Supabase Client / expo-location

```diff
-```
+```text
 Property 'error' does not exist on type 'MedalServiceResult<UserMedalWithDetails>'.
 ...

```diff
-```
+```ts
 router.push({
   pathname: '/(tabs)/map',
   params: {
     medalId: medal.id,
     lat: medal.latitude,
     lng: medal.longitude,
   },
 });

```diff
-```
+```text
 $ git status
 ...

```diff
-```
+```text
 ERROR  Warning: Invariant Violation: zoomToRect is not implemented
 ...
</details>


Also applies to: 93-96, 233-236, 241-273, 296-306, 351-392, 481-493

<details>
<summary>🤖 Prompt for AI Agents</summary>

Verify each finding against the current code and only fix it if needed.

In @Prompts proyecto final AI4DEVS/prompts_vista_progreso.md around lines 65 -
91, The Markdown file contains several fenced code blocks missing language
identifiers (MD040); update each triple-backtick block to include an appropriate
language tag (e.g., text, markdown, ts/tsx) so linters can parse them — for
example add text for directory trees and logs, ts for the router.push(...)
snippet and any TypeScript examples, and text or markdown for plain
messages like "UI (Screens) → Hooks…"; search for blocks containing the examples
referencing router.push, MedalServiceResult, zoomToRect,
and the directory tree/CLI output and add the matching language identifier to
each fenced block (also apply the same fix to the other ranges noted in the
review).


</details>

</blockquote></details>
<details>
<summary>Prompts proyecto final AI4DEVS/prompts_redaccion_memoria.md (2)</summary><blockquote>

`20-26`: **Add blank lines around the table for MD058 compliance.**

markdownlint reports the table needs surrounding blank lines to render consistently.

<details>
<summary>🧹 Suggested fix</summary>

```diff
 ### Stack Tecnológico
+
 | Capa | Tecnologías |
 |------|-------------|
 | **Frontend** | React Native, Expo SDK 53, TypeScript, Expo Router, Zustand |
 | **Backend** | Supabase (Auth + PostgreSQL + Storage), Row Level Security |
 | **Servicios** | Google Maps API, expo-location, expo-camera |
+
```
</details>

<details>
<summary>🤖 Prompt for AI Agents</summary>

```
Verify each finding against the current code and only fix it if needed.

In `@Prompts` proyecto final AI4DEVS/prompts_redaccion_memoria.md around lines 20
- 26, The Markdown table under the "### Stack Tecnológico" heading violates
MD058 because it lacks surrounding blank lines; fix it by adding a single blank
line immediately before the table starts and a single blank line immediately
after the table ends so the table is separated from surrounding content, then
re-run markdownlint to confirm MD058 is resolved (refer to the "### Stack
Tecnológico" heading and the Markdown table block).
```

</details>

---

`162-168`: **Specify languages for fenced code blocks (MD040).**

Add a language tag (e.g., `markdown` or `text`) to improve linting and syntax highlighting.

<details>
<summary>🧹 Suggested fix</summary>

```diff
-```
+```markdown
 1. [Título del apartado]
    - Breve descripción de qué incluirá (1-2 líneas)
    1.1. [Subapartado si aplica]
         - Descripción breve
 ...
 ```
```

```diff
-```
+```text
 La investigación sobre el ocio del alumnado universitario es pertinente porque proporciona insights...
 ```
```

```diff
-```
+```markdown
 ### US-009: Visualización de información de lugar
 ...
 ```
```

```diff
-``` 
+```markdown
 ### ADRs (Architecture Decision Records)
 ...
 ```
```
</details>


Also applies to: 258-260, 357-360, 483-486

<details>
<summary>🤖 Prompt for AI Agents</summary>

Verify each finding against the current code and only fix it if needed.

In @Prompts proyecto final AI4DEVS/prompts_redaccion_memoria.md around lines 162

  • 168, Los bloques de código con triple backticks carecen de etiqueta de
    lenguaje (MD040); añade etiquetas apropiadas como markdown para fragmentos
    de documentación y encabezados (por ejemplo el bloque que comienza con "1.
    [Título del apartado]", los bloques que contienen "### US-009: Visualización de
    información de lugar" y "### ADRs (Architecture Decision Records)") y text
    para párrafos narrativos (por ejemplo el bloque que empieza "La investigación
    sobre el ocio del alumnado universitario..."), y aplica la misma corrección a
    los demás bloques similares en el archivo (las otras ocurrencias señaladas) para
    mejorar el linting y resaltado de sintaxis.

</details>

</blockquote></details>
<details>
<summary>Prompts proyecto final AI4DEVS/prompts_casos_de_uso.md (2)</summary><blockquote>

`21-27`: **Surround tables with blank lines (MD058).**

This avoids markdownlint warnings and improves table rendering in some parsers.

<details>
<summary>🧹 Suggested fix</summary>

```diff
 ### Stack Tecnológico
+
 | Capa | Tecnologías |
 |------|-------------|
 | **Frontend** | React Native, Expo SDK 53, TypeScript, Expo Router, Zustand |
 | **Backend** | Supabase (Auth + PostgreSQL + Storage), Row Level Security |
 | **Servicios** | Google Maps API, expo-location, expo-camera |
+
```
</details>


Also applies to: 53-61, 62-71, 72-79, 80-86

<details>
<summary>🤖 Prompt for AI Agents</summary>

```
Verify each finding against the current code and only fix it if needed.

In `@Prompts` proyecto final AI4DEVS/prompts_casos_de_uso.md around lines 21 - 27,
The markdown tables (e.g., the one under the "### Stack Tecnológico" heading and
the other tables referenced) need blank lines above and below them to satisfy
MD058: locate each table block (rows beginning with '|' and the header separator
'------') and insert a single empty line before the table and a single empty
line after the table so the renderer/linter recognizes them as standalone
blocks; update all instances noted in the comment (the table under "Stack
Tecnológico" and the additional tables mentioned) accordingly.
```

</details>

---

`179-184`: **Add language identifiers to fenced blocks (MD040).**

Use `markdown` or `text` to satisfy linting and improve readability.

<details>
<summary>🧹 Suggested fix</summary>

```diff
-```
+```markdown
 CU-XX: [Nombre del caso de uso]
 - Actor principal: [Usuario/Sistema]
 - Descripción breve: [1-2 líneas]
 ```
```

```diff
-```
+```markdown
 ### 7.4 Casos de Uso del Sistema de Medallas y Desbloqueo
 ...
 ```
```

```diff
-```
+```markdown
 ### 7.6 Casos de Uso del Sistema de Favoritos
 ...
 ```
```
</details>


Also applies to: 273-281, 300-320

<details>
<summary>🤖 Prompt for AI Agents</summary>

Verify each finding against the current code and only fix it if needed.

In @Prompts proyecto final AI4DEVS/prompts_casos_de_uso.md around lines 179 -
184, The markdown fenced code blocks containing the use-case templates and
section examples (e.g., the block starting with "CU-XX: [Nombre del caso de
uso]" and the blocks under headings "### 7.4 Casos de Uso del Sistema de
Medallas y Desbloqueo" and "### 7.6 Casos de Uso del Sistema de Favoritos") are
missing language identifiers; update each triple-backtick fence to include a
language token like markdown or text (e.g., ```markdown) to satisfy MD040 and
improve readability across the blocks referenced (also apply same change to the
other affected blocks around lines 273-281 and 300-320).


</details>

</blockquote></details>
<details>
<summary>readme.md (2)</summary><blockquote>

`162-166`: **Specify code fence languages (MD040).**

Add `bash`, `text`, `yaml`, or `typescript` as appropriate.

<details>
<summary>🧹 Suggested fix</summary>

```diff
-```bash
+```bash
 cd frontend
 npm test
 ```
```

```diff
-```
+```text
 salmantour/
 ├── frontend/
 ...
 ```
```

```diff
-```mermaid
+```mermaid
 flowchart LR
 ...
 ```
```

```diff
-```yaml
+```yaml
 Operation: unlockMedal
 ...
 ```
```
</details>


Also applies to: 258-290, 357-370, 483-498

<details>
<summary>🤖 Prompt for AI Agents</summary>

Verify each finding against the current code and only fix it if needed.

In @readme.md around lines 162 - 166, The README has fenced code blocks without
language tags (e.g., the shell snippet containing "cd frontend\nnpm test", the
directory tree block that should be plain text, the mermaid flowchart block, and
the YAML operation example), which triggers MD040; update each triple-backtick
fence to include the appropriate language identifier (e.g., bash for shell commands, text for the directory tree, mermaid for flowcharts, and yaml
for YAML examples) so syntax highlighting and linting are satisfied across the
affected snippets.


</details>

---

`114-121`: **Add blank lines around the prerequisites table (MD058).**

This ensures consistent markdown rendering across parsers.

<details>
<summary>🧹 Suggested fix</summary>

```diff
 #### Prerrequisitos
+
 | Herramienta | Versión | Descarga |
 |-------------|---------|----------|
 | Node.js | v18.0.0+ | [nodejs.org](https://nodejs.org/) |
 | Git | Cualquiera | [git-scm.com](https://git-scm.com/) |
 | Expo Go | SDK 53 | [Android](https://play.google.com/store/apps/details?id=host.exp.exponent) / [iOS](https://apps.apple.com/app/expo-go/id982107779) |
+
```
</details>

<details>
<summary>🤖 Prompt for AI Agents</summary>

```
Verify each finding against the current code and only fix it if needed.

In `@readme.md` around lines 114 - 121, Add blank lines before and after the "####
Prerrequisitos" header and the following markdown table so the table is
separated from surrounding content; locate the "Prerrequisitos" heading and the
table block (the pipe-delimited rows under it) and insert an empty line above
the heading and another empty line after the table to satisfy MD058 and ensure
consistent rendering.
```

</details>

</blockquote></details>
<details>
<summary>Prompts proyecto final AI4DEVS/prompts_revision_tests.md (1)</summary><blockquote>

`212-212`: **Unlabeled fenced code blocks at lines 212, 238, and 353.**

The linter output and build log blocks would render with better clarity (and enable copy-paste formatting) if labeled ` ```text ` or ` ```shell `.




Also applies to: 238-238, 353-353

<details>
<summary>🤖 Prompt for AI Agents</summary>

Verify each finding against the current code and only fix it if needed.

In @Prompts proyecto final AI4DEVS/prompts_revision_tests.md at line 212, There
are unlabeled fenced code blocks using only triple backticks ("") in the markdown; update each of those fences to include an explicit language tag (for example change "" to "text" or "shell" as appropriate) so the
linter/build renders and enables proper formatting/copy-paste for the blocks
that currently render as raw output; search for the literal "```" occurrences
around the three reported blocks and replace them with the chosen labeled
fences.


</details>

</blockquote></details>
<details>
<summary>Prompts proyecto final AI4DEVS/prompts_redaccion_anexos.md (1)</summary><blockquote>

`21-21`: **Two markdownlint warnings worth addressing.**

- **Line 21** (MD058): the technology stack table is not surrounded by blank lines, which some renderers require to display it as a proper table.
- **Line 119** (MD040): the index template code fence is unlabeled; adding ` ```text ` would clarify intent.




Also applies to: 119-119

<details>
<summary>🤖 Prompt for AI Agents</summary>

Verify each finding against the current code and only fix it if needed.

In @Prompts proyecto final AI4DEVS/prompts_redaccion_anexos.md at line 21, Add a
blank line before and after the Markdown table that begins with the header "|
Capa | Tecnologías |" so the table is properly separated (fixes MD058), and
update the unlabeled code fence at the index template (the fence around the
content at the region referenced near the "index template" at line 119) to use a
labeled fence like ```text to clarify intent (fixes MD040).


</details>

</blockquote></details>
<details>
<summary>Prompts proyecto final AI4DEVS/prompts_favoritos_gallery.md (1)</summary><blockquote>

`23-23`: **Multiple unlabeled code fences and tables not surrounded by blank lines.**

- **MD040** — fences at lines 30, 78, 130, 151, and 357 lack a language specifier. ` ```text `, ` ```sql `, or ` ```shell ` as appropriate would enable highlighting.
- **MD058** — Markdown tables at lines 23, 176, 183, 192, 200, and 241 are missing the required blank lines before/after them, which can cause some renderers to treat them as plain text.




Also applies to: 176-176, 183-183, 192-192, 200-200, 241-241, 30-30, 78-78, 130-130, 151-151, 357-357

<details>
<summary>🤖 Prompt for AI Agents</summary>

Verify each finding against the current code and only fix it if needed.

In @Prompts proyecto final AI4DEVS/prompts_favoritos_gallery.md at line 23, The
markdown has unlabeled code fences and tables without surrounding blank lines:
add appropriate language identifiers (e.g., text, sql, shell) to every code fence represented by bare markers and ensure each Markdown table (for
example the table starting with the header row "| Capa | Tecnologías |" and the
other tables present) is preceded and followed by a blank line; update the
fences and table spacing throughout the file so they conform to MD040 (label
fences) and MD058 (blank lines around tables).


</details>

</blockquote></details>
<details>
<summary>Prompts proyecto final AI4DEVS/prompts_autenticacion.md (1)</summary><blockquote>

`65-65`: **Unlabeled fenced code blocks reduce readability in rendered Markdown.**

Several code fences (at lines 65, 72, 192, 232, 241, 296, 351, 481, and others) are opened with plain ` ``` ` without a language specifier. Adding `text`, `log`, `json`, or `typescript` as appropriate would enable syntax highlighting in GitHub and other Markdown renderers.




Also applies to: 72-72, 192-192, 232-232

<details>
<summary>🤖 Prompt for AI Agents</summary>

Verify each finding against the current code and only fix it if needed.

In @Prompts proyecto final AI4DEVS/prompts_autenticacion.md at line 65, Several
fenced code blocks in the prompts_autenticacion.md file are missing language
specifiers (they use plain ), which hurts readability; update each unlabeled fence to include an appropriate language tag (e.g., typescript, json, text, or log) so renderers apply syntax highlighting, and ensure examples and snippets throughout the document use the most specific tag that matches the snippet content; search for all occurrences of "" without a language and
replace them accordingly.


</details>

</blockquote></details>

</blockquote></details>

<details>
<summary>🤖 Prompt for all review comments with AI agents</summary>

Verify each finding against the current code and only fix it if needed.

Inline comments:
In @Prompts proyecto final AI4DEVS/contexto_prototipo.md:

  • Line 23: Add an empty blank line immediately before and after each Markdown
    table in contexto_prototipo.md so they are surrounded by blank lines;
    specifically update the table that follows the line "¿Prefieres trabajar con
    Supabase en la nube o localmente con Docker?" and the other table occurrences
    noted (near the other listed locations) to have a blank line above and a blank
    line below to satisfy MD058.
  • Line 30: Update all fenced code blocks in the document to include a language
    identifier (e.g., json, yaml, ```bash) to satisfy MD040; specifically
    locate the fenced blocks that contain the line "¿Quieres incluir recuperación de
    contraseña en Sprint 1 o posponerlo?" and the other blocks referenced in the
    comment and add the appropriate language tag for each block so syntax
    highlighting/linting is enabled.

In @Prompts proyecto final AI4DEVS/Índice de prompts.txt:

  • Line 2: The first list item "Prompt planning de Salmantour (Definido los
    primeros pasos para definir la estructura base del proyecto" has an unmatched
    opening parenthesis; close it by adding a trailing ")" so the line becomes
    "Prompt planning de Salmantour (Definido los primeros pasos para definir la
    estructura base del proyecto)". Make this change to the item text to remove the
    dangling fragment.

In @Prompts proyecto final AI4DEVS/prompts_autenticacion.md:

  • Around line 225-255: La documentación contiene PII y credenciales reales (ej.:
    email "tpv888@gmail.com", UUIDs "137a2ce9-82b7-4438-b05a-3116ace9e554", JWT
    beginning "eyJhbGci...", refresh_token "mcaqultemlfk", IP "77.243.87.230" y
    bloques "auth.users" JSON) — reemplaza todas esas ocurrencias por placeholders
    neutrales (por ejemplo user@example.com, , , ) en
    este archivo y en cualquier otro fichero del commit; luego purga la historia git
    con una herramienta como git filter-repo o BFG y force-pushea la rama;
    finalmente, si la sesión/refresh_token no fue revocada, revoca "mcaqultemlfk" (y
    cualquier otra sesión expuesta) desde el panel de Supabase para asegurarte de
    que las credenciales ya no sean válidas.
  • Line 117: Resumen: Corregir el typo de ruta "fronted/docs" a "frontend/docs"
    en el archivo Prompts proyecto final AI4DEVS/prompts_autenticacion.md. Busca la
    cadena "fronted/docs" dentro de ese archivo y reemplázala por "frontend/docs"
    para que apunte al directorio correcto; conserva el resto del texto tal cual y
    verifica otras ocurrencias en el mismo archivo para consistencia (también revisa
    referencias a README.md, DEVELOPMENTS.md, ARCHITECTURE.md y USER_STORIES.md
    mencionadas en el mismo párrafo).

In @Prompts proyecto final AI4DEVS/prompts_favoritos_gallery.md:

  • Line 301: Fix the typo in the prompt text where "whishlist" is misspelled;
    replace the string "whishlist" with the correct spelling "wishlist" in the
    prompt sentence that starts with "El botón favorito debe mostrarse..." so all
    occurrences of "whishlist" are updated to "wishlist" in Prompts proyecto final
    AI4DEVS prompts (locate the exact phrase "whishlist" in the markdown and correct
    it).

In @Prompts proyecto final AI4DEVS/prompts_mapa_medallas.md:

  • Line 245: There are duplicate "## Tu objetivo" headings causing markdownlint
    MD024; locate every heading instance titled "## Tu objetivo" in
    prompts_mapa_medallas.md and disambiguate them by renaming or adding a concise
    suffix (e.g., "## Tu objetivo — Parte 1" or "## Tu objetivo (Resumen)") so each
    heading is unique while preserving meaning; update any internal references if
    present to match the new heading text.
  • Around line 30-32: The fenced code blocks in prompts_mapa_medallas.md (for
    example the block containing "UI (Screens) → Hooks (useMedals, useLocation) →
    State (Zustand Store) → Services (medalService, locationService) → Supabase
    Client / expo-location)") are missing language identifiers and trigger MD040;
    update each fenced block by adding an appropriate language tag (e.g., txt, bash,
    sql, json) after the opening ``` so all blocks at the noted ranges (30-32,
    107-113, 118-126, 146-150, 156-180) include a language specifier.

In @Prompts proyecto final AI4DEVS/prompts_redaccion_anexos.md:

  • Line 152: Fix the typo in the section heading text by changing "Indidaciones
    del Anexo IV Plan de seguridad" to "Indicaciones del Anexo IV Plan de seguridad"
    so the heading uses the correct word; update the heading string in the markdown
    where the heading "Indidaciones del Anexo IV Plan de seguridad" appears.

In @Prompts proyecto final AI4DEVS/prompts_revision_tests.md:

  • Line 307: Fix the spelling mistake in the prompt text: replace "profunidad"
    with "profundidad" in the sentence that begins "Revisa en profunidad el archivo
    ARCHITECTURE.md" within Prompts proyecto final
    AI4DEVS/prompts_revision_tests.md; search for any other occurrences of
    "profunidad" in the file and correct them to "profundidad" to keep the wording
    consistent.

In @Prompts proyecto final AI4DEVS/prompts_vista_friends.md:

  • Around line 24-28: Add a blank line before and after each Markdown table to
    satisfy MD058; specifically, ensure the table that begins with the header "|
    Capa | Tecnologías |" (and the other tables containing the rows shown later in
    the file) has an empty line immediately above its first header row and an empty
    line immediately after its last row so the tables render consistently across
    parsers.
  • Around line 31-33: Several fenced code blocks in the Markdown are missing
    language identifiers (e.g., the block containing "UI (Screens/Tabs) → Hooks →
    State (Zustand Stores) → Services → Supabase Client" and other blocks called out
    in the review). For each triple-backtick block, add the appropriate language tag
    (for example ts, sql, txt, or log) immediately after the opening ``` so
    markdown linters (MD040) pass; pick the language that best matches the snippet
    content (TypeScript for React/hooks/store code, SQL for queries, txt/log for
    plain text). Search the file for all remaining unlabeled fenced blocks
    (including the other blocks noted in the review) and update their opening fences
    to include the correct language tag.

Nitpick comments:
In @Prompts proyecto final AI4DEVS/prompts_autenticacion.md:

  • Line 65: Several fenced code blocks in the prompts_autenticacion.md file are
    missing language specifiers (they use plain ), which hurts readability; update each unlabeled fence to include an appropriate language tag (e.g., typescript, json, text, or log) so renderers apply syntax highlighting, and ensure examples and snippets throughout the document use the most specific tag that matches the snippet content; search for all occurrences of "" without a language and replace them accordingly.

In @Prompts proyecto final AI4DEVS/prompts_casos_de_uso.md:

  • Around line 21-27: The markdown tables (e.g., the one under the "### Stack
    Tecnológico" heading and the other tables referenced) need blank lines above and
    below them to satisfy MD058: locate each table block (rows beginning with '|'
    and the header separator '------') and insert a single empty line before the
    table and a single empty line after the table so the renderer/linter recognizes
    them as standalone blocks; update all instances noted in the comment (the table
    under "Stack Tecnológico" and the additional tables mentioned) accordingly.
  • Around line 179-184: The markdown fenced code blocks containing the use-case
    templates and section examples (e.g., the block starting with "CU-XX: [Nombre
    del caso de uso]" and the blocks under headings "### 7.4 Casos de Uso del
    Sistema de Medallas y Desbloqueo" and "### 7.6 Casos de Uso del Sistema de
    Favoritos") are missing language identifiers; update each triple-backtick fence
    to include a language token like markdown or text (e.g., ```markdown) to satisfy
    MD040 and improve readability across the blocks referenced (also apply same
    change to the other affected blocks around lines 273-281 and 300-320).

In @Prompts proyecto final AI4DEVS/prompts_favoritos_gallery.md:

  • Line 23: The markdown has unlabeled code fences and tables without surrounding
    blank lines: add appropriate language identifiers (e.g., text, sql,
    shell) to every code fence represented by bare markers and ensure each
    Markdown table (for example the table starting with the header row "| Capa |
    Tecnologías |" and the other tables present) is preceded and followed by a blank
    line; update the fences and table spacing throughout the file so they conform to
    MD040 (label fences) and MD058 (blank lines around tables).

In @Prompts proyecto final AI4DEVS/prompts_redaccion_anexos.md:

  • Line 21: Add a blank line before and after the Markdown table that begins with
    the header "| Capa | Tecnologías |" so the table is properly separated (fixes
    MD058), and update the unlabeled code fence at the index template (the fence
    around the content at the region referenced near the "index template" at line
  1. to use a labeled fence like ```text to clarify intent (fixes MD040).

In @Prompts proyecto final AI4DEVS/prompts_redaccion_memoria.md:

  • Around line 20-26: The Markdown table under the "### Stack Tecnológico"
    heading violates MD058 because it lacks surrounding blank lines; fix it by
    adding a single blank line immediately before the table starts and a single
    blank line immediately after the table ends so the table is separated from
    surrounding content, then re-run markdownlint to confirm MD058 is resolved
    (refer to the "### Stack Tecnológico" heading and the Markdown table block).
  • Around line 162-168: Los bloques de código con triple backticks carecen de
    etiqueta de lenguaje (MD040); añade etiquetas apropiadas como markdown
    para fragmentos de documentación y encabezados (por ejemplo el bloque que
    comienza con "1. [Título del apartado]", los bloques que contienen "### US-009:
    Visualización de información de lugar" y "### ADRs (Architecture Decision
    Records)") y text para párrafos narrativos (por ejemplo el bloque que
    empieza "La investigación sobre el ocio del alumnado universitario..."), y
    aplica la misma corrección a los demás bloques similares en el archivo (las
    otras ocurrencias señaladas) para mejorar el linting y resaltado de sintaxis.

In @Prompts proyecto final AI4DEVS/prompts_revision_tests.md:

  • Line 212: There are unlabeled fenced code blocks using only triple backticks
    ("") in the markdown; update each of those fences to include an explicit language tag (for example change "" to "text" or "shell" as
    appropriate) so the linter/build renders and enables proper
    formatting/copy-paste for the blocks that currently render as raw output; search
    for the literal "```" occurrences around the three reported blocks and replace
    them with the chosen labeled fences.

In @Prompts proyecto final AI4DEVS/prompts_vista_progreso.md:

  • Around line 474-476: There are duplicate headings "Prompt 6:" causing MD024;
    locate the repeated heading lines with the exact text "Prompt 6:" in
    prompts_vista_progreso.md and rename one of them to a unique heading (e.g.,
    "Prompt 6: Adjustments" or "Prompt 6a: ...") so headings are not identical, then
    update any nearby references or internal links to match the new heading text.
  • Around line 65-91: The Markdown file contains several fenced code blocks
    missing language identifiers (MD040); update each triple-backtick block to
    include an appropriate language tag (e.g., text, markdown, ts/tsx) so linters
    can parse them — for example add text for directory trees and logs, ts for
    the router.push(...) snippet and any TypeScript examples, and ```text or
containing the examples referencing router.push,
MedalServiceResult<UserMedalWithDetails>, zoomToRect, and the directory tree/CLI
output and add the matching language identifier to each fenced block (also apply
the same fix to the other ranges noted in the review).

In `@readme.md`:
- Around line 162-166: The README has fenced code blocks without language tags
(e.g., the shell snippet containing "cd frontend\nnpm test", the directory tree
block that should be plain text, the mermaid flowchart block, and the YAML
operation example), which triggers MD040; update each triple-backtick fence to
include the appropriate language identifier (e.g., ```bash for shell commands,
```text for the directory tree, ```mermaid for flowcharts, and ```yaml for YAML
examples) so syntax highlighting and linting are satisfied across the affected
snippets.
- Around line 114-121: Add blank lines before and after the "####
Prerrequisitos" header and the following markdown table so the table is
separated from surrounding content; locate the "Prerrequisitos" heading and the
table block (the pipe-delimited rows under it) and insert an empty line above
the heading and another empty line after the table to satisfy MD058 and ensure
consistent rendering.

2. Sobre Infraestructura
- ¿Ya tienes cuenta de Supabase configurada o necesitamos crearla?
- ¿Ya tienes API Key de Google Maps o necesitas obtenerla?
- ¿Prefieres trabajar con Supabase en la nube o localmente con Docker?
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Surround tables with blank lines.

MD058 requires a blank line before and after tables for consistent rendering.

Also applies to: 176-176, 183-183, 192-192, 200-200, 241-241

🧰 Tools
🪛 markdownlint-cli2 (0.21.0)

[warning] 23-23: Tables should be surrounded by blank lines

(MD058, blanks-around-tables)

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@Prompts` proyecto final AI4DEVS/contexto_prototipo.md at line 23, Add an
empty blank line immediately before and after each Markdown table in
contexto_prototipo.md so they are surrounded by blank lines; specifically update
the table that follows the line "¿Prefieres trabajar con Supabase en la nube o
localmente con Docker?" and the other table occurrences noted (near the other
listed locations) to have a blank line above and a blank line below to satisfy
MD058.

- ¿Tienes coordenadas GPS reales de esos lugares?
4. Sobre Alcance del Sprint 1
- ¿Prefieres un enfoque conservador (asegurar lo mínimo) o ambicioso?
- ¿Quieres incluir recuperación de contraseña en Sprint 1 o posponerlo?
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Add language identifiers to fenced code blocks.

This avoids MD040 warnings and keeps formatting consistent across docs.

Also applies to: 78-78, 130-130, 151-151

🧰 Tools
🪛 markdownlint-cli2 (0.21.0)

[warning] 30-30: Fenced code blocks should have a language specified

(MD040, fenced-code-language)

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@Prompts` proyecto final AI4DEVS/contexto_prototipo.md at line 30, Update all
fenced code blocks in the document to include a language identifier (e.g.,
```json, ```yaml, ```bash) to satisfy MD040; specifically locate the fenced
blocks that contain the line "¿Quieres incluir recuperación de contraseña en
Sprint 1 o posponerlo?" and the other blocks referenced in the comment and add
the appropriate language tag for each block so syntax highlighting/linting is
enabled.

@@ -0,0 +1,15 @@
**ORDEN DE PROMPTS**
1. Prompt planning de Salmantour (Definido los primeros pasos para definir la estructura base del proyecto
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Fix unmatched parenthesis in item 1.

Line 2 opens a parenthesis but never closes it. Please close it to avoid a dangling fragment.

🧰 Tools
🪛 LanguageTool

[grammar] ~2-~2: Aquí puede haber un error.
Context: ...sos para definir la estructura base del proyecto 2. "Realiza el primer paso que has definido...

(QB_NEW_ES)

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@Prompts` proyecto final AI4DEVS/Índice de prompts.txt at line 2, The first
list item "Prompt planning de Salmantour (Definido los primeros pasos para
definir la estructura base del proyecto" has an unmatched opening parenthesis;
close it by adding a trailing ")" so the line becomes "Prompt planning de
Salmantour (Definido los primeros pasos para definir la estructura base del
proyecto)". Make this change to the item text to remove the dangling fragment.


- Buena idea la de implementar ScreenContainer. Añade el archivo y una breve mención sobre esto en los archivos de documentación involucrados en este diseño actualizado.

Cuando te indico de actualizar los archivos de documentación, me refiero principalmente a los `README.md` de raíz, de `docs` y de frontend; `DEVELOPMENT.md`, `ARCHITECTURE.md`, `USER_STORIES.md` y los de la carpeta `fronted/docs`. También puedes actualizar archivos de las guías técnica en la carpeta `docs/technical`, pero esos no son prioridad, no van a ser documentos oficiales de documentación, solo sirven para el desarrollo. Lo importante es que actualices los documentos oficiales de documentación (los que te he indicado).
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Typo: fronted/docs should be frontend/docs.

The path as written references a non-existent directory name, which could confuse future contributors looking for documentation files.

✏️ Proposed fix
-`README.md` de raíz, de `docs` y de frontend; `DEVELOPMENT.md`, `ARCHITECTURE.md`, `USER_STORIES.md` y los de la carpeta `fronted/docs`.
+`README.md` de raíz, de `docs` y de frontend; `DEVELOPMENT.md`, `ARCHITECTURE.md`, `USER_STORIES.md` y los de la carpeta `frontend/docs`.
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
Cuando te indico de actualizar los archivos de documentación, me refiero principalmente a los `README.md` de raíz, de `docs` y de frontend; `DEVELOPMENT.md`, `ARCHITECTURE.md`, `USER_STORIES.md` y los de la carpeta `fronted/docs`. También puedes actualizar archivos de las guías técnica en la carpeta `docs/technical`, pero esos no son prioridad, no van a ser documentos oficiales de documentación, solo sirven para el desarrollo. Lo importante es que actualices los documentos oficiales de documentación (los que te he indicado).
Cuando te indico de actualizar los archivos de documentación, me refiero principalmente a los `README.md` de raíz, de `docs` y de frontend; `DEVELOPMENT.md`, `ARCHITECTURE.md`, `USER_STORIES.md` y los de la carpeta `frontend/docs`. También puedes actualizar archivos de las guías técnica en la carpeta `docs/technical`, pero esos no son prioridad, no van a ser documentos oficiales de documentación, solo sirven para el desarrollo. Lo importante es que actualices los documentos oficiales de documentación (los que te he indicado).
🧰 Tools
🪛 LanguageTool

[grammar] ~117-~117: Elimina la preposición
Context: ... diseño actualizado. Cuando te indico de actualizar los archivos de documentació...

(QB_NEW_ES_OTHER_ERROR_IDS_UNNECESSARY_ADPOSITION)


[grammar] ~117-~117: Corrige el error ortográfico.
Context: ..., USER_STORIES.md y los de la carpeta fronted/docs. También puedes actualizar archiv...

(QB_NEW_ES_OTHER_ERROR_IDS_REPLACEMENT_ORTHOGRAPHY_SPELLING)


[grammar] ~117-~117: Cambia la forma del adjetivo.
Context: ...puedes actualizar archivos de las guías técnica en la carpeta docs/technical, pero es...

(QB_NEW_ES_OTHER_ERROR_IDS_REPLACEMENT_ADJECTIVE_FORM)

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@Prompts` proyecto final AI4DEVS/prompts_autenticacion.md at line 117,
Resumen: Corregir el typo de ruta "fronted/docs" a "frontend/docs" en el archivo
Prompts proyecto final AI4DEVS/prompts_autenticacion.md. Busca la cadena
"fronted/docs" dentro de ese archivo y reemplázala por "frontend/docs" para que
apunte al directorio correcto; conserva el resto del texto tal cual y verifica
otras ocurrencias en el mismo archivo para consistencia (también revisa
referencias a README.md, DEVELOPMENTS.md, ARCHITECTURE.md y USER_STORIES.md
mencionadas en el mismo párrafo).

Comment on lines +225 to +255
```
Android Bundled 2477ms node_modules\expo-router\entry.js (1203 modules)
LOG [useAuthState] Ejecutando initialize...
LOG [AuthStore] Inicializando...
LOG [AuthStore] No hay sesión activa
LOG [useAuthState] Ejecutando initialize...
LOG [AuthStore] Ya inicializado, saltando...
LOG [NavigationGuard] Estado: {"inAuthGroup": false, "inRootIndex": true, "inTabsGroup": false, "isAuthenticated": false, "segments": ""}
LOG [AuthStore] Auth state changed: INITIAL_SESSION
LOG [AuthService] Iniciando registro para: tpv888@gmail.com
LOG [AuthService] Usuario creado en Auth: 137a2ce9-82b7-4438-b05a-3116ace9e554
LOG [AuthService] Registro completado exitosamente
```
Imagino que está configurado de manera que no se añada ningún usuario en la base de datos hasta que se verifique el correo electrónico, pero creo que deberíamos cambiar esta lógica. Si mantenemos eso, deberíamos añadir una vista nueva de "verifica tu correo electrónico con el correo que te hemos enviado" que sirva como "vista de espera", entre el signup y vista principal de mapa. De esta manera, podemos asegurar que no acceda a la app ningún usuario que no esté en la base de datos (lo que significa estar verificado). Otra opción es permitir entrar directamente después de hacer signup (como está ahora), y añadir el usuario a la tabla 'users' aunque no tenga verificado el correo electrónico. En esta opción, se le podría añadir un atributo "verified" que fuese false hasta que verificase su correo con el correo automático que envía Supabase, y si cierra sesión, no se le permitiría iniciar sesión de nuevo hasta que verificase el correo.
Entre estas 2 opciones prefiero implementar la primera, pero tú mismo puedes analizar la situación y decidir la que consideres mejor (o decidir otra no planteada), explicándome por qué.

Por ahora, este error de usuario no añadido a la tabla es el principal que tenemos, y que da lugar a otros comportamientos extraños. Un caso de mal funcionamiento es el intento de Cerrar Sesión. Si el usuario confirma que quiere cerrar su sesión, no recibe ninguna confirmación visual en la app, ya que le mantiene en la misma vista de profile. Debería ocurrir que, al confirmar que desea cerrar sesión, se cierre bien su sesión y se le redirija a una pantalla inicial de Login o Singup (ya que no tenemos landing page todavía). En los logs del terminal sí que indica que se cierra la sesión, pero sin hacer nada visible para el usuario. De hecho, como sigue en la misma vista de profile, el usuario puede intentar cerrar sesión varias veces seguidas, lo que es un comportamiento extraño que no debería ocurrir:
```
LOG [AuthService] Cerrando sesión...
LOG [AuthStore] Auth state changed: SIGNED_OUT
LOG [AuthService] Sesión cerrada exitosamente
LOG [AuthService] Cerrando sesión...
LOG [AuthStore] Auth state changed: SIGNED_OUT
LOG [AuthService] Sesión cerrada exitosamente
LOG [AuthService] Cerrando sesión...
LOG [AuthStore] Auth state changed: SIGNED_OUT
LOG [AuthService] Sesión cerrada exitosamente
```
No estoy seguro de si este fallo se debe a lo del usuario, pero lo deberemos arreglar igualmente.

También me está dando error al intentar verificar el correo electrónico con el mensaje que me llega automáticamente de Supabase. Me indica un link para verificar la cuenta, que me redirige a una página que me da un error "localhost ha rechazado la conexión". Te he adjuntado capturas de pantalla de esto. El enlace al que se me redirige al hacer clic en el enlace de verificación es: "http://localhost:3000/#access_token=eyJhbGciOiJIUzI1NiIsImtpZCI6ImZnS1FST05rY2ROTzhYdmciLCJ0eXAiOiJKV1QifQ.eyJpc3MiOiJodHRwczovL3d3Z25yendwaW5hcHVqZW1yanBoLnN1cGFiYXNlLmNvL2F1dGgvdjEiLCJzdWIiOiIxMzdhMmNlOS04MmI3LTQ0MzgtYjA1YS0zMTE2YWNlOWU1NTQiLCJhdWQiOiJhdXRoZW50aWNhdGVkIiwiZXhwIjoxNzY1MDUzNzkyLCJpYXQiOjE3NjUwNTAxOTIsImVtYWlsIjoidHB2ODg4QGdtYWlsLmNvbSIsInBob25lIjoiIiwiYXBwX21ldGFkYXRhIjp7InByb3ZpZGVyIjoiZW1haWwiLCJwcm92aWRlcnMiOlsiZW1haWwiXX0sInVzZXJfbWV0YWRhdGEiOnsiZW1haWwiOiJ0cHY4ODhAZ21haWwuY29tIiwiZW1haWxfdmVyaWZpZWQiOnRydWUsInBob25lX3ZlcmlmaWVkIjpmYWxzZSwic3ViIjoiMTM3YTJjZTktODJiNy00NDM4LWIwNWEtMzExNmFjZTllNTU0IiwidXNlcm5hbWUiOiJUaW9fVG9ueSJ9LCJyb2xlIjoiYXV0aGVudGljYXRlZCIsImFhbCI6ImFhbDEiLCJhbXIiOlt7Im1ldGhvZCI6Im90cCIsInRpbWVzdGFtcCI6MTc2NTA1MDE5Mn1dLCJzZXNzaW9uX2lkIjoiY2JmZDU1ODEtYmNhZC00ODVhLTg0ZmUtZTY1MGM2NzE0Mzk5IiwiaXNfYW5vbnltb3VzIjpmYWxzZX0.YbEngIyHweXgv9CkeDyzJbFgsI3iYltJmQ5Q5yX-Ns0&expires_at=1765053792&expires_in=3600&refresh_token=mcaqultemlfk&token_type=bearer&type=signup". A lo mejor el error ocurre porque me redirige a 'localhost:3000' y yo estoy utilizando otro puerto, no lo sé. Revisa esto y explica por qué está ocurriendo este error.
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

Remove real user PII and credentials from committed documentation.

This file contains multiple categories of personal data and live credentials across several sections:

  • Lines 234–235 (log block): real email tpv888@gmail.com and auth UUID committed verbatim.
  • Line 255: a full Supabase JWT access token (its payload encodes the email, user UUID, and username), a plaintext refresh_token, and the Supabase project reference (wwgnrzwpinapujemrjph.supabase.co).
  • Lines 327–392: raw auth.users JSON records with real email and UUID.
  • Lines 398–532: Supabase API Gateway log containing actor_username: tpv888@usal.es, actor_id, and remote_addr: 77.243.87.230 (a real IP address).
  • Lines 600–610: additional logs with tpv888@usal.es and another UUID.

Even with the JWT expired and the refresh token likely revoked, the personal data (emails, UUIDs, IP address) persists in git history and violates GDPR/LOPDGDD data minimisation principles — particularly relevant for a Spanish university project. If the refresh token has not been explicitly revoked on the Supabase dashboard, there is a small but non-zero risk.

Recommended remediation:

  1. Redact all emails, UUIDs, IP addresses, and tokens with placeholders (e.g., tpv888@gmail.com<user@example.com>, UUID → <uuid>, token → <redacted>) before the PR is merged.
  2. Force-push or use git filter-repo to purge the data from git history.
  3. Explicitly revoke the refresh token mcaqultemlfk in the Supabase Auth dashboard under the relevant user's sessions if not already done.

Also applies to: 327-392, 398-532, 600-610

🧰 Tools
🪛 LanguageTool

[grammar] ~238-~238: Corrige la minúscula.
Context: ...o, deberíamos añadir una vista nueva de "verifica tu correo electrónico con el correo que...

(QB_NEW_ES_OTHER_ERROR_IDS_REPLACEMENT_ORTHOGRAPHY_LOWERCASE)


[grammar] ~238-~238: Aquí puede haber un error.
Context: ...como "vista de espera", entre el signup y vista principal de mapa. De esta manera...

(QB_NEW_ES)


[grammar] ~238-~238: Cambia la palabra o signo.
Context: ...espués de hacer signup (como está ahora), y añadir el usuario a la tabla 'users' ...

(QB_NEW_ES_OTHER_ERROR_IDS_REPLACEMENT_PUNCTUATION)


[grammar] ~239-~239: Agrega un signo de puntuación.
Context: ...que verificase el correo. Entre estas 2 opciones prefiero implementar la primera, pero t...

(QB_NEW_ES_OTHER_ERROR_IDS_MISSING_PUNCTUATION)


[grammar] ~241-~241: Corrige la mayúscula.
Context: ... de mal funcionamiento es el intento de Cerrar Sesión. Si el usuario confirma que quie...

(QB_NEW_ES_OTHER_ERROR_IDS_REPLACEMENT_ORTHOGRAPHY_UPPERCASE)


[grammar] ~241-~241: Corrige la mayúscula.
Context: ... funcionamiento es el intento de Cerrar Sesión. Si el usuario confirma que quiere cerr...

(QB_NEW_ES_OTHER_ERROR_IDS_REPLACEMENT_ORTHOGRAPHY_UPPERCASE)


[grammar] ~241-~241: Corrige la mayúscula.
Context: ...e le redirija a una pantalla inicial de Login o Singup (ya que no tenemos landing pag...

(QB_NEW_ES_OTHER_ERROR_IDS_REPLACEMENT_ORTHOGRAPHY_UPPERCASE)


[grammar] ~241-~241: Corrige el error ortográfico.
Context: ...irija a una pantalla inicial de Login o Singup (ya que no tenemos landing page todavía...

(QB_NEW_ES_OTHER_ERROR_IDS_REPLACEMENT_ORTHOGRAPHY_SPELLING)


[grammar] ~255-~255: Agrega un signo de puntuación.
Context: ...e me redirige a una página que me da un error "localhost ha rechazado la conexión". T...

(QB_NEW_ES_OTHER_ERROR_IDS_MISSING_PUNCTUATION)

🪛 markdownlint-cli2 (0.21.0)

[warning] 233-233: Fenced code blocks should have a language specified

(MD040, fenced-code-language)


[warning] 241-241: Fenced code blocks should have a language specified

(MD040, fenced-code-language)

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@Prompts` proyecto final AI4DEVS/prompts_autenticacion.md around lines 225 -
255, La documentación contiene PII y credenciales reales (ej.: email
"tpv888@gmail.com", UUIDs "137a2ce9-82b7-4438-b05a-3116ace9e554", JWT beginning
"eyJhbGci...", refresh_token "mcaqultemlfk", IP "77.243.87.230" y bloques
"auth.users" JSON) — reemplaza todas esas ocurrencias por placeholders neutrales
(por ejemplo <user@example.com>, <uuid>, <redacted-token>, <ip>) en este archivo
y en cualquier otro fichero del commit; luego purga la historia git con una
herramienta como git filter-repo o BFG y force-pushea la rama; finalmente, si la
sesión/refresh_token no fue revocada, revoca "mcaqultemlfk" (y cualquier otra
sesión expuesta) desde el panel de Supabase para asegurarte de que las
credenciales ya no sean válidas.


- Prefiero que los indicadores de 'lugares totales' y de 'medallas obtenidas' que se muestran en la vista del mapa aparezcan arriba, en vez de abajo. Creo que queda mejor justo debajo de los filtros por categoría.

## Tu objetivo
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Disambiguate duplicate headings.

markdownlint MD024 flags repeated headings. Consider renaming or adding a suffix to distinguish them.

🧰 Tools
🪛 LanguageTool

[grammar] ~245-~245: Cambia la palabra o signo.
Context: ...jo de los filtros por categoría. ## Tu objetivo Resuelve las cuestiones planteadas 1 a 1...

(QB_NEW_ES_OTHER_ERROR_IDS_REPLACEMENT_OTHER)

🪛 markdownlint-cli2 (0.21.0)

[warning] 245-245: Multiple headings with the same content

(MD024, no-duplicate-heading)

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@Prompts` proyecto final AI4DEVS/prompts_mapa_medallas.md at line 245, There
are duplicate "## Tu objetivo" headings causing markdownlint MD024; locate every
heading instance titled "## Tu objetivo" in prompts_mapa_medallas.md and
disambiguate them by renaming or adding a concise suffix (e.g., "## Tu objetivo
— Parte 1" or "## Tu objetivo (Resumen)") so each heading is unique while
preserving meaning; update any internal references if present to match the new
heading text.


Confirmo tu comprensión total del contexto de nuestro proyecto "Salmantour" y de lo que debes desarrollar en los Anexos que te he pedido. A continuación, te doy más indicaciones para tu redacción del `Anexo IV- Plan de seguridad.md` y te respondo a tus dudas sobre este. Todavía no te respondo a las dudas del Anexo III, ni te doy más indicaciones sobre ese porque ahora te debes centrar en el Anexo IV, te daré más contexto sobre el otro archivo más adelante.

## Indidaciones del Anexo IV Plan de seguridad
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Typo in section heading: IndidacionesIndicaciones.

✏️ Proposed fix
-## Indidaciones del Anexo IV Plan de seguridad
+## Indicaciones del Anexo IV Plan de seguridad
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
## Indidaciones del Anexo IV Plan de seguridad
## Indicaciones del Anexo IV Plan de seguridad
🧰 Tools
🪛 LanguageTool

[grammar] ~152-~152: Cambia la palabra o signo.
Context: .... ## Indidaciones del Anexo IV Plan de seguridad - Has realizado una comprensión perfecta d...

(QB_NEW_ES_OTHER_ERROR_IDS_REPLACEMENT_OTHER)

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@Prompts` proyecto final AI4DEVS/prompts_redaccion_anexos.md at line 152, Fix
the typo in the section heading text by changing "Indidaciones del Anexo IV Plan
de seguridad" to "Indicaciones del Anexo IV Plan de seguridad" so the heading
uses the correct word; update the heading string in the markdown where the
heading "Indidaciones del Anexo IV Plan de seguridad" appears.

Excelente trabajo. Vamos a continuar con la revisión final del proyecto y poder concluir su entrega:

## Tus tareas
- Revisa en profunidad el archivo `ARCHITECTURE.md`, que es uno de los archivos más importantes de documentación. Asegúrate de que todo lo que dice es correcto y que está actualizado. Además, debes mejorar la parte de 'Testing', que ahora es poco detallada y se podría integrar mejor, explicando las decisiones tomadas para los tests unitarios (algunas las explicas en `DEVELOPMENT.md`, pero es necesario que lo expliques en profundidad aquí también)
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Typo in task description: profunidadprofundidad.

✏️ Proposed fix
-- Revisa en profunidad el archivo `ARCHITECTURE.md`
+- Revisa en profundidad el archivo `ARCHITECTURE.md`
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
- Revisa en profunidad el archivo `ARCHITECTURE.md`, que es uno de los archivos más importantes de documentación. Asegúrate de que todo lo que dice es correcto y que está actualizado. Además, debes mejorar la parte de 'Testing', que ahora es poco detallada y se podría integrar mejor, explicando las decisiones tomadas para los tests unitarios (algunas las explicas en `DEVELOPMENT.md`, pero es necesario que lo expliques en profundidad aquí también)
- Revisa en profundidad el archivo `ARCHITECTURE.md`, que es uno de los archivos más importantes de documentación. Asegúrate de que todo lo que dice es correcto y que está actualizado. Además, debes mejorar la parte de 'Testing', que ahora es poco detallada y se podría integrar mejor, explicando las decisiones tomadas para los tests unitarios (algunas las explicas en `DEVELOPMENT.md`, pero es necesario que lo expliques en profundidad aquí también)
🧰 Tools
🪛 LanguageTool

[grammar] ~307-~307: Corrige el error ortográfico.
Context: ... su entrega: ## Tus tareas - Revisa en profunidad el archivo ARCHITECTURE.md, que es un...

(QB_NEW_ES_OTHER_ERROR_IDS_REPLACEMENT_ORTHOGRAPHY_SPELLING)


[grammar] ~307-~307: Cambia la palabra o signo.
Context: ...o expliques en profundidad aquí también) - Tengo algunas dudas sobre `DEVELOPMENT.m...

(QB_NEW_ES_OTHER_ERROR_IDS_REPLACEMENT_OTHER)

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@Prompts` proyecto final AI4DEVS/prompts_revision_tests.md at line 307, Fix
the spelling mistake in the prompt text: replace "profunidad" with "profundidad"
in the sentence that begins "Revisa en profunidad el archivo `ARCHITECTURE.md`"
within Prompts proyecto final AI4DEVS/prompts_revision_tests.md; search for any
other occurrences of "profunidad" in the file and correct them to "profundidad"
to keep the wording consistent.

Comment on lines +24 to +28
| Capa | Tecnologías |
|------|-------------|
| **Frontend** | React Native, Expo SDK 53, TypeScript, Expo Router, Zustand |
| **Backend** | Supabase (Auth + PostgreSQL + Storage), Row Level Security |
| **Servicios** | Google Maps API, expo-location, expo-camera, expo-image-manipulator |
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Surround tables with blank lines.

Markdownlint MD058 requires blank lines before and after tables to render consistently across parsers.

Also applies to: 333-340, 342-349

🧰 Tools
🪛 LanguageTool

[grammar] ~25-~25: Cambia la palabra o signo.
Context: ...Tecnológico | Capa | Tecnologías | |------|-------------| | Frontend | React N...

(QB_NEW_ES_OTHER_ERROR_IDS_REPLACEMENT_PUNCTUATION)


[grammar] ~25-~25: Cambia la palabra o signo.
Context: ...Capa | Tecnologías | |------|-------------| | Frontend | React Native, Expo SD...

(QB_NEW_ES_OTHER_ERROR_IDS_REPLACEMENT_PUNCTUATION)

🪛 markdownlint-cli2 (0.21.0)

[warning] 24-24: Tables should be surrounded by blank lines

(MD058, blanks-around-tables)

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@Prompts` proyecto final AI4DEVS/prompts_vista_friends.md around lines 24 -
28, Add a blank line before and after each Markdown table to satisfy MD058;
specifically, ensure the table that begins with the header "| Capa | Tecnologías
|" (and the other tables containing the rows shown later in the file) has an
empty line immediately above its first header row and an empty line immediately
after its last row so the tables render consistently across parsers.

Comment on lines +31 to +33
```
UI (Screens/Tabs) → Hooks → State (Zustand Stores) → Services → Supabase Client
```
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Add language identifiers to fenced code blocks.

Several fenced blocks lack a language tag, which trips MD040. Add a language spec (e.g., sql, txt, ts, log) to each affected block.

Also applies to: 85-86, 138-142, 199-201, 206-208, 213-215, 241-246, 248-253, 352-360, 428-434, 572-599, 612-702

🧰 Tools
🪛 markdownlint-cli2 (0.21.0)

[warning] 31-31: Fenced code blocks should have a language specified

(MD040, fenced-code-language)

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@Prompts` proyecto final AI4DEVS/prompts_vista_friends.md around lines 31 -
33, Several fenced code blocks in the Markdown are missing language identifiers
(e.g., the block containing "UI (Screens/Tabs) → Hooks → State (Zustand Stores)
→ Services → Supabase Client" and other blocks called out in the review). For
each triple-backtick block, add the appropriate language tag (for example `ts`,
`sql`, `txt`, or `log`) immediately after the opening ``` so markdown linters
(MD040) pass; pick the language that best matches the snippet content
(TypeScript for React/hooks/store code, SQL for queries, txt/log for plain
text). Search the file for all remaining unlabeled fenced blocks (including the
other blocks noted in the review) and update their opening fences to include the
correct language tag.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant