Executando verificação de segurança...
18

Novas melhorias: Mais contexto nas notificações por Email e outras 8 melhorias 🎉

Mais uma semana se passou desde a última publicação sobre as melhorias no TabNews e ao longo desse tempo 9 novas implementações foram feitas!

Acho que dessa vez foi recorde de melhorias numa única semana 🤝

1) Mais contexto nas notificações por Email

Antes, quando alguém respondia alguma publicação sua, você recebia um email com o seguinte:

Notificação por email sem contexto

Apesar de que isso ajuda muito a saber que uma publicação sua possui um novo comentário, não era possível por um email assim saber qual publicação que recebeu este comentário. Mas agora é possível e os novos emails são enviados com o contexto:

Notificação por email com contexto

Junto disso foi possível disponibilizar mais um endpoint na API chamado /root que quando usado contra uma publicação filho, irá devolver qual a publicação raiz (o nó máximo na árvore de conteúdos). Este endpoint é na verdade um "sub-endpoint" dos endpoints do content. Vamos usar como exemplo a página abaixo de uma resposta:

🌐 https://www.tabnews.com.br/filipedeschamps/d61c8e4d-a1ea-4183-8629-8c9f35bdeb81

Assim como todas em as páginas que são conteúdos aqui no TabNews, para acessar esses dados pela API, basta concatenar /api/v1/contents no início deste endereço:

🤖 https://www.tabnews.com.br/api/v1/contents/filipedeschamps/d61c8e4d-a1ea-4183-8629-8c9f35bdeb81

E para saber qual o conteúdo raiz a partir dessa resposta, basta concatenar /root ao final:

🤖 https://www.tabnews.com.br/api/v1/contents/filipedeschamps/d61c8e4d-a1ea-4183-8629-8c9f35bdeb81/root

Isto faz um par ótimo com outro endpoint no mesmo nível chamado /children que, a partir de qualquer conteúdo, é listado todos os conteúdos filho:

🤖 https://www.tabnews.com.br/api/v1/contents/filipedeschamps/d61c8e4d-a1ea-4183-8629-8c9f35bdeb81/children

Esta implementação foi realizada por mim e as informações podem ser conferidas por essa Issue* 🎉

2) Destacar Item Ativo no Menu

Quando você estava navegando nas listas de conteúdos do TabNews, não dava para saber se você estava navegando nos itens Relevantes, nem Recentes, pois o menu principal não destacava em qual seção você estava. Mas agora a seção é destacada, inclusive destacando a seção Relevantes que antes tinha o nome de TabNews:

Itens no menu sendo destacados com um sublinhado

Esta implementação foi realizada por gpaiva00 e as informações podem ser conferidas por essa Issue* 🎉

3) Remoção de múltiplas idas ao banco na consulta de contents

Quanto mais vocês me conhecerem, mais vão perceber que primeiro eu gosto de fazer algo sem otimização para me focar primeiro em trazer a informação correta (ou o comportamento correto) com a menor complexidade possível e, depois deste estágio e agora munido com informações reais sobre como isto está se comportando em produção, tentar trazer alguma otimização de performance. Por trás disso há na verdade vários fatores psicológicos que contribuem muito com a sua empolgação ao desenvolver um projeto grande, e que podemos conversar em outro momento.

Então para formar o resultado do endpoint abaixo, que lista os últimos 30 conteúdos mais relevantes, antes para cada conteúdo desta lista era feito uma ida adicional ao Banco de Dados para calcular quantas respostas este conteúdo possuía:

🤖 https://www.tabnews.com.br/api/v1/contents/

Ou seja, na lista padrão com 30 itens, era feito 1 consulta para receber de volta a lista dos itens, e em seguida mais 30 consultas de forma sequencial, item a item, para preencher o campo children_deep_count (dado que uma resposta pode ter outra resposta e isso numa profundidade infinita).

Mas agora isso não acontece mais e já na primeira consulta este valor é calculado e retornado. Esta otimização teve o seguinte impacto no ambiente de Homologação e Produção:

Homologação (Antes)Homologação (Depois)Produção (Antes)Produção (Depois)
Homologação (antes)Homologação (depois)Produção (antes)Produção (depois)

O maior impacto acabou acontecendo no ambiente de Homologação, pois a camada da Aplicação e Banco de Dados estão muito mais distantes do que em Produção. De qualquer forma, o retorno do endpoint de Produção se demonstrou muito mais consistente.

Esta implementação foi realizada por mim e as informações podem ser conferidas por essa Issue* 🎉

4) Endpoint /parent e mais otimização em /contents

Durante esta semana também fizemos uma breaking change na API que resultou num ganho de performance ainda maior para todos os endpoints de conteúdo. Nesta breaking change, nós removemos do objeto content as seguintes propriedades:

  • parent_title
  • parent_slug
  • parent_username

Mantendo apenas o parent_id, e agora para consultar o conteúdo pai a partir de um conteúdo filho, basta usar a sub-rota /parent, da exata mesma forma que o exemplo acima sobre o /root, por exemplo:

Remover as propriedades parent_title, parent_slug e parent_username fez evitarmos dois JOINs na query que montavam o objeto content e isso teve um impacto ótimo na velocidade de retorno do endpoint. Veja abaixo o gráfico do Percentil 50 da rota /api/v1/contents que agora o topo do gráfico é menor que a base anterior dele:

Otimização do endpoint /contents

Mas o mais legal é que, com a junção desta feature de buscar de forma separada todo o conteúdo de um parent com a feature de buscar todo o conteúdo de um root, isso trouxe a possibilidade de criar as páginas exclusivas das respostas com muito mais contexto, tanto mostrando um pedaço da resposta que está logo acima no parent, quanto até destacar se o conteúdo root foi deletado.

Então como era antes uma página de resposta:

Página de resposta (antes)

Como está agora:

Página de resposta (depois)

Esta implementação foi realizada por mim e as informações podem ser conferidas por essa Issue* 🎉

Agora ao clicar nos itens do menu principal, a navegação também está no modo instantâneo, assim como na lista principal de conteúdos. Olha que massa:

Abertura instantânea dos itens no menu

A usabilidade com esse recurso atinge outro nível, chega a ser um absurdo de delicinha e tudo também foi aplicado nos itens do menu exclusivo de quando a pessoa está logada.

Esta implementação foi realizada por luantoningalvan que recebeu contribuição de aprendendofelipe e as informações podem ser conferidas por essa Issue* 🎉

6) Breaking Change: strategy de best para relevant

Antes, o endpoint /api/v1/contents aceitava a propriedade strategy com o valor best para retornar os últimos itens mais relevantes. Agora esta estratégia foi renomeada para relevant, pois iremos utilizar o nome best para outro tipo de estratégia:

EstratégiaDescrição
strategy=bestRemovido até que a nova estratégia seja desenvolvida.
strategy=relevantOrdena pelos conteúdos mais relevantes.
strategy=newOrdena dos conteúdos mais novos para os mais antigos.
strategy=oldOrdena dos conteúdos mais antigos para os mais novos.

Esta implementação foi realizada por mim e as informações podem ser conferidas por essa Issue* 🎉

7) Mais espaço em Mobile

Agora, quando você acessa o TabNews através do celular, todos os espaços foram reajustados para que você consiga ver mais informações ao mesmo tempo. Todas as páginas receberam este upgrade, que fica muito mais visível na árvore de respostas.

No exemplo abaixo, estamos vendo a simulação de um iPhone SE (que é um dos menores que existem desta marca) lendo uma resposta no nível 5 de profundidade. Note que na versão nova coube 2 respostas completas, incluindo ainda o botão da resposta que está acima.

AntesDepois
imageimage

Isso não resolve todos os problemas relacionados a respostas muito profundas, e para estes casos estamos trabalhando em outras alternativas 🤝

Esta implementação foi realizada por mim e as informações podem ser conferidas por essa Issue* 🎉

8) Melhor visualização de dados no /status

Esta foi uma tarefa completamente fora do previsto da atual Milestone, mas que vai ajudar a acompanhar melhor o gráfico na página /status.

Antes a query que montava esta página pegava os dados desde o primeiro dia da existência deles e isto acabava dando uma visão ruim dado ao pico de registros do lançamento da API. Fora que o gráfico entre cadastros de usuários e criação de conteúdos estavam dessincronizados, pois havia mais dias de cadastros de usuários do que de conteúdos (dado que essa feature veio depois). Agora para todos os gráficos estamos mostrando os últimos 2 meses.

AntesDepois
/status (antes)/status (depois)

Esta implementação foi realizada por mim e as informações podem ser conferidas por essa Issue* 🎉

Agora temos um novo componente de Footer (rodapé) em que podemos colocar links importantes, incluindo mover alguns links do menu principal ali para baixo, como o link da página de status.

Footer do TabNews

Esse PR também voltou a incluir o brand TabNews no menu principal quando visto em telas grandes:

Brand TabNews no menu

Esta implementação foi realizada por lucasratske e aprendendofelipe e as informações podem ser conferidas por essa Issue* 🎉

Conclusão

Estou muito feliz com o avanço desta última semana, vários ajustes relacionados a performance e usabilidade e ainda mais feliz por saber que estamos quase no final da Milestone! Isto significa que estamos próximos de lançar o TabNews e conseguir voltar com o canal no YouTube e também próximo de começar o curso 🤝 😍


⚠️ O repositório Open Source do TabNews ainda está em Modo Privado. Caso queira receber um convite para participar, leia esta publicação.

6

Melhoria #1: o contexto nas notificações de email melhorou muito a experiência de usuário.

Melhoria #9: eu não dizer o porquê, mas eu gostei do footer na página. Parece que o site se profissionalizou de alguma forma.

5

Concordo 100%! Parece ser um sinal que o meu cérebro espera que exista, assim como ele espera que exista um Header (cabeçalho). E agora parece que dá para saber melhor que a publicação chegou ao fim.

4

Concordo totalmente com sua opinião sobre as duas mudanças. Inclusive, sobre a melhoria #9, é um lugar bem mais adequado para o Status, agora que temos mais de uma estratégia de ordenação no topo da página, além de possibilitar o link de outras páginas relevantes.

3

Nossa que sensacional!!

Olhando o botão Contribuir do rodapé acabei pensando em uma forma das pessoas conseguirem fazer doações para ajudar nos custos de operação da plataforma, exemplo banco de dados, vercel e outros custos que são necessários investimentos.

Podendo até ter opções da pessoa ajudar com botões personalizados você contribuiu com 3 meses de banco de dados etc...

Outro ponto que podemos criar é a pessoa que contribuir ganhar um selinho ao lado do nome do usuário. Isso pode insentivar as pessoas.

2

Tá sensacional, gente! Que empolgação massa. ⚡️ Falando nisso, fiquei interessado no seu comentário inicial da melhoria #3. Num projeto grande, é bem melhor fazer primeiro o básico e depois ir aprimorando. Lembro que até num vídeo você disse isso: "coloca o projeto em produção o quanto antes".

2