Trabajo seleccionado
ApplyCraft
Proyecto en desarrollo que genera una carta de presentación, un mensaje de LinkedIn y un correo de candidatura, con investigación opcional de la empresa y generación en streaming.
Visión general
ApplyCraft parte de un perfil reutilizable del candidato y de información específica de cada candidatura para preparar tres documentos distintos. El perfil se guarda localmente en el navegador e incluye experiencia, formación y datos de contacto; la candidatura añade empresa, puesto, idioma, tono, oferta opcional e instrucciones adicionales.
Personalización de la candidatura
Cada candidatura se configura con la empresa, el puesto, el idioma de salida, el tono y el modelo. También se puede indicar una persona de contacto, pegar una oferta y añadir instrucciones para destacar experiencias concretas. Si no hay oferta, el mensaje de LinkedIn se plantea como una solicitud de conexión espontánea.
Generación e investigación
La carta de presentación, el mensaje de LinkedIn y el correo se generan en paralelo y se muestran progresivamente mediante streaming. Cada resultado puede regenerarse de forma independiente. Una fase previa opcional utiliza Gemini con búsqueda web para obtener un resumen factual de la empresa; si no está configurada o falla, la generación continúa sin ese contexto.
- Salida en catalán, español, inglés o francés.
- Comportamiento distinto del mensaje de LinkedIn según si se ha facilitado una oferta.
- Perfil persistente en el navegador y controles específicos por candidatura.
Abstracción de proveedores
Gemini, OpenAI y DeepSeek implementan una misma interfaz de proveedor de texto en streaming. OpenAI y DeepSeek comparten una implementación compatible con el protocolo de chat completions, mientras que Gemini tiene una implementación propia y la opción de búsqueda fundamentada. Los modelos disponibles se filtran según los proveedores configurados en el servidor.
Secretos y despliegue
Las llamadas a los modelos se realizan desde Route Handlers de Next.js. Las claves se leen de variables de entorno exclusivamente en el servidor, sin prefijo público, y el navegador solo se comunica con los endpoints internos de la aplicación. El repositorio deja claro que es un proyecto local en desarrollo: antes de un despliegue público con claves compartidas habría que añadir limitación de peticiones y protección contra abusos.





