En esta sección encontrarás respuestas a preguntas comunes y soluciones a problemas habituales al gestionar tu portafolio académico.
Posibles causas y soluciones:
-
Servidor de desarrollo no está en ejecución
- Asegúrate de tener el servidor en ejecución con
npm run dev - Verifica que no hay errores en la consola del servidor
- Asegúrate de tener el servidor en ejecución con
-
Error de sintaxis en el archivo modificado
- Verifica que no falten comas, paréntesis o llaves
- Asegúrate de que todas las cadenas de texto estén correctamente entrecomilladas
- Comprueba la consola del navegador para ver errores específicos
-
Cache del navegador
- Intenta hacer un hard refresh (Ctrl+F5 o Cmd+Shift+R)
- Alternativamente, abre DevTools y desactiva la caché mientras estás en modo desarrollador
-
TypeScript no reconoce la estructura
- Asegúrate de que los nuevos datos cumplen con las interfaces definidas
- Comprueba que todos los campos requeridos están presentes
Para añadir una nueva sección (por ejemplo, "Publicaciones" o "Reconocimientos"):
- Define el tipo de datos en
/src/types/portfolio.ts - Crea un nuevo archivo de datos en
/src/data/(ej:publicationsData.ts) - Crea el componente de página en
/src/pages/(ej:Publications.tsx) - Añade la ruta en el enrutador principal
- Actualiza la navegación en el componente
Navbar.tsx
Comprobaciones a realizar:
-
Ruta incorrecta:
- Verifica que la ruta comienza con
/(ej:/certificates/cert1.pdf) - Asegúrate de usar barras hacia adelante, no backslashes
- Verifica que la ruta comienza con
-
Archivo no disponible:
- Comprueba que el archivo existe físicamente en la carpeta especificada
- Verifica permisos de lectura
-
Formato no compatible:
- Asegúrate de usar formatos web estándar (JPEG, PNG, PDF)
- Si es PDF, verifica que el visor PDF está correctamente implementado
-
Tamaño excesivo:
- Optimiza imágenes grandes (>1MB)
- Considera usar servicios de optimización como TinyPNG
Para incluir contenido multimedia como videos o presentaciones:
-
Para videos:
- Sube tu video a plataformas como YouTube o Vimeo
- Integra el video usando un iframe o un componente específico
- Ejemplo de integración en la descripción del proyecto:
longDescription: ` # Mi Proyecto Awesome ## Demostración en video <div class="video-container"> <iframe src="https://www.youtube.com/embed/VIDEO_ID" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope" allowfullscreen> </iframe> </div> ## Más información... `
-
Para presentaciones:
- Usa servicios como SlideShare, Google Slides o Canva
- Integra usando un iframe o componente específico
- Alternativamente, convierte a PDF y ofrece un enlace de descarga
Soluciones comunes:
-
Rutas base incorrectas:
- Verifica el valor de
baseenvite.config.tssi usas un subdirectorio - Asegúrate de usar rutas relativas o configura correctamente el
publicPath
- Verifica el valor de
-
Errores en la compilación:
- Ejecuta
npm run buildlocalmente y corrige cualquier error - Verifica los logs de CI/CD si estás usando GitHub Actions u otro servicio
- Ejecuta
-
Archivos estáticos no encontrados:
- Comprueba que todos los recursos estáticos están incluidos en la carpeta
/public - Verifica que las rutas a los recursos son correctas en producción
- Comprueba que todos los recursos estáticos están incluidos en la carpeta
Este error suele ocurrir cuando:
-
Datos faltantes o incompletos:
- Asegúrate de que todos los objetos tienen los campos requeridos
- Inicializa arrays vacíos en lugar de dejarlos como
undefined
-
Acceso a propiedades anidadas no seguro:
- Usa el operador de encadenamiento opcional (
?.) para acceder a propiedades que pueden ser nulas - Usa el operador coalescente nulo (
??) para proporcionar valores por defecto
// En lugar de: <span>{project.relatedCertifications[0].name}</span> // Usa: <span>{project.relatedCertifications?.[0]?.name || 'Sin certificado relacionado'}</span>
- Usa el operador de encadenamiento opcional (
Si deseas implementar funcionalidad de búsqueda o filtrado:
-
Crea un componente de búsqueda/filtro:
- Implementa un estado para la consulta de búsqueda
- Filtra los datos basados en la consulta
// Ejemplo simplificado const [searchQuery, setSearchQuery] = useState(''); const filteredProjects = projectsData.filter(project => project.title.toLowerCase().includes(searchQuery.toLowerCase()) || project.description.toLowerCase().includes(searchQuery.toLowerCase()) );
-
Añade etiquetas/categorías a tus entidades:
- Extiende las interfaces para incluir etiquetas o categorías
- Implementa filtros basados en estas etiquetas
-
Control de versiones:
- Usa Git para mantener un historial de cambios
- Haz commits frecuentes cada vez que actualices datos importantes
-
Exportación periódica:
- Implementa una función para exportar todos los datos a JSON
- Guarda copias de certificados y otros recursos en almacenamiento externo
-
Backup automatizado:
- Configura GitHub Actions u otro servicio de CI para crear respaldos periódicos
- Almacena los respaldos en un servicio seguro como Google Drive o Dropbox
Consideraciones importantes:
-
Información sensible:
- Evita incluir número de teléfono personal, dirección domiciliaria o documentos de identidad
- Utiliza formularios de contacto en lugar de exponer tu email directamente
-
Certificados y títulos:
- Redacta o oculta números de identificación personal en certificados
- Considera usar versiones específicas para web sin información sensible
-
Información de proyectos confidenciales:
- Obtén permiso antes de compartir detalles de proyectos corporativos
- Enfócate en tu contribución sin revelar detalles confidenciales o propietarios