← Lab
interfaces·En proceso·2026

Nimbus

El clima es el mismo. La experiencia no

Bitácora · 51 entradas ↓Ver demo ↗
03

Bitácora

51 entradas
Implementación
Hito

En la web, iniciar sesión con Google toma dos toques y cero dramas. En Android fue todo un drama coreano 🫶.

El botón abría Chrome por su cuenta, pedía la cuenta y te dejaba varado afuera: pasaje de solo ida, sin boleto de regreso a la app. Lo cambiamos por el inicio de sesión nativo del sistema y llegó la segunda sorpresa: elegías tu cuenta, el selector se despedía con reverencia impecable y Nimbus seguía jurando con cara de palo: «You're not signed in».

Iniciar, iniciaba. El detalle es que en el teléfono convivían dos sesiones en mundos paralelos: la de Android y la de la app. El plugin solo le avisaba a la primera, mientras la pantalla que manda seguía esperando noticias que nunca iban a llegar. Tuvimos que presentarlas a mano para que por fin se hablaran.

Pero el despecho volvió por la puerta falsa: tocabas «Sign out» y no pasaba absolutamente nada. Cerraba una puerta y dejaba la otra abierta de par en par. Dos entidades que comparten el mismo techo pero no se comunican nunca terminan bien. Ni en el software, ni en las parejas.

Infraestructura
Completado

El 21 de septiembre apagué el GPS a propósito para poner a prueba el orgullo de Nimbus. Si le pedías la ubicación a mano, soltaba un error genérico debajo del clima de una ciudad donde ya ni siquiera estabas. Lo anoté como pendiente y ahí durmió, acumulando polvo con la paciencia de un trámite municipal.

Diecisiete días después, deuda saldada. Cuando le pides la ubicación y el teléfono no puede dártela, Nimbus deja de fingir: limpia el clima fantasma y te recibe con la pantalla de bienvenida, diseñada exactamente para no mentir.

Bueno, saldada a medias, para ser honestos. En segundo plano sigue aferrado a la última ubicación conocida sin decir ni pío. Pero eso ya no es un bug: es una decisión de diseño. Si no sabe dónde estás, que tenga la decencia de admitirlo; para inventar realidades ya nos sobran los políticos.

Interfaz
Decisión

Mirando el panel en mi propio teléfono, el interruptor juraba que las alertas estaban «activadas». No había ningún permiso concedido en Android. El toggle mentía con un descaro digno de político en campaña.

Lo reconstruimos desde el suelo. Ahora el switch no confía en su memoria local: interroga al sistema operativo en tiempo real cada vez que lo miras. Y en la pantalla principal pusimos una tarjeta de invitación civilizada: tocar «Paso por ahora» no te quema el permiso del sistema operativo. Te pregunta hasta tres veces espaciadas por catorce días; si insistes en ignorarla, asume el mensaje y se calla para siempre.

Una app puede insistir si tiene motivos. Lo que no tiene perdón es que te mienta en la cara.

Testing
Avance

Primera vez que Nimbus aterriza en mi teléfono como aplicación de verdad y no como un atajo del navegador con ínfulas de grandeza (Hello PWA).

Tres sorpresas de bienvenida. Se instaló bajo el alias de «AppClima» (el nombre genérico del repositorio, cero elegancia). El botón de «Usar mi ubicación» moría en silencio porque nadie le había avisado al manifiesto de Android que íbamos a pedirla. Y las notificaciones de navegador en un entorno nativo no sirven para nada: pedía permisos al vacío y se quedaba esperando. Ahora habla directamente con el gestor del sistema.

Ya se llama Nimbus. Ya sabe exactamente dónde estás parado. Esa misma noche me avisó, por su cuenta, que el clima había cambiado de opinión. En inglés, porque así se lo pedí.

Infraestructura
Fallo

Compilé la primera APK de Nimbus y me recibió una pantalla en blanco. Ni un error en rojo, ni un aviso de socorro, nada. Parecía que el motor simplemente se negaba a arrancar.

Arrancar, arrancaba. El detalle es que buscaba sus recursos en /nimbus/, la ruta donde vive dentro de mi web; y claro, dentro del sistema de archivos de un teléfono esa carpeta existe solo en mi imaginación. Android ahora tiene su propio empaquetado y su propia raíz.

Una pantalla en blanco no es la ausencia de un fallo. Es un fallo con demasiado orgullo para hablar.

Contenido
Decisión

Los textos de las notificaciones estaban directo en el código. Uno por evento, genéricos y ni siquiera escritos por mí. Una tristeza.

Ahora viven en Olimpo: los ajusto, los pruebo y salen al aire sin tocar un solo deploy. Nimbus saca uno al azar y tiene la decencia de no repetir el último que te mandó a la pantalla.

Ese mismo día armé en mi sitio un monitor de estado de ánimo con frases rotativas. Dos frentes distintos, la misma lección: un chiste contado dos veces deja de tener gracia; tres veces, ya es spam.

Implementación
Avance

Las alertas dejaron de depender de que alguien presione un botón como operador de telégrafo.

Cada media hora, Nimbus revisa el cielo de quienes pidieron avisos y advierte si asoma lluvia o un cambio brusco de temperatura. No interroga usuario por usuario: agrupa por cuadrículas de unos 11 kilómetros para no quemar cuotas. Respeta las horas de sueño y no te repite el mismo chiste dos veces al día.

Al mediodía saltó la primera grieta: si viajabas, la alerta seguía pendiente del clima de la ciudad que dejaste atrás. Ahora persigue tus coordenadas reales.

Avisarle a Lima que está granizando en Cusco no estaba en el libreto.

Infraestructura
Insight

Con Nimbus abierta en primer plano, la notificación llegaba y nadie se dignaba a pintarla. El clásico: faltaba el oyente en guardia mientras la app estaba despierta. Eso se resolvió en diez minutos.

El misterio vino después: en mi navegador de escritorio reinaba un silencio sepulcral. Me pasé media hora buscando fantasmas en el código, pero el código era inocente. El culpable era Brave: sus escudos asumen que Firebase es un espía y lo ejecutan sin juicio previo.

En Chrome y en Android, con la app viva o durmiendo, entra sin pestañear. Esta vez el bug no era mío. Hay que celebrarlo.

Infraestructura
Lección

La llave de las notificaciones vivía en un archivo que no se subía a ningún lado. Por seguridad, impecable; por memoria, un desastre.

Estaba metida en la carpeta de pruebas. Borré la carpeta y la clave se fue con ella. Mandé dos deploys con absoluta tranquilidad: el build pasaba, la consola sonreía y en producción nada se movía. Me di cuenta recién cuando un teléfono de verdad se quedó mudo.

Lo que no viaja con el repositorio, no sobrevive a la mudanza.

Hito
Hito

Nimbus ya puede hablarte sin que nadie le dé permiso de palabra.

Probé la cadena completa: permiso, registro del teléfono, Firebase y la notificación en la pantalla de bloqueo. Llegó. Parece un trámite menor, pero es la primera vez que Nimbus abre la boca por cuenta propia.

Dos decisiones de supervivencia. Firebase en vez de inventar la rueda con un backend casero: Android solo respeta ese dialecto y no me sobra vida para mantener dos sistemas. Y nada de obligar a iniciar sesión con Google: para el usuario común esa cuenta ni existe. Nimbus reconoce el teléfono y se ahorra el interrogatorio.

Ahora viene lo verdaderamente difícil: que lo que tenga que decir no sea una soberana pérdida de tiempo.

Idea
Hipótesis

Creo que Nimbus está quedando muy corto. Estoy pensando en subirle el filo a la personalidad: hoy es sarcástico pero sano, y me pregunto si debería ser mucho más sarcástico, casi una relación tóxica con mi propia aplicación. No como Duolingo, que directamente acosa. Aunque, pensándolo bien, quizás algo parecido.

Todavía no es una decisión, solo una idea rondando. Si la pruebo, va a ser con cuidado.

Infraestructura
Lección

Apagué el GPS del celular a propósito, para ver qué hacía Nimbus. La respuesta: siguió creyendo que estaba donde estaba antes. En segundo plano no avisa nada, solo se queda con la última ubicación que tenía.

Cuando pido la ubicación a mano sí me avisa que algo falló, pero con un error genérico, no con la pantalla de bienvenida que ya tengo pensada para cuando no sabe dónde estoy. Ahí hay algo que ajustar.

Producto
Hipótesis

Se me ocurrió que "Nimbus recomienda" es un poco sosa. A mí me gusta comer rico, así que pensé en asociarla con comida: si hace calor, un rico helado; si estás en Piura, un plato típico de Piura.

Por ahora es solo una idea, ni siquiera decidida del todo. Armé una base con platos típicos de cada departamento del Perú para tener con qué empezar, si es que sigo adelante. La comida reemplazaría la bajada de "Nimbus recomienda"; el título se queda.

Cierre del dia
Pausa

Por hoy, curaduría de frases. Las notificaciones push quedan para mañana o pasado. Son varios días seguidos trabajando en esto, y hoy ya toca parar. Las push sí las quiero hacer bien, cliente y back completos, y eso no se construye con la cabeza cansada.

Producto
Decisión

Ahora que tengo dos referencias, toca hacer curaduría de frases. Todavía no confío en un LLM para que las escriba por mí: prefiero elegir a mano las que ya tienen más interacción, y con esas alimentar algún día un motor propio que genere frases solo.

Ese motor no lo voy a construir pronto. Necesito o una máquina donde correrlo en local, o animarme a jugar con alguna IA china más barata. Por ahora, sigo siendo yo el que decide qué dice Nimbus.

Producto
Insight

Ya tengo la beta lista y probada por mi cuenta. Creo que puedo pasársela a algunos amigos cercanos, que buena falta me hace su feedback.

Pero noté algo: para que salga "Winter is coming" o cualquier otra referencia, el usuario tiene que haber elegido esa preferencia, y hoy está escondida en Ajustes. Yo la tengo puesta desde el principio, claro. Alguien nuevo no, y le puede salir algo demasiado de nicho como para entenderlo.

(Pensé en armar un onboarding para la primera vez que alguien abra la app, pero lo descarté: no quiero que alguien que recién la prueba se vaya antes de llegar a usarla. Queda en la lista de pendientes, por ahora.)

Diseño de sistema
Duda

Ya tengo un primer orden para las fechas especiales: primero manda el evento, después el momento, después el clima, y si nada de eso aplica, neutral. Con eso funcionan Halloween, San Valentín, el Año Nuevo Chino y las que vengan.

Ahora quiero ir más allá y definir esas fechas por calendario desde el propio administrador de poses. Tengo una duda que todavía no resuelvo: un mismo día no es el mismo día en todos lados. Voy a iterar primero, antes de prometer algo que la zona horaria me puede hacer quedar mal.

Contenido
Avance

Las referencias de Nimbus empiezan a tener cara. Antes, con "Winter is coming" salía la imagen genérica del frío de siempre; ahora agarré ilustraciones de Juego de Tronos para que la imagen haga match con la frase.

Sumé una segunda referencia: Pokémon. Pikachu para los rayos, porque es lo obvio, y Charmander para el calor y el fuego. Son parodias con patas, no personajes con derechos de autor asustados.

Ya sé qué referencia manda en cada clima extremo: Winter is coming para el frío, y Dracarys para el calor. Esta última, por ahora, solo vive en mi cabeza.

Proceso
Hito

Nimbus llegó a una versión que por fin puedo llamar estable. No porque esté terminado, sino porque ya puedo tocar algo sin preguntarme qué otra cosa acabo de romper.

En el camino terminé con dos carpetas, dos ramas y dos Claude trabajando cada uno donde mejor le parecía. Funcionó sorprendentemente bien hasta que dejó de hacerlo. Así que ordené la casa, arreglé un par de cosas que venía arrastrando y dejé una sola forma de trabajar.

Ahora puedo volver a lo importante: terminar de darle una cara propia a Nimbus. Lima, la playa, sus poses y todo eso que todavía no sale de una prueba automática.

Eso me toca dibujarlo a mí.

Interfaz
Avance

Hoy me di cuenta de que estaba diseñando un buscador cuando en realidad necesitaba ayudar a tomar una decisión.

Así que cambié la pantalla. Una vez que eliges qué clima quieres y hasta dónde estás dispuesto a ir por él, Nimbus deja de preguntarte cosas y se moja: te recomienda un lugar. Hay una opción principal y un par más por si no confías tanto en una nube con patas. El mapa queda para comprobar que Nimbus no se lo está inventando.

También limpié bastante. Distancias, rumbos, aeropuertos y otros datos que técnicamente podían estar ahí, pero que no ayudaban a decidir, se fueron.

Todavía falta verlo funcionando con datos reales y, sobre todo, hacer que las razones suenen realmente a Nimbus. Por ahora sabe encontrar el clima. Falta que aprenda a venderte la escapada.

Producto
Avance

Nueva función: Explora otros lugares. La persona elige el clima que le apetece (frío, calor, templado o lluvia), hasta dónde está dispuesta a llegar y para cuándo, y Nimbus dice dónde está.

Por dentro es una rejilla de puntos alrededor de donde estás. Consulto el clima de cada uno en Open-Meteo, los puntúo según el clima elegido y a los mejores les pongo nombre con geocodificación inversa. Si nada mejora lo que hay aquí, la respuesta es "quédate". Que Nimbus sea capaz de decirte que no hace falta salir de casa me parece una virtud.

El rango nació como tiempo en coche, de 30 minutos a 4 horas, y lo cambié a kilómetros en línea recta, de 50 a 1.000. Descarté las rutas reales: el tráfico lo calcula mejor la app de mapas. Entró también "Otra fecha", hasta 15 días. "Ver en mapas" apunta al pueblo y no al punto de la rejilla, porque Google no calcula rutas a una ladera, y "Buscar vuelos" solo aparece desde 250 km y con aeropuerto en los dos extremos.

Lo caro son las cuotas: cada punto cuenta como una llamada, así que una búsqueda de 1.000 km son 97. Si se agotan, la pantalla dice "saturado" en vez de mentir con un "aquí no hay pueblo".

Infraestructura
Decisión

Las funciones grandes ahora se prueban aparte, en /nimbus-beta/<nombre>/, sin tocar lo que ya funciona en /nimbus. Cada beta se construye con su propia base y una etiqueta "BETA", sin service worker y sin indexar, y se sube con un script que primero simula y solo después toca algo.

Va fuera de /nimbus porque el service worker de producción tiene ese alcance, y una beta ahí adentro terminaría cacheada como si fuera la versión real.

La advertencia honesta: una beta comparte origen con producción. Mismo Firestore, misma sesión, mismo localStorage. Es un laboratorio, pero con la puerta abierta al comedor.

Infraestructura
Duda

Las notificaciones push, por ahora, son un documento y no una función. Dejé escrito el diseño y los tipos, sin una sola línea de código de suscripción ni de envío.

Lo que falta no es técnico, es mío. Decidir entre FCM con plan Blaze o un Web Push propio, si habrá sesión anónima, cómo segmentar, qué límites poner y qué dicen las automáticas. Cinco decisiones.

Una app que te avisa cuando ella quiere es una app que uno desinstala. Prefiero pensarlo bien antes de molestar a nadie.

Contenido
Avance

Ahora yo escribo lo que dice el aviso de "hay una versión nueva". Un bloque por idioma, con título, mensaje y fecha de caducidad, y un botón para quitarlo si me arrepiento. Vive en Firestore, sin servidor nuevo. Si no hay mensaje, o ya caducó, el aviso vuelve a decir la frase suelta de siempre.

También queda un historial de lo que publiqué, con "Usar de nuevo". Un archivo de mis propios avisos: la versión más pequeña de la nostalgia.

Hay dos reglas que conviene aprender a la primera: publicar el mensaje antes de desplegar, y recordar que lo dibuja la versión que la persona ya tiene instalada, no la nueva. Además arreglé que en móviles estrechos el texto quedara aplastado: los botones bajan a otra fila.

Interfaz
Avance

Le puse Olimpo al panel de administración. El nombre lo elegí yo: "admin" sonaba a menú de una intranet. Solo lo veo yo, en /olimpo.

Empezó como una tabla de frases y terminó siendo un panel completo, con vista previa en Nimbus, selección múltiple y una sección aparte para permisos y mensajes. La regla que más me costó, y la que más me gusta: editar una frase es retirar la vieja y añadir la nueva. Si la vieja ya tenía reacciones positivas, se queda activa, y la corregida entra como una frase distinta.

Nadie pierde sus likes por mis ganas de corregir una coma a medianoche.

Interfaz
Hito

Antes de dejar que alguien edite lo que Nimbus dice, tocaba construir la base: el contenido vive en local con un parche en Firestore, las reglas quedan versionadas y hay una pantalla de diagnóstico que distingue dos cosas que se parecen mucho pero no son lo mismo —reglas sin publicar, y un correo que no es administrador—. Un detalle de paso: Google ahora siempre muestra el selector de cuentas, porque adivinar con cuál había entrado ya era un deporte.

Con esa base lista, ya se puede curar a Nimbus desde la propia app: auditar, retirar, restaurar, añadir y publicar frases, sin abrir un editor de código. El último ajuste fue de reglas: el administrador tenía que ser yo. Ahora lo es. Que la app no me reconociera como su dueño fue un ejercicio de humildad que no había pedido.

Infraestructura
Avance

La PWA empezó a tener personalidad. La barra para instalar la app rota frases de Nimbus y, si dices "Ahora no", se calla siete días. Por una vez, alguien que respeta un no.

El aviso de versión nueva también usa frases de Nimbus. El service worker espera confirmación antes de actualizarse y busca cambios cada hora, para que la app no se reinicie sola en mitad de lo que estés leyendo.

Contenido
Avance

El pronóstico Diario pasó a ser una lista compacta, con lluvia por día, rango térmico y un comentario de Nimbus en cada fila. Encima apareció un bloque nuevo, "Nimbus · Esta semana": detecta patrones en los próximos días, elige una pose y suelta una lectura general. Es lo más cerca que estoy de tener un amigo meteorólogo, sin tener que invitarle un café.

La voz también maduró. Sumé seis referencias pop para los días y veinte para el resumen semanal, en español e inglés —la semana gris cita Fifty Shades of Grey; si vamos a sufrir el cielo de Lima, que sea con algo de ironía—. Y ya no basta con reaccionar a "llueve" o "hace frío": ahora reacciona a la intensidad, la tendencia y la niebla densa.

Un arreglo pequeño de paso: el Diario solo muestra días completos. Nada de mostrar medio martes.

Contenido
Avance

Nimbus ya no habla de memoria. Cargué el banco curado de frases, etiquetas, condiciones y recomendaciones que venía de unas hojas de cálculo.

Todo lo que dice ahora se lee de Firestore, con una copia local como respaldo por si la nube tiene un mal día. Y si la última frase quedó en un idioma distinto al de la interfaz, Nimbus pide una nueva. Hablar en dos idiomas a la vez le queda bien a un poeta, no a una app del clima.

Primero que tenga qué decir. Después, dónde.

Infraestructura
Decisión

Lo que sigue es convertir Nimbus en una PWA. No es un giro: la arquitectura siempre estuvo pensada para eso.

Ya hay manifiesto, service worker, iconos, botón "Instalar Nimbus" y modo sin red. Lo que falta es lo aburrido y lo importante: desplegar el dist/, probarla en un móvil real y revisar las cabeceras de Apache. Hasta ahora todo esto funciona en mi máquina, que como garantía vale lo que vale.

También quedan poses sin conectar, el icono de la PWA con el Nimbus viejo (sudadera amarilla en 3D) y un motor de frases al que le faltan ranking, memoria y unas 500 frases. La pestaña Nimbus sigue casi vacía. Sí, la que lleva su nombre. Ya sé.

Producto
Decisión

Decisiones que quedan de hoy, para no discutirlas conmigo mismo dentro de un mes.

Light por defecto. El morado #7C3AED es solo marca, no un tema. Local primero, nube después. La ilustración es independiente del tema. La hora manda sobre el cielo, y el clima sobre las poses de ánimo. La celebración es solo para fechas festivas (los equinoccios no cuentan, lo siento por los equinoccios). Los puntos de evolución van con tags, no con ramas.

Ninguna es espectacular. Por eso mismo conviene dejarlas escritas.

Producto
Hito

Nimbus v2.0 está estable. Cincuenta commits, de las 00:18 a las 22:08, en una sola rama. Un día. No lo recomiendo como método.

Madrugada, desde cero: tres pestañas (Inicio, Pronóstico y Nimbus), el motor que decide cuándo Nimbus dice algo nuevo, el hero por capas y la tarjeta "Nimbus · Ahora". Después, el diario, los favoritos, el pronóstico de hoy con su curva de horas, "Nimbus recomienda" y compartir como imagen.

Mañana, la piel: selector Claro, Sistema u Oscuro, con un liquid glass neutro en el oscuro y sin morado. Una carpeta, una rama, y la regla escrita para que no vuelva a haber dos versiones del mismo proyecto.

Mediodía y tarde, la base: que refrescar no dé 404, ajustes reestructurados, un clima que se actualiza solo cada 10 minutos, contraste AA y la PWA con su manifiesto, service worker y modo sin red.

Noche, la voz: las 59 poses y unas condiciones que hablan según su rango e intensidad.

Parte de esto lo hicieron otras instancias de Claude en la misma rama. Yo puse la dirección. Ellas, los commits.

Diseño de sistema
Decisión

Las ilustraciones de Nimbus no son al azar.

Hay 59 poses y ninguna aparece porque sí. Cada una tiene un disparador, una expresión, una pose y, si hace falta, un vestuario. Soleado: cielo despejado, de día, entre 5 y 32 °C. Nimbus entusiasmado, brazos arriba. Calor fuerte: sensación de 33 °C o más. Tumbado en el suelo, sin chaqueta. Lluvia: fastidiado, resignado, boca abierta.

La imagen es un fragmento de la tabla donde vive todo eso. Sí, es un Excel. Detrás de cada personaje adorable hay una hoja de cálculo con opiniones firmes. La ternura es una disciplina.

Para decidir cuál se muestra, nimbusPose.ts sigue un orden. Primero manda el clima. Si el clima no tiene nada que decir, entran la crisis térmica, la noche o el insomnio, la alegría por una mejora, el amanecer, el atardecer, el lunes harto y, al final, una rotación de "meh". Las fechas especiales mandan sobre todo lo demás.

Y la ilustración no cambia con el tema. Nimbus es Nimbus, se ponga el fondo que se ponga.

Es la misma apuesta de siempre: personalidad sin IA generativa. Las reglas también pueden tener carácter.

Interfaz
Avance

Nimbus cambió de piel: liquid glass.

Actualicé la interfaz en lo visual. Superficies translúcidas que dejan ver el cielo y el clima de fondo, en lugar de tarjetas que compiten con ellos.

Si el clima es la materia prima, lo mínimo es que la interfaz no lo tape.

Investigación
Lección

Para saber en qué tipo de lugar está el usuario, por ahora no uso ninguna API.

Es una tabla escrita a mano en places.ts. Compara el nombre de la ciudad, sin acentos ni mayúsculas, con el que ya entrega OpenWeather. Funciona, pero solo con las ciudades que yo escribí.

La API gratuita que mencioné antes era una idea de respaldo, no algo implementado. Hoy la verifiqué con llamadas reales: Open-Meteo Geocoding, gratis y sin key. Devuelve elevación, población, tipo de lugar y país. Para Cusco: 3312 m y 428 450 habitantes.

Eso serviría para clasificar las ciudades que no estén en mi tabla: población baja, campo; elevación alta, andino. La playa no la detecta.

Lo que aprendí en la prueba: también devuelve homónimos. Hay otro Cusco en San Martín, a 262 m y sin población registrada.

Un Cusco a 262 metros de altura es buena razón para no dejar que una API decida sola dónde está Nimbus.

Producto
Exploración

Nimbus lleva un tiempo viviendo sobre un fondo bastante genérico.

Cumple.

Pero también podría estar en Lima, Tokio o Ciudad Gótica y probablemente nadie notaría demasiada diferencia.

Así que apareció otra pregunta: ¿cuánto debería saber Nimbus sobre el lugar donde está?

No quiero intentar representar cada ciudad del planeta. Ese camino termina rápido en una carpeta con 847 fondos y alguien preguntándose por qué estamos dibujando una plaza de Moldavia a las tres de la mañana.

La idea es empezar por algo más estructural.

Primero detectar qué tipo de lugar es:

ciudad, costa, sierra, selva, campo, playa.

Eso ya permitiría que el entorno acompañe mejor al clima.

Y luego, encima de ese sistema, algunas ciudades podrían tener identidad propia.

Lima puede tener una silueta reconocible.

Arequipa puede insinuar al Misti.

Cusco puede utilizar elementos propios de su paisaje y arquitectura.

Sin convertir Nimbus en una postal turística con un widget meteorológico pegado encima.

La intención no es representar literalmente el lugar.

Es hacer que la aplicación sepa dónde está.

Porque 12 °C no se sienten igual en todos lados.

Y una app que pretende interpretar el clima debería entender algo más que latitud, longitud y temperatura.

Por ahora el orden empieza a verse bastante claro:

1. Construir un sistema de lugares y entornos. 2. Hacer que memoria y humor formen parte del mismo motor. 3. Convertir las frases actuales en plantillas más flexibles.

No parece una lista enorme.

Pero probablemente ahí esté buena parte de lo que hará que Nimbus deje de sentirse como una app del clima con personaje y empiece a sentirse simplemente como Nimbus.

Idea
Insight

Hoy apareció una idea que probablemente termine definiendo bastante cómo funciona Nimbus por dentro: darle cerebros.

No varios Nimbus ni personalidades intercambiables. Más bien pequeñas capas de criterio.

Una entiende el clima.

Otra sabe algo del contexto.

Otra recuerda ciertas cosas del usuario.

Otra decide el tono.

Y alguna tendrá que evitar que Nimbus convierta una ligera llovizna en el apocalipsis climático del siglo.

La idea nace de un problema bastante simple.

No quiero terminar con cientos de reglas del tipo: si temperatura < 15 → mostrar frase 37.

Eso funcionaría técnicamente, pero después de un tiempo Nimbus sería básicamente una hoja de Excel con ojos.

Quiero que exista un pequeño motor que pueda combinar señales y decidir qué tiene sentido decir en ese momento.

No solo: "Hace 14 °C."

Sino algo más cercano a: "Hace 14 °C, está saliendo temprano, suele sentir frío y hoy Nimbus está particularmente poco impresionado con el clima."

De ahí debería salir la respuesta.

Esto también permitiría que la memoria y el humor no sean funciones separadas pegadas encima del producto, sino partes de la misma decisión.

Las frases escritas a mano seguirían existiendo. De hecho, quiero conservarlas porque ahí vive buena parte de la voz de Nimbus.

La diferencia es que dejarían de ser frases rígidas.

Podrían convertirse en plantillas con variables, contexto y pequeñas variaciones.

Menos catálogo de respuestas.

Más máquina de criterio.

Todavía no sé cuántos cerebros terminará teniendo Nimbus.

Pero al menos ya sé que uno solo lleno de if probablemente no sea suficiente.

Implementación
Decisión

Eso también cambia cómo estoy pensando la tecnología.

Podría conectar un LLM desde ahora y hacer que genere comentarios infinitos. Suena bonito hasta que Firebase, APIs y compañía empiezan a enviar facturas con vocación de alquiler.

Por ahora prefiero algo más difícil, pero también más interesante: comprobar si Nimbus puede tener personalidad sin depender de IA generativa.

Reglas, contexto, estados de ánimo, variables y frases escritas con intención.

Más adelante seguramente habrá un modelo detrás. Probablemente uno pequeño y barato, porque tampoco necesito que Nimbus descubra una nueva rama de la física cada vez que hay 18 grados.

Pero quiero que el orden sea este: primero construir a Nimbus y después darle más capacidad para hablar.

No construir primero una IA y luego preguntarnos quién se supone que es.

Producto
Decisión

Hoy terminó de cerrar una idea que venía rondando el proyecto desde hace un tiempo: Nimbus no debería ser una app a la que entras solo para revisar si mañana llueve.

Para eso ya existen bastantes aplicaciones. Y, siendo sinceros, varias lo hacen bastante bien.

Lo que me interesa es otra cosa: que alguien abra Nimbus pensando "a ver qué dice hoy".

Ese pequeño cambio mueve todo el producto.

El clima sigue siendo útil, obviamente. Nimbus tiene que decir si hace frío, si va a llover o si salir sin bloqueador es una decisión cuestionable. Pero esos datos son la materia prima. La razón para volver debería ser Nimbus interpretándolos.

Proceso
Decisión

Para llegar a la v2.0 dividí el trabajo en fases: primero la estructura y la lógica, después lo que se ve.

Encadené las primeras en una sola noche. La navegación se ordenó en tres pestañas —Inicio, Pronóstico y Nimbus—, con el Diario escondido bajo Pronóstico y Ajustes detrás del engranaje. Después vino el cerebro, todavía sin ninguna interfaz: la lógica de cuándo Nimbus tiene algo nuevo que decir, y un registro de sus frases en Firestore. Recién al final apareció algo que se pudiera ver: un hero armado por capas —cielo, clima, escenario y Nimbus— con la tarjeta "Nimbus · Ahora".

Es la primera vez que la v2 se parece a lo que tenía en la cabeza.

Implementación
Decisión

Con ese equilibrio encontrado, reconstruyo la arquitectura y la interfaz desde cero para la versión 2.0.

La v1 sirvió para validar la idea. La v2 no se construye sobre lo que quedó de ella, sino sobre lo que aprendí al romperla.

Interfaz
Lección

La versión 1 de la interfaz era simple a propósito: quería verla funcionando antes de decidir nada más. Después vinieron iteraciones más cargadas, y ahí apareció el riesgo: terminar siendo una app del clima cualquiera.

La interfaz pasó por un proceso de simplificación más de tres veces. Cada ronda quitaba algo que parecía importante y no lo era.

Al final encontré un punto equilibrado. No es la versión más completa, es la que me deja dejar de iterar.

Interfaz
Avance

Retomo Nimbus por el personaje. Lo reestructuré y probé versiones más simples, pensando en algo que más adelante pueda animarse sin volverse un problema.

Un personaje que hoy se ve bien pero mañana no se puede mover es un dibujo, no una mascota.

Infraestructura
Hito

Primera publicación en una URL pública: v1.0 de Nimbus ya está disponible para cualquiera que quiera probarlo.

Publicarlo no significó que estuviera terminado; solo significó que ahora mis errores tenían público.

Aprendizaje
Lección

Una observación empieza a repetirse mientras pienso en el producto.

28°C puede sentirse agradable para algunas personas y sofocante para otras.

La misma lluvia puede arruinar los planes de alguien y alegrarle el día a otra persona.

Incluso dentro de una misma ciudad existen diferencias enormes en cómo las personas perciben el clima.

Comienzo a preguntarme si una aplicación debería interpretar el pronóstico de forma distinta según las preferencias y el contexto de cada usuario.

Implementación
Completado

Hasta este punto Nimbus era poco más que una idea conectada a una API. Integrar Google Auth fue el primer paso para empezar a construir experiencias personalizadas. Si quería que la aplicación reaccionara de forma distinta para cada persona, primero necesitaba saber quién estaba al otro lado de la pantalla.

Producto
Hito

Primer MVP funcional desplegado. Nimbus ya puede obtener el clima, interpretar el contexto y generar respuestas personalizadas.

Implementación
Avance

Integración inicial con OpenWeather. Generación dinámica de mensajes basada en temperatura, condición climática y hora del día.

Interfaz
Exploración

Primeras exploraciones visuales para la mascota. Descarté enfoques demasiado caricaturescos. Busco algo que transmita carácter sin sentirse infantil.

Producto
Decisión

Definí los primeros modos de personalidad para interpretar el mismo clima. Geek. Filosófico. Noctámbulo. Gamer. Team Frío. Team Calor. La misma temperatura. Narrativas distintas.

Idea
Hipótesis

No recuerdo exactamente cuándo apareció Nimbus. Lo que sí recuerdo es que comenzó como una excusa para jugar con una API de clima y terminó convirtiéndose en una pregunta sobre cómo las personas experimentan el mismo pronóstico de formas completamente distintas.

04

Estado actual

En proceso
Ver demo ↗