Command Palette

Search for a command to run...

1.2.0

Renovación de la UI/UX de la extensión con nuevo reproductor, componentes nativos, insignia de actividad, snooze y planificación, panel de depuración condicional y reorganización de ajustes.

1.2.0 es una versión visual y funcional importante. Introduce un reproductor rediseñado con animación de vinilo, un componente Sheet hecho a mano, una insignia de icono de extensión, componentes Switch y Checkbox personalizados, funciones de snooze y planificación, un panel de depuración condicional y ajustes completamente reorganizados.

Reproductor

Nuevo diseño Bar con carátula 48×48 (inactivo: vinilo giratorio), barra de progreso opcional (solo music/streaming/tv/anime), y toggle showPlayer para ocultar la tarjeta. Controles eliminados. Diseño compacto y limpio. Los usuarios pueden ocultar el reproductor si prefieren una interfaz más simple.

Sheet

Nuevo componente Sheet nativo en Tailwind v4 (sin Radix), que se desliza desde abajo o la derecha. Integrado en ajustes de presencia, snooze y planificación. Sin dependencia de Radix, animación fluida, apto para móviles y focus trap integrado.

Insignia de extensión

Un indicador • aparece en el icono de la extensión cuando hay una presencia activa. El usuario sabe de un vistazo si hay actividad de Discord en curso sin abrir el panel.

Switch personalizado

Toggle cuadrado con esquinas redondeadas: fondo con borde (off), fondo violeta con botón blanco (on). Se alinea con la identidad visual de Nowly en lugar del switch estándar del navegador.

Checkbox personalizado

Checkbox 18×18px redondeada con relleno accent e icono check blanco. Aspecto coherente para los toggles de consentimiento y futuros formularios.

Ajustes de presencia

Los ajustes se abren en un Sheet desde abajo con configuración y botón de Desinstalar. Etiquetas vinculadas al switch mediante htmlFor. Interfaz más limpia, más accesible (clic en etiqueta = toggle), desinstalación siempre disponible.

Snooze

Snooze por presencia con stepper en bottom sheet ([−] [tiempo] [+], pasos de 5min, 5–240min). Icono Copo de nieve para snoozear, Sol para reactivar. Solo envía CLEAR_ACTIVITY al reactivar - la actividad permanece visible con insignia 'Snoozed'. Pausar actividad de Discord sin perder el estado de Nowly. Stepper rápido, indicador claro.

Planificación

Planificación por presencia o global con botones de día (Dom–Sáb) y franja horaria opcional. Modo 'todo el día' oculta las horas. Global desde la barra de acciones, por presencia desde el botón Calendar. Control total sobre cuándo una presencia se muestra en Discord. Modo día completo simplifica la configuración.

Reorganización ajustes

Header simplificado con bullet de color + estado. Tarjeta de conexión/host eliminada. Gestión de datos fusionada con analytics. Tarjeta de actualización condicional con estilo accent. Barra de acciones solo en la pestaña Actividad. Ajustes más limpios. La actualización del host destaca cuando está disponible. Sin distracción durante la configuración.

Panel de depuración condicional

DebugPanel oculto en builds de Chrome Web Store (verificación update_url). Solo se muestra en la vista Ajustes con un cabezal plegable - sin banner separado. Verificar actualizaciones se vuelve inactivo en modo dev. Sin fugas de depuración en producción. UI más limpia: el cabezal también sirve como aviso. Sin falsas actualizaciones en desarrollo.

Barra de progreso

Solo se muestra para las categorías music, streaming, tv y anime. Ocultada para presencias 'other'. La barra de progreso sigue siendo relevante - sin temporizadores sin sentido para presencias no multimedia.

Consentimiento de analytics

Pantalla de onboarding rediseñada con una cuadrícula compacta: 6 elementos no recolectados (X) y 1 elemento recolectado (✓). Botón 'Compartir' centrado, 'No gracias' como texto enlace. Comunicación de privacidad más clara. Menos intimidante que el anterior muro de texto.

Soporte Firefox

Chrome y Firefox ahora tienen rutas de build separadas, packaging para tiendas, inyección userScripts nativa, soporte para páginas con CSP estricta y manifests del host para IDs Firefox de producción. Nowly queda listo para una distribución de navegador más amplia sin debilitar la fiabilidad de la inyección de presencias.

Endurecimiento API

Auth, analytics, valoraciones, proxy de imágenes, sincronización de presencias y changelog con IA se reforzaron con validación, nonce, redirecciones más seguras, cachés acotadas y prompts resistentes a inyección. Los endpoints públicos son más predecibles frente a entradas inválidas, URLs hostiles y abuso.

Se añadieron aviso legal y cookies, banner de cookies, gestión de consentimiento con exportación/eliminación, página de equipo, footer categorizado, CTA dinámico por navegador y correcciones de estado. El sitio público cubre mejor release, confianza, privacidad, soporte y equipo.

App de escritorio y release tooling

La verificación manual de actualización reinicia primero el puente nativo. Los logs del host son más claros, los errores IPC de Discord se registran, los logs rotan y los archivos de extensión se empaquetan con tar. Las actualizaciones y diagnósticos son más fiables en instalaciones locales y artefactos de release.

Calidad interna

Las utilidades compartidas pasan a @nowly/shared, los tipos/helpers de background se separan, las primitivas UI sustituyen elementos brutos, el README se amplía y los assets de YouTube Music se actualizan. El código es más mantenible y la documentación de release refleja todo el alcance de la rama.

Pase Supporter

Nuevo sistema de pase supporter con correo electrónico, notificaciones Discord, estado ad-free y página de canje. El estado supporter se sincroniza entre dispositivos con una superposición de agradecimiento. Incluye endpoint GET /support/verify-code y plantilla email light rediseñada. Base de monetización: los usuarios pueden apoyar el proyecto y navegar sin anuncios. El flujo completo maneja activación, alertas Discord y sincronización.

Endpoint seguridad

Nuevo endpoint GET /security/public-key que deriva la clave pública desde PRESENCE_SIGNING_PRIVATE_KEY en tiempo de ejecución. La extensión la obtiene al iniciar con fallback hardcodeado. Permite rotación de clave sin actualizar la extensión. Retrocompatible mediante clave de respaldo.

Migración CDN

Todos los assets estáticos (logos, iconos, títulos) se sirven desde cdn.nowly.me/assets/ en lugar de nowly.me o chrome.runtime.getURL. Archivos legacy eliminados de web/public y scripts de build. Entrega global más rápida, bundle de extensión reducido, gestión centralizada de assets.

Refactor arquitectura

Puntos de entrada movidos a src/entrypoints/. Background reorganizado en managers/, services/, runtime/, analytics/. Componentes divididos en layout/, shared/, ui/. Todos los imports relativos reemplazados por alias @/. Código más limpio, navegación más fácil, imports consistentes en toda la extensión.