Novas melhorias: RSS e mais 7 melhorias 🎉
Mais uma semana se passou desde a última publicação sobre as melhorias no TabNews e ao longo desse tempo 8 novas implementações foram feitas!
1) RSS das publicações mais recentes
Agora o TabNews possui oficialmente seu primeiro RSS e que pode ser acessado pelo seguinte endereço: https://www.tabnews.com.br/recentes/rss
Destaco que é o "primeiro", pois a idéia é que no futuro cada página importante possa ter seu próprio RSS, basta concatenar ao final da URL o sufixo /rss
. Então hoje temos a página de Recentes e o seu RSS da seguinte forma:
E no futuro poderemos ter o RSS de cada usuário, por exemplo:
- https://www.tabnews.com.br/filipedeschamps
- https://www.tabnews.com.br/filipedeschamps/rss (não implementado)
De qualquer forma, caso você queira fazer uma integração de sistema a sistema, isso já pode ser feito pela API e no caso dos conteúdos, basta concatenar o prefixo /api/v1/contents/
, por exemplo:
- https://www.tabnews.com.br/filipedeschamps
- https://www.tabnews.com.br/api/v1/contents/filipedeschamps
Esta implementação foi realizada por coffee-is-power e as informações podem ser conferidas por essa Issue* 🎉
2) Páginas abrindo ainda mais rápidas
Uma publicação dentro do TabNews pode possuir um corpo com Markdown e sua sintaxe para criar títulos, imagens, tabelas, etc. Isso são informações ótimas para estilizar e formatar uma publicação, mas ruins para se colocar no campo description
das tags meta
que são enviadas no cabeçalho da página.
Então nós utilizávamos uma biblioteca chamada remove-markdown
que simplesmente recebia um conteúdo com a sintaxe de Markdown e devolvia um texto puro, porém esta biblioteca possuía um bug onde se uma publicação continha muitos espaços em branco em seguida, a demora de processamento era exponencial, ao ponto de travar a página por completo (incluindo, travar os servidores da Vercel).
Encucado com a situação, o aprendendofelipe identificou onde exatamente acontecia esse problema, fez um PR na biblioteca original e trouxe de forma antecipada esse fix para o TabNews. As informações podem ser conferidas por essa Issue*, mas vou antecipar uma:
A imagem abaixo foi criada por aprendendofelipe onde na esquerda mostra a performance da Regex original que fazia essa transformação e demorava 4643 ms (4.6 segundos) e após o fix, a Regex nem aparece mais no gráfico e sendo processada em 0.1ms (0.0001 segundos):
Função original | Nova função |
---|---|
3) Editor em Português e com menu de Ajuda
Agora o editor que utilizamos está em Português e possui um ícone de Ajuda que mostra um resumo sobre a sintaxe do Markdown e algumas Teclas de Atalho.
Esta implementação foi feita por mim e as informações podem ser conferidas por essa Issue* 🎉
4) Layout com erro ao cancelar publicação
O gatodeoculos reportou um bug no layout no momento que você cria uma publicação e cancela ela. Ele inclusive gravou um GIF mostrando o bug, olha que massa:
Mas agora isso não acontece mais e a implementação desse ajuste foi realizada por aprendendofelipe e as informações podem ser conferidas por essa Issue* 🎉
5) Typo na lista blockedUsernames
do model user
Por questões de segurança, nós bloqueamos de forma antecipada alguns usernames
, como moderador
, suporte
, sysadmin
e tudo isto está dentro de uma lista chamada blockedUsernames
.
Mas esta lista também bloqueia nomes que possam ser úteis para URLs no TabNews, como por exemplo nós bloqueamos o username contato
, pois no futuro poderemos querer utilizar a URL https://www.tabnews.com.br/contato
. Isso porque cada usuário que se cadastrou possui sua própria URL e ela está disponível logo na raiz do site. Por exemplo, o meu username é filipedeschamps
e automaticamente tenho para mim a URL https://www.tabnews.com.br/filipedeschamps.
Este é o problema de alguém registrar um username como contato
, sobre
, docs
e nessa lista nós especulamos tudo que foi possível especular, mas ela continha um typo, um erro de ortografia numa das palavras:
Esta implementação foi realizada por kaique-soares e as informações podem ser conferidas por essa Issue* 🎉
6) CORS
habilitado para todos os endpoints da API
O TabNews deve ser um porto seguro para desenvolvedores testarem suas habilidades com programação e isso inclui ter liberdade e flexibilidade de utilizar a nossa API em qualquer tipo de client
. Um destes clients é o Navegador Web
, que interpreta e utiliza os cabeçalhos relacionados a CORS
para decidir se irá continuar com a request ou não e até então o TabNews não estava autorizando requisições externas (vindo de outras páginas).
Então não somente habilitamos CORS
para todos os endpoints da API para que outros desenvolvedores possam criar sites e páginas que se integrem com a API do TabNews, como também implementamos o que se chama de Security Headers e isso traz uma camada adicional de proteção para quem acessa o TabNews.
Os Security Headers ajudam a prevenir certos ataques como XSS
e também instruir o navegador a bloquear de forma permanente recursos como câmera, microfone e a geolocalização. Então mesmo que alguém consiga injetar aqui um código que abra sua webcam, por exemplo, o Navegador automaticamente irá bloquear esse comando.
Bom, voltando ao CORS
, caso queira fazer um teste rápido usando JavaScript, basta utilizar o código abaixo para retornar as 3 últimas publicações feitas no TabNews:
const contentsResponse = await fetch('https://www.tabnews.com.br/api/v1/contents?strategy=new&per_page=3');
const contentsBody = await contentsResponse.json();
console.log(JSON.stringify(contentsBody, null, 2));
Esta implementação foi realizada por mim e as informações podem ser conferidas por essa Issue* 🎉
7) Remover configuração experimental nftTracing
Para ler as migrations através do file system e disponibilizar elas pelo endpoint /api/v1/migrations
, nós utilizamos no passado uma opção experimental chamada nftTracing
. Tudo funcionou perfeitamente, mas nas últimas versões do Next.js, esta feature deixou de ser experimental e foi renomeada para outputFileTracing
, mas nós não nos atualizamos sobre isso e começou a causar o warning
abaixo toda vez que o servidor do Next.js era inicializado:
Esta mensagem inclusive aparecia duas vezes ao rodar o comando npm test
e lotava a tela de ruído, mas agora não mais, pois o aprendendofelipe fez uma pesquisa sobre todo histórico do que aconteceu com esse parâmetro, fez o ajuste para o warning
sumir, e as informações podem ser conferidas por essa Issue* 🎉
8) Altera ganho de tabcoins
de 5
para 2
a cada publicação
Para uma economia mais saudável, alteramos o ganho por publicações de 5 tabcoins
para 2 tabcoins
. Sem isso, caso alguém publique um conteúdo sem valor concreto, era necessário que 10 tabcoins
fossem utilizadas para zerar o ganho de 5 tabcoins
que esse usuário teve, dado que para cada qualificação são utilizadas 2 tabcoins
. Agora é necessário apenas 4 tabcoins
.
Fora isso, ao deletar uma publicação que possui um número positivo de tabcoins
, este valor será descontado do autor.
Mexer na economia de um ecossistema é algo difícil, e seguiremos com os testes para entender o que irá acontecer, mas continuaremos atentos e super abertos a qualquer retorno ou sugestão. Nada do que foi feito está escrito em pedra e tudo isto está sendo feito de forma open source no repositório. Eu pessoalmente suplico que todos participem com suas opiniões, principalmente nestes pontos delicados.
Esta implementação foi realizada por mim e as informações podem ser conferidas por essa Issue* 🎉
Conclusão
Eu não tinha pensado que o trabalho que estamos fazendo no TabNews poderia refletir em outras bibliotecas open source que estão disponíveis por aí, mas aconteceu! Então um parabéns extra ao aprendendofelipe por melhorar o ecossistema open source do mundo ao enviar um PR contra o remove-markdown
para uma necessidade do TabNews! 🎉 🎉 🎉
Tenham todos uma excelente semana!
⚠️ O repositório Open Source do TabNews ainda está em Modo Privado. Caso queira receber um convite para participar, leia esta publicação.