2

Muito legal esse compilado de informações, parabéns!

Seria interessante fazer uma análise só das postagens patrocinadas, e como ainda falta funcionalidades básicas para este recurso, pode até ajudar na implementação delas.

Carregando publicação patrocinada...
2

Valeeeu Filipe! Boa ideia, e fui atrás dela agora.

Os patrocinados não estavam no meu acervo, porque a listagem /contents filtra type: 'content' e anúncio tem tipo próprio. Mas o endpoint /api/v1/sponsored-beta é público, então dava para pegar.

Só que ele devolve seleção aleatória em vez de listagem paginada. Fui chamando repetidamente e juntando os ids únicos até parar de aparecer coisa nova, o que aconteceu por volta da décima oitava rodada. O conjunto inteiro hoje é este:

  • 120 publicações patrocinadas
  • 79 anunciantes distintos

Dá para ver bem para que o recurso está servindo olhando quem usa. O @JuanMathewsRebelloSantos anuncia treinamento e voucher de certificação, e é quem mais usa, com 14. O @filipedeschamps divulga os próprios vídeos e o repositório do algoritmo do fogo do Doom, com 8. O @JeielMiranda leva o RegataOS, distro brasileira, e uma plataforma de threat intelligence. O @gmasson tem um gerador de favicon gratuito. O @LuC45m4Th3u5 tem uma API de recomendação. O @obrenoalvim, um projeto de memória para IA no GitHub.

Ou seja, não é um espaço de propaganda genérica. É gente da casa mostrando o que faz.

E isso me leva ao achado que eu não esperava: todos os 79 anunciantes também publicam post normal aqui. Nenhum é anunciante puro que chegou de fora só para comprar espaço.

E eles não são membros quaisquer. A média de tabcoins por post desse grupo é 8,04, contra 4,63 do site. Quem anuncia é gente que já contribui acima da média.

Os destinos mais comuns são github.com, youtube.com e linkedin.com, com cinco anúncios apontando de volta para o próprio TabNews.

Agora sobre a sua observação de que faltam funcionalidades básicas. Pelo endpoint, dá para saber o que está sendo anunciado e por quem, e nada além disso: ele devolve seis campos, sem data, sem valor, sem período, sem desempenho.

Mas antes de sugerir o que implementar eu fui olhar o repositório, e a história é mais interessante do que "falta tudo". Boa parte já está construída, só não conversa entre si.

O orçamento existe. A migration 1721243449839_create-table-ad-tabcash-operations.js cria a tabela ad_tabcash_operations com o enum ['budget', 'daily_debit']. Então o sistema já sabe quanto TabCash cada anúncio recebeu e quanto foi debitado por dia, o que dá custo e tempo no ar.

A audiência também existe. O models/umami.js já busca pageviews, visitors e visits por caminho, e o models/analytics.js expõe isso internamente como getStatsByPath.

O que realmente não existe em lugar nenhum é o clique no anúncio. E impressão do anúncio também não, porque anúncio exibido na lateral de outra página não gera visita própria, então o Umami não pega.

Então a lista do que falta fica bem mais curta do que parecia: contar clique, contar impressão, e devolver isso junto com o gasto para quem pagou. Os dois últimos pedaços já estão em casa.

Uma coisa que me chamou atenção no modelo de cobrança: sendo daily_debit, você paga por dia no ar, e não por quem viu. Isso torna a falta de retorno mais custosa ainda, porque o anunciante não consegue nem estimar se o dia valeu. Provavelmente é parte da explicação para a concentração: 79 anunciantes para 120 anúncios significa que a maioria fez um e parou.

Obrigado pela sugestão, foi a que mais rendeu coisa nova até agora.

2

eu não esperava: todos os 79 anunciantes também publicam post normal aqui

Isso é o esperado/normal, porque para criar um post patrocinado vc precisa gastar 100 TabCash.

Mas pra ganhar TabCash, vc precisa votar nos posts dos outros (para cada voto dado vc ganha 1 TabCash).

Mas pra votar, vc precisa de TabCoins (para cada voto dado vc gasta 2 TabCoins).

Mas pra ganhar TabCoin, vc precisa postar algo e ganhar votos positivos nesses posts.

Ou seja, da forma como funciona hoje, é impossível criar um post patrocinado sem antes participar do site. E tem que ser uma participação minimamente significativa (200 TabCoins para conseguir os 100 TabCash necessários), o que explica todos os anunciantes terem tal participação. Não é coincidência, e sim um pré-requisito :-)

1

Você tá certo, e é melhor que isso, está tudo no código, com o número que você citou batendo certinho.

Em models/content.js, a função updateTabCashBalance tem const initialTabCash = 100, que sai do seu user:tabcash e entra como ad:budget da publicação. Se não tiver saldo, a mensagem de erro é literalmente "Você precisa de pelo menos 100 TabCash para realizar esta ação". E em models/balance.js, o rateContent tem tabCoinsToDebitFromUser = -2 junto de tabCashToCreditToUser = 1. Então os seus 200 TabCoins para chegar aos 100 TabCash fecham exatamente.

E tem um elo que você não citou e que fecha melhor ainda o seu raciocínio. Dá para pensar que o reward diário seria uma saída, ganhar TabCoin sem publicar nada e sair votando. Não é. Em models/reward.js, o getContentAgeFactor retorna 0 para quem não tem publicação, e o calcReward zera a partir daí. Quem nunca publicou não recebe reward nenhum. Não sobra torneira.

Ou seja, eu apresentei como achado uma coisa que é regra do jogo. Obrigado por apontar, e aproveito para trocar a frase: o certo é dizer que 100% dos anunciantes publicam porque o sistema não permite outra coisa.

O que continua me interessando é o que a regra não explica. O pré-requisito exige participação, mas exige o mínimo: 100 votos dados. Ele não exige que você seja bom. Só que esses 79 têm média de 8,04 tabcoins por publicação, contra 4,63 do site inteiro.

A regra explica por que todos estão presentes. Não explica por que estão acima da média. Aí já é outra coisa, e essa eu ainda não sei medir.

Valeeeu pela correção!