Buscador de papers científicos en tiempo real, construido como aplicación full-stack. Busca cualquier tema de investigación y obtén artículos científicos reales con resúmenes generados por IA, métricas de citas, gráficas de tendencias, citas bibliográficas listas para copiar y guardado de favoritos por tema.
👉 https://mariadsalazar.github.io/SciFinder/
⏳ Nota: el backend corre en un plan gratuito; tras un periodo de inactividad la primera búsqueda puede tardar unos segundos en "despertar" el servidor. Las siguientes son rápidas.
Búsqueda con resultados reales: rango de años detectado del tema, enlaces a PDF, favoritos y gráfica de producción por año (clickeable para filtrar).
- 🔎 Búsqueda multi-motor: elige entre OpenAlex, Semantic Scholar, Crossref, Europe PMC, ERIC (educación) — o todos a la vez, combinados sin duplicados (deduplicación por DOI).
- 🤖 Resumen IA (TLDR) de cada paper, cortesía de Semantic Scholar.
- 🌐 Traducción del resumen y abstract a español o inglés con un click.
- 📋 Citas bibliográficas en APA 7, MLA 9, Chicago y BibTeX, con botón de copiar.
- 📊 Métricas de calidad: citas totales, citas influyentes (Semantic Scholar) y citas abiertas + referencias (OpenCitations).
- 📄 Rescate de PDFs: si la fuente principal no tiene el PDF, se consulta CORE para encontrar una copia de acceso abierto — cada PDF indica el repositorio que lo aloja (arXiv, PubMed Central, etc.).
- 📈 Gráficas interactivas (Recharts): producción de papers por año del tema completo (click en una barra = filtrar ese año) y ranking de más citados.
- ⭐ Favoritos agrupados por tema de búsqueda, persistidos en PostgreSQL.
- 🕘 Historial de búsquedas recientes con acceso de un click.
- 🎚️ Filtros inteligentes: rango de años acotado a los años donde realmente existen papers (descartando datos mal fechados), orden por relevancia o citas, y re-búsqueda automática al cambiar cualquier filtro.
- ⚡ Caché en el servidor con TTL: repetir una búsqueda/detalle/traducción responde en ~20 ms sin tocar las APIs externas (cabecera
X-Cache: HIT/MISS). - 📱 Diseño responsive, estados de carga/error/vacío, paginación "cargar más" y cierre de modal con
Esc.
| Pantalla principal | Favoritos por tema |
|---|---|
![]() |
![]() |
| Filtros de año, orden y motor, con búsquedas recientes de la sesión. | Los papers guardados se agrupan por el tema con el que se buscaron. |
Cada vista cuida sus estados vacíos: favoritos sin papers guía al usuario a marcar la estrella ☆.
[ Navegador / React ]
│ (consume NUESTRA API)
▼
[ Backend Node.js + Express ] ◀── Prisma ──▶ [ PostgreSQL (Neon) ]
│ (orquesta, combina y cachea)
▼
OpenAlex · Semantic Scholar · Crossref · Europe PMC · ERIC · OpenCitations · CORE
El backend actúa como orquestador: resuelve CORS, protege las API keys (nunca llegan al navegador), normaliza los datos heterogéneos de 7 fuentes a un contrato único (usando el DOI como llave común), tolera fallos parciales (una fuente caída no tumba la búsqueda combinada) y cachea respuestas.
server/src/
├── config/ # Configuración centralizada (lectura única de variables de entorno)
├── routes/ # Definición de endpoints
├── controllers/ # Validación de entrada y armado de respuesta
├── services/ # Lógica de negocio: un servicio por fuente externa + orquestador
├── mappers/ # Dato crudo externo → forma limpia interna (contrato estable)
├── middleware/ # 404 y manejador central de errores
└── lib/ # Utilidades reutilizables: cliente HTTP, caché TTL, validación, Prisma
| Tecnología | Uso |
|---|---|
| React 19 | Interfaz de usuario por componentes |
| Vite | Build tool y servidor de desarrollo |
| JavaScript (JSX) | Lenguaje |
| Recharts | Gráficas interactivas |
| CSS (variables custom) | Estilos y diseño responsive |
| Hooks personalizados | useRequest (genérico), usePaperSearch (paginación + descarte de respuestas obsoletas), usePaperDetail, useFavorites |
| Tecnología | Uso |
|---|---|
| Node.js 22 + Express 5 | API REST |
| PostgreSQL (Neon) | Persistencia de favoritos e historial |
| Prisma 6 | ORM y migraciones |
| fetch nativo | Llamadas a APIs externas (con timeout, reintentos ante rate-limit y manejo central de errores) |
| Caché en memoria con TTL | Búsquedas (5 min), detalle (30 min), traducciones (24 h) |
| Pieza | Servicio |
|---|---|
| Frontend | GitHub Pages (deploy automático con GitHub Actions en cada push) |
| Backend | Servicio web gratuito en la nube |
| Base de datos | Neon (PostgreSQL serverless) |
| API | Rol en SciFinder | Autenticación |
|---|---|---|
| OpenAlex | Motor principal: búsqueda, metadatos, estadísticas por año, detalle | No requiere |
| Semantic Scholar | Motor de búsqueda + TLDR (resumen IA) + citas influyentes | API key gratuita |
| Crossref | Motor de búsqueda (registro oficial de DOIs) | No requiere |
| Europe PMC | Motor de búsqueda (biomedicina y ciencias de la vida) | No requiere |
| ERIC | Motor de búsqueda (educación) | No requiere |
| OpenCitations | Citas abiertas y referencias por DOI | No requiere |
| CORE | Localización de PDFs de acceso abierto | API key gratuita |
Cada paper indica de qué motor proviene (vía OpenAlex, vía Semantic Scholar...) y el detalle muestra qué fuentes respondieron — transparencia total de los datos.
| Método | Ruta | Descripción |
|---|---|---|
GET |
/api/health |
Estado del servicio |
GET |
/api/search?q=&engine=&sort=&fromYear=&toYear=&page=&perPage= |
Búsqueda multi-motor con filtros |
GET |
/api/papers/:id |
Detalle enriquecido (acepta id de OpenAlex W... o doi:10...) |
POST |
/api/translate |
Traducción de texto ({ text, to: "es" | "en" }) |
GET/POST/DELETE |
/api/favorites |
Favoritos persistidos (etiquetados por tema) |
GET |
/api/history |
Búsquedas recientes |
Requisitos: Node.js 22+ y una base PostgreSQL (gratis en Neon).
# 1. Clonar
git clone https://github.com/MariaDSalazar/SciFinder.git
cd SciFinder
# 2. Backend
cd server
npm install
# Crear el archivo .env a partir de la plantilla y llenar los valores:
# - DATABASE_URL (PostgreSQL)
# - SEMANTIC_SCHOLAR_API_KEY (opcional, recomendada)
# - CORE_API_KEY (opcional)
cp .env.example .env
npx prisma migrate deploy
npm run dev # → http://localhost:3000
# 3. Frontend (en otra terminal)
cd client
npm install
npm run dev # → http://localhost:5173Maria del Carmen Salazar Torres
Proyecto de portafolio full-stack: consumo y orquestación de múltiples APIs públicas, diseño de API REST propia, modelado de datos, caché, tolerancia a fallos, CI/CD y despliegue en producción.
Distribuido bajo la Licencia MIT — uso libre y gratuito, conservando el aviso de autoría. Ver LICENSE.

