Aplicacion para registrar vacantes, analizarlas contra un perfil profesional y gestionar aplicaciones laborales.
- interfaz principal web sobre
FastAPI + Jinja2 + HTMX - arquitectura por capas en
app/ - persistencia SQL Server via
pyodbc - suite automatizada con
unittest - CI en GitHub Actions con sintaxis, lint y tests
- registrar vacantes
- listar, archivar, reactivar y eliminar vacantes
- analizar vacantes contra el perfil activo
- guardar vacantes desde la extension de Chrome
- mostrar progreso de guardado y analisis en la extension
- recuperar analisis historicos en la extension al reabrir una vacante ya registrada por
link - gestionar aplicaciones y su seguimiento
- gestionar perfil profesional, skills, experiencia, proyectos, educacion, cursos y certificaciones
- renderizar una vista CV consolidada desde la web
CVs-Optimizator/
|-- app.py
|-- api.py
|-- app/
| |-- application/
| |-- config/
| |-- domain/
| |-- infrastructure/
| `-- interfaces/
| `-- web/
|-- chrome-extension/
|-- tests/
|-- sql_queries/
|-- run_tests.py
`-- .github/workflows/ci.yml
- Windows
- Python 3.11 recomendado
- SQL Server accesible desde
pyodbc - variables de entorno para BD
- Crea
.enva partir de.env.example. - Ajusta credenciales de SQL Server.
- Agrega
OPENAI_API_KEYsi vas a ejecutar analisis reales de vacantes.
Variables usadas:
DB_SERVER=localhost\MSSQLSERVER2025
DB_DATABASE=job_postings_mvp
DB_USER=your_sql_user
DB_PASSWORD=your_sql_password
OPENAI_API_KEY=your_openai_api_keyNotas de configuracion:
DB_USERyDB_PASSWORDson obligatorias para conectarse a SQL Server.DB_SERVERyDB_DATABASEmantienen defaults locales de desarrollo si no se definen.OPENAI_API_KEYes obligatoria para ejecutar analisis reales con OpenAI.- La app puede arrancar sin BD, pero los flujos que persisten o consultan datos devolveran errores controlados o vistas vacias.
python -m venv .venv
.venv\Scripts\activate
pip install -r requirements.txtInterfaz principal web:
uvicorn api:app --reload --port 8001Luego abre:
http://127.0.0.1:8001/app
Prueba rapida de BD:
python test_connection.pyNueva VacanteInboxSeguimientoMi Perfil
La interfaz web ya cubre el flujo principal del producto:
- registrar vacante
- analizarla
- revisarla en inbox
- moverla a seguimiento
- actualizar estados de aplicacion
- mantener perfil y vista CV
Las vistas largas de Inbox y Seguimiento ya incluyen paginacion y tamano de pagina configurable para evitar listas demasiado pesadas.
La extension usa side panel en lugar de popup efimero.
Flujo actual:
- extrae la vacante desde LinkedIn
- guarda la vacante por API local
- inicia el analisis en segundo plano
- muestra estados intermedios en el panel lateral
- si la vacante ya existia y tenia analisis, lo recupera desde la BD usando el
link
Endpoints usados por la extension:
GET /healthPOST /vacantesPOST /vacantes/asyncGET /vacantes/tasks/{task_id}GET /vacantes/{vacancy_id}/analysisGET /vacantes/by-link?link=...
Entrada unica recomendada:
python run_tests.pyEstado actual de la suite principal:
- tests de casos de uso
- tests de repositorios
- tests de API
- tests de rutas web
- tests de flujos integrados con mocks
- tests del flujo async y de recuperacion de analisis por
link
Workflow disponible en .github/workflows/ci.yml.
Ejecuta:
compileallruff checkpython run_tests.py
Resumen corto:
app/domain: enums y excepcionesapp/application: casos de uso y serviciosapp/infrastructure: conexion y repositoriosapp/interfaces/web: interfaz HTML principalchrome-extension: integracion local con LinkedIn y la API
Detalle adicional en ARCHITECTURE.md.
- la web es ahora la interfaz recomendada
app.pyen la raiz queda solo como acceso rapido informativo- la extension de Chrome ya opera con panel lateral y recuperacion de analisis historico por
link - la suite principal corre localmente con
68tests - el pipeline de CI ya esta preparado para validar cambios automaticamente