Novedades · Changelog

Cada semana, un poco mejor.

Mejoramos GarBotGPT casi a diario. Estas son las novedades más recientes: nuevas herramientas, mejoras de velocidad y arreglos, contadas en claro.

  1. v8.40.0

    🐛 Spotify "album de X" + Bug solapamiento mensaje editado

    Dos bugs corregidos: (1) "hazme un album de Michael Jackson" devolvía la lista de TUS playlists existentes en lugar de crear el álbum. Causa: el regex fallback de SpotifyRead capturaba la palabra "album" aunque el LLM ya hubiera clasificado la intención como CREATE, y AMBOS flujos (read + create) corrían en paralelo. Ahora el fallback de read solo se activa si NO hay create. (2) Al editar un mensaje con herramientas activas, la respuesta vieja del asistente quedaba visible arriba mientras la nueva se generaba abajo. Causa: race condition con Realtime que re-insertaba el mensaje viejo durante el streaming. Ahora se guarda pendingRegenAfterMessageId en el store y ChatArea oculta cualquier mensaje del asistente con created_at posterior hasta que termina la regeneración.

    Nuevo

    • 🎵 "album de X" ahora va al flujo de creación correctamente
    • ✏️ Edit + tools: nuevo pendingRegenAfterMessageId en chat-store
    • ✏️ MessageBubble: set/clear flag alrededor de regenerateFromHere
    • ✏️ ChatArea: filtro oculta assistant.created_at > edited_user.created_at

    Arreglado

    • 🎵 Fix Spotify: read fallback solo activa si !effectiveSpotifyCreate
    • ✏️ Cleanup en finally — también limpia si error/abort
  2. v8.39.0

    🖼️ /logos eliminada · /ios showcase · 🔍 Fullscreen artifact

    Tres cambios: (1) página /logos eliminada (LogosGallery + animaciones). (2) Nueva página /ios con 8 variantes de liquid glass Apple-style — frosted, specular reactive, SVG refraction, chromatic aberration, iridescent, mercurial, bubble lens, clean flat. Cada una sobre 4 fondos distintos (gradiente animado, cálido, frío, mesh oscuro) para evaluar comportamiento. Permite "elegir" una. (3) Nuevo botón de pantalla completa en el panel de artifacts: en desktop expande el panel a 100vw tapando el chat, con animación clip-path desde el lateral. Se restaura al cambiar de artifact.

    Nuevo

    • 🗑️ /logos, LogosGallery, _animated.ts → eliminados (rama git rm)
    • 🆕 /ios + LiquidGlassShowcase + liquid-glass-showcase.css
    • 🆕 8 variantes: frosted, specular, SVG refraction, chromatic, iridescent, mercurial, bubble lens, clean flat
    • 🆕 Background switcher 4 modos: gradient (animado), warm, cool, mesh
    • 🆕 Pointer-reactive: variante specular sigue al cursor con radial-gradient en --px/--py
    • 🆕 SVG filters: feTurbulence + feDisplacementMap para refracción real
    • 🔍 ArtifactPanel: nuevo botón Maximize2/Minimize2 entre Share y X
    • 🔍 Fullscreen toggle: 100vw + clip-path animation desde el lateral
    • 🔍 Auto-restore al cambiar de artifact
  3. v8.38.0

    🔍 Share full-screen + 💧 Liquid glass más neutro y reactivo

    Dos mejoras: (1) la página /share/artifact/{token} ahora muestra el artifact EDGE-TO-EDGE (sin padding ni card alrededor), ocupando todo el espacio entre header compacto y footer mínimo. Mucho más profesional para compartir. (2) Liquid glass del móvil rediseñado: saturación bajada de 1.8 a 1.4 para evitar reflejos "Aero" eléctricos sobre fondos coloridos, y añadido el ghost reflection: cuando presionas un control, el rim-light se desplaza al lado opuesto con inset shadows que simulan compresión física del cristal (tipo iOS 26).

    Nuevo

    • 🔍 SharedArtifactView: h-screen + flex-col, sin padding alrededor del preview
    • 🔍 Header y footer compactos (shrink-0) para maximizar el artifact area
    • 🔍 Code tab mantiene max-w-6xl para legibilidad en monitores wide
    • 💧 mobile-header-floating-control: saturate 1.8 → 1.4, brightness 1.2 → 1.1
    • 💧 mobile-header-title-lens: saturate 1.9 → 1.45, contrast 0.64 → 0.72
    • 💧 mobile-bottom-nav-shell + composer: saturación reducida proporcionalmente
    • 💧 Ghost reflection en :active de controles flotantes (shift, tilt, stretch)
    • 💧 mobile-bottom-nav-item:active con inset shadows que simulan compresión
  4. v8.37.2

    📏 Input del welcome más ancho en desktop

    El contenedor central del WelcomeScreen pasa de max-w-2xl (672px) a max-w-3xl (768px) para alinear el ancho del input inline con el del ChatInput dentro de un chat ya en curso. Las starter-prompts mantienen su max-w propio (sin cambio visual).

    Nuevo

    • 📏 WelcomeScreen container: max-w-2xl → max-w-3xl
    • 📏 Coherente con el max-w-3xl que ya tenía ChatInput por dentro
  5. v8.37.1

    🗑️ Herramienta "Base de datos" fuera del menú

    En v8.33.28 se desactivó efectivamente la herramienta de Base de Datos (effectiveToolPermissions.dbQuery = false) pero las entradas del menú de herramientas (desktop + móvil) seguían condicionadas a `toolPermissions.dbQuery` (raw permission del perfil), no a la efectiva. Resultado: si el usuario tenía la permission en BD, la entrada del menú aparecía aunque al clicar no hiciera nada. Ahora se gate por `effectiveToolPermissions.dbQuery`, así que desaparece para todos.

    Nuevo

    • 🗑️ Menú desktop: entrada "Base de datos" ya no aparece
    • 🗑️ Menú móvil: idem
    • 🗑️ Chip activo de DB tampoco se muestra (por sesiones viejas que lo tenían true)
    • 🗑️ Separador de sección recalculado para no quedar huérfano
  6. v8.37.0

    ⚡ Artifacts en vivo: panel se abre desde el primer token

    Mejora UX: el panel lateral ahora se abre AUTOMÁTICAMENTE en cuanto el LLM emite la primera etiqueta <artifact>, mostrando el código en tab "Código" mientras se escribe en tiempo real (con auto-scroll al fondo). Cuando detecta </artifact> al cerrar, cambia AUTO a tab "Preview" para mostrar el resultado renderizado. La card sigue apareciendo en el mensaje para re-abrir luego. Banner pulsante violeta "Generando en vivo…" mientras dura. Si el usuario cierra el panel manualmente durante el stream, se respeta y no se reabre. Para tipos que no toleran contenido parcial (react/mermaid/svg), la tab Preview muestra placeholder "Esperando a que termine…" con CTA al código.

    Mejorado

    • Panel abre desde el primer <artifact ...> detectado en el stream
    • Tab Código en vivo, auto-scroll al fondo mientras llegan tokens
    • Auto-switch a Preview cuando se detecta </artifact>
    • Banner pulsante "Generando en vivo…" mientras dura
    • Placeholder para react/mermaid/svg (no parsean contenido parcial)
    • Cierre manual durante stream respetado (no reabre)
    • parseStreamingArtifact() tolera tags abiertos sin cerrar
    • useArtifactStreamingSync() hook montado globalmente en ChatShell
  7. v8.36.0

    🚀 Artifacts Fase 3: React/Mermaid renderers + Share público

    Cierre del Canvas. (1) REACT en vivo: el LLM puede emitir <artifact type="react"> con JSX/TSX y se renderiza compilado con Sucrase en un iframe sandboxed con React 18 desde esm.sh. Soporta hooks, imports de react/react-dom, JSX runtime automático. (2) MERMAID: diagramas reales (no source code) renderizados con la librería oficial mermaid, lazy-loaded (~600KB solo cuando hay uno abierto). Maneja errores del parser. (3) SHARE PÚBLICO: botón "Compartir" en el panel genera un link UUID (/share/artifact/{token}) accesible sin login. La página pública tiene preview/code tabs, copy/download, contador de vistas y CTA a GarBotGPT. Snapshot completo en jsonb (sobrevive si el chat se borra). Límite 500KB por share.

    Nuevo

    • React live: Sucrase transpila JSX → iframe con React 18 (esm.sh) + importmap
    • React: hooks completos, export default detection, errores capturados
    • 📊 Mermaid: render real con librería oficial, lazy-loaded ~600KB
    • 🔗 API: POST /api/artifacts/share + GET /api/artifacts/share/[token]
    • 🔗 Página pública /share/artifact/{token} sin auth, view counter
    • 🔗 Snapshot jsonb del artifact (sobrevive si el chat origen se borra)
    • 🔗 Botón Share en el panel con dialog modal (UUID + copy + abrir)
    • 🔗 Open Graph metadata para previews enriquecidos al compartir

    Arreglado

    • 📊 Mermaid: muestra error del parser con código fuente si falla

    Seguridad

    • 🔗 Share público: tabla public_artifact_shares con RLS owner-only
  8. v8.35.0

    📚 Artifacts Fase 2: Versionado + Galería del chat

    Continuación del Canvas de v8.34.0. (1) VERSIONADO: cuando el usuario itera sobre un artifact ("ahora cámbialo a azul", "añade un botón") y la IA reutiliza el mismo id, ahora se guardan TODAS las iteraciones. En el panel aparece un navegador ◄ N/M ► con badges v1/v2/v3 — los históricos se ven con un banner amber "viendo versión anterior". El server recorre la conversación buscando artifacts con el mismo id en mensajes previos y los enlaza como historial. (2) GALERÍA: nuevo botón Boxes en el header (con badge contador) y entrada en el menú móvil → abre un modal con grid de TODOS los artifacts del chat actual. Búsqueda por título/tipo/lenguaje. Click en una card → se abre el panel.

    Nuevo

    • 📚 Versionado: panel muestra ◄ N/M ► cuando hay múltiples iteraciones del mismo id
    • 📚 Banner amber "viendo versión anterior" en históricas
    • 📚 Server: attachPriorVersions() consulta mensajes previos del chat
    • 📚 Instrucciones al LLM actualizadas: reutiliza el mismo id al iterar
    • 📚 Copy + Download usan la versión visible (no siempre la última)
    • 📚 Galería: nuevo botón en Header (desktop) con badge contador
    • 📚 Galería: entrada "Artifacts" en menú móvil (solo si hay)
    • 📚 Modal con grid, búsqueda por título/tipo/lenguaje, badge v2/v3 si tiene versiones
    • 📚 Hook useConversationArtifacts() recorre messages del store
  9. v8.34.0

    🎨 Artifacts (Canvas): panel lateral con preview en vivo

    Nueva feature mayor estilo Claude Canvas / ChatGPT Canvas. Cuando la IA genera contenido sustancial (HTML, código largo, SVG, documentos), aparece una card en el mensaje que abre un panel lateral con dos tabs: Preview (renderizado en vivo) y Código (con syntax highlight). En móvil se abre como modal full-screen. Soporta HTML (iframe sandboxed), Código (todos los lenguajes), Markdown (renderizado), SVG (inline sanitizado) y React (placeholder en MVP). El parser usa tags <artifact id type title language> emitidas por el LLM y las almacena en meta_json.artifacts para persistir entre sesiones.

    Mejorado

    • 🎨 Panel lateral split-pane (desktop) / modal full-screen (mobile)
    • 🎨 Tabs Preview / Código con switching instantáneo
    • 🎨 HTML preview en iframe sandbox (allow-scripts sin same-origin)
    • 🎨 SVG inline sanitizado (sin <script>, sin on* handlers, sin javascript:)
    • 🎨 Markdown renderizado con GFM + syntax highlight
    • 🎨 Acciones: copiar contenido + descargar con extensión correcta por lenguaje
    • 🎨 Card inline en el mensaje con icono por tipo, badge, líneas y caracteres
    • 🎨 Persistencia en meta_json.artifacts (sobrevive a reload)
    • 🎨 Durante streaming, los tags <artifact> se ocultan con placeholder "Generando artifact…"
    • 🎨 ESC cierra el panel
  10. v8.33.28

    🔄 Modelos: sync entre pestañas · 🗄️ Database tool eliminada

    Dos cambios: (1) El selector de modelos ahora se actualiza al INSTANTE entre pestañas — antes solo funcionaba si admin y chat estaban en la misma navegación. Añadido BroadcastChannel "garbotgpt:models" que emite cuando admin edita y los listeners en otras pestañas recargan automáticamente. (2) Herramienta "Base de datos" desactivada globalmente del chat (mismo patrón que Network Drive en v8.33.22). Pestaña "Conexiones BD" oculta del admin.

    Nuevo

    • 🔄 Throttle 500ms para evitar loops
    • 🔄 broadcast:false en listener para no re-emitir
    • 🗄️ Pestaña "Conexiones BD" oculta del admin (código intacto, descomentando se reactiva)

    Mejorado

    • 🔄 BroadcastChannel cross-tab: edita en pestaña admin → chat se actualiza al instante

    Seguridad

    • 🗄️ effectiveToolPermissions.dbQuery = false (no aparece en menú ni chips)
  11. v8.33.27

    ⚡ Cambios en modelos admin se aplican AL INSTANTE

    Bug: al editar el nombre de un modelo en /admin, el selector del chat tardaba hasta 5 minutos en mostrar el cambio. Causa: cache server-side de 5min en /api/models + flag loaded:true en Zustand store que bloqueaba el re-fetch. Fix: TTL bajado a 30s + invalidación instantánea desde admin (server clear + client reloadModels()) al crear/editar/eliminar/toggle visibility/bulk operations.

    Nuevo

    • Resultado: cambios visibles en el selector ANTES de 1 segundo

    Mejorado

    • /api/models cache: 5min → 30s + función exportada invalidateModelsCache()
    • /api/admin/models PATCH/POST/DELETE llaman invalidateModelsCache() tras éxito
    • models-store: nuevo método reloadModels() que ignora flag `loaded`
    • AdminPageClient: reloadModels() tras guardar (saveModel, deleteModel, toggleVisibility, bulkSet, bulkDelete)
  12. v8.33.26

    🎵 Spotify: bug "album de X" + cache + rate-limit handling

    Tres fixes Spotify: (1) "hazme un album de Michael Jackson" extraía 0 canciones porque la regex artistAfterDe no incluía "album" como keyword — solo aceptaba playlist/lista/musica/canciones/temas. Añadido album/álbum/mix/recopilatorio/selección. (2) Cache de búsqueda de álbumes por artista (TTL 30min) para reducir llamadas a Spotify. (3) Detección de rate-limit (429) con flag global por proceso (60s cooldown) y mensaje claro al usuario "Spotify saturado, espera 1 min" en lugar del genérico "no se encontraron canciones".

    Nuevo

    • 🎵 artistAfterDe regex incluye album/álbum/mix/recopilatorio/selección
    • 🚨 RATE_LIMITED_UNTIL flag por proceso (60s cooldown tras 429 doble)
    • 💬 Tool surface "Spotify saturado, espera ~1 min" cuando 429 detectado
    • 🧹 Reset debug array al inicio de cada runSpotifyTool

    Mejorado

    • 🎵 Fallback cleaned strip mejorado: un/una/el/la/los/las + más verbos
    • Cache global ALBUM_CACHE (Map) con TTL 30 min
    • Retry-After header respect en 429 (max 5s wait)
  13. v8.33.25

    🎨 NewLogoV2 G transparente · GarBotGPT capitalizado · 15 animados pro · Marca propia

    Cambios visuales y de marca: (1) NewLogoV2.png integrado con script remove-bg.cjs que elimina fondo blanco usando algoritmo saturation-based. Regenerados todos los favicons + android-chrome. (2) Todos los logos del wordmark ahora muestran "GarBotGPT" con capitales correctas (antes "garbotgpt" lowercase). (3) Añadidos 15 nuevos logos animados pro con texto "GarBotGPT": gradient flow, stagger fade, underline draw, orbit text, shimmer plata, neón GPT, wave ondulando, G rotando, breath, loading side, marquee infinito, terminal cursor, 3D flip, sparkles, mask reveal. (4) Landing rebrandeada: modelos GarBotGPT 5/Pro/Mini/Voice/Vision/Code en lugar de GPT/Claude/Gemini.

    Nuevo

    • 🎬 15 nuevos animados pro: 31-45 en _animated.ts (gradient flow, neón, shimmer, mask reveal, marquee, terminal, 3D flip, sparkles, etc.)
    • 🏷️ Landing actualizada: ModelChipGrid + ModelShowcase + features + pricing usan modelos propios
    • 🏷️ Play Store screenshots regenerados con chips de modelos propios

    Mejorado

    • 🎨 scripts/remove-bg.cjs: algoritmo saturation-based + luminance threshold
    • 🎨 NewLogoV2-transparent.png: fondo blanco eliminado limpio
    • 🎨 favicon + android-chrome regenerados con la nueva G
    • 🏷️ Marca propia: GarBotGPT 5 (top), Pro (balanceado), Mini (rápido), Voice (audio), Vision (imagen), Code (programación)

    Arreglado

    • ✍️ Wordmark "GarBotGPT" con capitales en TODOS los logos (22 ocurrencias arregladas)
  14. v8.33.24

    🎨 Liquid glass refinado · 📱 Play Store assets generados

    Refinamiento del estilo liquid glass: saturación bajada (1.6/1.7 → 1.10/1.12) para look "Apple optical" en vez de "glossy plastic", chromatic fringing sutil (cyan/amber) en bordes para simular refracción real, brightness más sutil. Script generador de assets para Google Play Store: feature graphic 1024×500 + 4 screenshots 1080×2400.

    Nuevo

    • 📱 scripts/generate-play-assets.cjs: feature-graphic 1024×500 + 4 screenshots 1080×2400
    • 📱 play-assets/ con todos los gráficos listos para subir

    Mejorado

    • 🎨 Liquid glass: saturate(1.6→1.10) / saturate(1.7→1.12) — más refinado, menos vibrante
    • 🎨 Brightness bajado de 1.03/1.04 a 1.01 (más sutil)
    • 🎨 Chromatic fringing: rgba(90,200,250) cyan + rgba(255,180,80) amber en bordes (sutil refracción)
    • 🎨 Blur dropdown: 16px → 20px para más profundidad
  15. v8.33.23

    🛠️ Input expandible · 🛡️ Privacy/Terms pro · 🎨 +36 logos nuevos · 🚫 Barça out

    Cuatro mejoras: (1) El composer del chat ahora se expande verticalmente igual que cuando se activan herramientas — el texto largo ya no se sale del contenedor. (2) Privacy y Terms rediseñadas con sticky TOC, jerarquía visual mejorada, tabla de procesadores con badges UE, email actualizado a garbot@garbotgpt.com. Splash deshabilitado en estas páginas + /landing + /maintenance. (3) Eliminado el componente BarcaChampions completamente (archivo + import + JSX). (4) Galería /logos: 12 nuevos con texto, 12 nuevos solo icono, 18 nuevos animados — total ahora ~80 logos.

    Nuevo

    • 🛠️ ChatInput: composer expande layout cuando multilínea (igual que has-tools)
    • 🛡️ /privacy: sticky TOC, hero gradient, 11 secciones con iconos, tabla de procesadores con badges UE/USA
    • 🛡️ /terms: sticky TOC, hero blue, 12 secciones (aceptación, uso aceptable, IA disclaimer, ley)
    • 📧 Email contacto actualizado: garbot@garbotgpt.com en ambas páginas
    • 🚫 Splash NO aparece en /privacy /terms /landing/* /maintenance
    • 🗑️ BarcaChampions eliminado: componente, import en layout.tsx, JSX
    • 🎬 /logos animados: +18 nuevos (Loading dots, Bouncing ball, Ripple multi, Rotating square, Progress bar, Eye blink, Sound emit, DNA helix, Lightning strike, Particle field, Typewriter, Pulse wordmark, Color shift, Morphing blob, Scanning line, Bouncing letters, Live network, Modern spinner)

    Mejorado

    • 🎨 /logos con texto: +12 nuevos (Condensed caps, Pixel perfect, Gradient fill, Thin italic, Asterisco, Glow pill, Outline stroke, Monograma círculo, Handwritten, Stacked bar, Arrow up, Bullet divider)
    • 🎨 /logos solo icono: +12 nuevos (Spark bold, Orb gradient profundo, Eye iris, Curl wave, Neural denso, Pacman bite, Cube stacked, Flame gradient, Chat cluster, Aperture, Compass, Quote marks)
  16. v8.33.22

    📚 Conocimientos mejorados + 🛑 Unidad de Red OFF + 🔓 Registro libre

    Tres mejoras grandes: (1) Sistema de conocimientos enriquecido con panel de métricas en vivo (chunks indexados, duplicados, idiomas, errores, última sync), búsqueda + filtros por estado en la lista, endpoint /stats y /reingest para reintentar items con error de un golpe. Paginación añadida al endpoint de items. (2) Tool de Unidad de Red desactivada globalmente — no aparece en el menú ni como chip activo (código intacto para reactivar). (3) Verificación de invitación al registrarse desactivada — cualquier email puede crear cuenta durante la beta.

    Nuevo

    • 🔍 Búsqueda por nombre de archivo + filtros (Todos / Errores / Duplicados / OK)
    • 🚀 Nuevo endpoint GET /api/admin/knowledge/[id]/stats con métricas completas
    • 🚀 Nuevo endpoint POST /api/admin/knowledge/[id]/reingest (scope: errors/duplicates/all)
    • 📄 Paginación en /api/admin/knowledge/[id]/items (limit, offset, q, status, duplicates filters)
    • 🔓 Register sin verificación: check-invitation comentado — cualquier email entra directo

    Arreglado

    • 📊 KnowledgeManagement: panel de stats (4 tiles + idiomas + última sync + tasa de error)
    • ♻️ Botón "Reintentar errores" reingiere automáticamente los items con sync_status=error

    Seguridad

    • 🚫 Tool Network Drive desactivada en ChatInput (effectiveToolPermissions.networkDriveRag → false)
  17. v8.33.20

    🛠️ Fix textareas: strings sin espacios desbordaban el input

    Strings largos sin espacios (ej. "fffffff...") rompían los textareas porque CSS por defecto no parte palabras a mitad. Resultado: el texto se extendía fuera del input visualmente. Fix: añadidas reglas break-words + [overflow-wrap:anywhere] en chat input (mobile + desktop), modales de carpeta (crear + ajustes) y plantillas.

    Nuevo

    • 🛠️ ChatInput (chat principal + welcome) — break-words + overflow-wrap:anywhere
    • 🛠️ CreateFolderModal — textarea de indicaciones con word-break
    • 🛠️ FolderSettingsModal — textareas de indicaciones del sistema y descripción de plantilla
    • Strings tipo "ffffff...." ahora se parten en cualquier carácter, no desbordan
    • assetlinks.json (v8.33.19): añadida huella SHA-256 de Play App Signing (Google) junto a la upload key
  18. v8.33.18

    🎵 Spotify: bug crítico — playlist mezclaba canciones de otros artistas

    Bug crítico de Spotify: al pedir "playlist de Michael Jackson" aparecían canciones de OTROS artistas para completar el número pedido. El código tenía un padding-with-allTracks que rellenaba con resultados generales cuando el filtro de artista no llegaba al count solicitado. Fix: cuando hay filtro de artista, NUNCA rellenar con tracks de otros — mejor devolver menos canciones correctas que el número exacto mezclado. Diagnóstico previo: Spotify deprecó /artists/{id}/top-tracks y /albums en nov 2024 (403/429). Estrategia actualizada usa /search?type=album + /albums/{id}/tracks.

    Nuevo

    • 🎵 Si pides 20 canciones de MJ y solo hay 9 únicas, recibes 9 correctas (no 20 mezcladas)
    • 🛠️ Nuevo endpoint admin /api/admin/spotify-test para diagnóstico (con debug bypass temporal)
    • 🛠️ Acumulación de errores en globalThis.__spotifyDebugErr para depurar Spotify API
    • 📌 Diagnosticado: /artists/{id}/top-tracks devuelve 403 desde nov 2024 (Spotify API policy)
    • 📌 Diagnosticado: /artists/{id}/albums devuelve 429 (rate limit estricto)
    • 🔧 Estrategia: usar /search?type=album (limit=20 max) + /albums/{id}/tracks

    Arreglado

    • 🎵 FIX crítico: artist-filter ya NO contamina con tracks de otros artistas
  19. v8.33.17

    🎵 Spotify intent: estrategia artist-ID + investigación

    Bug diagnosticado: search?q=artist:"X" devolvía mayoritariamente los mismos hits repetidos como remasters/lives. Dedup por nombre reducía 250 candidatos a ~9 únicos. Intentamos pivotar a /artists/{id}/top-tracks + /artists/{id}/albums pero descubrimos que están deprecados desde nov 2024 (403/429). Endpoint debug admin añadido.

    Nuevo

    • 🔍 normalizeTrackName quita variantes (Remaster/Live/Edit/Remix)
    • 🔍 Endpoint /api/admin/spotify-test para diagnóstico interno
    • 🔍 Logs detallados con console.info en cada paso
  20. v8.33.16

    🌐 Landing rehecha con datos reales (sin precios inventados)

    Las páginas de /landing tenían precios inventados (€19/€49) y certificaciones que no existen (SOC2 inflado). Reescritas con datos honestos: el producto está en beta abierta, 100% gratis, sin Stripe. Features listadas son las que están realmente cableadas en el código. Aesthetic upgrade general: bento grid, mejor tipografía, mejor hero, modelos reales, integraciones reales.

    Nuevo

    • 💸 Pricing: una sola card "€0 gratis durante la beta" + roadmap honesto de planes futuros
    • 🚫 Eliminados los planes €19/€49 ficticios (no hay Stripe ni billing)
    • Features solo reales: 14 tools cableadas (web search, RAG, código, imagen, vídeo, voz, BD, OCR, etc.)
    • Integraciones solo reales: Gmail, Outlook, Drive, OneDrive, Calendar, Spotify, GitHub, Monday
    • Modelos reales: GPT-5/4o, Claude 4.7, Gemini 2, Mistral, Llama, DeepSeek
    • 🛡️ Security: "honestos sobre lo que protegemos" — GDPR sí, SOC2 todavía no, sin inflar
    • 📖 About: manifesto auténtico + principios reales + sin VC

    Mejorado

    • 🎨 Bento grid de features con tamaños mixtos (más visual)
    • 🎨 Hero más grande (88px), badge "Beta abierta" en emerald
    • 🎨 Chat mock con tools chips reales y modelo Claude 4.7
    • 🎨 Background orbs + grid sutil + máscaras radiales en todas las páginas
  21. v8.33.15

    🎵 Spotify devuelve N pedidas · 🎨 /logos x3 tabs · 📂 carpetas recuerdan estado

    Cuatro mejoras: (1) Spotify ya entrega el número exacto de canciones pedidas — antes pedir 20 a veces devolvía 10 porque dedup por nombre y filtro de artista eran demasiado agresivos. (2) /logos ahora tiene 3 tabs: "Con texto" (38 lockups), "Solo icono" (38 símbolos), "Con movimiento" (12 logos animados con SMIL). Las versiones anteriores se mantienen — todo coexiste. (3) Las carpetas del sidebar recuerdan si estaban colapsadas al recargar la página. (4) Versión 8.33.15.

    Nuevo

    • 🎵 Spotify: 3 → 5 páginas (250 candidatos), padding con allTracks cuando artista no llega al needed
    • 🎵 Si pides 20 canciones, ahora recibes 20 (siempre que existan en Spotify)
    • 📂 Sidebar: carpetas colapsadas persisten en localStorage ("garbotgpt:sidebar:collapsedFolders")

    Mejorado

    • 🎨 /logos: 3 tabs activos — Con texto / Solo icono / Con movimiento
    • 🎨 38 lockups con texto (14 designer + 24 playful — no se borró nada)
    • 🎨 38 símbolos sin texto (14 designer + 24 playful)
    • 🎨 12 logos animados (SMIL <animate>): orbit, pulse, typing dots, soundwave, spinner G, heartbeat, aurora, quantum, glitch, sparkle, wave bars, breathing
  22. v8.33.14

    🛠️ Fix input vertical + 🌐 /landing multi-página + 🎵 Spotify LLM intent

    Tres mejoras: (1) Arreglado el bug donde al activar una herramienta el textarea del chat se reducía a 44px y el texto se renderizaba 1 char por línea — el wrapper no tenía grid-column asignado. (2) Nueva landing pública en /landing con 5 subpáginas (inicio, funciones, precios, seguridad, sobre, contacto), no aplicada como home. (3) Spotify: regex sustituido por clasificador LLM (gpt-4o-mini) que entiende cualquier fraseología.

    Nuevo

    • 🌐 /landing — landing page enterprise con hero, stats, features grid, integrations, testimonial, CTA
    • 🌐 /landing/features — 12 funciones detalladas con bullets
    • 🌐 /landing/pricing — 4 planes (Free/Pro/Business/Enterprise) + FAQ
    • 🌐 /landing/security — 6 pilares + tabla de compliance (GDPR, SOC2, ISO27001…)
    • 🌐 /landing/about — historia, principios, equipo
    • 🌐 /landing/contact — form decorativo + datos de contacto
    • 🎵 Spotify intent ahora por LLM (gpt-4o-mini): entiende "ponme algo para correr", "necesito música chill", etc., sin necesidad de palabras clave específicas
    • 🎵 Coste por clasificación: <$0.00003 — despreciable

    Arreglado

    • 🛠️ Fix textarea desktop: wrapper "composer-textarea-wrap" con grid-column 1/-1 correcto
    • 🎵 Fallback a regex si LLM falla — robustez total
  23. v8.33.13

    🎨 Logos nivel diseñador (rediseño completo /logos)

    Galería /logos rehecha con criterio "designer brand brief": 14 lockups con texto + 14 símbolos sin texto. Paletas curadas (un solo acento por logo), tipografía con contraste de pesos y kerning ceñido, conceptos legibles (monogramas G, brackets dev, slash divider, two-tone, italic editorial, glitch, single-stroke, soundwave, …). Cards con crop marks decorativos para estética de diseño.

    Mejorado

    • 🎨 14 nuevos lockups con texto (540×180): monogram G, period signature, italic editorial, hex token, typing dots, two-tone divider, brackets wrap, underline arc, GB monograma, slash, outline, version badge, orb, dot-matrix
    • 🎨 14 nuevos iconos sin texto (200×200): G burbuja, token hex, orb premium, rings concéntricos, GB mono, dots square, single-stroke G, diamond cut, quantum orbit, glitch G, dot mesh, arrow G, soundwave, brackets ⟨G⟩
    • 🎨 Paletas curadas: amber, electric blue, pink, mint, violet, cyan, rose — UN solo acento por logo (sin rainbow)
    • 🎨 Tipografía: contraste de pesos (300/700/800), letter-spacing negativo, mixed weights con tspan
    • 🎨 Crop marks decorativos en cada card (estética de pliegos de diseño)
  24. v8.33.12

    🎵 Spotify: detección ampliada · 🛠️ Maintenance rediseñada · 🎨 Logos solo icono

    Tres mejoras: (1) La detección de intent de Spotify ahora cubre muchas más formas de pedir crear una playlist (haz/arma/monta sin "me", patrón "playlist con N canciones de X" sin verbo, etc.), antes fallaba con frases comunes. (2) Página de mantenimiento totalmente rediseñada: mesh gradient animado, timeline de progreso, reloj en vivo, polling automático, subscribe email, status cards. (3) /logos ahora tiene tabs: "Con texto" (24 wordmarks) y "Solo icono" (24 símbolos sin texto, perfectos para favicon, app icon, redes sociales).

    Nuevo

    • 🎵 Spotify: regex de intent ampliada (verbos: haz, arma, monta, pon, dame, quiero, necesito, …)
    • 🎵 Nuevo patrón: "playlist con 20 canciones de Sabina" detectado sin necesidad de verbo
    • 🎵 System prompt más directivo: el LLM ya NO puede decir "no puedo crear playlists"
    • 🛠️ Maintenance: mesh gradient animado + grid + scanlines
    • 🛠️ Timeline de 4 pasos (Iniciado → Aplicando → Validando → Volvemos)
    • 🛠️ Reloj en vivo, contador de "tiempo en mantenimiento", auto-recarga cuando termina
    • 🛠️ Polling cada 8s para detectar cuando se desactiva el modo
    • 🛠️ Suscribir email para avisar cuando vuelva

    Mejorado

    • 🎨 /logos: tab "Solo icono" con 24 variantes cuadradas 200×200 sin texto

    Arreglado

    • 🎵 Fix mojibake "álbum" en client → ahora se normaliza con NFD-strip de acentos
  25. v8.33.11

    🔧 Fixes mantenimiento: /garmantenimiento + URL real + versión visible

    Tres fixes al sistema de mantenimiento de v8.33.10: (1) /garmantenimiento rechazaba a admins legítimos porque la query SELECT incluía columna inexistente `email` en profiles → role=null → acceso restringido. (2) Header (chat + mobile) seguía mostrando v8.33.7, ahora muestra v8.33.11. (3) El middleware redirigía con cambio de URL a /maintenance; ahora hace REWRITE (la URL del navegador no cambia, el usuario sigue viendo el dominio normal).

    Nuevo

    • 🛠️ Nueva versión visible discreta en la página de login
    • 🌐 Mantenimiento ya NO cambia la URL: rewrite interno en lugar de redirect
    • El usuario en /chat sigue viendo "/chat" en la barra pero ve la página de mantenimiento

    Arreglado

    • 🛠️ Fix: /garmantenimiento accesible para admins (eliminada referencia a profiles.email inexistente)
    • 🛠️ Fix: APP_VERSION bumped a 8.33.11 en chat/Header.tsx y mobile/MobileHeader.tsx
  26. v8.33.10

    🔧 Modo mantenimiento global + conocimientos privados + Unidades de Red desactivadas

    Nuevo modo mantenimiento controlable desde /admin → Mantenimiento (o vía bypass /garmantenimiento). Cuando está activo, todos los usuarios ven /maintenance (página pro con aurora + estado en vivo) y /api/* devuelven 503; solo /garmantenimiento sigue accesible para el admin. Nueva opción "🔒 Solo yo (privado)" en conocimientos: marcadas así, solo las ve y usa su creador. La pestaña "Unidades de Red" se oculta del panel (código intacto).

    Nuevo

    • 🛠️ Pestaña /admin → Mantenimiento con toggle ON/OFF + mensaje personalizable
    • 🔑 URL secreta /garmantenimiento como bypass para reactivar el sitio
    • 🛡️ Middleware redirige todo a /maintenance excepto bypass + /api/admin/maintenance + /api/auth
    • 🚫 Pestaña Unidades de Red oculta del menú (código backend intacto)

    Mejorado

    • 🎨 Página /maintenance con aurora, status pills y CTA — diseño profesional dark mode

    Arreglado

    • 🚫 APIs durante mantenimiento devuelven 503 con { error: "MAINTENANCE_MODE" } en lugar de redirect

    Seguridad

    • 🔒 Conocimientos privados: checkbox "Solo yo" + filtro en API admin y pública

    Maintenance mode

    • DB: app_settings(maintenance_mode) jsonb {enabled, message}
    • src/lib/maintenance.ts: readMaintenanceState() + writeMaintenanceState() con caché 5s
    • src/app/api/admin/maintenance/route.ts: GET (público) + POST (admin)
    • src/app/maintenance/page.tsx: página pública con aurora + grid + mensaje editable
    • src/app/garmantenimiento/page.tsx + GarMantenimientoClient.tsx: bypass admin
    • src/components/admin/MaintenancePanel.tsx: panel dentro de /admin (tab "Mantenimiento", grupo Sistema)
    • src/lib/supabase/middleware.ts: chequeo de maintenance antes de auth, con bypass de rutas críticas

    Conocimientos privados

    • DB: knowledge_collections.is_private BOOLEAN NOT NULL DEFAULT FALSE + índice parcial
    • API admin GET/POST/PATCH/DELETE: filtro (is_private=false OR created_by=me) + guards de ownership
    • API pública /api/knowledge/collections: mismo filtro
    • UI: checkbox "🔒 Solo yo (privado)" en el formulario + badge 🔒 en la lista

    Limpieza

    • Tab "Unidades de Red" oculta en /admin (comentada, no eliminada)
    • Si se quiere reactivar: descomentar la línea en AdminPageClient.tsx
  27. v8.33.9

    📤 Subidas de conocimiento en segundo plano + galería /logos

    Las subidas de archivos al panel de conocimientos ahora viven en un store Zustand global, así que sobreviven a cambios de pestaña sin abortar ni perder el progreso. Un widget flotante muestra el avance desde cualquier sección de /admin. Además, nueva página /logos con 24 logos vectoriales descargables para elegir la identidad del producto.

    Nuevo

    • 🧠 Store global useUploadQueueStore: la cola y el bucle de subida viven fuera del componente
    • ⏯️ Cambiar de pestaña (Modelos, Usuarios, etc.) ya NO interrumpe ni pierde uploads en curso
    • 🛰️ Widget flotante UploadProgressWidget en /admin: progreso por colección, expand/colapsar, descartar
    • 🧹 Botón "Limpiar" para descartar uploads completados (solo aparece cuando no hay activos)

    Mejorado

    • 🎨 Nueva página /logos con 24 variantes de logo SVG (descargables + copiables al portapapeles)
    • 🎨 Logos incluyen: bot-head, brain-circuit, spark, neural-net, hex-chip, monograma G, wordmark, pixel, cubo iso, escudo, llama, hoja, aurora, infinito, ojo IA, …

    Background uploads

    • src/store/upload-queue-store.ts: nuevo store Zustand global con startUpload(), clearCompleted(), removeItem()
    • src/components/admin/UploadProgressWidget.tsx: widget flotante con barra de progreso, agrupado por colección, expandible
    • src/components/admin/KnowledgeManagement.tsx: estado uploadQueue/uploading/syncing movido al store; uploadFilesToCollection ahora delega
    • src/components/admin/AdminPageClient.tsx: monta el widget al final del layout (visible en todas las pestañas)

    Galería /logos

    • src/app/logos/page.tsx: metadata + layout
    • src/app/logos/LogosGallery.tsx: 24 logos SVG inline con descarga + copia
    • Cada logo es vectorial puro (sin assets externos), escala a cualquier tamaño
    • Botón Descargar genera archivo garbotgpt-<id>.svg
    • Botón Copiar lleva el código SVG al portapapeles
  28. v8.33.8

    📱 TWA Android: AAB generado y firmado

    Generado el proyecto Android TWA (Trusted Web Activity) completo y compilado el AAB firmado para subir a Google Play Store. Bypass de los prompts interactivos de bubblewrap CLI mediante script programático que usa @bubblewrap/core directamente. Keystore creado, SHA-256 fingerprint añadido a /.well-known/assetlinks.json.

    Nuevo

    • 📦 scripts/generate-twa.cjs: generador programático del proyecto Android (bypassa prompts CLI)
    • 🔑 android-twa/android.keystore (alias=android, password=garbotgpt-android-2026)
    • android-twa/app-release-bundle.aab (2.08 MB, firmado, listo para Play Console)
    • 🔐 SHA-256: 83:EB:05:92:15:41:90:CA:00:E5:22:BE:6F:AA:38:9A:CA:45:FC:05:47:9E:43:E1:D6:33:A6:97:35:28:32:0F
    • 🌐 public/.well-known/assetlinks.json con Digital Asset Links verification
    • ⚙️ gradle.properties: heap reducido a 768m + MaxMetaspaceSize=256m (para evitar JVM OOM)
  29. v8.33.7

    🔧 Fix middleware bloqueaba /manifest.json y /.well-known/ + arranque TWA

    El middleware redirigía /manifest.json y /.well-known/assetlinks.json a /auth/login para usuarios no autenticados, rompiendo Lighthouse, PWA install y la verificación Digital Asset Links que necesita la app Android (TWA). Matcher actualizado para excluir todas las rutas estáticas críticas. Setup inicial TWA en marcha (Bubblewrap CLI + JDK 17 + Android SDK instalados).

    Nuevo

    • 📦 public/.well-known/assetlinks.json placeholder (se rellenará con sha256 del keystore Android)
    • 📱 android-twa/ añadido a .gitignore (proyecto Android local, keystore privado no debe commitearse)
    • 🚀 Bubblewrap CLI v1.21 instalado globalmente con JDK 17 + Android SDK
    • ⏭️ Siguiente paso: bubblewrap init para generar el AAB Android publicable en Play Store

    Arreglado

    • 🚫 Fix: manifest.json + .well-known/* + sw.js + site.webmanifest + robots.txt + sitemap.xml ya no se redirigen
    • 🚫 Fix: extensiones .ico .json .webmanifest .xml .txt .mp4 .mp3 .wav .webm .woff .woff2 .ttf también excluidas
  30. v8.33.6

    🎨 Nuevo logo "GarBotGPT" wordmark + Video como "Próximamente"

    Logo actualizado al nuevo diseño "NewLogoV2.png" (wordmark "GarBotGPT" con gradient en la "o", fondo transparente). Regenerados todos los assets PNG: logo, mark, square, favicons (16/32/96), apple-touch-icon, android-chrome 192/512. La feature de Video Generation se marca temporalmente como "Próximamente" (toggle visible pero deshabilitado con badge).

    Nuevo

    • 🛠️ scripts/generate-logo.cjs reescrito: ahora consume NewLogoV2.png en lugar de generar el G monogram con canvas
    • 📦 Regenerados todos los assets: logo.png/transparent/mark/mark-transparent/square + 6 favicons
    • 🎬 Video Generation toggle marcado como "Próximamente":
    • - Visible en menú pero disabled + opacity-50 + cursor-not-allowed
    • - Badge gradient violet→amber "Próximamente"
    • - tooltip "Próximamente disponible" al hover
    • - Pipeline backend completa (queda solo conectar RUNWAY_API_KEY cuando esté listo)

    Mejorado

    • 🎨 NewLogoV2.png como nueva fuente (wordmark transparent 1254×1254)
    • 🎯 Favicons pequeños (≤48px): crop centrado al 55% para enfatizar la gradient "o" (mejor reconocimiento)

    Logo / assets visuales

    • NewLogoV2.png en raíz como source canónica del logo
    • public/logo.png (512×512 transparent) — wordmark
    • public/logo-transparent.png — alias
    • public/logo-square.png (1024 hi-res)
    • public/logo-mark.png (512 con fondo blanco)
    • public/logo-mark-transparent.png
    • public/favicon-{16,32,96}.png (transparent, crop al 55% para tamaños chicos)
    • public/apple-touch-icon.png (180 fondo blanco)
    • public/android-chrome-{192,512}.png (fondo blanco)
    • public/favicon.ico (48 PNG renombrado)
    • src/app/favicon.ico (copia auto-sync para Next App Router)

    Video Generation → "Próximamente"

    • src/components/chat/ChatInput.tsx: el toggle de Video Generation en el menú desktop pasa a disabled + badge "Próximamente"
    • onClick reemplazado por no-op
    • El backend mantiene la pipeline completa para activarla en cuanto pongas RUNWAY_API_KEY en producción
    • Sin breaking changes: meta_json.video_generation sigue persistiendo si llega a ejecutarse

1118 versiones publicadas · página 33 de 38. Míralo dentro de la app.