codigo0/docs/AUDITORIA_LIMPIEZA_PROYECTO.md

821 lines
20 KiB
Markdown
Raw Normal View History

2026-01-19 08:10:16 +00:00
# 🧹 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