Monica v3 llega antes de que acabe 2026. Reconstruida desde cero. Sigue siendo de código abierto. Ver lo que viene
Monica

Blog

Notas sobre la construcción de Monica, sobre mantener privados los datos personales y sobre la pequeña mecánica de seguir en contacto.

Página 4 de 4

1 min de lectura
50 000 contactos
Regis Freyd

Acabamos de alcanzar un hito increíble.

pie de página

Es fantástico y es un hito que quería compartir con todos vosotros. Los usuarios han registrado más de 50 000 contactos en Monica hasta ahora, y la cifra crece cada día. Eso no incluye las instancias que se han descargado e instalado en servidores propios.

En el plano personal, me asombra la comunidad que rodea al proyecto. En GitHub hemos recibido más de 200 pull requests de la comunidad y la gente parece compartir el proyecto por todo internet para difundir la noticia.

Estoy deseando ver dónde estaremos dentro de un año. Gracias a todos por vuestra confianza.

3 min de lectura
Monica 0.5.0 con aviso de versiones y búsqueda
Regis Freyd

Si instalas Monica en un servidor propio, lo más probable es que quieras enterarte cuando haya una versión nueva. Con Monica 0.5.0 tienes exactamente eso.

Cómo funciona

En resumen, tu instancia de Monica envía un ping diario a https://version.monicahq.com. El ping contiene tres datos:

  • un UUID: el identificador único y anónimo de tu instancia,
  • la versión actual de tu instancia,
  • el número de contactos de tu instancia.

El último dato sirve para conocer el tamaño de las instancias de quienes se descargan Monica. Necesito ese dato (y solo ese) para avanzar sabiendo mejor cómo se usa Monica. Además, no hay manera de saber quién eres: el UUID es aleatorio, único y anónimo.

El código de https://version.monicahq.com es de código abierto y está en GitHub, como todo lo que hacemos.

Como respuesta a esa llamada, recibes un JSON con:

  • un booleano que indica si hay una versión nueva,
  • cuál es la última versión disponible,
  • todas las notas de publicación de cada versión lanzada desde la versión del ping,
  • el número de versiones publicadas desde la versión del ping.

Esta información se usa en la interfaz. En el pie de página aparece un enlace nuevo si hay una versión disponible. Al hacer clic se abre una ventana con las notas de la nueva versión.

pie de página

Cómo desactivar esta función

Toda función que cambie el funcionamiento esencial de Monica puede desactivarse, y esta no es una excepción. Si no quieres enviar ninguna información a https://version.monicahq.com, simplemente añade esto a tu archivo .env:

  • CHECK_VERSION=false

Y ya está. Nunca saldrá información alguna de tu servidor. El inconveniente es que no recibirás avisos automáticos cuando salga una versión nueva.

Buscar entre tus contactos

Ahora puedes buscar entre tus contactos con un nuevo cuadro de búsqueda en la cabecera. La búsqueda tiene en cuenta los siguientes datos:

  • Nombre y apellidos
  • Correo electrónico
  • Calle
  • Ciudad
  • Código postal
  • Provincia
  • Preferencias alimentarias
  • Puesto
  • Empresa

Las búsquedas deberían ser además bastante rápidas. Nos hace mucha ilusión esta función.

(pie de página

Para terminar

La versión 0.5.0 ya está en producción y, como siempre, puedes instalarla en un servidor propio.

Que la disfrutes.

1 min de lectura
Monica 0.4.0 con llamadas telefónicas
Regis Freyd

Recordar lo que has hablado con las personas que te importan es importante. Ya era posible guardar notas sobre tus contactos. Ahora también puedes registrar una llamada telefónica, lo que resulta muy cómodo para saber cuándo llamaste por última vez a alguien y de qué hablasteis.

Pantalla vacía por defecto

Vista de contacto

Filtro de la lista de contactos

La versión 0.4.0 ya está en producción y, como siempre, puedes instalarla en un servidor propio.

Que la disfrutes.

6 min de lectura
¿Por qué Laravel?
Regis Freyd

Nota: este es un artículo técnico.

Después de presentar Monica en Hacker News, recibí muchas preguntas sobre por qué había escrito la herramienta con PHP y con Laravel en particular. Me sorprendió recibir tantas preguntas sobre el tema, porque considero que el lenguaje no importa: solo cuenta lo que haces con él.

En este artículo explicaré por qué elegí PHP y Laravel y qué dificultades tuve que superar para construir la primera versión del producto. Este texto no pretende iniciar una guerra entre lenguajes.

PHP tiene una historia interesante. Muchos grandes desarrolladores web, que probablemente ya no usan PHP, aprendieron con él las bases de la programación. Era sencillísimo de usar y de empezar y, aunque no era un lenguaje elegante, abrió el camino a muchas carreras en desarrollo web. Con el tiempo PHP fue perdiendo cariño, hasta el punto de que casi daba vergüenza usarlo o incluso decir en un meetup que tu empresa lo utilizaba. Otros lenguajes, sin duda más elegantes, ganaron mucha popularidad (Python, Ruby) gracias a frameworks estupendos construidos sobre ellos. Al mismo tiempo aparecieron nuevos frameworks PHP. Symfony, por ejemplo. Pero Symfony seguía siendo difícil de aprender y de usar. Y entonces PHP murió. O eso decía la gente, ignorando al parecer que muchísimas empresas seguían usándolo y disfrutándolo. Después llegó PHP 5.5, seguido de PHP 7, y apareció un framework con un nombre raro: Laravel. Y la mentalidad cambió por completo. PHP sigue sin ser tan elegante como otros lenguajes populares, pero las cosas mejoraron mucho. Además se volvió rápido.

Aun así, PHP sigue siendo el lenguaje que la gente adora odiar, sobre todo en Hacker News. Dicen que PHP no escala. Probablemente por eso Facebook y Mailchimp, entre otros grandes nombres, usan PHP hoy, y a gran escala.

Con ese contexto en mente, ¿por qué elegí PHP y Laravel?

  • PHP es sencillo de aprender y sencillo de usar.
  • Hay muchísimos desarrolladores de PHP y, si alguien quiere trabajar conmigo en el proyecto, el grupo potencial de desarrolladores de PHP es mayor, al menos donde yo vivo, que el de desarrolladores de Ruby o Python. Además, hay mucha gente en GitHub que usa PHP y, si quería que este proyecto de código abierto tuviera recorrido, tenía que escribirlo en un lenguaje en el que personas con niveles muy distintos pudieran contribuir con facilidad.
  • Lo más importante al elegir una pila tecnológica para un proyecto nuevo es lo fácil que será mantenerlo a largo plazo. PHP es simple. Es fácil de depurar (aunque podría serlo más) y fácil de escalar (aunque ahora mismo no es mi preocupación en absoluto).
  • Laravel es con diferencia el mejor framework PHP que he usado. Hace que las cosas complejas resulten muy sencillas. Se nota que se creó para arrancar aplicaciones web muy rápido y es un verdadero placer usarlo. Pero su gran diferencia es la calidad de la documentación, comparada con otros frameworks PHP e incluso con muchos frameworks de otros lenguajes. Todo está documentado de forma excelente. No puedo insistir lo suficiente en lo importante que es una buena documentación (lo que me recuerda que debería documentar Monica todavía más).
  • Hay una enorme comunidad alrededor de PHP y de Laravel en particular: Laracasts, Forge, Envoyer y una comunidad de Slack muy activa, por citar solo algunos. Si necesitas ayuda, hay mucha gente dispuesta a echarte una mano.

¿Qué retos me encontré durante el desarrollo del proyecto?

En general no tuve demasiados retos al desarrollar la versión actual de Monica. No es una aplicación compleja y no tengo problemas de escalado, ya que la base de usuarios sigue siendo pequeña (unos 7800 usuarios en total y 4300 activos). Pero hay detalles de implementación que hice mal, no por mala práctica, sino porque mis conocimientos técnicos no daban para resolver esos problemas a corto plazo. Espero que enumerar esos errores ayude a otros a no cometerlos, o que gente amable me escriba para contarme cómo podría haberlos arreglado.

  • En versiones anteriores usaba muchos eventos y listeners. El concepto es estupendo, pero por su culpa tuve muchos problemas para hacer pruebas unitarias de las clases base. Además, cuanto más los usaba, más magia ocurría entre bastidores. Pensé que quien entrara en el código tendría dificultades para entender por qué pasaban ciertas cosas al crear un objeto, por ejemplo. En mi cabeza, los eventos y los listeners hacían la aplicación más difícil de entender, así que decidí quitarlos todos (bueno, el 99 %, todavía quedan dos listeners de los que tengo que deshacerme).
  • Al principio la base de datos estaba cifrada por completo. Por razones que todavía no entiendo, de vez en cuando había errores en el descifrado que dejaban datos que no podía recuperar. Como no quería lidiar con ese problema en esa etapa, decidí quitar el cifrado. Además, tener los datos cifrados hacía imposible cualquier ordenación o búsqueda en mis consultas, lo que habría sido problemático a la larga. Seguro que hay soluciones para ambos problemas, pero quería centrarme en crear funcionalidades nuevas en lugar de arreglar ese único asunto.
  • No escribí pruebas unitarias antes de lanzar la aplicación. Eso me dolió de verdad. No creo que haya que aspirar al 100 % de cobertura, pero al menos hay que tener alguna prueba de las funcionalidades principales de tu sitio. Si no, acabas con un montón de errores en los que no habías pensado y, mientras intentas arreglarlos, tu solución afecta a otras partes de la aplicación. Eso se convierte rápidamente en una pesadilla. Laravel hace que las pruebas unitarias sean muy fáciles: debería habérmelo tomado más en serio. A partir de la próxima versión, no se fusionará ninguna pull request si no trae pruebas unitarias y quizá incluso funcionales.

Conclusión

Estas son algunas razones por las que elegí Laravel. Como decía al principio, tu proyecto no va del lenguaje. A menos que tu proyecto consista precisamente en aprender un lenguaje nuevo, no deberías pasar semanas eligiendo lenguaje o framework. Quédate con lo que conoces y construye algo. A tus usuarios no les importa que tu código sea feo o que hayas elegido Python en lugar de Ruby.

1 min de lectura
Monica 0.3.0 con etiquetas
Regis Freyd

Solo 5 días después de la v0.2.0 y ya llega otra versión importante. Tan importante que ha merecido un número nuevo.

Cuando tienes muchos contactos en tu cuenta, ahora puedes clasificarlos con etiquetas. Las etiquetas funcionan como carpetas, salvo que un contacto puede tener varias. Así conservas la máxima flexibilidad para organizar tus contactos como quieras.

Pantalla vacía por defecto

Las etiquetas se escriben justo debajo del nombre del contacto.

Vista de contacto

Una vez que los contactos tienen etiquetas, las ves en la lista de contactos y puedes hacer clic en ellas para filtrar la lista.

Filtro de la lista de contactos

Por último, puedes borrar etiquetas desde la vista del contacto o desde un nuevo panel de ajustes creado para ello.

Ajustes

La versión 0.3.0 ya está en producción y, como siempre, puedes instalarla en un servidor propio.

Que la disfrutes.

1 min de lectura
Monica 0.2.0 con vCard
Regis Freyd

Una de las funcionalidades más pedidas es poder importar los contactos desde Google. Google permite exportar los datos de tus contactos en formato vCard, el estándar universal para intercambiar información de contacto. Monica 0.2.0 añade la posibilidad de importar tus datos desde un archivo vCard (.vcard o .vcf), para llenar tu cuenta con la mayoría de tus datos en lugar de ir añadiendo a tus amigos uno a uno.

Informe de importación por defecto

Justo después de importar tus contactos, se te redirige a un panel donde puedes ver el estado de la importación. Como algunos usuarios pueden tener miles de contactos, Monica los importa de forma asíncrona. Tendrás que esperar un poco hasta que estén todos.

Panel de importación por defecto

Puedes hacer clic en una importación concreta para ver qué ha pasado.

Panel de importación por defecto

También hemos añadido una función para restablecer tu cuenta, muy útil si importas miles de contactos y algo sale mal. Restablecer una cuenta lo borra todo, excepto a ti.

La versión 0.2.0 ya está en producción y, como siempre, puedes instalarla en un servidor propio.

Que la disfrutes.

5 min de lectura
¿Por qué código abierto? ¿Estás loco?
Regis Freyd

Mucha gente me ha escrito para preguntarme por qué Monica es de código abierto. Hay muchas razones y quiero explicarlas aquí con detalle. Publicar un producto de consumo como código abierto y al mismo tiempo intentar ganarse la vida con él no es algo tan habitual (por desgracia), y quizá esto inspire a otros a hacer lo mismo. A mí me inspiró la forma en que Sentry, GitLab y muchos otros han creado empresas alrededor de productos de código abierto y, aunque Monica todavía no genera ingresos, quería compartir lo que pienso sobre el tema.

Las ventajas de publicar tu producto como código abierto

  • Siempre quise crear un producto de código abierto. Probablemente por idealismo. Uso productos de código abierto desde que tengo memoria y quería contribuir humildemente al ecosistema a cambio. También me parecía que quedaba bien en el currículum.
  • Monica contiene muchos datos personales. Diría que esos datos son potencialmente mucho más delicados que lo que la gente publica en Facebook. Para algunos es una preocupación enorme de privacidad. Al hacer Monica de código abierto y ofrecer maneras de instalarla tú mismo en algo que posees y controlas, eres tú quien decide si quieres correr el riesgo de dejar tus datos en manos de otro o mantenerlos bajo tu control.
  • Por la naturaleza sensible de los datos que aloja Monica, y porque soy un desarrollador solo que no es tan bueno como la comunidad en conjunto, necesitaba abrir el código para que cientos de ojos lo examinaran y buscaran errores, posibles brechas y mejoras. Y encontraran mucho antes que yo lo que había que corregir o mejorar.
  • Cuando la gente tiene acceso a tu código y además usa la plataforma, te asombrará cuánto contribuye. Envían pull requests con grandes ideas y conceptos que puedes incorporar de inmediato al producto para que todos se beneficien. Es fantástico. Por supuesto, no todas las ideas son buenas y de vez en cuando rechazarás alguna pull request por distintos motivos. Pero en conjunto es extremadamente positivo y recibirás funcionalidades estupendas.
  • En una época en la que las redes sociales son tremendamente opacas sobre lo que recopilan y cómo usan los datos, la gente se preocupa cada vez más por su privacidad. Con muy buen motivo. Monica no muestra anuncios ni revende ningún dato. Pero ¿por qué creerme? Por una razón: el código fuente disponible libremente es exactamente lo que está en producción. No mantengo una segunda copia con modificaciones privadas. Por tanto, todo lo que hago es transparente y los usuarios pueden comprobar que no hago nada turbio. Se trata de transparencia y de construir una relación basada en la confianza.
  • Los desarrolladores son la parte más importante de un ecosistema. Cuando les gusta lo que haces, crean un ecosistema alrededor y cosas geniales en las que nunca habrías pensado. Es un momento realmente mágico cuando ocurre. Los desarrolladores también son influyentes poderosos y tus mejores embajadores. La gente menos técnica acude a ellos a menudo para pedir consejo sobre tecnología. Y si les gusta Monica, hablarán de ella con casi el mismo alcance que un artículo sobre las Kardashian en una revista del corazón.

Los inconvenientes de publicar tu producto como código abierto

  • Sea cual sea tu licencia, existe el riesgo de que alguien tome tu código, monte una empresa alrededor y se quede con el mercado al que querías llegar. No puedes hacer nada al respecto. Un dicho popular sostiene que una idea no vale nada, que solo cuenta la ejecución. En el caso de Monica es más que una idea: el código ya está ahí y ya es una ejecución. Cuanto más maduro sea el producto, más tentador resultará para otros robar el código. Estoy dispuesto a vivir con ello mientras la comunidad se beneficie del resultado.
  • Si creces, quizá resultes menos atractivo para los inversores de riesgo o para posibles compradores. Pero ¿sabes qué? En mi caso es una buena noticia, porque no estoy construyendo algo para ellos, sino para los usuarios. Me da igual lo que piensen los fondos de inversión sobre el producto.
  • Atender a la comunidad consume tiempo. No me malinterpretes. Me encanta interactuar con ella y me siento afortunado de que ya exista una comunidad apasionada alrededor de Monica. Pero mientras intento construir lo siguiente del producto, paso cada día mucho tiempo revisando incidencias, comprobando pull requests y respondiendo correos. Una parte importante de mi tiempo, de hecho. Insisto, no digo que sea malo. En realidad lo disfruto muchísimo. Pero ese consumo de tiempo hay que tenerlo en cuenta si decides abrir tu producto: tienes que estar dispuesto a participar y a cuidar de tu comunidad.

No se me ocurren más inconvenientes. Deberías plantearte publicar tu próxima idea como código abierto.

2 min de lectura
¿De verdad necesitas importar tus datos?
Regis Freyd

Las dos funcionalidades más pedidas en Monica hasta ahora son:

  • poder importar contactos desde una fuente externa,
  • automatizar todo lo posible el registro de las cosas relacionadas con tus relaciones.

Entiendo perfectamente por qué la gente lo pide. Monica trata precisamente de registrar y documentar las interacciones sociales con las personas que te importan. Tener que escribir todos los nombres uno a uno le parece a mucha gente una tarea pesada. Y tener que anotarlo todo a mano después de una conversación telefónica, por ejemplo, lo es todavía más.

Pero piénsalo. Monica está diseñada para ayudarte a tener mejores relaciones. Construir una relación no es algo que debamos automatizar ni volver más fácil. Construir una relación es un esfuerzo consciente. No es sencillo. Requiere algo de trabajo. Si pudieras importar 500 contactos, ¿qué te pasaría? Tendrías 500 personas en Monica, listas para ser documentadas. ¿De verdad harías el esfuerzo de rellenar toda la información de esas 500 personas? ¿Se puede siquiera ser amigo de tanta gente?

Me gusta la idea de tener que introducir mis contactos uno a uno, porque me obliga a pensar en quién es más importante para mí. Con cada persona que añado a Monica, elijo a conciencia si de algún modo merece (la palabra es demasiado fuerte, pero se entiende la idea) que haga el esfuerzo de documentar nuestra relación. Después, por cada persona que añado, tengo que rellenar toda esa información que debo buscar activamente. Diría incluso que una importación masiva, sin poder elegir, arruinaría el propósito principal de la aplicación.

Pero así veo yo el producto. Mi manera de verlo quizá no sea la tuya. De ahí la necesidad de un importador. Lo construiremos, sin duda. Pero antes de importar tus contactos, piensa en esto: ¿necesitas guardar información sobre tanta gente?

1 min de lectura
Llega la compatibilidad con varios usuarios
Regis Freyd

Monica está pensada para alojar toda la información privada sobre tus contactos. Por naturaleza, esa información es personal y confidencial. Sin embargo, hay casos en los que querrás compartirla con otra persona, tu pareja por ejemplo. Es fácil imaginar cómo Monica, en el contexto de una pareja, puede ayudarla a organizar como una sola entidad las relaciones que mantiene con sus seres queridos.

Para cubrir ese caso, presentamos la compatibilidad con varios usuarios en una misma cuenta.

Imagen que representa la compatibilidad con varios usuarios

Los usuarios se añaden por correo electrónico. Como medida de seguridad, la persona a la que invites tendrá que introducir, al registrarse, el correo del usuario que la ha invitado.

La gestión de usuarios está en la pestaña Ajustes de tu cuenta.

Suscripciones

Es la primera funcionalidad de pago. El plan de pago se llama Chandler y cuesta 10 USD al mes. Este plan solo está disponible en https://monicahq.com y no afecta a las instalaciones autoalojadas. Si alojas Monica en tu propio servidor, tienes acceso gratuito a las funcionalidades de pago.

Echa un vistazo a la pull request para saber más.

Artículos 31 a 39 de 39