Job Hunter
Un copiloto de búsqueda laboral que puntúa cada vacante contra mi propia base de conocimiento profesional y redacta la postulación.
El problema
Buscar trabajo en serio es un problema de datos disperso: las vacantes viven en plataformas distintas, decidir si vale la pena aplicar a cada una consume horas, y el material de cada postulación —CV, mensaje, respuestas— se rehace desde cero todas las veces.
Qué hice
Construí el producto completo como un workspace de dos mitades. Por un lado, una base de conocimiento profesional en Markdown que funciona como corpus. Por el otro, una aplicación en Next.js 16 con React 19 y Supabase que la convierte en acción: un tracker de postulaciones que autocompleta la metadata desde el link de la vacante, y cuatro acciones de IA sobre la Claude API con salidas estructuradas validadas por Zod y prompt caching del corpus — análisis de fit con score y gaps, mensaje de postulación en el idioma del aviso, CV adaptado a cada vacante y un banco de respuestas reutilizables. La seguridad va en tres capas: proxy de sesión, validación en cada endpoint y RLS sin políticas, de modo que solo el servidor llega a los datos. Si la base no está disponible, la capa de datos cae sola a almacenamiento local y migra a la nube cuando vuelve.
Qué resultó
En uso para mi propia búsqueda laboral: 11 endpoints y unas 9.400 líneas de TypeScript, en veinte commits entre julio y agosto de 2026. Es también la prueba de un patrón que me interesa: una base de conocimiento curada como corpus de un LLM, en vez de pedirle al modelo que improvise sobre un CV.
De la vacante a la postulación
- Puestos objetivo por tiersEntrada
- Búsquedas prefiltradasUn link por puesto y filtro
- Vacante autocompletadaMetadata extraída del link
- Corpus curado del perfilPrefijo estable, cacheado
- Análisis de fit con ClaudeScore, gaps con severidad y evidencia
- Mensaje y CV a medidaSalida: en el idioma del aviso
El corpus es un snapshot curado del perfil y deliberadamente estable: cualquier byte que cambie invalida el prefijo cacheado de la API. Cada análisis queda sellado con la fecha del snapshot contra el que se calculó, para poder distinguir en la interfaz los que quedaron viejos.
Stack
- Next.js 16
- React 19
- TypeScript
- Tailwind CSS v4
- Supabase
- Postgres
- Claude API
- Zod
- @supabase/ssr
El repositorio es privado: contiene mi base de conocimiento profesional completa. Por eso no hay link al código.
Siguiente proyecto: Plataforma de análisis de surtido →