A Monica v3 chega antes do fim de 2026. Reconstruída do zero. Continua de código aberto. Veja o que vem por aí
Monica

Blog

Notas sobre construir a Monica, manter dados pessoais privados e a pequena mecânica de continuar em contato.

Página 4 de 4

1 min de leitura
50 000 contatos
Regis Freyd

Acabamos de alcançar uma marca incrível.

rodapé

É impressionante e é uma marca que eu queria dividir com vocês. Os usuários já cadastraram mais de 50 000 contatos no Monica, e o número cresce todos os dias. Isso não inclui as instâncias que foram baixadas e instaladas em servidores próprios.

Numa nota pessoal, fico admirado com a comunidade em torno do projeto. No GitHub, recebemos mais de 200 pull requests da comunidade e as pessoas parecem compartilhar o projeto pela internet inteira para espalhar a novidade.

Mal posso esperar para ver onde estaremos daqui a um ano. Obrigado a todos pela confiança.

2 min de leitura
Monica 0.5.0 com aviso de versões e busca
Regis Freyd

Se você instala o Monica em um servidor seu, é bem provável que queira ser avisado quando uma nova versão sair. Com o Monica 0.5.0, é exatamente isso que você tem.

Como funciona

Resumindo, sua instância do Monica envia um ping diário para https://version.monicahq.com. O ping contém três informações:

  • um UUID: o identificador único e anônimo da sua instância,
  • a versão atual da sua instância,
  • o número de contatos da sua instância.

A última informação serve para saber o tamanho das instâncias de quem baixa o Monica. Preciso dessa informação (e só dela) para seguir em frente sabendo melhor como as pessoas usam o Monica. Além disso, não há como saber quem você é: o UUID é aleatório, único e anônimo.

O código de https://version.monicahq.com é de código aberto e fica no GitHub, como tudo o que fazemos.

Como resposta a essa chamada, você recebe um JSON com:

  • um booleano indicando se há uma nova versão disponível,
  • qual é a versão mais recente,
  • todas as notas de versão de cada lançamento feito desde a versão do ping,
  • o número de versões lançadas desde a versão do ping.

Essas informações são usadas na interface. No rodapé, um novo link aparece quando há uma versão disponível. Ao clicar nele, abre-se uma janela com as notas da nova versão.

rodapé

Como desativar esse recurso

Todo recurso que muda o funcionamento fundamental do Monica pode ser desativado, e este não é diferente. Se você não quiser enviar nenhuma informação para https://version.monicahq.com, basta acrescentar o seguinte ao seu arquivo .env:

  • CHECK_VERSION=false

E pronto. Nenhuma informação sairá do seu servidor. A desvantagem é que você não será avisado automaticamente quando um novo lançamento estiver disponível.

Buscar seus contatos

Agora você pode buscar seus contatos com um novo campo de busca no cabeçalho. A busca considera as seguintes informações:

  • Nome e sobrenome
  • E-mail
  • Rua
  • Cidade
  • CEP
  • Estado
  • Preferências alimentares
  • Cargo
  • Empresa

As buscas também devem ser bem rápidas. Estamos muito animados com esse recurso.

(rodapé

Para encerrar

A versão 0.5.0 já está em produção e, como sempre, você pode instalá-la em um servidor seu.

Aproveite.

1 min de leitura
Monica 0.4.0 com ligações telefônicas
Regis Freyd

Registrar o que você disse às pessoas de quem gosta é importante. Já era possível guardar notas sobre seus contatos. Agora você também pode registrar uma ligação telefônica, o que é muito prático para saber quando ligou para alguém pela última vez e sobre o que vocês conversaram.

Tela vazia padrão

Visão do contato

Filtro da lista de contatos

A versão 0.4.0 já está em produção e, como sempre, você pode instalá-la em um servidor seu.

Aproveite.

6 min de leitura
Por que Laravel?
Regis Freyd

Observação: este é um post técnico.

Depois de lançar o Monica no Hacker News, recebi muitas perguntas sobre por que escolhi escrever a ferramenta em PHP e, em particular, com Laravel. Fiquei surpreso com tantas perguntas sobre o assunto, porque considero que a linguagem não importa: só conta o que você faz com ela.

Neste post vou contar por que escolhi PHP e Laravel e quais dificuldades precisei superar para construir a primeira versão do produto. O texto não pretende começar uma guerra entre linguagens.

O PHP tem uma história interessante. Muitos ótimos desenvolvedores web, que provavelmente não usam mais PHP, aprenderam com ele as bases da programação. Era simples de usar e de começar e, embora não fosse uma linguagem elegante, abriu caminho para carreiras no desenvolvimento web. Com o tempo, o PHP passou a ser menos amado, a ponto de ser quase vergonhoso usá-lo ou até dizer em um meetup que sua empresa o utilizava. Outras linguagens, sem dúvida mais elegantes, ganharam muita popularidade (Python, Ruby) graças a frameworks maravilhosos construídos sobre elas. Ao mesmo tempo, surgiram novos frameworks PHP. O Symfony, por exemplo. Mas o Symfony ainda era difícil de aprender e de usar. E então o PHP morreu. Ou pelo menos era o que diziam, ignorando aparentemente que muita gente do mundo dos negócios continuava usando e gostando dele. Depois veio o PHP 5.5, seguido do PHP 7, e apareceu um framework com um nome estranho: Laravel. E a mentalidade das pessoas mudou completamente. O PHP ainda não é tão elegante quanto outras linguagens populares, mas as coisas melhoraram muito. E ele também ficou rápido.

Mesmo assim, o PHP continua sendo a linguagem que as pessoas adoram odiar, especialmente no Hacker News. Dizem que o PHP não escala. Provavelmente é por isso que o Facebook e o Mailchimp, entre outros grandes nomes, usam PHP hoje, em grande escala.

Com esse contexto em mente, por que escolhi PHP e Laravel?

  • O PHP é simples de aprender e simples de usar.
  • Existem muitos desenvolvedores PHP e, se as pessoas quiserem trabalhar comigo no projeto, o grupo potencial de desenvolvedores PHP é maior, pelo menos onde eu moro, do que o de Ruby ou Python. Além disso, há muita gente no GitHub usando PHP e, se eu quisesse que este projeto de código aberto ganhasse tração, tinha que escrevê-lo em uma linguagem em que pessoas de diferentes níveis pudessem contribuir com facilidade.
  • O mais importante ao escolher uma pilha tecnológica para um projeto novo é o quanto será fácil mantê-lo no longo prazo. O PHP é simples. É fácil de depurar (embora pudesse ser melhor) e fácil de escalar (embora isso não seja de forma alguma minha preocupação agora).
  • O Laravel é de longe o melhor framework PHP que já usei. Ele torna simples fazer coisas complexas. Fica claro que o framework foi criado para iniciar novas aplicações web bem rápido, e é um verdadeiro prazer usá-lo. Mas o grande diferencial do Laravel é a qualidade da documentação, comparada à de outros frameworks PHP e até de muitos frameworks em outras linguagens. Tudo é extremamente bem documentado. Não consigo enfatizar o suficiente como uma boa documentação é importante (o que me lembra que eu deveria documentar ainda mais o Monica).
  • Há uma enorme comunidade em torno do PHP e do Laravel em particular: Laracasts, Forge, Envoyer e uma comunidade forte no Slack, para citar algumas. Se você precisar de ajuda, há muita gente pronta para dar uma mão.

Quais desafios enfrentei durante o desenvolvimento deste projeto?

No geral não tive tantos desafios ao desenvolver a versão atual do Monica. Não é uma aplicação complexa e não tenho problemas de escala, já que a base de usuários ainda é pequena (cerca de 7800 usuários no total e 4300 ativos). Mas há detalhes de implementação que fiz errado, não por má prática, mas porque minhas habilidades técnicas não eram suficientes para resolver esses problemas no curto prazo. Espero que listar esses erros ajude outras pessoas a não cometê-los, ou que gente gentil me escreva contando como eu poderia tê-los corrigido.

  • Em versões anteriores, eu usava muitos eventos e listeners. O conceito é ótimo, mas tive muitos problemas para testar unitariamente as classes base por causa deles. Além disso, quanto mais os usava, mais mágica acontecia nos bastidores. Achei que quem entrasse no código teria dificuldade para entender por que certas coisas aconteciam quando um objeto era criado, por exemplo. Na minha cabeça, eventos e listeners tornavam a aplicação mais difícil de entender, então decidi remover todos (bem, 99% deles, ainda há dois listeners dos quais preciso me livrar).
  • No começo, o banco de dados era inteiramente criptografado. Por razões que ainda não entendi, de vez em quando havia bugs no processo de descriptografia, resultando em dados que eu não conseguia recuperar. Como não queria lidar com esse problema naquele momento, decidi remover a criptografia. Além disso, dados criptografados tornavam impossível qualquer ordenação ou busca nas consultas, o que teria sido problemático no longo prazo. Tenho certeza de que há soluções para esses dois problemas, mas eu queria focar em criar novas funcionalidades em vez de resolver esse único ponto.
  • Não escrevi testes unitários antes de lançar a aplicação. Isso me custou caro. Não acho que devamos buscar 100% de cobertura, mas ao menos ter algum tipo de teste para as funcionalidades principais do site. Caso contrário, você acaba com uma tonelada de bugs em que não havia pensado e, enquanto tenta corrigi-los, outras partes da aplicação são afetadas pela correção. Isso vira um pesadelo rapidinho. O Laravel torna os testes unitários muito fáceis: eu deveria ter levado isso mais a sério. A partir da próxima versão, nenhum pull request será integrado sem testes unitários e talvez até testes funcionais.

Conclusão

Estas são algumas razões pelas quais escolhi o Laravel. Como disse no começo do post, seu projeto não é sobre a linguagem. A menos que o objetivo do projeto seja aprender uma linguagem nova, você não deveria passar semanas escolhendo linguagem ou framework. Fique com o que você conhece e faça alguma coisa. Seus usuários não vão se importar se o código é feio ou se você escolheu Python em vez de Ruby.

1 min de leitura
Monica 0.3.0 com tags
Regis Freyd

Apenas 5 dias depois da v0.2.0 e já vem outra versão grande. Grande a ponto de merecer um número novo.

Quando você tem muitos contatos na conta, agora pode organizá-los com tags. As tags funcionam como pastas, só que um contato pode ter várias. Assim você mantém a máxima flexibilidade para organizar os contatos do jeito que quiser.

Tela vazia padrão

As tags são digitadas logo abaixo do nome do contato.

Visão do contato

Depois que os contatos têm tags, você as vê na lista de contatos e pode clicar nelas para filtrar a lista.

Filtro da lista de contatos

Por fim, você pode excluir tags na visão do contato ou em um novo painel de configurações criado para isso.

Configurações

A versão 0.3.0 já está em produção e, como sempre, você pode instalá-la em um servidor seu.

Aproveite.

1 min de leitura
Monica 0.2.0 com vCard
Regis Freyd

Uma das funcionalidades mais pedidas é poder importar contatos do Google. O Google permite exportar os dados dos seus contatos no formato vCard, o padrão universal de troca de informações de contato. O Monica 0.2.0 acrescenta a importação dos seus dados a partir de um arquivo vCard (.vcard ou .vcf), para preencher sua conta com a maior parte dos seus dados em vez de adicionar seus amigos um a um.

Relatório de importação padrão

Logo depois da importação, você é levado a um painel onde acompanha o andamento do processo. Como os usuários podem ter milhares de contatos, o Monica importa tudo de forma assíncrona. Será preciso esperar um pouco até que todos os contatos estejam lá.

Painel de importação padrão

Você pode clicar em uma importação específica para ver o que aconteceu.

Painel de importação padrão

Também acrescentamos uma função para redefinir sua conta, bem útil se você importar milhares de contatos e algo der errado. Redefinir uma conta apaga tudo, menos você.

A versão 0.2.0 já está em produção e, como sempre, você pode instalá-la em um servidor seu.

Aproveite.

5 min de leitura
Por que código aberto? Você é louco?
Regis Freyd

Muita gente me escreveu perguntando por que o Monica é de código aberto. Há muitas razões e quero detalhá-las aqui. Abrir o código de um produto de consumo e, ao mesmo tempo, tentar ganhar dinheiro com ele não é algo tão comum (infelizmente), e talvez isso inspire outras pessoas a fazerem o mesmo. Eu mesmo me inspirei na forma como a Sentry, o GitLab e muitos outros construíram empresas em torno de produtos de código aberto e, mesmo que o Monica ainda não gere receita, queria compartilhar o que penso sobre o assunto.

As vantagens de abrir o código do seu produto

  • Sempre quis criar um produto de código aberto. Provavelmente por idealismo. Uso produtos de código aberto desde que me lembro e queria, humildemente, retribuir ao ecossistema. Também achava que ficava bem no currículo.
  • O Monica guarda muitos dados pessoais. Eu diria que esses dados são potencialmente bem mais delicados do que o que as pessoas publicam no Facebook. Para alguns, é uma enorme questão de privacidade. Ao tornar o Monica de código aberto e oferecer formas de instalá-lo em algo que você possui e controla, cabe a você decidir se quer correr o risco de deixar seus dados com outra pessoa ou mantê-los sob seu controle.
  • Pela natureza sensível dos dados guardados pelo Monica, e por eu ser um desenvolvedor sozinho, que não é tão bom quanto a comunidade como um todo, precisava abrir o código para que centenas de olhos o examinassem em busca de bugs, possíveis falhas e melhorias. E encontrassem muito mais rápido do que eu o que deveria ser corrigido ou aprimorado.
  • Quando as pessoas têm acesso ao seu código e se tornam usuárias da plataforma, você vai se espantar com o quanto elas contribuem. Elas enviam pull requests com ótimas ideias e conceitos, que você pode incorporar imediatamente ao produto para que todos aproveitem. É incrível. Claro, nem toda ideia é boa e de vez em quando você vai recusar um pull request, por diversos motivos. Mas no conjunto é extremamente positivo e você recebe funcionalidades excelentes.
  • Numa época em que as redes sociais são extremamente opacas sobre o que coletam e como usam os dados, as pessoas se preocupam cada vez mais com a privacidade. Por um bom motivo. O Monica não exibe anúncios e não revende dado nenhum. Mas por que acreditar em mim? Por uma razão: o código fonte disponível livremente é exatamente o que está em produção. Não mantenho um segundo repositório com modificações privadas. Portanto, tudo o que faço é transparente e os usuários podem conferir que não faço nada escuso. É uma questão de transparência e de criar uma relação baseada em confiança.
  • Os desenvolvedores são a parte mais importante de um ecossistema. Quando eles gostam do que você faz, criam um ecossistema em volta e coisas legais nas quais você jamais teria pensado. É um momento mágico quando isso acontece. Eles também são influenciadores poderosos e seus melhores embaixadores. Quem não é da área recorre a eles com frequência para pedir conselhos de tecnologia. E se gostarem do Monica, vão falar dele com quase o mesmo alcance de uma matéria sobre as Kardashian numa revista de celebridades.

As desvantagens de abrir o código do seu produto

  • Seja qual for a sua licença, existe o risco de alguém pegar seu código, montar uma empresa em volta dele e ficar com o mercado que você queria atender. Não há nada a fazer. Um ditado conhecido diz que uma ideia não vale nada, que só a execução importa. No caso do Monica é mais do que uma ideia: o código já está lá e já é uma execução. Quanto mais maduro o produto ficar, mais tentador será para outras pessoas roubar o código. Estou disposto a conviver com isso, desde que a comunidade se beneficie do resultado.
  • Se você crescer, pode se tornar menos atraente para investidores de risco ou para possíveis compradores. Mas quer saber? No meu caso isso é uma boa notícia, porque não estou construindo algo para eles, estou construindo algo para os usuários. Não me importa o que os fundos vão pensar do produto.
  • Cuidar da comunidade toma tempo. Não me entenda mal. Adoro interagir com ela e me sinto muito grato por já existir uma comunidade apaixonada em torno do Monica. Mas enquanto tento construir o próximo passo do produto, passo bastante tempo todos os dias verificando issues, revisando pull requests e respondendo e-mails. Uma parte significativa do meu tempo, na verdade. De novo, não estou dizendo que é ruim. Na verdade gosto muito. Mas esse consumo de tempo é algo a considerar se você decidir abrir seu produto: é preciso estar disposto a participar e a cuidar da sua comunidade.

Não consigo pensar em outras desvantagens. Você deveria considerar abrir o código da sua próxima ideia.

2 min de leitura
Você precisa mesmo importar seus dados?
Regis Freyd

As duas funcionalidades mais pedidas no Monica até agora são:

  • poder importar contatos de uma fonte externa,
  • automatizar ao máximo o registro das coisas ligadas aos seus relacionamentos.

Eu entendo perfeitamente por que as pessoas pedem isso. O Monica existe justamente para registrar e documentar as interações sociais com as pessoas de quem você gosta. Digitar todos os nomes um a um parece, para muita gente, uma tarefa penosa. E ter que anotar tudo à mão depois de uma conversa por telefone, por exemplo, é ainda mais penoso.

Mas pense nisto. O Monica foi feito para ajudar você a ter relacionamentos melhores. Construir um relacionamento não é algo que devêssemos automatizar nem tornar mais fácil. Construir um relacionamento é um esforço consciente. Não é simples. Dá um pouco de trabalho. Se você pudesse importar 500 contatos, o que isso provocaria? Você teria 500 pessoas no Monica, prontas para serem documentadas. Você realmente faria o esforço de preencher todas as informações dessas 500 pessoas? É possível ser amigo de tanta gente assim?

Gosto da ideia de ter que cadastrar meus contatos um a um, porque isso me obriga a pensar em quem é mais importante para mim. A cada pessoa que acrescento ao Monica, escolho conscientemente se ela de alguma forma merece (a palavra é forte demais, mas você entendeu a ideia) que eu faça o esforço de documentar nossa relação. Depois, para cada pessoa acrescentada, preciso preencher todas aquelas informações que tenho que ir buscar ativamente. Eu diria até que uma importação em massa, sem a possibilidade de escolher, arruinaria o propósito principal do aplicativo.

Mas essa é a minha visão pessoal do produto. O meu jeito de ver talvez não seja o seu. Daí a necessidade de um importador. Vamos construí-lo, com certeza. Mas antes de importar seus contatos, pense nisto: você precisa guardar informações sobre tanta gente?

2 min de leitura
Chegou o suporte a vários usuários
Regis Freyd

O Monica foi feito para guardar todas as informações privadas sobre seus contatos. Por natureza, essas informações são pessoais e confidenciais. Ainda assim, há casos em que você vai querer compartilhá-las com outra pessoa, seu cônjuge por exemplo. É fácil imaginar como o Monica, no contexto de um casal, pode ajudar esse casal a organizar, como uma única entidade, as relações que mantém com as pessoas queridas.

Para atender a esse caso, estamos lançando o suporte a vários usuários em uma única conta.

Imagem representando o suporte a vários usuários

Os usuários são adicionados por e-mail. Como medida de segurança, a pessoa que você convidar terá que informar, no momento do cadastro, o e-mail do usuário que a convidou.

O gerenciamento de usuários fica na aba Configurações da sua conta.

Assinaturas

Esta é a primeira funcionalidade paga. O plano pago se chama Chandler e custa 10 USD por mês. Ele está disponível apenas em https://monicahq.com e não afeta as instalações hospedadas por você. Se você hospeda o Monica no seu próprio servidor, tem acesso gratuito às funcionalidades pagas.

Dê uma olhada no pull request para saber mais.

Artigos 31 a 39 de 39