josemoreupeso.es
03-stack-detection.md — TLOTP
## Opción 3 — Detectar stack tecnológico

### Intro de ejecución

```
🏹 Bardo sube a los tejados del Fuerte...
   Observando qué se forja en sus talleres.
```

### Paso 1 — Detectar lenguajes y frameworks

Ejecuta estos comandos para comprobar qué archivos de configuración existen:

```bash
ls composer.json package.json requirements.txt pyproject.toml go.mod Cargo.toml pom.xml build.gradle 2>/dev/null
```

Para cada archivo encontrado, lee su contenido y extrae:

**`composer.json`** → PHP
```bash
cat composer.json 2>/dev/null
```
- Presencia de `symfony/` en require → **Symfony**
- Presencia de `laravel/` en require → **Laravel**
- Presencia de `doctrine/` → **Doctrine ORM**
- Campo `php` en require → versión de PHP

**`package.json`** → Node/JavaScript/TypeScript
```bash
cat package.json 2>/dev/null
```
- `typescript` en dependencies/devDependencies → **TypeScript**
- `react` → **React**
- `next` → **Next.js**
- `vue` → **Vue**
- `@angular/core` → **Angular**
- `express` → **Express**
- `nestjs` → **NestJS**

**`requirements.txt` o `pyproject.toml`** → Python
```bash
cat requirements.txt pyproject.toml 2>/dev/null
```
- `django` → **Django**
- `fastapi` → **FastAPI**
- `flask` → **Flask**
- `pytest` → tiene testing con pytest

**`go.mod`** → **Go** (leer para detectar frameworks como Gin, Echo)

**`Cargo.toml`** → **Rust** (leer para detectar Actix, Axum)

**`pom.xml` o `build.gradle`** → **Java** (leer para detectar Spring)

### Paso 2 — Detectar base de datos e infraestructura

```bash
ls docker-compose.yml docker-compose.yaml Dockerfile .env.example .env 2>/dev/null
```

Leer los archivos encontrados y detectar:
- `postgres` / `postgresql` → **PostgreSQL**
- `mysql` / `mariadb` → **MySQL**
- `mongodb` / `mongo` → **MongoDB**
- `redis` → **Redis**
- `elasticsearch` → **Elasticsearch**

También buscar en `composer.json` / `package.json` / `requirements.txt`:
- `doctrine/dbal`, `pg`, `psycopg2` → **PostgreSQL**
- `mysql2`, `doctrine/orm` con mysql → **MySQL**
- `redis`, `predis` → **Redis**

### Paso 3 — Detectar herramientas de proyecto y servicios externos

```bash
ls .github/ .gitlab/ 2>/dev/null
```
- `.github/` → **GitHub**
- `.gitlab/` → **GitLab**

Buscar en dependencias (package.json, composer.json, requirements.txt):
- `@sentry/` o `sentry-sdk` → **Sentry**
- `@linear/` → **Linear**
- `jira` en scripts/README → **Jira**
- `@slack/` o `slack-sdk` → **Slack**
- `stripe` → **Stripe**
- `@vercel/` o `vercel.json` → **Vercel**
- `firebase` → **Firebase**
- `@supabase/` → **Supabase**
- `figma` en README → **Figma**

```bash
ls vercel.json firebase.json .netlify/ 2>/dev/null
```

### Paso 4 — Mostrar resultado

```
🔭 Stack detectado en el Fuerte:

💻 Lenguajes:       PHP 8.3, TypeScript
🏗️  Frameworks:     Symfony 7, React 18
🗄️  Base de datos:  PostgreSQL, Redis
🔧 Herramientas:   GitHub, Sentry
🐳 Infraestructura: Docker

→ Stack guardado en memoria para las recomendaciones (opción 5).
```

Si no se detecta nada:

```
🏹 Bardo no reconoce el stack de este Fuerte.
   Puede que sea un proyecto vacío o que use tecnologías poco comunes.
   Puedes igualmente consultar el marketplace (opción 4) para explorar manualmente.
```

### Paso 5 — Guardar en memoria de sesión

Guarda el stack detectado en una variable de contexto para que la Opción 5 pueda usarlo
sin necesidad de relanzar el análisis.

### Paso 6 — Volver al menú

Tras mostrar el resultado, pregunta al usuario (AskUserQuestion):
- Volver al menú de Bardo
- Ver recomendaciones ahora (ir a Opción 5)
- Salir

---