Saltar al contenido
Chandler Nguyen
IA11 min de lectura

IA

Lo nativo no es una capa de pintura: reconstruí la app iOS de DIALØGUE

Lancé la app iOS de DIALØGUE como un port del producto web y después la reconstruí nativa — tres pestañas, audio en la pantalla bloqueada, transcripción sincronizada, offline robusto y Siri — porque una web app encogida a un móvil sigue siendo una web app.

Lancé la app iOS de DIALØGUE hace meses como un port del producto web. Después reconstruí casi todo como una app nativa.

Ya está disponible en la App Store — si tienes curiosidad, ve a trastear con ella. El resto de esto es qué cambió, y por qué.

La diferencia suena a semántica hasta que tienes las dos versiones en la mano. La primera era la web app encogida para caber en un móvil: las mismas pestañas, el mismo wizard de creación, el mismo dashboard. Compilaba, corría, pasaba el review. Y se sentía como una web disfrazada de app.

Una web app encogida a un móvil sigue siendo una web app. Lo nativo no es una capa de pintura encima de tu layout web — es otro contrato con el dispositivo. Ese contrato es justo el que me había saltado, y reconstruir para honrarlo cambió las pestañas, el audio, la superficie de escucha, el comportamiento offline y cómo arranca la app. Esto es lo que significó de verdad, pantalla por pantalla.

El port era un dashboard

La primera versión asumía que el trabajo de la app era exponer el generador. DIALØGUE hace podcasts con IA, así que el razonamiento fue: pon cada superficie web en pantalla y listo.

Lo que sacas de ahí es un dashboard. Cinco pestañas, un wizard de varios pasos, paneles para todo. Nadie abre una app de podcasts para operar un dashboard. La abren para convertir una idea en audio, para escuchar algo que hicieron o para arrancar un show que ya han usado antes. La interfaz porteada protegía el layout de la web app. No protegía esos tres trabajos.

Así que la reconstrucción empezó por lo primero que ves.

Tres pestañas, porque un móvil castiga las pestañas

La app vieja abría con cinco pestañas: Library, Studio, Create, Credits, Profile. Eso es lo que sacas al portear la web app — cada superficie web se gana una pestaña.

La app reconstruida tiene tres: Listen, Create, You.

Dos pestañas no sobrevivieron. Credits dejó de ser un destino — nadie abre una app para quedarse mirando un saldo. Se mudó a «You», y el único momento que de verdad importa —quedarte sin crédito justo cuando vas a generar— ahora hace aparecer una hoja de compra exactamente ahí. Studio dejó de ser un lugar. Se convirtió en Series — un setup guardado (hosts, tono, formato, idioma, patrón de fuentes) que vive dentro de Create y aparece en Listen como una colección, en vez de una pestaña que fingía ser una sala de control. Library y Profile pasaron a ser los más llanos «Listen» y «You».

En un escritorio, una pestaña de más es gratis. En un móvil, cada pestaña es un impuesto sobre la atención. La reconstrucción pagó ese impuesto.

Pantalla Series de la app iOS de DIALØGUE para guardar un setup de podcast repetible
Series — un setup guardado dentro de Create, no una sala de control con pestaña propia.

Audio como iOS lo espera

Aquí es donde «lo nativo es un contrato» deja de ser abstracto.

La app porteada no era analfabeta en audio. Ya aparecía en la pantalla bloqueada con play, pausa y skip, se pausaba ante una llamada y se detenía cuando te sacabas los auriculares. Eso es lo mínimo, y ahí estaba.

Lo que no podía hacer era comportarse como una app de audio de verdad una vez la pantalla estaba bloqueada. No podías arrastrar la posición de reproducción desde la pantalla bloqueada. No había carátula ahí — solo texto. No había botón de AirPlay, ni temporizador de apagado, y el skip era de quince segundos fijos te gustara o no.

La reconstrucción cerró esa brecha con la plataforma, no rodeándola. La pantalla bloqueada ahora lleva carátula dinámica del episodio y una barra de progreso que puedes arrastrar a cualquier punto. Hay AirPlay, un temporizador de apagado que baja el volumen poco a poco en vez de cortarlo en seco, y un intervalo de skip que puedes ajustar de diez a sesenta segundos — que luego también controla los botones de la pantalla bloqueada, porque los controles del sistema deberían coincidir con los de la app. La sesión de audio se declara como audio hablado, así que el sistema operativo la trata como voz y no como música.

Nada de esto es glamuroso. Ese es justo el punto. En un móvil, un audio que ignora la pantalla bloqueada y AirPlay no es «minimalista». Está roto en los momentos exactos en que la gente escucha de verdad — caminando, conduciendo, con el móvil en el bolsillo.

Una transcripción que solo un podcast con IA puede construir

Aquí viene la parte que es genuinamente nuestra, no solo buena higiene de iOS.

Mientras suena un episodio, la app muestra una transcripción sincronizada: la línea actual se resalta, la vista hace auto-scroll para mantenerla centrada, y puedes tocar cualquier línea para saltar directo a ese momento. Una app de podcasts genérica no puede hacer esto de verdad, porque no sabe qué se dijo y cuándo. DIALØGUE sí lo sabe — generó el guion, así que ya conoce la estructura del episodio.

El detalle honesto de ingeniería es que una línea solo es tocable cuando el audio tiene un timing exacto por segmento. Cuando el timing es aproximado, la línea igual se muestra, solo que no es navegable, y la app no finge lo contrario. Ese mismo timing por segmento dibuja marcas de capítulo directamente en la barra, así que puedes hojear un episodio como audio pero con un mapa de lo que hizo el sistema. La transcripción hasta muestra qué host dijo qué línea, porque el guion se escribió como un diálogo a dos voces.

Esta es la diferencia entre atornillar una transcripción a un reproductor y tratar el guion generado como la fuente de verdad de toda la experiencia de escucha.

Dos cosas hacen que esto funcione, y ninguna aparece en pantalla. El backend estampa cada segmento con su tiempo de inicio y fin y marca si el timing es exacto o solo estimado — para que la app pueda dejarte tocar una línea con timing exacto y, en una estimada, abstenerse sin ruido en vez de fingir. Y tu posición de reproducción se guarda en el servidor, no solo en el dispositivo, así que «retoma donde lo dejaste» se mantiene incluso si empiezas un episodio en la web y lo terminas en el móvil.

Pantalla de transcripción sincronizada de la app iOS de DIALØGUE con tarjetas de transcripción que saltan al tocarlas
Transcripción sincronizada — toca una línea para saltar. Posible solo porque la app generó el guion y conoce el timing.

Offline que aguanta un trayecto de verdad

La app podía descargar episodios desde el principio. Eso no es nuevo, y quiero ser preciso. Lo que la reconstrucción añadió es robustez — la diferencia entre una función de descarga y un offline en el que puedes confiar.

Una descarga interrumpida ahora se reanuda desde donde paró en vez de empezar de cero, porque la app guarda los datos de reanudación del sistema por episodio y reinicia desde ahí. Hay una opción solo-WiFi que de verdad prohíbe los datos móviles, así que una descarga en cola espera al WiFi en vez de quemarte el plan de datos en silencio. Las descargas corren como mucho tres a la vez en una cola FIFO en vez de avasallar la red. Hay una vista de almacenamiento para ver y borrar lo que tienes en el dispositivo. Y las peticiones fugaces que fallan con una conexión inestable reintentan con backoff — tres intentos, medio segundo que crece hasta un tope, y nunca un reintento cuando alguien ha cancelado.

Reintentar es fácil; reintentar sin pelearte con alguien que pulsó cancelar es la parte que hace que el offline se sienta sólido en una mala conexión de metro en vez de quedarse girando.

Pantalla de escucha offline de la app iOS de DIALØGUE con controles de episodios descargados
El offline siempre estuvo ahí. La reconstrucción lo hizo robusto — reanudar, solo-WiFi, controles de almacenamiento, una cola con tope.

Instantáneo, porque un spinner se lee como roto

En un móvil, la latencia es una sensación, no un número. Un spinner al arrancar en frío se lee como «esta app está rota», aunque no pase nada malo.

La app porteada volvía a descargar cada imagen de carátula en cada arranque en frío, así que la biblioteca se abría como una pared de spinners. La reconstrucción añadió una caché compartida de memoria y disco para las carátulas — la capa de disco sobrevive a los reinicios, la de memoria mantiene el scroll fluido, y la pantalla bloqueada reutiliza la misma caché para su carátula. Reabrir un episodio antes esperaba a un viaje de ida y vuelta por la red; ahora los segmentos y la transcripción están cacheados por episodio y se renderizan al instante, y luego se refrescan sin ruido en segundo plano. También saqué el tick de reproducción de cada medio segundo de las filas de la lista, para que el temporizador deje de forzar a toda la biblioteca a redibujarse.

No es una función que puedas pillar en un screenshot. Es la grieta entre una app y una web.

Te avisa cuando el episodio está listo

Generar un podcast lleva minutos, no segundos — hay investigación, un esquema, un guion, y luego audio. La app porteada te hacía mirar una barra de progreso todo ese tiempo. La app nativa no.

Con tu permiso, envía una notificación push en cuanto tu episodio está listo, así que puedes bloquear el móvil, hacer otra cosa y volver cuando vibre. El token del dispositivo se guarda en el servidor, solo el job de notificaciones puede leerlo, y puedes apagarlo todo en los ajustes. Es una piecita de fontanería — una tabla, un worker, el servicio de push de Apple — pero cambia la forma sentida del producto, de «espera en esta pantalla» a «te aviso cuando esté».

El flujo de trabajo puede empezar desde fuera de la app

Una app nativa no vive solo dentro de su propia ventana. La reconstrucción añadió soporte para Siri y Atajos mediante App Intents, así que «crea un podcast», «retoma la escucha» y «abre mis podcasts» funcionan como frases habladas, en la app de Atajos y en Spotlight — sin entitlements especiales. La decisión de qué debería hacer «retomar» (continuar el episodio actual, o abrir la biblioteca si no hay nada cargado) es una función pura diminuta que pude testear por unidad por sí sola, que es justo el tipo de cosa que evita que el comportamiento de Siri se desvíe.

También hay una bienvenida contenida de tres páginas en el primer arranque — crear, voces, escuchar en cualquier sitio —, mostrada una vez, y deep links para que un enlace tocado abra la pantalla correcta en vez de soltarte en la home. Cosas pequeñas. Son la diferencia entre una app que se queda en el móvil y una que le pertenece.

Una nota sobre dónde paré: todavía no hay widgets de pantalla de inicio, ni Live Activities, ni CarPlay — cada uno necesita su propia extensión o un entitlement concedido por Apple, y elegí lanzar primero el núcleo de escucha. «Nativo» aquí es una dirección, no una checklist terminada.

La lección que me llevo de esto

Si estás porteando algo a una plataforma nueva, el movimiento tentador es hacer que corra ahí y darlo por hecho. Correrá. También se sentirá prestado.

Lo nativo es un contrato con el dispositivo: respeta la pantalla bloqueada, los cambios de ruta de audio, la realidad del offline, las superficies del sistema que la gente ya usa. Un port honra tu layout viejo. Una app nativa honra las convenciones de la plataforma, incluso cuando eso significa borrar pestañas y reescribir pantallas que ya habías lanzado.

No tengo cifras dramáticas de instalación ni de retención para agitar — la versión actual está disponible en la App Store, y ese es el estado honesto. La prueba de verdad nunca fue si los screenshots parecían nativos. Es si alguien hace un episodio, lo escucha en un paseo con el móvil bloqueado y vuelve a hacer otro.

Si construyes para móvil, me da curiosidad dónde trazas la línea: ¿cuándo basta con «corre en el móvil», y cuándo te obliga el contrato de la plataforma a reconstruir?

Preguntas frecuentes

¿Qué cambió en la reconstrucción iOS de DIALØGUE?

La app pasó de un port del producto web a una reconstrucción nativa. La arquitectura de información bajó de cinco pestañas a tres (Listen, Create, You). La experiencia de escucha ganó una transcripción sincronizada que salta al tocarla, marcas de capítulo, scrubbing y carátula en la pantalla bloqueada, AirPlay, un temporizador de apagado e intervalos de skip configurables. Las descargas offline se volvieron robustas, la app cachea carátulas y segmentos para una sensación instantánea, Siri/Atajos permiten arrancar las acciones clave desde fuera de la app, y una notificación push te avisa cuando un episodio está listo.

¿Por qué cinco pestañas pasaron a ser tres?

Porque un móvil castiga cada pestaña de más. Credits no era un sitio que nadie quisiera visitar, así que se plegó en «You» más una hoja de compra que aparece cuando de verdad te quedas corto. Studio se convirtió en Series — un setup guardado dentro de Create en vez de su propia pestaña. Library y Profile pasaron a ser los más llanos «Listen» y «You».

¿Qué funciones nativas de iOS añadió la reconstrucción?

Scrubbing y carátula dinámica en la pantalla bloqueada, AirPlay, un temporizador de apagado con bajada gradual de volumen, intervalos de skip configurables (10–60 s) que también controlan la pantalla bloqueada, marcas de capítulo en la barra, una transcripción sincronizada que salta al tocarla, descargas offline robustas (reanudar, solo-WiFi, gestión de almacenamiento, cola con tope), cachés compartidas de carátulas y segmentos para render instantáneo, intents de Siri/Atajos, notificaciones push de «episodio listo», posición de reproducción en el servidor que se retoma entre web y móvil, deep links y onboarding en el primer arranque.

¿La transcripción sincronizada funciona para cualquier episodio?

Una línea de la transcripción solo es tocable para saltar cuando el audio tiene un timing exacto por segmento. Cuando el timing es aproximado, la línea igual se muestra pero no es navegable, y la app no finge lo contrario. La transcripción es posible porque DIALØGUE generó el guion, así que conoce la estructura y quién dijo qué.

¿Cuál es la diferencia entre Studio y Series?

Studio insinuaba una sala de control llena de mandos. Series es solo un setup guardado — hosts, tono, formato, idioma y patrón de fuentes — que te deja arrancar el siguiente episodio sin reconfigurarlo todo. Es un preset dentro de Create, no una pestaña independiente.

¿En qué se diferencia de los resúmenes en audio de NotebookLM?

NotebookLM es genuinamente útil, y gratis, para convertir tus fuentes en un resumen en audio rápido. DIALØGUE intenta ser un producto nativo de escucha completo encima de la generación: revisión de esquema y guion antes de cualquier audio, selección de voz, una transcripción sincronizada que salta al tocarla, capítulos, controles en pantalla bloqueada y por AirPlay, descargas offline, Siri y Series para shows repetibles. La diferencia honesta es menos «quién genera mejor audio» y más «qué le pasa al episodio después de que existe».

¿La reconstrucción añadió la escucha offline?

Las descargas offline ya existían. La reconstrucción las hizo robustas: las descargas interrumpidas se reanudan en vez de empezar de cero, hay una opción solo-WiFi y una vista de almacenamiento, las descargas corren como mucho tres a la vez, y los fallos de red fugaces reintentan con backoff sin pelearse con alguien que cancela.

Eso es todo por mi parte de momento.

Un saludo, Chandler