Referencia API
Esta sección reúne las piezas de orquestación que un reclutador técnico revisaría al evaluar mis capacidades: un dashboard en vivo que inspecciona la latencia de cada microservicio, un panel de operaciones para disparar sincronizaciones (`/github/sync`) y procesos de ingesta de CV, además de la documentación interactiva de la Recruiter API levantada con FastAPI, todo está construido sobre microservicios versionables, contratos REST tipados (Pydantic ↔ TypeScript) y flujos autenticados mediante tokens de administración, demostrando gobierno de APIs, monitoreo continuo y automatización de contenido.
Stack clave
Next.js 14 (App Router) con React 18 y TypeScript para SSR/ISR, SEO técnico y UI responsiva.
- Metadatos controlados server-side, generación de `sitemap.xml`, `robots.txt` y JSON-LD de persona.
- Tailwind CSS y componentes animados con Framer Motion para microinteracciones accesibles.
- Consumo de microservicios mediante variables `NEXT_PUBLIC_*` y fetch incremental para evitar vendor lock-in.
FastAPI, Pydantic y uvicorn para servicios REST tipados, con fallback offline y soporte WebSockets.
- Endpoints idempotentes (`/profile`, `/projects`, `/github/projects`) con validaciones Pydantic.
- Rutas administrativas protegidas por `X-Admin-Token` (`/github/sync`, `/admin/ingest-cv`).
- Canal `/ws/updates` para notificaciones en tiempo real y pruebas de event streaming.
Data source versionada en JSON y servicios dedicados para ingesta y sincronización de contenido.
- Servicio `content-ingest` extrae texto del CV (pypdf) y normaliza campos en `data/*.json`.
- Scripts de sincronización GitHub para cachear repositorios con métricas de estrellas y descripción.
- Separación de data frontend (`/public/data`) y data backend (`/data`) para optimizar render vs. API.
Docker Compose orquesta microservicios, GitHub Actions valida builds y pruebas, secrets vía `.env`.
- Compose define redes aisladas, volúmenes compartidos y hot reload (`--reload`, `pnpm dev`).
- Makefile centraliza seeds, builds, pruebas y shortcuts operativos.
- Pipeline CI ejecuta lint/build en frontend y backend, asegurando consistencia semántica antes del deploy.
Arquitectura de microservicios
Publica perfil, experiencia, educación y soft skills desde el volumen `./data` con fallback local.
- `GET /profile`, `/experience`, `/education`, `/soft-skills` generan el contenido consumido por Next.js.
- Montaje compartido de `./data` permite actualizar JSON sin reconstruir la imagen.
- Health check `/health` monitoreado desde el dashboard para uptime y latencia.
Gestiona proyectos propios y repos GitHub cacheados, habilitando sincronización on-demand.
- `GET /projects` expone catálogo curado, mientras `GET /github/projects` entrega repos cacheados.
- `POST /github/sync` consume la API de GitHub autenticada opcionalmente con token personal.
- Datos persistidos en `data/projects.json` y `data/github.json` para resiliencia en modo offline.
Servicio de ingesta que transforma el PDF del CV a texto indexable para los demás microservicios.
- `POST /ingest/cv` (tokenizado) procesa el PDF y actualiza `data/cv_text.txt`.
- Permite automatizar resúmenes y actualizaciones sin manipular manualmente los datos crudos.
- Expone `/health` para validar disponibilidad antes de ejecutar pipelines.
Proxy configurable que orquesta prompts con contexto del CV, soportando modo stub sin API key.
- `POST /chat` y `/ws` habilitan respuesta síncrona y streaming conversacional.
- Rate limiting configurable vía variables (`MAX_QUESTIONS_*`, `COOLDOWN_SECONDS`).
- Integra tokens públicos para front y secretos para admin, aislando permisos.
UI que consume microservicios y expone assets estáticos optimizados para SEO y accesibilidad.
- Server Components combinados con rutas dinámicas para secciones del CV y panel de referencia.
- Panel “Referencia API” consulta health checks y sincroniza repos via fetch y almacenamiento local.
- Publica datasets en `/public/data` para render instantáneo mientras los servicios cargan.
Dashboard de servicios
Sincronización de repositorios GitHub
Sin repos sincronizados aún.