codigo0/docs/AUDITORIA_LIMPIEZA_PROYECTO.md

821 lines
20 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 🧹 AUDITORÍA COMPLETA DE LIMPIEZA DEL PROYECTO
**Fecha:** 2025-01-07
**Analista:** Ingeniero de Optimización y Mantenimiento
**Versión del Proyecto:** 1.0.0
---
## 📊 RESUMEN EJECUTIVO
### Estado Actual del Proyecto
- **Tamaño Total:** ~703 MB (incluyendo node_modules)
- **Archivos Markdown:** 2,247 archivos
- **Dependencias Frontend:** 78 dependencias principales
- **Dependencias Backend:** 7 dependencias principales
- **Scripts Shell:** 15+ scripts
- **Scripts Python:** 6 scripts
### Espacio Recuperable Estimado
| Categoría | Espacio Estimado | % del Total | Prioridad |
|-----------|------------------|-------------|-----------|
| **Archivos de Build (dist/)** | 15 MB | 2.1% | 🔴 Alta |
| **Logs en Repo** | < 1 MB | <0.1% | 🔴 Alta |
| **Archivos de Backup** | ~500 KB | <0.1% | 🟡 Media |
| **Documentación Obsoleta** | ~2 MB | 0.3% | 🟡 Media |
| **Scripts Duplicados** | ~50 KB | <0.1% | 🟢 Baja |
| **Dependencias No Usadas** | ~50-100 MB | 7-14% | 🟡 Media |
| **Carpetas Vacías** | < 100 KB | <0.1% | 🟢 Baja |
**Total Recuperable:** ~70-120 MB (~10-17% del proyecto sin node_modules)
### Reducción de Dependencias Estimada
- **Dependencias Potencialmente No Usadas:** 15-20% (principalmente Radix UI components)
- **Tiempo Estimado de Limpieza:** 4-6 horas
---
## 📋 TABLA DE ACCIONES PRIORIZADAS
| Prioridad | Tipo | Archivo/Ruta | Problema | Acción Recomendada | Espacio | Riesgo |
|-----------|------|--------------|----------|-------------------|---------|---------|
| **🔴 ALTA** | Build Artifacts | `dist/` | Carpeta de build en repo | Añadir a .gitignore, eliminar | 15 MB | 🟢 Bajo |
| **🔴 ALTA** | Logs | `logs/pm2-error.log` | Log en repositorio | Añadir a .gitignore, eliminar | <1 MB | 🟢 Bajo |
| **🔴 ALTA** | .env en repo | `backend/.env` | Credenciales en repo | Añadir a .gitignore, verificar no commitearse | - | 🔴 CRÍTICO |
| **🟡 MEDIA** | Backup File | `src/data/manual-index.ts.backup` | Archivo de backup | Eliminar (ya existe el original) | ~200 KB | 🟢 Bajo |
| **🟡 MEDIA** | Docs Archive | `docs/_archivo/` | 12 archivos obsoletos | Consolidar o eliminar | ~500 KB | 🟡 Medio |
| **🟡 MEDIA** | Config Backup | `config_backup/` | Configs antiguos | Eliminado tras validar que no era necesario | ~50 KB | |
| **🟡 MEDIA** | Duplicate Docs | `dist/docs/` | Duplicación de docs | Eliminar (dist debe regenerarse) | ~3 MB | 🟢 Bajo |
| **🟡 MEDIA** | Empty Folders | `assets/videos/bloque_*` (varios vacíos) | Carpetas vacías | Eliminar o documentar propósito | <100 KB | 🟢 Bajo |
| **🟡 MEDIA** | Python Venv | `.venv/` | Entorno Python en repo | Añadir a .gitignore (ya está) | Variable | 🟢 Bajo |
| **🟢 BAJA** | Duplicate Scripts | `cleanup_completo.sh` vs `cleanup_project.sh` | Scripts similares | Consolidar en uno | ~16 KB | 🟢 Bajo |
| **🟢 BAJA** | Duplicate Scripts | `deploy.sh`, `desplegar.sh`, `docker.sh` | Scripts duplicados | Consolidar o documentar diferencias | ~13 KB | 🟢 Bajo |
| **🟢 BAJA** | Temp Script | `limpiar-sw.js` | Script temporal para consola | Mover a docs o eliminar | <1 KB | 🟢 Bajo |
| **🟢 BAJA** | Root MD Files | `ESTADO_ACTUAL.md`, `EJECUTAR_AHORA.md`, etc. | Docs temporales en raíz | Mover a `docs/` o eliminar | ~20 KB | 🟢 Bajo |
| **🟢 BAJA** | Duplicate Placeholder | `dist/placeholder.svg <!-- PLACEHOLDER: No requiere creación -->` y `public/placeholder.svg` | Duplicado en dist | dist se regenera, no eliminar | - | 🟢 Bajo |
---
## 🔍 ANÁLISIS DETALLADO POR CATEGORÍA
### 1. ARCHIVOS Y CARPETAS INNECESARIOS
#### 🔴 CRÍTICO: Archivos de Build y Logs
**Problema:** Archivos generados automáticamente están en el repositorio.
```bash
# Archivos a eliminar:
dist/ # 15 MB - debe generarse en CI/CD
logs/pm2-error.log # Log generado - debe estar en .gitignore
dist/scorm/dist/ # Build artifacts duplicados
```
**Acción:**
```bash
# Añadir a .gitignore (si no está):
echo "dist/" >> .gitignore
echo "logs/*.log" >> .gitignore
# Eliminar archivos:
rm -rf dist/
rm -f logs/*.log
```
**Riesgo:** 🟢 Bajo - Estos archivos se regeneran automáticamente.
---
#### 🔴 CRÍTICO: Credenciales en Repositorio
**Problema:** `.env` file con credenciales reales.
```bash
# Verificar si está en .gitignore:
backend/.env
```
**Acción:**
```bash
# Verificar que .gitignore tiene .env:
grep -q "^\.env$" .gitignore || echo ".env" >> .gitignore
# Si ya está commitado, remover del historial (cuidado):
# git rm --cached backend/.env
# git commit -m "Remove .env from tracking"
# Crear .env.example como template:
# cp backend/.env backend/.env.example
# # Editar .env.example para eliminar valores reales
```
**Riesgo:** 🔴 CRÍTICO - Credenciales expuestas.
---
#### 🟡 MEDIA: Archivos de Backup
**Archivos Identificados:**
- `src/data/manual-index.ts.backup` (2,569 líneas, ~200 KB)
- Archivos en `docs/_archivo/` (12 archivos)
**Acción:**
```bash
# Eliminar backup si el original está OK:
rm -f src/data/manual-index.ts.backup
# Evaluar docs/_archivo/:
# Si son obsoletos, consolidar info importante y eliminar
# Si son necesarios para referencia, mantener pero documentar
```
**Riesgo:** 🟡 Medio - Verificar que el original funciona antes de eliminar.
---
#### 🟡 MEDIA: Configuraciones de Backup
**Ubicación:** `config_backup/` (eliminado)
**Contenido:**
- `_redirects` (Netlify)
- `netlify.toml`
- `nginx.conf.example`
- `vercel.json`
**Acción:**
```bash
# Evaluar si son necesarios:
# - Si no se usan Netlify/Vercel actualmente, eliminar
# - Si son ejemplos/templates, mover a docs/examples/
# - Si son activos pero diferentes, consolidar en raíz
```
**Riesgo:** 🟡 Medio - Verificar uso antes de eliminar.
---
#### 🟢 BAJA: Carpetas Vacías
**Carpetas Identificadas:**
```bash
docs/archivo # Vacía (nombre confuso con _archivo)
database/seeds/ # Vacía
assets/videos/bloque_* # Varias vacías
assets/checklists_app/ # Vacía
assets/templates/ # Vacía
```
**Acción:**
```bash
# Eliminar carpetas vacías (o añadir .gitkeep si son intencionales):
find . -type d -empty -not -path "./.git/*" -not -path "./node_modules/*" -delete
```
**Riesgo:** 🟢 Bajo - Carpetas vacías no afectan funcionalidad.
---
### 2. DEPENDENCIAS Y PAQUETES
#### Análisis de Dependencias Frontend
**Total:** 78 dependencias principales
**Potencialmente No Usadas:**
| Dependencia | Propósito | Probabilidad No Usada | Verificar |
|-------------|-----------|----------------------|-----------|
| `@hookform/resolvers` | React Hook Form | 🟡 Media | Usado en admin-panel |
| `react-resizable-panels` | Panels redimensionables | 🔴 Alta | No visto en uso |
| `input-otp` | OTP inputs | 🔴 Alta | No usado |
| `embla-carousel-react` | Carousel | 🟡 Media | Verificar si Carousel se usa |
| `vaul` | Drawer component | 🔴 Alta | No usado (hay drawer de Radix) |
| `recharts` | Gráficos | 🟡 Media | Verificar en admin panel |
| `next-themes` | Theme switching | Usado | Mantener |
| Radix UI components (30+) | UI primitives | 🟡 Media | Verificar uso real de cada uno |
**Comando para Analizar:**
```bash
# Instalar herramienta de análisis:
npm install -g depcheck
# Analizar dependencias no usadas:
depcheck
# O usar npx:
npx depcheck
```
**Acción Recomendada:**
1. Ejecutar `depcheck` para identificar dependencias no usadas
2. Verificar manualmente cada componente Radix UI usado
3. Eliminar dependencias confirmadas no usadas
4. Estimar reducción: ~50-100 MB en node_modules
**Riesgo:** 🟡 Medio - Verificar que no se usen en tiempo de ejecución o dinámicamente.
---
#### Análisis de Dependencias Backend
**Total:** 7 dependencias principales
**Todas parecen estar en uso:**
- `express` - Framework principal
- `pg` - PostgreSQL driver
- `jsonwebtoken` - Autenticación
- `bcrypt` - Hash de passwords
- `cors` - CORS middleware
- `dotenv` - Variables de entorno
- `multer` - Upload de archivos
- `archiver` - Generación de SCORM
- `marked` - Markdown parsing
**Acción:** No se requiere limpieza de dependencias backend.
---
### 3. CÓDIGO MUERTO (DEAD CODE)
#### Componentes React Potencialmente No Usados
**Verificar manualmente:**
- Componentes en `src/components/ui/` que no se importan
- Hooks en `src/hooks/` no utilizados
- Utilidades en `src/utils/` no referenciadas
**Comando para Detectar:**
```bash
# Usar ts-prune para detectar exports no usados:
npx ts-prune
# O usar uncomment para detectar imports no usados:
npx unimported
```
**Componentes a Verificar:**
```typescript
// Verificar si estos componentes se usan:
- src/components/ui/chart.tsx // ¿Gráficos en uso?
- src/components/ui/resizable.tsx // ¿Panels redimensionables?
- src/components/ui/input-otp.tsx // ¿OTP inputs?
- src/components/ui/drawer.tsx // ¿Drawer diferente de Radix?
```
**Acción:**
1. Ejecutar análisis de código muerto
2. Verificar imports dinámicos (`lazy()`)
3. Eliminar código no utilizado
---
#### Scripts y Rutas API No Utilizados
**Backend Routes a Verificar:**
```javascript
// Verificar uso de cada ruta en:
backend/src/routes/
- content.js // ✅ Usado (admin panel)
- drugs.js // ✅ Usado
- auth.js // ✅ Usado
- stats.js // ✅ Usado (dashboard)
- media.js // ⚠️ Verificar uso
- validation.js // ✅ Usado
- content-pack.js // ✅ Usado (frontend)
- content-resources.js // ⚠️ Verificar uso
```
**Acción:** Verificar logs de acceso o añadir middleware de logging.
---
### 4. ASSETS Y RECURSOS
#### Imágenes Duplicadas
**Problema:** `placeholder.svg` en múltiples ubicaciones:
- `public/placeholder.svg` (correcto)
- `dist/placeholder.svg` (generado, no preocupante)
**Acción:** No requiere acción (dist se regenera).
---
#### Carpetas de Assets Vacías o Con Contenido Obsoleto
**Carpetas a Verificar:**
```bash
assets/videos/bloque_00/ # Vacía
assets/videos/bloque_01/ # Vacía
assets/videos/bloque_02/ # Vacía
# ... más vacías
assets/checklists_app/ # Vacía
assets/templates/ # Vacía
```
**Acción:**
```bash
# Verificar contenido:
find assets/ -type f | wc -l
# Si están vacías, eliminar o documentar propósito
```
---
#### Fuentes y Recursos No Referenciados
**Verificar:**
- Fuentes en `public/fonts/` (si existe)
- Iconos no utilizados
- Assets de prueba o mock data
**Acción:** Ejecutar auditoría de assets con herramienta de bundling.
---
### 5. SCRIPTS Y AUTOMATIZACIÓN
#### Scripts Duplicados o Obsoletos
**Scripts en Raíz:**
```bash
# Deploy scripts - Consolidar:
deploy.sh # Consolidado
desplegar.sh # Wrapper interactivo
docker.sh # Deploy Docker
# Cleanup scripts - Consolidado:
cleanup.sh
# Otros:
webhook-deploy.sh # Específico, mantener
reorganizar_proyecto.sh # ¿Usado recientemente?
```
**Acción:**
1. Documentar propósito de cada script
2. Consolidar scripts similares
3. Mover scripts de utilidad a `scripts/utils/`
4. Eliminar scripts obsoletos confirmados
---
#### Scripts Python
**Scripts Identificados:**
```bash
generate-docs.py # ¿Usado recientemente?
integrate-assets.py # ¿Usado recientemente?
scripts/limpiar_manual.py # Script de limpieza específico
scripts/actualizar_rutas_indice.py # Script de mantenimiento
scripts/anadir_todos_enlaces.py # Script de mantenimiento
scripts/anadir_enlaces_referencia.py # Script de mantenimiento
```
**Acción:**
1. Verificar fecha de último uso (git log)
2. Documentar propósito de cada script
3. Consolidar en `scripts/python/` si se mantienen
4. Eliminar si obsoletos
---
#### GitHub Actions / CI Config
**Verificar:**
```bash
# Buscar workflows:
.github/workflows/*.yml
# Si no existen, considerar añadir:
# - CI/CD básico
# - Linting automático
# - Build verification
```
**Acción:** No hay configs obsoletos (no existen workflows).
---
### 6. CONFIGURACIONES
#### Configuraciones Duplicadas
**TypeScript Configs:**
```bash
tsconfig.json # ✅ Principal
tsconfig.app.json # ✅ Para app
tsconfig.node.json # ✅ Para scripts
```
**Acción:** No duplicados, estructura correcta.
---
#### Configuraciones de Build Duplicadas
**Verificar:**
- `vite.config.ts` (principal)
- `docker-compose.yml` vs `docker-compose.prod.yml` (diferentes propósitos)
- `ecosystem.config.cjs` (PM2) (necesario)
**Acción:** No requiere limpieza.
---
#### Environment Variables
**Archivos:**
- `env.example` (template, mantener)
- `backend/.env` (verificar que no esté en git)
**Acción:**
```bash
# Verificar que .env no esté trackeado:
git ls-files | grep "\.env$"
# Si está, remover:
# git rm --cached backend/.env
```
---
## 🛠️ COMANDOS ESPECÍFICOS PARA LIMPIEZA
### 1. Identificar Archivos Grandes Inútiles
```bash
# Buscar archivos > 10MB:
find . -type f -size +10M -not -path "./node_modules/*" -not -path "./.git/*" -exec ls -lh {} \;
# Buscar archivos de build:
du -sh dist/ public/ build/ .next/ 2>/dev/null
# Buscar node_modules más grandes:
du -sh node_modules/* | sort -hr | head -20
```
---
### 2. Encontrar Dependencias No Utilizadas
```bash
# Frontend:
cd /home/planetazuzu/guia-tes
npx depcheck
# Con más detalle:
npx depcheck --ignores="@types/*,eslint-*,typescript-*,@vitejs/*,vite"
# Backend:
cd backend
npx depcheck
```
---
### 3. Detectar Código Muerto
```bash
# Detectar exports no usados:
npx ts-prune
# Detectar imports no usados:
npx unimported
# O usar ESLint:
npm run lint -- --fix
```
---
### 4. Limpiar Automáticamente (CON CONFIRMACIÓN)
```bash
#!/bin/bash
# Script de limpieza segura - EJECUTAR CON CUIDADO
echo "🧹 Iniciando limpieza del proyecto..."
echo "⚠️ Este script eliminará archivos. Revisa antes de continuar."
read -p "¿Continuar? (yes/no): " confirm
if [ "$confirm" != "yes" ]; then
echo "❌ Limpieza cancelada"
exit 1
fi
# 1. Eliminar dist/ (se regenera)
if [ -d "dist" ]; then
echo "🗑️ Eliminando dist/..."
rm -rf dist/
fi
# 2. Eliminar logs
if [ -d "logs" ]; then
echo "🗑️ Limpiando logs..."
rm -f logs/*.log
fi
# 3. Eliminar archivos .backup
echo "🗑️ Eliminando archivos .backup..."
find . -name "*.backup" -not -path "./node_modules/*" -not -path "./.git/*" -delete
# 4. Eliminar carpetas vacías
echo "🗑️ Eliminando carpetas vacías..."
find . -type d -empty -not -path "./.git/*" -not -path "./node_modules/*" -delete
# 5. Limpiar Python cache
echo "🗑️ Limpiando __pycache__..."
find . -type d -name "__pycache__" -not -path "./node_modules/*" -exec rm -rf {} + 2>/dev/null
find . -name "*.pyc" -not -path "./node_modules/*" -delete 2>/dev/null
# 6. Limpiar archivos temporales
echo "🗑️ Eliminando archivos temporales..."
find . -name "*.tmp" -o -name "*.temp" -o -name ".DS_Store" -o -name "Thumbs.db" | \
grep -v node_modules | grep -v .git | xargs rm -f 2>/dev/null
echo "✅ Limpieza completada"
```
**Guardar como:** `scripts/cleanup-safe.sh`
---
### 5. Verificar .gitignore Óptimo
```bash
# Verificar archivos trackeados que deberían ignorarse:
git ls-files | grep -E "(dist/|\.log$|\.backup$|node_modules/)" | head -20
# Si hay archivos que deberían ignorarse:
# git rm --cached <archivo>
```
---
## 📝 SUGERENCIAS DE PREVENCIÓN
### 1. Configurar .gitignore Óptimo
**Añadir a .gitignore (si falta):**
```gitignore
# Build outputs
dist/
build/
.next/
out/
# Logs
logs/
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
lerna-debug.log*
# Environment variables
.env
.env.local
.env.production
.env.development
backend/.env
# Backup files
*.backup
*.bak
*.old
*~
# OS files
.DS_Store
.DS_Store?
._*
.Spotlight-V100
.Trashes
ehthumbs.db
Thumbs.db
# Python
__pycache__/
*.py[cod]
*$py.class
*.so
.Python
.venv/
venv/
env/
ENV/
# Temporary files
*.tmp
*.temp
*.swp
*.swo
# IDE
.vscode/*
!.vscode/extensions.json
.idea/
*.sublime-project
*.sublime-workspace
# Test coverage
coverage/
.nyc_output/
```
---
### 2. Scripts de Mantenimiento Preventivo
**Crear:** `scripts/maintenance/weekly-cleanup.sh`
```bash
#!/bin/bash
# Script de mantenimiento semanal
echo "🧹 Limpieza semanal del proyecto..."
# 1. Limpiar node_modules duplicados (si hay)
npm dedupe
# 2. Actualizar dependencias menores
npm update
# 3. Verificar dependencias no usadas
npx depcheck --ignores="@types/*,eslint-*,typescript-*"
# 4. Verificar código muerto
npx ts-prune | head -20
# 5. Limpiar cache de npm
npm cache clean --force
echo "✅ Mantenimiento completado"
```
---
### 3. Herramientas de Monitoreo Recomendadas
**Para Detectar Dependencias No Usadas:**
- `depcheck` - Detectar dependencias no usadas
- `npm-check` - Actualizar y verificar dependencias
- `bundlesize` - Monitorear tamaño de bundles
**Para Detectar Código Muerto:**
- `ts-prune` - Detectar exports no usados en TypeScript
- `unimported` - Detectar imports no usados
- `eslint-plugin-unused-imports` - Linting de imports no usados
**Para Monitorear Tamaño:**
- `webpack-bundle-analyzer` - Analizar tamaño de bundles
- `source-map-explorer` - Explorar tamaño de código fuente
**Instalar:**
```bash
npm install --save-dev depcheck ts-prune unimported webpack-bundle-analyzer
```
---
### 4. GitHub Actions para Limpieza Automática
**Crear:** `.github/workflows/cleanup.yml`
```yaml
name: Weekly Cleanup Check
on:
schedule:
# Cada lunes a las 00:00 UTC
- cron: '0 0 * * 1'
workflow_dispatch:
jobs:
cleanup-check:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Setup Node.js
uses: actions/setup-node@v3
with:
node-version: '20'
- name: Check for unused dependencies
run: |
npm install
npx depcheck --ignores="@types/*,eslint-*,typescript-*,@vitejs/*,vite" || true
- name: Check for dead code
run: |
npx ts-prune | head -50 || true
- name: Check bundle size
run: |
npm run build
npx bundlesize || true
- name: Create issue if problems found
if: failure()
uses: actions/github-script@v6
with:
script: |
github.rest.issues.create({
owner: context.repo.owner,
repo: context.repo.repo,
title: '⚠️ Cleanup Check: Issues Found',
body: 'Weekly cleanup check found potential issues. Please review.'
})
```
---
## ✅ CHECKLIST DE LIMPIEZA
### Fase 1: Crítico (Hacer YA)
- [ ] Verificar que `backend/.env` NO está en git
- [ ] Añadir `dist/` a .gitignore si falta
- [ ] Añadir `logs/*.log` a .gitignore si falta
- [ ] Eliminar `dist/` del repositorio
- [ ] Eliminar `logs/pm2-error.log` del repositorio
- [ ] Verificar que `.env` está en .gitignore
**Tiempo:** 15 minutos
**Riesgo:** 🟢 Bajo
**Impacto:** 🔴 Alto (seguridad y organización)
---
### Fase 2: Importante (Hacer Pronto)
- [ ] Ejecutar `npx depcheck` y analizar resultados
- [ ] Eliminar dependencias no usadas confirmadas
- [ ] Eliminar `src/data/manual-index.ts.backup`
- [ ] Evaluar y consolidar `docs/_archivo/`
- [ ] Consolidar scripts de deploy similares
- [ ] Documentar propósito de cada script en raíz
**Tiempo:** 2-3 horas
**Riesgo:** 🟡 Medio
**Impacto:** 🟡 Medio (optimización)
---
### Fase 3: Opcional (Hacer Cuando Tengas Tiempo)
- [ ] Ejecutar `npx ts-prune` y eliminar código muerto
- [ ] Consolidar scripts Python en carpeta dedicada
- [ ] Eliminar carpetas vacías de assets
- [ ] Documentar assets no utilizados
- [ ] Añadir GitHub Action para limpieza automática
- [ ] Configurar herramientas de monitoreo
**Tiempo:** 2-3 horas
**Riesgo:** 🟢 Bajo
**Impacto:** 🟢 Bajo (mejora incremental)
---
## 📊 RESUMEN FINAL
### Espacio Recuperable Total
- **Crítico:** ~15 MB (dist/ + logs)
- **Importante:** ~50-100 MB (dependencias no usadas)
- **Opcional:** ~2-5 MB (archivos pequeños y carpetas vacías)
**Total Estimado:** ~70-120 MB (~10-17% del proyecto sin node_modules)
### Reducción de Dependencias
- **Potencialmente No Usadas:** 15-20% de dependencias frontend
- **Reducción Estimada en node_modules:** 50-100 MB
### Tiempo Total de Limpieza
- **Fase 1 (Crítico):** 15 minutos
- **Fase 2 (Importante):** 2-3 horas
- **Fase 3 (Opcional):** 2-3 horas
- **Total:** 4-6 horas
### Prioridades Recomendadas
1. **🔴 ALTA:** Seguridad (.env) y Build artifacts (dist/)
2. **🟡 MEDIA:** Dependencias no usadas y archivos de backup
3. **🟢 BAJA:** Código muerto y consolidación de scripts
---
**Última actualización:** 2025-01-07
**Próxima revisión recomendada:** Mensual o antes de cada release mayor