Cómo está hecho
Un sistema que lee ofertas de trabajo y las evalúa contra un perfil. El modelo de IA evalúa; las reglas en código deciden; la persona elige. Acá está cómo, con detalle.
El recorrido de una oferta
Fuentes
APIs públicas de bolsas de empleo y sitios de empleo de empresas (Greenhouse, Lever, Ashby), más las alertas que la persona reenvía por email.
Nada de scraping de LinkedIn ni postulaciones automáticas.
Normalización y duplicados
Mismo aviso en dos fuentes → una sola oferta.
Prefiltro (código, sin IA)
Modalidad, disciplina, títulos fuera de perfil y país exigido. Descarta barato antes de gastar en IA.
Evaluación con IA
Lee el aviso completo contra el perfil y devuelve una respuesta con formato fijo y validado: puntaje, por qué sí, por qué no, lo que falta y riesgos.
decide() (código)
Aplica reglas verificables: años exigidos, inglés, residencia y techo por título. Así llega a la acción: aplicar, guardar o descartar.
El modelo sugiere; el código decide.
La app y el MCP
La persona ve el porqué y decide. También se puede consultar por MCP (un protocolo para consultarlo desde un asistente de IA).
Cómo se evita que la IA invente
Golden set
Un conjunto de ofertas con la respuesta correcta acordada de antemano. Cada cambio de prompt se mide contra él, con métricas estrictas y laxas, antes de salir.
Salida validada
El modelo responde con un formato fijo, validado con un esquema (Zod). Si no cumple, se reintenta o se descarta; no se acepta un campo que no cumpla el formato.
Las reglas viven en código
Años, inglés, país y techos por título se aplican después del modelo, con tests. El modelo no puede “convencer” al sistema de aplicar, y el sistema nunca postula por vos: la persona decide.
Prompt injection
Un aviso puede traer instrucciones escondidas para engañar a la IA. El texto del aviso es dato, no instrucciones: se detecta cuando un aviso intenta darle órdenes al evaluador, y ese aviso queda con techo de puntaje.
Tope de costo
Hay límites de gasto diario por persona y en total, con corte en código y registro de cada llamada.
Los emails se leen sin riesgo
Si un email reenviado no tiene la forma esperada, va a revisión manual. No hay extracción “a medias”. El HTML se muestra aislado, sin scripts ni navegación.
Stack
- Web
- Next.js (App Router), TypeScript estricto y Tailwind.
- Datos
- Postgres con una regla que hace que cada persona vea solo lo suyo (Row Level Security, RLS) y Drizzle.
- IA
- Vercel AI SDK. El modelo se elige por tabla de ruteo, con modelo de respaldo.
- Calidad
- Vitest, Playwright, tests de integración con Postgres real y un CI con escáner de secretos.
- Infra
- Vercel y Neon, con tareas programadas en GitHub Actions.
En vivo
- Ofertas activas
- 2.337
- Fuentes
- 6
- Nuevas en 24 h
- 226
- Actualizado
- hace 3 h
Cuenta los avisos distintos que vimos en los últimos 7 días en las fuentes que leemos.
Hay más de 2.000 tests automatizados (conteo al 20 de octubre de 2026).
El código
El código es público: podés leerlo.
Repositorio en GitHub (se abre en una pestaña nueva)Principios de diseño (se abre en una pestaña nueva)
¿Buscás trabajo en tecnología?
Pedí acceso