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

Gostei que usam Next.js, assim como o TabNews, e que dão feedback dos votos que já enviamos.

Salvam assim no localStorage:

userState: {"upvotes":["id1", "id2", "id3"],"downvotes":["id4"]}

Para o contexto do TabNews, para dar o feedback, talvez faça sentido salvar como:

votes: { "id1": 2, "id2": 1, "id3": 3, "id4": -1 }

Carregando publicação patrocinada...
4

Interessantíssimo! Eu imagino que eles fazem pelo LocalStorage porque o site não requer login para interagir, mas de fato ficou muito legal o feedback!

Em paralelo, estou pensando duas vezes em limitar a quantidade de upvotes e downvotes, digo, limitar sempre para 1. Acho que um usuário inicialmente deveria estar limitado a 1 voto, mas seria interessante mais para frente usuários mais avançados poderem comprar features que habilitem poder votar mais vezes, até novamente atingir um limite máximo de não sei, 5 votos.

Mas com isso tem a questão de não conseguir dar o feedback exato de 1 voto que o 50hacks faz, pois a pessoa pode votar para cima e para baixo múltiplas vezes numa mesma publicação. E isso me deixou pensando que possivelmente não poderemos fazer o cancelamento de um voto, pois isso pode ser usado para manipular publicações, onde um grupo de pessoas adiciona votos numa publicação, e depois que ela é derrubada pela gravidade do tempo, os votos são cancelados para receber de volta esse crédito e usar em uma outra publicação. Ou então se cancelar, o crédito ao usuário não volta.

2

Onde salvar

Mesmo salvando no backend, seria bom manter isso em localStorage ou IndexedDb pelo mesmo motivo que salvamos o user.

Limite de votos

Quando o cálculo de TabCoins recebidas por conteúdo postado estiver considerando a TabExp (ou Karma ou outro nome escolhido para a reputação dos usuários), acho que esse limite não será necessário, pois só quem realmente criou conteúdo de valor concreto terá TabCoins para votar.

Cancelar votos

Poderia ser implementado apenas para os casos de cliques acidentais, assim só seria permitido recuperar as TabCoins utilizadas em no máximo alguns segundos.

Por exemplo, se o usuário clicar em up e logo em seguida em down, o segundo voto anula o primeiro e devolve as TabCoins.

Outra alternativa é mostrar por alguns segundos uma growl notification para dar a oportunidade de cancelar o voto. Esse mesmo padrão pode ser utilizado para todo tipo de arrependimento que for implementado futuramente.

Em qualquer caso, é bom isso ficar registrado nos eventos.