Releases: Drakonis96/hipertracker
Release list
v0.1.11
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· imagendrakonis96/hipertracker:0.1.11. La nueva tabla se crea automáticamente al arrancar (sin migraciones manuales).
v0.1.10
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· imagendrakonis96/hipertracker:0.1.10.
v0.1.9
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· imagendrakonis96/hipertracker:0.1.9.
v0.1.8
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
.gitignoreexcluía por errorclient/src/data/; ahora se incluyenemojis.jseicons.js.
Instalación
- iOS/iPadOS (AltStore): añade la fuente
https://raw.githubusercontent.com/Drakonis96/hipertracker/main/altstore/source.jsone 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· imagendrakonis96/hipertracker:0.1.8.
HiperTracker v0.1.7
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.jsono elHiperTracker.ipaadjunto. - macOS:
HiperTracker.dmg(clic derecho → Abrir). - Servidor (amd64):
drakonis96/hipertracker:0.1.7.
HiperTracker v0.1.6
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
pageshowrecarga 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/logoutinvalida 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.jsono elHiperTracker.ipaadjunto. - macOS:
HiperTracker.dmg(clic derecho → Abrir). - Servidor (amd64):
drakonis96/hipertracker:0.1.6.
HiperTracker v0.1.5
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.jsono elHiperTracker.ipaadjunto. - macOS:
HiperTracker.dmg(clic derecho → Abrir). - Servidor (amd64):
drakonis96/hipertracker:0.1.5.
HiperTracker v0.1.4
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.jsono elHiperTracker.ipaadjunto. - macOS:
HiperTracker.dmg(clic derecho → Abrir). - Servidor (amd64):
drakonis96/hipertracker:0.1.4.
HiperTracker v0.1.3
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.jsniregisterSW.js. - La app sigue siendo instalable (manifest con
crossorigin="use-credentials"). index.htmldesregistra cualquier SW previo y limpia su caché sin recargar.
⚠️ Al actualizar
- Despliega v0.1.3 (
docker compose -f docker-compose.hub.yml pull && … up -d). - Purga la caché de Cloudflare una vez (sobre todo
/sw.js,/index.html). - 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.jsono elHiperTracker.ipaadjunto. - macOS:
HiperTracker.dmg(clic derecho → Abrir). - Servidor (amd64):
drakonis96/hipertracker:0.1.3.
HiperTracker v0.1.2
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 usacrossorigin="use-credentials", así el navegador deja de pedir/manifest.webmanifestsin credenciales (401 → diálogo de Basic Auth). - Sin service worker obsoleto en caché:
sw.js,registerSW.js, el HTML y el manifest se sirven conCache-Control: no-cache, para que ni el navegador ni un CDN cacheen un SW antiguo (los assets con hash siguen siendoimmutable).
⚠️ Tras actualizar (importante si usas Cloudflare)
- Despliega esta versión (
docker compose -f docker-compose.hub.yml pull && … up -d). - Purga la caché de Cloudflare (al menos
/sw.js, o Purge Everything) una vez. - Recomendado: una Cache Rule en Cloudflare que haga Bypass cache para
/sw.js,/registerSW.jsy el HTML. - 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.jsono elHiperTracker.ipaadjunto. - macOS:
HiperTracker.dmg(clic derecho → Abrir). - Servidor (amd64):
drakonis96/hipertracker:0.1.2.