Skip to content

Releases: Drakonis96/hipertracker

v0.1.11

Choose a tag to compare

@Drakonis96 Drakonis96 released this 08 Jun 11:36

HiperTracker v0.1.11

🤝 Compartir listas con perfiles concretos (web + app nativa iOS · iPadOS · macOS)

Al crear o editar una lista ahora puedes elegir entre tres modos:

  • Personal — solo para ti.
  • Con todos — todos los perfiles (como hasta ahora).
  • Con usuarios concretos — eliges qué perfiles ven la lista.

El administrador puede ver y editar la compartición (modo y miembros) de cualquier lista.

Instalación

  • iOS/iPadOS (AltStore): fuente https://raw.githubusercontent.com/Drakonis96/hipertracker/main/altstore/source.json.
  • macOS: descarga HiperTracker.dmg (clic derecho → Abrir la primera vez).
  • Servidor (Docker Hub, amd64): docker compose -f docker-compose.hub.yml pull && docker compose -f docker-compose.hub.yml up -d · imagen drakonis96/hipertracker:0.1.11. La nueva tabla se crea automáticamente al arrancar (sin migraciones manuales).

v0.1.10

Choose a tag to compare

@Drakonis96 Drakonis96 released this 08 Jun 10:52

HiperTracker v0.1.10

🏪 Sección Tiendas (web + app nativa iOS · iPadOS · macOS)

  • Los grupos se muestran ordenados: primero los supermercados, luego las demás tiendas (y al final las personalizadas).
  • Nuevo buscador para filtrar tiendas por nombre.

Instalación

  • iOS/iPadOS (AltStore): fuente https://raw.githubusercontent.com/Drakonis96/hipertracker/main/altstore/source.json.
  • macOS: descarga HiperTracker.dmg (clic derecho → Abrir la primera vez).
  • Servidor (Docker Hub, amd64): docker compose -f docker-compose.hub.yml pull && docker compose -f docker-compose.hub.yml up -d · imagen drakonis96/hipertracker:0.1.10.

v0.1.9

Choose a tag to compare

@Drakonis96 Drakonis96 released this 08 Jun 10:28

HiperTracker v0.1.9

🐛 Arreglo (app nativa iOS · iPadOS · macOS)

  • Cambiar de tienda al editar un producto ya se guarda. Antes, al abrir el selector de tiendas desde la edición y volver, el cambio se descartaba (la pantalla reiniciaba las tiendas seleccionadas al pulsar atrás). Ahora crear, editar (incluido cambiar de tienda) y eliminar funcionan con fiabilidad desde iOS/iPadOS/macOS.
  • La webapp no estaba afectada por este fallo.

Instalación

  • iOS/iPadOS (AltStore): fuente https://raw.githubusercontent.com/Drakonis96/hipertracker/main/altstore/source.json.
  • macOS: descarga HiperTracker.dmg (clic derecho → Abrir la primera vez).
  • Servidor (Docker Hub, amd64): docker compose -f docker-compose.hub.yml pull && docker compose -f docker-compose.hub.yml up -d · imagen drakonis96/hipertracker:0.1.9.

v0.1.8

Choose a tag to compare

@Drakonis96 Drakonis96 released this 08 Jun 09:58

HiperTracker v0.1.8

Web + app nativa (iOS · iPadOS · macOS):

  • 🔤➡️😀 Sugerencias de emoji al escribir el nombre del producto, con coincidencia en español e inglés (p. ej. milk/leche → 🥛, chicken/pollo → 🍗).
  • 🏪 Selector de tiendas reordenado: primero Supermercados, luego Otras, luego Personalizadas.
  • 🔍 Logos de tienda más grandes y mejor visibles en la lista y en el selector.
  • 🧩 Menú ··· que ya no se recorta en las últimas filas (web).
  • 🛠️ Arreglo de repositorio: el .gitignore excluía por error client/src/data/; ahora se incluyen emojis.js e icons.js.

Instalación

  • iOS/iPadOS (AltStore): añade la fuente https://raw.githubusercontent.com/Drakonis96/hipertracker/main/altstore/source.json e instala HiperTracker.
  • macOS: descarga HiperTracker.dmg (ábrela con clic derecho → Abrir la primera vez, no está notarizada).
  • Servidor (Docker Hub, amd64): docker compose -f docker-compose.hub.yml pull && docker compose -f docker-compose.hub.yml up -d · imagen drakonis96/hipertracker:0.1.8.

HiperTracker v0.1.7

Choose a tag to compare

@Drakonis96 Drakonis96 released this 07 Jun 18:26

Añade un botón flotante para forzar la actualización desde el servidor y agranda los logos de tienda.

🔄 Actualizar desde el servidor

  • Web: botón flotante (esquina inferior izquierda) presente en todas las secciones. Si algo se queda desincronizado, púlsalo para recargar tiendas, perfiles, listas y productos desde el servidor (con aviso de confirmación).
  • App nativa: desliza hacia abajo en la lista para refrescar (pull-to-refresh).

🏪 Logos de tienda más grandes

Los logos en la sección de lista (y en gestionar/filtros) ahora son más grandes y se ven con claridad. En la app nativa también.

Instalación

  • iOS/iPadOS: fuente AltStore https://raw.githubusercontent.com/Drakonis96/hipertracker/main/altstore/source.json o el HiperTracker.ipa adjunto.
  • macOS: HiperTracker.dmg (clic derecho → Abrir).
  • Servidor (amd64): drakonis96/hipertracker:0.1.7.

HiperTracker v0.1.6

Choose a tag to compare

@Drakonis96 Drakonis96 released this 07 Jun 18:00

Añade Cerrar sesión del login de la app, con cierre completo y a prueba del botón "atrás".

🚪 Cerrar sesión

  • Web: opción Cerrar sesión en el menú de perfil (cuando el login de la app está activo). Borra la cookie del portero en el servidor, el token y la sesión de perfil, y recarga. Un guard pageshow recarga cualquier página restaurada desde la bfcache, así pulsar "atrás" NO reentra en la app: vuelve a pedir el login.
  • App nativa: botón Cerrar sesión en Ajustes → cierre completo (olvida tokens, login de la app, perfil y configuración) y vuelve a Conectar recordando la última URL.
  • Servidor: POST /api/v1/gate/logout invalida la cookie httpOnly.

Verificado: tras cerrar sesión, el servidor deja de servir la SPA (devuelve la página de login) y los assets responden 401; el botón atrás no restaura la sesión.

Instalación

  • iOS/iPadOS: fuente AltStore https://raw.githubusercontent.com/Drakonis96/hipertracker/main/altstore/source.json o el HiperTracker.ipa adjunto.
  • macOS: HiperTracker.dmg (clic derecho → Abrir).
  • Servidor (amd64): drakonis96/hipertracker:0.1.6.

HiperTracker v0.1.5

Choose a tag to compare

@Drakonis96 Drakonis96 released this 07 Jun 17:43

Endurece el login propio de la app y protege el cascarón estático.

🛡️ Seguridad

  • Rate limiting por IP real (detrás de Cloudflare / NPM): el login se bloquea tras 10 intentos fallidos / 15 min (solo cuenta fallos, no penaliza accesos correctos) → respuesta 429. Tope general de la API como defensa frente a abuso.
  • Cabeceras de seguridad: X-Content-Type-Options, X-Frame-Options, Referrer-Policy.
  • JWT_SECRET: si no lo defines, se genera uno aleatorio fuerte y se persiste en data/.jwt-secret (nunca un secreto por defecto adivinable).
  • Comparación de credenciales en tiempo constante.

🚪 Cascarón estático protegido

Con el login activado, un navegador sin sesión ya no recibe el HTML/JS de la app: se sirve una página de login server-side autocontenida. Al autenticarte se fija una cookie httpOnly (SameSite=Lax, Secure en HTTPS) y se carga la app. La app nativa sigue usando la cabecera X-App-Auth (sin cambios de uso).

Si actualizas, los tokens previos se invalidan al generarse un nuevo JWT_SECRET (a menos que lo fijes tú): tendrás que volver a iniciar sesión una vez.

Instalación

  • iOS/iPadOS: fuente AltStore https://raw.githubusercontent.com/Drakonis96/hipertracker/main/altstore/source.json o el HiperTracker.ipa adjunto.
  • macOS: HiperTracker.dmg (clic derecho → Abrir).
  • Servidor (amd64): drakonis96/hipertracker:0.1.5.

HiperTracker v0.1.4

Choose a tag to compare

@Drakonis96 Drakonis96 released this 07 Jun 17:30

Nuevo: login propio de la app, alternativa al Basic Auth del reverse proxy (que con una PWA provocaba diálogos repetidos del navegador).

🔒 Cómo activarlo

Define en el servidor (compose) ambos:

APP_AUTH_USER=tu_usuario
APP_AUTH_PASSWORD=tu_contraseña

Entonces toda la API queda protegida por una pantalla de login propia (token firmado en X-App-Auth, comparación timing-safe, nada se guarda en el servidor). Así puedes quitar el Basic Auth de Nginx Proxy Manager y se acaban los diálogos del navegador. Solo el "cascarón" estático (sin datos) queda público.

  • Web: pantalla de login con el logo antes de elegir perfil.
  • App nativa (iOS/iPadOS/macOS): en Conectar activa "Login de la app" e introduce usuario/contraseña (se guardan en el Keychain).

Instalación

  • iOS/iPadOS: fuente AltStore https://raw.githubusercontent.com/Drakonis96/hipertracker/main/altstore/source.json o el HiperTracker.ipa adjunto.
  • macOS: HiperTracker.dmg (clic derecho → Abrir).
  • Servidor (amd64): drakonis96/hipertracker:0.1.4.

HiperTracker v0.1.3

Choose a tag to compare

@Drakonis96 Drakonis96 released this 07 Jun 17:12

Arregla definitivamente las peticiones repetidas de Basic Auth y el bucle de recargas al iniciar sesión tras un reverse proxy + CDN (Nginx Proxy Manager + Cloudflare).

🐛 Causa y arreglo

El service worker era incompatible con Basic Auth + CDN: provocaba diálogos de credenciales repetidos y, con el SW autodestructivo de v0.1.1/0.1.2, un bucle de recargas justo al elegir perfil. Se elimina el service worker por completo:

  • Sin sw.js ni registerSW.js.
  • La app sigue siendo instalable (manifest con crossorigin="use-credentials").
  • index.html desregistra cualquier SW previo y limpia su caché sin recargar.

⚠️ Al actualizar

  1. Despliega v0.1.3 (docker compose -f docker-compose.hub.yml pull && … up -d).
  2. Purga la caché de Cloudflare una vez (sobre todo /sw.js, /index.html).
  3. En tu navegador/móvil, borra los datos del sitio una vez (o recarga forzada) para soltar el SW que quedó enganchado. Tras eso ya no debería volver a pedirlo.

Instalación

  • iOS/iPadOS: fuente AltStore https://raw.githubusercontent.com/Drakonis96/hipertracker/main/altstore/source.json o el HiperTracker.ipa adjunto.
  • macOS: HiperTracker.dmg (clic derecho → Abrir).
  • Servidor (amd64): drakonis96/hipertracker:0.1.3.

HiperTracker v0.1.2

Choose a tag to compare

@Drakonis96 Drakonis96 released this 07 Jun 16:57

Arregla las peticiones repetidas de Basic Auth al acceder tras un reverse proxy / CDN (Nginx Proxy Manager + Cloudflare).

🐛 Arreglos

  • Manifest con credenciales: el <link rel="manifest"> ahora usa crossorigin="use-credentials", así el navegador deja de pedir /manifest.webmanifest sin credenciales (401 → diálogo de Basic Auth).
  • Sin service worker obsoleto en caché: sw.js, registerSW.js, el HTML y el manifest se sirven con Cache-Control: no-cache, para que ni el navegador ni un CDN cacheen un SW antiguo (los assets con hash siguen siendo immutable).

⚠️ Tras actualizar (importante si usas Cloudflare)

  1. Despliega esta versión (docker compose -f docker-compose.hub.yml pull && … up -d).
  2. Purga la caché de Cloudflare (al menos /sw.js, o Purge Everything) una vez.
  3. Recomendado: una Cache Rule en Cloudflare que haga Bypass cache para /sw.js, /registerSW.js y el HTML.
  4. En dispositivos ya afectados, una recarga forzada o borrar datos del sitio una vez.

Instalación

  • iOS/iPadOS: fuente AltStore https://raw.githubusercontent.com/Drakonis96/hipertracker/main/altstore/source.json o el HiperTracker.ipa adjunto.
  • macOS: HiperTracker.dmg (clic derecho → Abrir).
  • Servidor (amd64): drakonis96/hipertracker:0.1.2.