From d43fa7fe80c4ab641c9cc81c5be2fa0a6d77b6a4 Mon Sep 17 00:00:00 2001 From: JoseMelNet Date: Sat, 23 May 2026 11:57:31 -0500 Subject: [PATCH 01/13] Extract shared Jinja UI components --- .../web/templates/applications/_list.html | 33 +++++-------------- .../web/templates/applications/_shell.html | 6 ++-- .../web/templates/applications/index.html | 10 +++--- .../web/templates/components/_flash.html | 3 ++ .../templates/components/_page_header.html | 6 ++++ .../web/templates/components/_pagination.html | 25 ++++++++++++++ .../web/templates/profile/_shell.html | 4 ++- .../web/templates/profile/index.html | 10 +++--- .../web/templates/vacancies/_list.html | 33 +++++-------------- .../web/templates/vacancies/index.html | 16 ++++----- .../web/templates/vacancies/new.html | 22 ++++++------- 11 files changed, 81 insertions(+), 87 deletions(-) create mode 100644 app/interfaces/web/templates/components/_flash.html create mode 100644 app/interfaces/web/templates/components/_page_header.html create mode 100644 app/interfaces/web/templates/components/_pagination.html diff --git a/app/interfaces/web/templates/applications/_list.html b/app/interfaces/web/templates/applications/_list.html index 2ecb11b..aa1128b 100644 --- a/app/interfaces/web/templates/applications/_list.html +++ b/app/interfaces/web/templates/applications/_list.html @@ -27,31 +27,14 @@ {% endfor %} - {% if pagination.total_pages > 1 %} -
- {% if pagination.has_prev %} - Anterior - {% endif %} - Pagina {{ pagination.page }} de {{ pagination.total_pages }} - {% if pagination.has_next %} - Siguiente - {% endif %} -
- {% endif %} + {% set pagination_prev_href = "/app/applications?q=%s&state=%s&page=%s&page_size=%s"|format(query, current_state, pagination.prev_page, pagination.page_size) %} + {% set pagination_prev_hx_get = "/app/applications/shell?q=%s&state=%s&page=%s&page_size=%s"|format(query, current_state, pagination.prev_page, pagination.page_size) %} + {% set pagination_next_href = "/app/applications?q=%s&state=%s&page=%s&page_size=%s"|format(query, current_state, pagination.next_page, pagination.page_size) %} + {% set pagination_next_hx_get = "/app/applications/shell?q=%s&state=%s&page=%s&page_size=%s"|format(query, current_state, pagination.next_page, pagination.page_size) %} + {% set pagination_hx_target = "#applications-shell" %} + {% set pagination_hx_swap = "outerHTML" %} + {% set pagination_hx_push_url = "true" %} + {% include "components/_pagination.html" %} {% else %}

Sin coincidencias

diff --git a/app/interfaces/web/templates/applications/_shell.html b/app/interfaces/web/templates/applications/_shell.html index f087755..712b03f 100644 --- a/app/interfaces/web/templates/applications/_shell.html +++ b/app/interfaces/web/templates/applications/_shell.html @@ -1,7 +1,7 @@ {% if flash_message %} -
- {{ flash_message[1] }} -
+ {% set flash_tone = flash_message[0] %} + {% set flash_text = flash_message[1] %} + {% include "components/_flash.html" %} {% endif %}
diff --git a/app/interfaces/web/templates/applications/index.html b/app/interfaces/web/templates/applications/index.html index 8897e0c..4075b9b 100644 --- a/app/interfaces/web/templates/applications/index.html +++ b/app/interfaces/web/templates/applications/index.html @@ -1,12 +1,10 @@ {% extends "base.html" %} {% block content %} - +{% set page_header_title = "Seguimiento" %} +{% set page_header_description = "Control simple de vacantes que ya te interesan o a las que ya aplicaste." %} +{% set page_header_copy_class = none %} +{% include "components/_page_header.html" %}
{% include "applications/_shell.html" %} diff --git a/app/interfaces/web/templates/components/_flash.html b/app/interfaces/web/templates/components/_flash.html new file mode 100644 index 0000000..c10d301 --- /dev/null +++ b/app/interfaces/web/templates/components/_flash.html @@ -0,0 +1,3 @@ +
+ {{ flash_text }} +
diff --git a/app/interfaces/web/templates/components/_page_header.html b/app/interfaces/web/templates/components/_page_header.html new file mode 100644 index 0000000..3e0a299 --- /dev/null +++ b/app/interfaces/web/templates/components/_page_header.html @@ -0,0 +1,6 @@ +
+
diff --git a/app/interfaces/web/templates/components/_pagination.html b/app/interfaces/web/templates/components/_pagination.html new file mode 100644 index 0000000..29d9af1 --- /dev/null +++ b/app/interfaces/web/templates/components/_pagination.html @@ -0,0 +1,25 @@ +{% if pagination.total_pages > 1 %} +
+ {% if pagination.has_prev %} + Anterior + {% endif %} + Pagina {{ pagination.page }} de {{ pagination.total_pages }} + {% if pagination.has_next %} + Siguiente + {% endif %} +
+{% endif %} diff --git a/app/interfaces/web/templates/profile/_shell.html b/app/interfaces/web/templates/profile/_shell.html index 922b81d..6597b3f 100644 --- a/app/interfaces/web/templates/profile/_shell.html +++ b/app/interfaces/web/templates/profile/_shell.html @@ -1,5 +1,7 @@ {% if flash_message %} -
{{ flash_message[1] }}
+ {% set flash_tone = flash_message[0] %} + {% set flash_text = flash_message[1] %} + {% include "components/_flash.html" %} {% endif %}
diff --git a/app/interfaces/web/templates/profile/index.html b/app/interfaces/web/templates/profile/index.html index 9f8b8d1..446ddc9 100644 --- a/app/interfaces/web/templates/profile/index.html +++ b/app/interfaces/web/templates/profile/index.html @@ -1,12 +1,10 @@ {% extends "base.html" %} {% block content %} - +{% set page_header_title = "Mi Perfil" %} +{% set page_header_description = "Configura tu contexto profesional para mejorar el analisis de vacantes y mantener tu hoja de vida al dia." %} +{% set page_header_copy_class = none %} +{% include "components/_page_header.html" %}
{% include "profile/_shell.html" %} diff --git a/app/interfaces/web/templates/vacancies/_list.html b/app/interfaces/web/templates/vacancies/_list.html index a00f56d..e491385 100644 --- a/app/interfaces/web/templates/vacancies/_list.html +++ b/app/interfaces/web/templates/vacancies/_list.html @@ -69,31 +69,14 @@ {% endif %} {% endfor %}
- {% if pagination.total_pages > 1 %} -
- {% if pagination.has_prev %} - Anterior - {% endif %} - Pagina {{ pagination.page }} de {{ pagination.total_pages }} - {% if pagination.has_next %} - Siguiente - {% endif %} -
- {% endif %} + {% set pagination_prev_href = "/app/vacancies?q=%s&view=%s&page=%s&page_size=%s"|format(query, current_view, pagination.prev_page, pagination.page_size) %} + {% set pagination_prev_hx_get = "/app/vacancies/list?q=%s&view=%s&page=%s&page_size=%s"|format(query, current_view, pagination.prev_page, pagination.page_size) %} + {% set pagination_next_href = "/app/vacancies?q=%s&view=%s&page=%s&page_size=%s"|format(query, current_view, pagination.next_page, pagination.page_size) %} + {% set pagination_next_hx_get = "/app/vacancies/list?q=%s&view=%s&page=%s&page_size=%s"|format(query, current_view, pagination.next_page, pagination.page_size) %} + {% set pagination_hx_target = "#vacancy-list" %} + {% set pagination_hx_swap = "innerHTML" %} + {% set pagination_hx_push_url = "true" %} + {% include "components/_pagination.html" %} {% else %}

No hay coincidencias

diff --git a/app/interfaces/web/templates/vacancies/index.html b/app/interfaces/web/templates/vacancies/index.html index 743d547..f12ea44 100644 --- a/app/interfaces/web/templates/vacancies/index.html +++ b/app/interfaces/web/templates/vacancies/index.html @@ -1,12 +1,10 @@ {% extends "base.html" %} {% block content %} - +{% set page_header_title = "Inbox de Vacantes" %} +{% set page_header_description = "Revisa, prioriza y decide sin salir del workspace." %} +{% set page_header_copy_class = "page-header-copy" %} +{% include "components/_page_header.html" %}
{% for item in context_bar %} @@ -18,9 +16,9 @@

Inbox de Vacantes

{% if flash_message %} -
- {{ flash_message[1] }} -
+ {% set flash_tone = flash_message[0] %} + {% set flash_text = flash_message[1] %} + {% include "components/_flash.html" %} {% endif %}
diff --git a/app/interfaces/web/templates/vacancies/new.html b/app/interfaces/web/templates/vacancies/new.html index 990a98b..e538805 100644 --- a/app/interfaces/web/templates/vacancies/new.html +++ b/app/interfaces/web/templates/vacancies/new.html @@ -1,23 +1,21 @@ {% extends "base.html" %} {% block content %} - +{% set page_header_title = "Nueva Vacante" %} +{% set page_header_description = "Entrada manual de vacantes. La extension de Chrome seguira usando la API actual." %} +{% set page_header_copy_class = none %} +{% include "components/_page_header.html" %}
{% if request.query_params.get("flash") == "validation_error" %} -
- Revisa los datos de la vacante. Hay un valor invalido o faltante. -
+ {% set flash_tone = "warning" %} + {% set flash_text = "Revisa los datos de la vacante. Hay un valor invalido o faltante." %} + {% include "components/_flash.html" %} {% elif request.query_params.get("flash") == "save_error" %} -
- No se pudo guardar la vacante. Intenta nuevamente. -
+ {% set flash_tone = "warning" %} + {% set flash_text = "No se pudo guardar la vacante. Intenta nuevamente." %} + {% include "components/_flash.html" %} {% endif %}
From 8a20ec20ff24b85ab23c1b8685839e3a235e1819 Mon Sep 17 00:00:00 2001 From: JoseMelNet Date: Sat, 23 May 2026 12:02:30 -0500 Subject: [PATCH 02/13] Normalize UI refactor validation baseline --- test_connection.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/test_connection.py b/test_connection.py index 448e55d..19d81fa 100644 --- a/test_connection.py +++ b/test_connection.py @@ -2,8 +2,6 @@ from __future__ import annotations -import sys - import pyodbc from app.infrastructure.persistence.connection import ( From 5b368cb602c99012c3ed38d296fc14a22bab7054 Mon Sep 17 00:00:00 2001 From: JoseMelNet Date: Sat, 23 May 2026 12:10:23 -0500 Subject: [PATCH 03/13] Normalize vacancies HTMX structure --- .../web/templates/vacancies/_filters.html | 34 +++++++++ .../web/templates/vacancies/_shell.html | 15 ++++ .../web/templates/vacancies/_summary.html | 8 +++ .../web/templates/vacancies/index.html | 56 +-------------- tests/test_web_vacancies.py | 69 +++++++++++++++++++ 5 files changed, 127 insertions(+), 55 deletions(-) create mode 100644 app/interfaces/web/templates/vacancies/_filters.html create mode 100644 app/interfaces/web/templates/vacancies/_shell.html create mode 100644 app/interfaces/web/templates/vacancies/_summary.html diff --git a/app/interfaces/web/templates/vacancies/_filters.html b/app/interfaces/web/templates/vacancies/_filters.html new file mode 100644 index 0000000..190a796 --- /dev/null +++ b/app/interfaces/web/templates/vacancies/_filters.html @@ -0,0 +1,34 @@ +
+ + + + + + + +
diff --git a/app/interfaces/web/templates/vacancies/_shell.html b/app/interfaces/web/templates/vacancies/_shell.html new file mode 100644 index 0000000..3092f2c --- /dev/null +++ b/app/interfaces/web/templates/vacancies/_shell.html @@ -0,0 +1,15 @@ +{% include "vacancies/_summary.html" %} + +{% if flash_message %} + {% set flash_tone = flash_message[0] %} + {% set flash_text = flash_message[1] %} + {% include "components/_flash.html" %} +{% endif %} + +{% include "vacancies/_filters.html" %} + +
+
+ {% include "vacancies/_list.html" %} +
+
diff --git a/app/interfaces/web/templates/vacancies/_summary.html b/app/interfaces/web/templates/vacancies/_summary.html new file mode 100644 index 0000000..6220b36 --- /dev/null +++ b/app/interfaces/web/templates/vacancies/_summary.html @@ -0,0 +1,8 @@ +
+ {% for item in context_bar %} +
+ {{ item.value }} + {{ item.label }} +
+ {% endfor %} +
diff --git a/app/interfaces/web/templates/vacancies/index.html b/app/interfaces/web/templates/vacancies/index.html index f12ea44..37c57ed 100644 --- a/app/interfaces/web/templates/vacancies/index.html +++ b/app/interfaces/web/templates/vacancies/index.html @@ -6,61 +6,7 @@ {% set page_header_copy_class = "page-header-copy" %} {% include "components/_page_header.html" %} -
- {% for item in context_bar %} -
- {{ item.value }} - {{ item.label }} -
- {% endfor %} -
- -{% if flash_message %} - {% set flash_tone = flash_message[0] %} - {% set flash_text = flash_message[1] %} - {% include "components/_flash.html" %} -{% endif %} - -
-
- - - - - -
-
- -
-
- {% include "vacancies/_list.html" %} -
-
+{% include "vacancies/_shell.html" %}