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.
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.
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:
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.
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 :-)
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!