codigo0/docs/AUDITORIA_LIMPIEZA_PROYECTO.md

20 KiB

🧹 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.

# 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:

# 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.

# Verificar si está en .gitignore:
backend/.env

Acción:

# 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:

# 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:

# 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:

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:

# 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:

# 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:

# Usar ts-prune para detectar exports no usados:
npx ts-prune

# O usar uncomment para detectar imports no usados:
npx unimported

Componentes a Verificar:

// 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:

// 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:

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:

# 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:

# 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:

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:

# 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:

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:

# 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

# 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

# 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

# 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)

#!/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

# 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):

# 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

#!/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:

npm install --save-dev depcheck ts-prune unimported webpack-bundle-analyzer

4. GitHub Actions para Limpieza Automática

Crear: .github/workflows/cleanup.yml

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