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.

Feed RSS

Página 4 de 5

2 min de leitura
Chegaram os campos de contato múltiplos
Regis Freyd

Algumas pessoas têm um endereço físico e uma conta no Twitter. Outras têm vários endereços, nenhum Twitter e uma conta no Quora. É difícil prever todos os casos, mas queremos deixar cada um organizar seus contatos do jeito que quiser.

Um endereço físico, uma conta no Twitter... chamamos todas essas formas de falar com alguém de campo de contato.

A partir de agora, você pode adicionar quantos campos de contato quiser por contato. Antes você só tinha 5 campos predefinidos.

A ficha de um contato com o e-mail, o endereço, como vocês se conheceram e as informações de trabalho na lateral.

Cada campo de contato tem um tipo: pode ser um e-mail, uma conta do Facebook, um número de fax. Cada conta já vem com 6 tipos genéricos de campo de contato:

  • E-mail
  • Número de telefone
  • Facebook
  • Twitter
  • Whatsapp
  • Telegram

Você pode acrescentar ou remover tipos de campo de contato na sua conta quando quiser, e definir os nomes como preferir, na nova aba Personalização dentro de Configurações.

Cada tipo de campo de contato também pode ter um protocolo associado. O protocolo diz o que o navegador deve fazer quando você clica em um campo de contato. Para um número de telefone, por exemplo, o protocolo tel: manda o navegador abrir o programa que você usa no computador para fazer ligações.

A tela de configurações com os tipos de campos de contato, cada um com o protocolo usado pelos seus links.

A API foi atualizada para dar suporte a esses dois novos conceitos (campos de contato e tipos de campo de contato).

Também reorganizamos um pouco a barra lateral da ficha do contato. As informações sobre cônjuges e filhos agora ficam no topo, pois acredito que sejam bem mais importantes do que saber o endereço do contato, por exemplo.

Essas mudanças estão na versão 1.1.0, que já está em produção e, como sempre, você pode instalá-la em um servidor seu.

Aproveite.

4 min de leitura
Monica 1.0.0 com API, apresentações e contatos falecidos
Regis Freyd

O Monica finalmente está pronto para a v1.0.0.

Aqui no Monica tentamos seguir a abordagem SemVer. Mudar o número de versão principal indica grandes mudanças na API. Por isso estou bastante animado em anunciar o lançamento da v1.0.0. Ela acrescenta muitas funcionalidades e servirá de base para todas as coisas legais que pretendo lançar nos próximos meses. Vamos falar primeiro das funcionalidades e depois das mudanças técnicas desta versão.

A API

O Monica finalmente tem uma API. Nem tudo está disponível por ela agora, mas a maior parte dos dados sobre contatos está. Uma versão futura trará também as configurações e os dados da conta. Meu objetivo é que tudo esteja disponível pela API. Damos suporte a OAuth 2.0 e a tokens pessoais. Nos bastidores, o Laravel Passport cuida de tudo o que envolve OAuth.

Nada ajuda mais um desenvolvedor a entrar em um projeto do que uma boa documentação. Por isso também lançamos um novo portal de documentação que tenta ser o mais completo possível. Em cada página indicamos ainda a data da última atualização, para você saber o quanto ela está fresca.

A página inicial da documentação da API da Monica.

Agora cabe aos desenvolvedores serem criativos com os dados do Monica e fazerem coisas incríveis com eles. Do nosso lado, estamos trabalhando no primeiro aplicativo móvel oficial do Monica, tanto para Apple quanto para Android, mas você terá mais detalhes ainda este ano.

Como você conheceu alguém

O propósito do Monica é ajudar todo mundo a lembrar informações importantes sobre as pessoas de quem gosta, de forma privada e só para os seus olhos. Às vezes, quando você tem muitos contatos, é difícil lembrar como e onde os conheceu. Por isso agora você pode indicar como conheceu alguém ou se foi apresentado por outro contato. Pode até pedir para ser lembrado do aniversário desse encontro, se quiser.

O painel de como vocês se conheceram: quem apresentou, quando e onde.

Marcar um contato como falecido

Às vezes a vida é injusta e as pessoas morrem. Acrescentamos a possibilidade de marcar um contato como falecido e indicar uma data opcional para esse acontecimento triste. Além disso, você pode ser lembrado dessa data, se preferir. Quando um contato está marcado como falecido, aparece um pequeno ⚰ ao lado do nome dele em todo o aplicativo.

Um contato marcado como falecido, com um caixão ao lado do nome e a data na ficha.

Uma tela de novo contato mais rápida

Nosso objetivo é ajudar você a fazer o que quer o mais rápido possível. Por isso acrescentamos um pequeno botão na tela de novo contato que salva o contato atual e já permite adicionar outro em seguida. Isso economiza segundos preciosos.

Grandes mudanças nos bastidores

Para a v1.0.0, atualizamos a base de código para o Laravel 5.5, a fim de aproveitar na nossa API a ótima funcionalidade de Resources introduzida nessa versão.

Graças ao @mauricew, também substituímos o antigo sistema de build do front-end baseado em Gulp e Bower pelo mix, o sistema de build que já vem com o Laravel. Conseguimos remover muitas dependências, limpar o código e, principalmente, garantir que não haverá conflitos de arquivos CSS e JS nos nossos pull requests no futuro.

Para encerrar

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

A v1.0.0 tem literalmente milhares de linhas de código novas. É fruto de uma comunidade saudável. No plano pessoal, me sinto muito grato por o Monica ajudar tanta gente. O feedback constante de vocês me ajuda enormemente a continuar trabalhando o máximo que posso neste produto. Os próximos meses serão bem intensos: muitas funcionalidades novas, um aplicativo móvel e outras surpresas. O futuro será brilhante para nossa comunidade.

Aproveite.

2 min de leitura
Balanço, setembro de 2017
Regis Freyd

Andei um pouco menos ativo na comunicação nos últimos 40 dias. Também estou mais lento para responder issues e integrar pull requests. Não é uma situação de que eu goste, mas será difícil mudá-la no próximo mês. Depois vai melhorar.

O que diabos estou fazendo agora

Trabalho no projeto o máximo que consigo. Cada hora livre que tenho é investida no Monica. Para tranquilizar todas as pessoas que me escrevem sobre meu comprometimento com o projeto e sobre o receio de que ele morra em breve: continuo tão motivado quanto antes e isso segue sendo uma prioridade para mim.

No momento, porém, estou trabalhando na API e garantindo que ela funcione como deveria. Também estou construindo a documentação em volta dela, porque a documentação precisa ser excelente para que as pessoas usem a API. Por essas razões, e também porque isto ainda é um projeto paralelo até eu encontrar formas de torná-lo meu trabalho em tempo integral, não quero ser distraído agora por feedback, bugs ou novas funcionalidades. Assim que a API estiver pronta, volto a responder à comunidade. Infelizmente, simplesmente não tenho tempo físico para fazer tudo o que gostaria, e preciso me concentrar de forma bastante rigorosa para conseguir entregar as coisas.

O que vem a seguir

Nos próximos dias, uma primeira versão da API será publicada, com novos métodos adicionados depois.

Com a API pronta, precisamos dar atenção à ideia de atividades feitas com seus contatos. Também devemos tornar o painel mais útil e mudar o diário para que ele se torne algo realmente proveitoso. Além disso, precisamos implementar o protocolo CardDAV, embora eu ainda não saiba o quanto ele vai se integrar bem à pilha atual.

Tenho certeza de que este projeto tem um potencial enorme. Se você já é usuário, continuo em busca de feedback e depoimentos. Obrigado pela ajuda.

2 min de leitura
Monica 0.6.3 com melhor gestão de contatos e suporte a Markdown
Regis Freyd

A funcionalidade mais pedida no Monica (desde a última) era poder indicar um contato existente como cônjuge ou como filho. Com a 0.6.3, isso agora é possível.

Como funciona

Ao adicionar um cônjuge ou um filho, você passa a ter acesso a duas novidades:

  • Você pode criar um contato parcial ou um contato de verdade ao adicionar essa pessoa. Um contato parcial é o jeito antigo de fazer as coisas: esses contatos não aparecem na lista de contatos e você não pode adicionar lembretes ou notas específicas para eles. Um contato "de verdade" cria de fato um novo registro para essa pessoa, e você poderá acrescentar os filhos ou cônjuges dela.

O formulário para adicionar a companheira ou o companheiro de um contato, com a opção de criar uma ficha própria para essa pessoa.

  • Em vez de criar um contato novo, você pode simplesmente vincular um contato existente como filho ou cônjuge deste contato.

O mesmo formulário na outra aba, ligando um contato existente como companheiro.

Essa foi a maior mudança na base de código até hoje e a que levou mais tempo. Para quem hospeda o Monica por conta própria, tenha cuidado ao atualizar sua instância: faça backup do banco de dados antes de fazer a atualização.

Outras mudanças importantes desta versão

  • Para quem gosta de poligamia, é possível ter mais de um cônjuge por contato.
  • Novas traduções: italiano e alemão. Obrigado à comunidade.
  • Suporte a Markdown nas notas e nas ligações registradas. Isso permite usar listas, por exemplo.
  • Agora oferecemos suporte a todas as moedas do mundo.
  • Muitas correções de bugs, além de algumas correções de segurança.
  • Começamos a usar o Tachyons como novo framework CSS. Ele vai substituir gradualmente o Bootstrap.

Para encerrar

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

Aproveite.

1 min de leitura
50 000 contatos
Regis Freyd

Acabamos de alcançar uma marca incrível.

Balões diante de uma parede, com a legenda: 50 000 contatos são gerenciados com a Monica.

É 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.

O rodapé da Monica, com o número da versão e um aviso de que há uma versão nova disponível.

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.

Os resultados de busca que aparecem enquanto você digita, com os contatos cujo nome combina.

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.

O painel de ligações de um contato, vazio, oferecendo registrar uma ligação.

A janela para registrar uma ligação, perguntando sobre o que vocês conversaram.

Uma ligação registrada na ficha de um contato, com a data e o que foi dito.

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.

A tela de gerenciamento de tags da Monica, vazia, explicando que as tags funcionam como pastas.

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

Tags sendo digitadas na ficha de um contato, logo abaixo do nome.

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

A lista de contatos filtrada pelos dois contatos com a tag família.

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

As configurações de tags, com cada tag e o número de contatos que a usam.

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.

A tela de importação da Monica antes de qualquer importação, oferecendo trazer contatos de um arquivo vCard.

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á.

Uma lista de importações de vCard anteriores, cada uma com o número de contatos importados e ignorados.

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

Um relatório de importação marcando cada contato do arquivo como importado ou ignorado.

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.