Calendar For Seniors
Why
Mi padre (67 años, jubilado), tenia un móvil viejo y cochambre de Samsung, y cuando le regale uno nuevo, un flamante y bonito Xiaomi, vino quejándose que la aplicación de calendario que llevaba cargada era muy complicada de usar y no le lanzaba alarmas al dispositivo como la de su anterior móvil. Intente que usara Google Calendar pero le parece demasiado complicada y no se aclara.
Si ya sé, seguro que existe alguna, que vosotros sabéis que hace todo eso. Me marque cómo objetivo lanzar una app móvil por a;o y esta es una magnifica oportunidad para matar muchos pájaros de un tiro, y de paso, hacer feliz a mi padre.
Para empezar, me veo forzado a utilizar React Native sin Expo, pues debo acceder a algunas de las funcionalidades de Android que no están portadas a React Native. Para la persistencia utilizare Mongo Realm que también lo tenia entre ceja y ceja.
Objetivos
El objetivo a nivel funcional es conseguir una aplicación de calendario que:
- Sea tan sencilla que un manazas nacido 20 años después de la guerra civil española pueda usarla perfectamente.
- Te lance los avisos de eventos en forma de alarma, configurable, horas, días, minutos antes, de tal forma que alguien que se olvida de cosas, sea imposible que se le pase el evento, ni que en ese momento se este echando una siesta.
- Sea posible compartir tu calendario con otros miembros de tu familia, y estas reciban notificaciones push, de tal forma que mi padre cuando se apunta algo, me llegue a mi también, y si bien a mí no me salten las alarmas, pueda estar al tanto de lo que hace o tenga que hacer.
- Pueda funcionar sin internet, y se sincroniza una vez recupera la conexión a internet. Mi padre es agricultor, y muchas veces esta en fincas donde no hay conexión a internet.
- Te puedas conectar con tu cuenta de Google.
- Multi idioma, Ingles, Castellano y Catalan.
Mi target principal es Android, voy a intentar que funcione en iOS pero la funcionalidad mas importante para mi (Que lance alarmas al dispositivo), hasta donde yo sé, no es posible de hacer en iOS.
Como bonus track, sincronizar in/out con Google Calendar.
Como objetivos a nivel técnico, entre muchos otros, me gustaría llegar a tener unit tests para todos los components, y e2e tests para todos los flows y procesos posibles. Ni puta idea de cómo hacer e2e en una app móvil.
El stack
Bare React Native con TypeScript, necesitare tocar algo de código nativo en Android. Voy a utilizar Redux (un saludo @Zoko) como gestor de estados, y no Context.
Para almacenar la data utilizare Realm de MongoDB, en principio encapsula la lógica de sincronización offline/online, así que este tema debería ser transparente (Creo, pero tengo que ver mas).
En principio las “apis” estarán en la propia app móvil, no habra un “backend” como tal atacare a los webhooks de Mongo, tengo que ver si uso GraphQL o voy a pelo.
Obstáculos a dia de hoy
El primero a nivel de hardware, voy a utilizar la ultima version del MacBook Air con el M1 cortesía de mi actual empresa, ( @JuAn4k4 no se lo digas al jefe ), y hay cosas, como el emulador de Android que están en pañales.
Tengo un poco de sudores fríos al pensar en el compilador de TypeScript cruzado con módulos nativos de Android. Pero bueno, siempre te queda el any juejjj.
En esta misma linea, mi experiencia con Android es minima.
Gestión de fechas, timezones etc… Sé perfectamente que la app la usaremos yo, mi padre y mi madre, pero me gustaría hacer un buen producto que se pueda bajar un tipo de EEUU y le funcione correctamente.
Tema de cuentas personales, me gustaría mantenerlo lo más sencillo posible y no meter nada fuera de Mongo, pero sí veo que Firebase me simplifica la vida a nivel de login con Google/Facebook/Apple, pues sera usada.
Links y herramientas
Para programar utilizare unicamente WebStorm de IntelliJ.