TreeMap
A free, open-source disk-space visualizer. Squarified treemap, duplicate hunting, disk-full forecasting, and cleanup that only ever moves files to the Trash.
Encuentra vacantes de prácticas y primer empleo en Computrabajo, Bumeran, LinkedIn e Indeed. En Computrabajo, Chamba Lista llena la postulación con tu CV y tus datos: hasta quince por tanda, y tú das
Translation pending
ProductivityJavaScript · PythonGitHub @aliceromer8-hueOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Encuentra vacantes de prácticas y primer empleo en Computrabajo, Bumeran, LinkedIn e Indeed. En Computrabajo, Chamba Lista llena la postulación con tu CV y tus datos: hasta quince por tanda, y tú das el último clic.
Translation pending
Taken from the repository README
Loading the full README. The saved excerpt is shown below.
Chamba Lista — plataforma de empleo con CV Harvard Plataforma web para que cualquier persona (no solo tú con el plugin 💅) pueda:Read the full README ↗
Plataforma web para que cualquier persona (no solo tú con el plugin 💅) pueda:
| Modo | Cómo se activa | Qué hace |
|---|---|---|
| Simulado (por defecto) | python app.py | Vacantes de ejemplo de mock_jobs.py, con banner de aviso. Sirve para probar el wizard sin tocar el portal. |
| Real | MODO_REAL=1 python app.py | Búsqueda y postulación reales en Computrabajo vía navegador local. |
| Fase | Portal | Estado |
|---|---|---|
| 1 | Computrabajo | Conectado — búsqueda real y preparación de postulación |
| 2 | Bumeran | Pendiente |
| 3 | Indeed | Pendiente |
| 4 | Pendiente (el más restrictivo) |
pip install -r requirements.txt
python -m playwright install chromium
Modo simulado:
python app.py
Modo real (Computrabajo):
MODO_REAL=1 python app.py
El navegador corre en la máquina de la persona, no en un servidor, con un perfil persistente en perfil_navegador/. Eso resuelve el problema de la sesión: la persona inicia sesión una vez en esa ventana y las cookies se quedan en su propio equipo. La plataforma nunca ve, pide ni guarda su contraseña — solo consulta si la sesión quedó abierta.
En el paso 4 aparecen dos botones: Abrir Computrabajo (lanza el navegador en la pantalla de acceso) y Verificar mi sesión (comprueba si ya entró).
La postulación va en dos tiempos, a propósito:
Muchas vacantes añaden preguntas abiertas propias ("¿qué estudias y dónde?", "¿tienes disponibilidad para ir a La Molina?"). El conector las detecta y redacta una respuesta, no vuelca el CV en crudo. La redacción vive en respuestas.py.
La diferencia importa: a "¿Actualmente estudias Marketing? Menciona cuál y en qué universidad" no se contesta pegando la sección de educación, se contesta con una frase.
| Tipo de pregunta | Qué hace la plataforma |
|---|---|
| Estudios | Extrae carrera, casa de estudios y ciclo → "Sí, actualmente estudio Marketing en la USIL, cursando el ciclo 11." |
| Herramientas | Cruza las que pide el anuncio con las que el CV declara, con nivel si lo dice → "De las herramientas que mencionan, manejo Photoshop, Illustrator y Premiere Pro. Además trabajo con Meta Ads, Excel (avanzado)…" |
| Distrito + celular | El celular sale del CV; el distrito se pregunta, no se inventa → "Resido en Surco, mi celular de contacto es …" |
| Disponibilidad, horarios, viajar | Se le pregunta con opciones concretas y se redacta según lo que elija |
| Aceptar condiciones, ad honorem | Se le explica qué está aceptando (con aviso de que es sin pago) y decide ella |
Los campos que la persona respondió siguen visibles para poder corregirlos, y sus ediciones manuales sobreviven a las recomposiciones. Nada se escribe en el portal hasta que pulsa "Escribir respuestas en el formulario", y se envía exactamente el texto que dejó.
redactor_ia.py)Cada vacante inventa sus propias preguntas ("confírmanos tu usuario de TikTok", "¿por qué te interesa el puesto?") y no hay reglas que las cubran todas. Por eso la redacción se delega a un modelo cuando hay uno configurado. Sin modelo la plataforma sigue funcionando con las reglas de respuestas.py, pero las preguntas poco comunes quedan vacías — la interfaz lo avisa.
Tres opciones gratuitas, se detecta automáticamente la que esté disponible:
| Opción | Cómo se activa | Privacidad |
|---|---|---|
| Ollama (local) | Instalar de ollama.com, luego ollama pull llama3.2 | El CV nunca sale de la máquina |
| Gemini | GEMINI_API_KEY=... — clave gratis en aistudio.google.com | El CV se envía a Google |
| Groq | GROQ_API_KEY=... — clave gratis en console.groq.com | El CV se envía a Groq |
En PowerShell (&& y VAR=valor python son sintaxis de bash y no funcionan ahí):
$env:GEMINI_API_KEY = "tu-clave"
$env:MODO_REAL = "1"
python app.py
Notas sobre Gemini que costaron un rato de depuración:
gemini-flash-latest. Pedir gemini-2.0-flash por su nombre exacto devuelve 429 · limit: 0 con claves nuevas, aunque el alias latest sí tenga cuota gratuita.maxOutputTokens está en 2000 a propósito: estos modelos razonan antes de responder y ese razonamiento sale del mismo presupuesto. Con un tope bajo se agota pensando y devuelve texto truncado o vacío.thought: son el razonamiento, no la respuesta.CERTIFICATE_VERIFY_FAILED: Basic Constraints of CA cert not marked critical. Por eso se usa truststore, que delega la verificación al almacén de Windows. No se desactiva la verificación — el CV viaja por esa conexión.Ollama es la única consistente con la promesa de privacidad del proyecto (nada sale del equipo). Las otras dos son más fáciles de arrancar pero mandan el CV a un tercero, que es algo a decidir conscientemente si la plataforma se abre a más gente.
Lo que el modelo nunca decide. Las preguntas de disponibilidad y de aceptación de condiciones se resuelven antes de llamarlo y no se le envían: las responde la persona con botones. Verificado con una prueba que cuenta las llamadas al modelo para esas preguntas (deben ser cero).
Lo que el modelo no puede inventar. Las instrucciones le prohíben usar datos que no estén en el CV. Cuando falta algo, debe responder FALTA_DATO: <qué falta>, y la plataforma convierte eso en un campo para que la persona lo escriba.
computrabajo.py tiene un WorkerNavegador: un hilo dedicado que es dueño del navegador y recibe órdenes por una cola.SELECTORES (verificados contra el sitio real el 2026-07-29). Si Computrabajo cambia su maquetación, ese es el único sitio que hay que tocar.empleo-plataforma/
├── app.py # backend Flask con todos los endpoints
├── cv_parser.py # extracción de texto + parseo heurístico del CV
├── harvard_template.py # generador del .docx en formato Harvard
├── computrabajo.py # conector real (Playwright) + worker de navegador
├── respuestas.py # redacción de las preguntas de selección desde el CV
├── redactor_ia.py # redacción con modelo (Ollama / Gemini / Groq), opcional
├── lote.py # postulación en lote: modo revisado y modo automático
├── mock_jobs.py # vacantes de ejemplo + taxonomía de áreas y términos
├── requirements.txt
├── templates/index.html # wizard de 5 pasos
├── static/css/style.css
├── static/js/app.js
├── uploads/ # CVs subidos (se borran tras procesarlos)
├── generados/ # CVs Harvard generados, listos para descargar
├── perfil_navegador/ # perfil de Chromium con la sesión (solo modo real)
└── postulaciones.json # tracker (se crea con la primera postulación)
harvard_template.py no reproduce un "formato Harvard" genérico: está calcado del CV que usa el plugin (CV ALICE ROMERO 2026.docx), medido directamente del XML del Word:
| Elemento | Valor |
|---|---|
| Tipografía | Times New Roman (de los docDefaults, no del tema) |
| Márgenes | 1.91 cm en los cuatro lados |
| Nombre | 18 pt, negrita, centrado |
| Línea de contacto | 9.5 pt, centrada, separada por · |
| Títulos de sección | 11 pt, negrita, MAYÚSCULAS, sin línea divisoria |
| Entradas | 10.5 pt, dos líneas con tabulación derecha a 9026 twips (6.27") |
| Viñetas | estilo List Paragraph, sangría 0.63 cm |
Lo de "sin línea divisoria" es deliberado y va contra lo que suele asociarse al formato Harvard: el CV original no la lleva, y la fidelidad manda. Verificado que el .docx generado tiene 0 párrafos con borde.
La tabulación derecha es lo que produce el encabezado de dos columnas característico:
USIL – Market Research Group (GRIM) Lima, PE ← negrita
Practicante de Investigación de Mercados Dic 2022 – Ago 2023 ← cursiva
• Diseñé y ejecuté más de 6 estudios de comportamiento del consumidor…
Al procesar el CV original, el generado sale con 23 párrafos con tabulación — exactamente los mismos que el original.
PERFIL PROFESIONAL · COMPETENCIAS CLAVE · EXPERIENCIA PROFESIONAL · LIDERAZGO & VOLUNTARIADO · EDUCACIÓN · CERTIFICACIONES RELEVANTES · PROYECTO EN DESARROLLO · LOGROS DESTACADOS
En COMPETENCIAS CLAVE y PROYECTO EN DESARROLLO, solo la etiqueta anterior a los dos puntos va en negrita («Análisis & Herramientas: SPSS · Power BI…»), igual que el original.
Para poder alinear el lugar y las fechas a la derecha, el perfil guarda entradas, no líneas sueltas:
{"organizacion": "Zero West Street", "lugar": "Lima, PE (Remoto)",
"cargo": "Social Media Marketing Manager (Freelance)",
"fechas": "Jul 2024 – Dic 2024", "logros": ["Lideré el lanzamiento…"]}
normalizar() acepta también el modelo plano antiguo, y a_secciones_planas() produce la vista plana que necesita el código que redacta las respuestas del formulario. El análisis con IA extrae directamente esta estructura y separa el trabajo remunerado (experiencia) del voluntariado (liderazgo).
lote.py)Dos modalidades, ambas con un tope de 15 vacantes por tanda para que un fallo no acabe escribiendo a decenas de empresas.
Modo revisado (por defecto). Prepara todo —CV adaptado por vacante, respuestas redactadas, formulario llenado— y se detiene. La persona ve el plan completo con una casilla por vacante y envía las que marque.
Modo automático. Envía sin revisar cada una. Detrás de un consentimiento informado: cuatro casillas que describen un riesgo concreto cada una (es irreversible, no vas a revisar, las respuestas las redacta una IA y pueden tener errores, eres responsable del contenido). El backend exige los cuatro valores en True booleano — verificado que "true" como cadena no pasa.
Lo que el modo automático sigue sin hacer, y es deliberado:
Entre vacante y vacante hay una pausa de 2 segundos: evita topar el límite por minuto de la capa gratuita de la IA y no golpea el portal a ritmo de robot.
POST /api/cv/adaptar reordena y reenfoca el CV hacia una vacante concreta: reescribe el resumen orientado al puesto, sube lo relevante al inicio y usa las palabras del anuncio donde el CV ya las respalda. Devuelve además la lista de cambios para que la persona vea qué se movió y por qué.
Las instrucciones del modelo prohíben inventar: no puede añadir herramientas, logros, empresas, cifras ni títulos que no estén en el CV, y si la vacante pide algo que la persona no tiene, no lo menciona. Cada CV adaptado se guarda con el nombre de la empresa y el puesto, así que no se sobrescriben y queda historial.
Tras generar el CV, POST /api/cv/preview devuelve el mismo contenido en HTML con el formato Harvard (Times New Roman, nombre centrado, secciones en mayúsculas con línea) para revisarlo sin abrir el Word. El paso 3 no avanza hasta que la persona confirma que está bien.