Portal del Grupo de Investigación en Educación y Uso de Tecnologías (GIEU), construido con Astro.
Este proyecto sirve como sitio web institucional para:
- presentar líneas de investigación,
- mostrar proyectos y publicaciones,
- consumir datos desde fuentes externas y APIs internas,
- mantener una estructura ligera y rápida con Astro.
- Astro
- TypeScript
- Tailwind CSS
- Cheerio para scraping de contenido HTML
src/
├── components/
├── layouts/
├── pages/
│ ├── api/
│ │ └── publicaciones.json.ts
│ ├── index.astro
│ ├── projects.astro
│ └── research.astro
├── styles/
├── utils/
└── assets/
Ejecuta estos comandos desde la raíz del proyecto:
npm install
npm run dev
npm run build
npm run preview
npm run astro -- --help| Comando | Acción |
|---|---|
npm install |
Instala dependencias del proyecto |
npm run dev |
Inicia el servidor de desarrollo |
npm run build |
Genera la versión de producción |
npm run preview |
Previsualiza el build localmente |
npm run astro -- --help |
Muestra ayuda de Astro CLI |
El proyecto incluye un endpoint para obtener las publicaciones del grupo desde Scienti:
/api/publicaciones.json
- consulta la URL pública de Scienti,
- decodifica el HTML en ISO-8859-1,
- parsea la sección de publicaciones con Cheerio,
- extrae título, año, autores y revista/país,
- deduplica por título + año,
- devuelve un JSON con la estructura:
{
"publicaciones": [
{
"numero": "1.",
"titulo": "Nombre de la publicación",
"revistaPais": "Revista X - Colombia",
"anio": "2024",
"autores": "Autor 1, Autor 2"
}
]
}La misma lógica ya está preparada para ampliar más bloques del grupo sin duplicar código. En src/pages/api/publicaciones.json.ts existe la función obtenerSeccionesScienti(), que usa los encabezados de Scienti para detectar:
- artículos publicados,
- softwares,
- capítulos de libro publicados,
- libros de formación,
- libros de divulgación y/o compilación.
Si quieres agregar otra categoría, haz lo siguiente:
- identifica el nombre exacto del encabezado en la página de Scienti,
- añade un nuevo patrón de coincidencia en
obtenerSeccionesScienti(), - guarda el resultado en el catálogo
ScientiCatalogo, - renderiza esa lista en la vista con el mismo formato que
research.astro.
Ejemplo de patrón:
if (encabezado.includes("mi categoria")) {
catalogo.miCategoria = extraerItemsSeccion($, header);
}Y luego en la vista:
const catalogoScienti = await obtenerSeccionesScienti();
const miCategoria = catalogoScienti.miCategoria ?? [];Esto permite añadir nuevos productos, informes, materiales o compilaciones con la misma estructura y lógica de deduplicación que ya usa la página de publicaciones.
npm run devLa aplicación queda disponible en el puerto configurado por Astro (por defecto el puerto de desarrollo del proyecto).
Se puede ejecutar con Docker Compose.
echo "PORT=8517" > .env
docker-compose up --build --force-recreate --no-deps -decho "PORT=8518" > .env
docker-compose up --build --force-recreate --no-deps -ddocker-compose up --build --force-recreate --no-deps -d- Master: http://localhost:8517
- Staging: http://localhost:8518
- Producción: http://localhost:4321
Puedes crear un .env para personalizar el despliegue:
PORT=4321
NODE_ENV=production- La lógica de scraping está centralizada en src/pages/api/publicaciones.json.ts.
- La vista de investigación consume dicho endpoint para renderizar las publicaciones en la interfaz.
- El proyecto está listo para seguir ampliando contenido institucional y datos externos.