Kairos nació como proyecto de clase con una idea: tratar el tiempo como algo que se debe. Si dejabas una tarea a medias, sumaba minutos de "deuda productiva" y Gemini escribía una reflexión estoica. Ha tenido dos versiones, y lo interesante es por qué pasé de una a otra.
La primera versión dependía del servidor
Era una app Flutter con Provider que hablaba con un servidor FastAPI. El servidor guardaba tareas y deuda, y un endpoint, "el confesionario", pedía la reflexión a Gemini. También tenía geovallado, para asociar tareas a un sitio. Funcionaba, pero sin conexión no servía, y una app para organizar el día tiene que abrirse sin cobertura.
La reescritura: los datos, primero en el móvil
En la segunda versión, las tareas se guardan en el móvil con Realm, así que se crean y completan sin conexión. Cada una lleva una marca de sincronización, y cuando hay sesión y red, las pendientes suben a Supabase.
Supabase sustituyó a FastAPI: PostgreSQL con Row Level Security, de modo que cada usuario solo lee y escribe lo suyo sin programar esa comprobación en cada petición. El servidor propio ya no aportaba nada.
La clave de Gemini nunca va en el móvil
La IA se llama desde Edge Functions de Supabase. Una recibe las tareas y las devuelve ordenadas por prioridad; si Gemini falla, las devuelve tal cual, así que la app nunca se queda esperando.
Organizada por funcionalidades, testeable sin interfaz
Tareas, modo foco, hábitos y estadísticas, cada una con datos, lógica y pantalla separados. Bloc lleva el estado y GetIt las dependencias, y eso me permite testear la lógica, como los Bloc de tareas y del modo foco, sin levantar la interfaz.
Qué se quedó por el camino
El geovallado y la deuda de tiempo. La base de datos ya tiene la tabla de la deuda y la función de la reflexión, pero la app aún no las usa: preferí una base sólida sin conexión antes que arrastrar funciones del servidor antiguo.
Lo que aprendí: la arquitectura se paga después
Poner el servidor en el centro era lo cómodo al principio; poner el móvil en el centro es lo que hace que la app sirva en el día a día. Rehacerla costó, pero me enseñó a mirar cada decisión por lo que cuesta después.
