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.tomlnginx.conf.examplevercel.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:
- Ejecutar
depcheckpara identificar dependencias no usadas - Verificar manualmente cada componente Radix UI usado
- Eliminar dependencias confirmadas no usadas
- 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 principalpg✅ - PostgreSQL driverjsonwebtoken✅ - Autenticaciónbcrypt✅ - Hash de passwordscors✅ - CORS middlewaredotenv✅ - Variables de entornomulter✅ - Upload de archivosarchiver✅ - Generación de SCORMmarked✅ - 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:
- Ejecutar análisis de código muerto
- Verificar imports dinámicos (
lazy()) - 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:
- Documentar propósito de cada script
- Consolidar scripts similares
- Mover scripts de utilidad a
scripts/utils/ - 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:
- Verificar fecha de último uso (git log)
- Documentar propósito de cada script
- Consolidar en
scripts/python/si se mantienen - 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.ymlvsdocker-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 usadasnpm-check- Actualizar y verificar dependenciasbundlesize- Monitorear tamaño de bundles
Para Detectar Código Muerto:
ts-prune- Detectar exports no usados en TypeScriptunimported- Detectar imports no usadoseslint-plugin-unused-imports- Linting de imports no usados
Para Monitorear Tamaño:
webpack-bundle-analyzer- Analizar tamaño de bundlessource-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/.envNO está en git - Añadir
dist/a .gitignore si falta - Añadir
logs/*.loga .gitignore si falta - Eliminar
dist/del repositorio - Eliminar
logs/pm2-error.logdel repositorio - Verificar que
.envestá en .gitignore
Tiempo: 15 minutos
Riesgo: 🟢 Bajo
Impacto: 🔴 Alto (seguridad y organización)
Fase 2: Importante (Hacer Pronto)
- Ejecutar
npx depchecky 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-pruney 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
- 🔴 ALTA: Seguridad (.env) y Build artifacts (dist/)
- 🟡 MEDIA: Dependencias no usadas y archivos de backup
- 🟢 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