Changelog
Versiones de Lomos. Formato basado en Keep a Changelog.
v4.4.2 — 2026-04-28
Importación de Goodreads ahora respeta la fecha de inicio de lectura.
Corregido
- El importador de Goodreads ignoraba
Date Started Reading: el adapter falseabastartDate = endDate, así que toda lectura importada decía "leído en 1 día" aunque el CSV trajese la fecha real. Ahora:- Si el CSV trae
Date Started Reading, la reading se crea con esa fecha de inicio y la duración real es correcta. - Si solo viene
Date Read(caso típico de altas manuales antiguas o histórico migrado desde Sheets), la reading se persiste constartDate = undefined— honesto: "lo terminé tal día, no recuerdo cuándo empecé". Las stats de tiempo medio por libro ya excluyen automáticamente esas readings (no se puede calcular duración sin inicio). El editor de reading permite añadir la fecha de inicio a posteriori si el usuario la recuerda.
- Si el CSV trae
Cambios
- En la lista de lecturas del libro, una reading sin fecha de inicio se muestra como "Leído el {fecha}" en vez de
— → {fecha}. Las readings abiertas sin fecha de inicio (caso defensivo) se etiquetan como "leyendo (sin fecha de inicio)".
Notas de migración
- No hay migración automática de datos existentes. Las lecturas creadas con el bug viejo (
startDate = endDate) siguen como están. Re-importar el mismo CSV no las actualiza (la dedupe identifica como duplicado porDate Read).
v4.4.1 — 2026-04-28
Reset completo de librería y tres bugs críticos del cierre v4.4.0.
Nuevo
- Reset completo de librería en Yo → "Zona peligrosa". Vacía books, ejemplares, lecturas, reseñas, citas, préstamos, feed de novedades y tu estado personal. Verificación visible: hay que escribir literal
ELIMINARpara activar el botón rojo. La library doc se conserva (no hace falta volver a hacer onboarding antes de re-importar).
Corregido
- Filtro del catálogo roto: "Mi librería" sacaba todos los libros (físicos + eBook) y "eBook" salía vacío. Causa raíz: faltaban las rules de collectionGroup para
copies, así que la query devolvía vacío y todos los libros caían en el branch "sin copies → asume físico". Añadidas también paraloansyquotespor consistencia. - Aviso de versión nueva no aparecía en la PWA.
registerType: 'autoUpdate'activaba el SW nuevo sin dispararneedRefresh, y la pestaña abierta seguía mostrando la versión vieja hasta limpiar caché manualmente. Cambiado a'prompt'para que el toast aparezca yActualizarfuncione. - Landing web mantenía el HTML viejo en caché tras un deploy. La rule
_headerssolo cubría/*.html(matchea archivos terminados en.html), pero Cloudflare sirveindex.htmlpara/,/docs,/changelog, etc. Ampliada a/*con_astro/*antes para mantener assets inmutables.
Cambios
- Filtro "ePub" renombrado a "eBook" en chip y mensajes vacíos.
v4.4.0 — 2026-04-28
Solicitud pública de invitación, filtro físicos/ePub en el catálogo y matching más fino en imports.
Nuevo
- Solicitud pública de invitación en
lomos.app/solicitar: cualquier visitante puede pedir acceso enviando nombre, email y un breve "¿de qué te conozco?". El doc se guarda en Firestore (/signupRequests/) sin servicios externos. Honeypot anti-bot. - Panel admin ampliado: nuevas secciones en
/yo/adminpara ver las solicitudes entrantes (con un click se aprueban — genera signup code con el email del solicitante y copia el link al portapapeles) y las sugerencias de los usuarios (con botón para abrir captura adjunta si la hay). - Filtro Físicos / ePub / Externos / Todos en el catálogo. El filtro por defecto es "Físicos" (libros con ≥1 copy física, o sin copies registradas — asunción razonable). "ePub" muestra solo los que tienen al menos una copy con formato ebook.
Corregido
- Importación de Kobo ya no duplica libros que vinieron de Goodreads. Antes el ISBN del ePub (Kobo) era distinto al del libro físico (Goodreads), así que
findExistingBookno matcheaba. Añadido un cuarto camino de reconciliación por título normalizado + primer autor (defensivo: solo matchea si la entrada es única en el catálogo).
Cambios
- En "Yo" la card "Migración → Importar Goodreads" ahora dice "Importar" y el copy menciona Goodreads + Kobo.
- CTAs de la landing ajustados: el primary del hero pasa de "Entrar a la app" a "Solicitar invitación". "Entrar a la app" sigue como link secundario debajo y en el header.
v4.3.0 — 2026-04-28
Primera versión con landing pública, documentación y changelog.
Nuevo
- Landing pública en
lomos.appcon hero, features y enlaces a la app y a la documentación. - Documentación con 7 secciones: empezar, catálogo, lecturas, tu perfil, compartir librería, importar, compartir reseña.
- Página de changelog pública en
/changelogcon todas las versiones. - Badge "novedades" en la sección Yo de la app: avisa al usuario cuando hay una versión nueva desde su última visita.
app.lomos.appcomo nuevo subdominio para la PWA. El apexlomos.appahora sirve la landing.
Cambios
- La PWA se sirve desde
app.lomos.app(Firebase Hosting). - La landing y docs se sirven desde
lomos.app(Cloudflare Pages, auto-deploy desde GitHub).
v4.2.3 — 2026-04-28
Corregido
- La portada del libro ya se embebe correctamente en la imagen al compartir reseña. Antes salía "Sin portada" por dos causas combinadas: (a) el blob URL no se inlineaba dentro del SVG
foreignObjectque usa la captura, y (b) si se pulsaba Compartir antes de que terminara el prefetch, la card se capturaba vacía. Ahora la portada se pasa como data URL yhandleShareespera al prefetch antes de capturar.
v4.2.2 — 2026-04-28
Corregido
- El botón Compartir ahora es siempre clicable. Si no hay reseña ni rating, la imagen sale con logo + portada + título + autor (estilo "estoy leyendo X").
- Las portadas externas (Open Library, Google Books) y las de Storage sin CORS configurado se cargan ahora vía proxy
images.weserv.nlcuando el fetch directo falla.
v4.2.1 — 2026-04-28
Corregido
- El botón Compartir parecía "no responder al clic" porque quedaba
disabledcuando solo había rating sin texto. Ahora basta con tener rating o texto. Card off-screen movida a un Portal para no depender del layout del padre.
v4.2.0 — 2026-04-28
Importadores, compartir, analytics y rediseño de la ficha móvil.
Nuevo
- Importar desde Goodreads con instrucciones paso a paso para obtener el CSV.
- Importar desde Kobo subiendo el archivo
KoboReader.sqlitedel eReader. Reconocimiento por ISBN para no duplicar libros ya importados desde Goodreads. - Refactor del motor de imports a un core agnóstico (
import-core). Promueve a "Mi librería" automáticamente los libros privados que confirman posesión vía import (ej. ebook que tienes en Kobo). - Badge "ebook" sobre la portada en el catálogo cuando el libro tiene al menos una
Copycon formato ebook. - Compartir reseña como imagen 1080×1920 estilo story. Con logo, portada, título, autor, estrellas y texto. Se usa Web Share API en móviles compatibles o se descarga como PNG.
- Firebase Analytics (GA4) con page-views automáticos en cambios de ruta. Sin banner de cookies (uso privado autorizado por el dueño).
- Rediseño de la ficha móvil: cabecera siempre side-by-side (cover izquierda, título/autor/editorial derecha). El chip de estado pasa junto al título. Tabs reordenadas a
Lectura | Citas | Ejemplar | Detalles. Cabecera compacta sticky al hacer scroll. - Onboarding "Primeros pasos": bloque persistente en el catálogo con 5 cards auto-tachadas (añade un libro, registra lectura externa, importa Goodreads, comparte tu librería, empieza a leer). Reactivable desde Yo → Ajustes.
Cambios
- Tab por defecto de la ficha cambió de
DetallesaLectura. - Renombrado tab
Físico→Ejemplar.
v4.1.0 — 2026-04-28
Nuevo
- Pool comunitario de portadas indexado por ISBN. Cuando subes una portada, se reutiliza para otros usuarios que tengan el mismo libro.
- Formularios de admin completos con email, label, estado y revocación.
- Vinculación de email en invitaciones y consumo automático tras login.
Cambios
- Retirada del allowlist legacy. Sustituido por sistema de invitaciones con tokens.
v4.0.0 — 2026-04-XX
Migración a multi-tenant ("casas"). Cada usuario o pareja tiene su propia librería, con sistema de invitaciones.
Nuevo
- Modelo de datos multi-tenant:
/libraries/{libraryId}/... - Sistema de invitaciones por email con tokens.
- URL con prefijo
/<libraryId>/...para todas las rutas autenticadas. - Página
/yo/casacon gestión de miembros.
v3.x y anteriores
Versiones previas con catálogo, lecturas, citas, préstamos, ejemplares, búsqueda, escaneo ISBN, wizard de portadas, dashboard de stats, reseñas con rating, y muchas iteraciones del modelo de datos. Sin entradas detalladas — el repositorio empezó como proyecto personal sin disciplina de changelog hasta v4.0.