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

🎥 Porque é quase impossível criar uma rede social com vídeos - Daykeeper

Atualmente, sou um estudante de 16 anos, e desde janeiro de 2024, venho desenvolvendo sozinho o DayKeeper, uma rede social com uma proposta diferente: transformar cada dia em uma memória significativa. Inspirada em plataformas como o Twitter e Instagram, os usuários do DayKeeper podem fazer postagens diárias com textos, imagens e vídeos.

Ao longo desse tempo, a ideia passou por várias transformações. Muita coisa mudou: a visão do projeto amadureceu, funcionalidades foram redesenhadas, e o código... bom, o código foi quase todo reescrito várias vezes. Um dos maiores desafios até agora? Suportar uploads de vídeos de forma escalável, segura e barata.

O Ambiente do DayKeeper

Para entender o problema, é preciso antes conhecer o ambiente do projeto:

  • Banco de dados: MongoDB
  • Armazenamento de arquivos: AWS S3 (imagens e vídeos)
  • Moderação de conteúdo: Amazon Rekognition
  • Notificações de verificação de vídeo: Amazon SNS (Simple Notification Service)

Claro, além de diversos outras coisas, como nodemailer para emails, passport para login com terceiros, firebase para notificações no aplicativo mobile, etc.

Para entender o processo que a requisição faz quando o usuário vai criar um post, podemos ver essa rota:

router.post(
  "/create",
  checkTokenMW,
  multer(multerConfig("both")).array("files", 5),
  handleMulterError,
  createMediaDocsMW,
  detectInappropriateFileMW,
  postValidation,
  createPost
)

Ou de forma mais explicada:

  • checkTokenMW: Garante que o usuário esteja autenticado.
  • multer(...): Middleware para upload de arquivos (imagens ou vídeos).
  • handleMulterError: Trata erros de upload.
  • createMediaDocsMW: Cria documentos na collection medias, separando os arquivos do próprio post.
  • detectInappropriateFileMW: Usa o Rekognition para moderar os arquivos. Imagens são moderadas instantaneamente; vídeos entram em análise assíncrona.
  • postValidation: Valida dados do post.
  • createPost: Cria o post com referências aos arquivos armazenados.

O Problema

1. Estrutura de armazenamento

Originalmente, imagens poderiam estar embutidas nos próprios objetos dos posts. Porém, vídeos exigem um processo assíncrono de moderação. Isso levou à criação de uma estrutura única: todos os arquivos (imagens e vídeos) são agora armazenados em uma collection separada chamada medias, com campos como status: 'pending', public, ou rejected.

2. Tempo de verificação

Enquanto imagens são analisadas em milissegundos, vídeos levam minutos para serem verificados. O sistema envia o vídeo para o Rekognition, aguarda o processamento e, via SNS, recebe um aviso quando a verificação termina. Durante esse tempo, o post permanece pendente.

3. Custos

Esse é o ponto crítico.

  • Imagens:
    • Custo: U$0.001 por imagem verificada
    • 1.000 imagens/dia ≈ U$1/dia = U$30/mês
  • Vídeos:
    • Custo: U$0.10 por minuto
    • 1.000 vídeos de 5 minutos ≈ U$500/mês
    • Sem contar múltiplos vídeos por post
  • Armazenamento no S3:
    • U$0.023 por GB/mês
    • PNG 1080x1080 ≈ 500 KB – 5 MB
    • Vídeo 1080p (5 Mbps) ≈ 1.5 GB
    • U$100/mês em S3 dá para:
    • ~4.4 milhões de imagens PNG
    • ~2.400 vídeos de 5 minutos

Resultado: Ter vídeos em uma rede social pode custar dezenas ou centenas de vezes mais do que imagens.

Possíveis Soluções

1. Ter fundos ($$$)

A solução mais óbvia, mas menos acessível para quem está começando. Se você tem investidores ou orçamento alto, pode pagar moderação completa de vídeo sem problemas. No meu caso, um estudante de 16 anos sem capital, isso não é viável.

2. Imposição de limites

Estabelecer limites rigorosos pode ser necessário:

  • Vídeos de no máximo 3 minutos
  • Limite de tamanho (ex: 700 MB)
  • Compressão automática de todos os arquivos
  • Limitação de uploads diários por usuário

Com essas restrições, é possível reduzir o custo por vídeo e armazenar mais conteúdo no mesmo espaço, tornando a operação mais acessível. Claro que, com isso, podem vir dificuldades, como uma piora na experiência do usuário, então é necessário o cuidado ao fazer essa mudança.

3. Sistema de moderação por confiança (Trust Factor)

Atualmente no DayKeeper, nem todos os arquivos passam obrigatoriamente pelo Rekognition.

  • Trust Factor: Usuários novos têm pontuação baixa e todos seus arquivos são verificados. Com o tempo, se seguirem as diretrizes e não forem banidos, ganham confiança e seus arquivos podem ser postados sem análise automática.

  • Sistema de Reports: Qualquer arquivo suspeito pode ser denunciado. Se for reportado diversas vezes, é analisado novamente, mesmo que tenha passado automaticamente.

  • Administração manual: Administradores podem ver denúncias, banir usuários e moderar conteúdo manualmente.

Junto disso, uma moderação aleatória de arquivos não verificados também irá acontecer constantemente no background, garantindo uma maior segurança no aplicativo.
Também sabemos que um usuário malicioso poderia tentar burlar o sistema de thumbnails (citado acima) então, caso um post receba uma certa quantidade de reports, uma verificação completa do vídeo será feita no background e, caso seja comprovado que o vídeo contém conteúdo impróprio, um banimento será aplicado automaticamente.

4. Verificação parcial de vídeos

Analisar todos os frames de um vídeo é custoso e, em muitos casos, desnecessário. Em vez disso, o DayKeeper verifica apenas alguns frames:

  • 2 frames no início
  • 2 no meio
  • 2 no final
  • 2 frames aleatórios

Isso representa cerca de 1 frame a cada 18 segundos em um vídeo de 3 minutos. Caso haja denúncias, o vídeo é re-analisado por completo em segundo plano.
Esses valores também podem variar dependendo do Trust Factor do usuário.

Também utilizar Queue com Redis e BullMQ

Quando fazemos a verificação do vídeo de forma que a aplicação irá criar e verificar thumbnails, precisamos saber que esse processo pode ser demorado e, em um caso com milhares de requisições simultâneas, pode sobrecarregar o servidor.
Junto do sistema de thumbnails, o Daykeeper utiliza uma moderation Queue para criar uma fila de tarefas para a moderação dos vídeos, deixando a aplicação escalável e segura.

5. Compressão de vídeos

Uma das maneiras mais claras de diminuir o custo de armazenamento dos vídeos a fazer com que todos os arquivos passem por um processo de compressão antes de serem enviados ao servidor.
Esse processo permite que vídeos maiores ocupem uma quantidade menor de espaço sem prejudicar sua qualidade, diminuindo muito o custo de armazenamento.

A solução do Daykeeper

A solução do Daykeeper é uma junção do sistema de moderação por confiançao com sistema de administradores e reports, sistema de verificação parcial de vídeos com a fila de moderação e a compressão de arquivos, tudo isso junto da imposição de limites claros para os usuários, como limite de stories, posts e, principalmente, arquivos que um usuário pode postar por dia.

A imposição de limites no Daykeeper também pode abrir espaço para uma inscrição premium dentro do aplicativo. Por mais que essa possa parecer uma prática ruim, ainda em uma rede social, acho mais plausível que outros meios, como venda de informações de usuários ou quantidade excessiva de anúncios, e se feita de maneira que não atrapalhe de forma significativa a experiência de usuários gratuitos, pode ser uma boa opção para a monetização do aplicativo.

Conclusão

Construir uma rede social com suporte a vídeos não é impossível, mas é um desafio real, especialmente para desenvolvedores independentes. Custos, tempo de moderação e complexidade técnica são obstáculos difíceis de ignorar.

No DayKeeper, estamos conseguindo contornar essas limitações com:

  • Compressão de arquivos
  • Verificação parcial de vídeos
  • Sistema de confiança e denúncias
  • Moderação humana

Sendo criativo nas soluções e pensando de forma que o aplicativo seja escalável, mesmo um projeto solo pode atingir um nível profissional. A chave está em equilibrar experiência do usuário, segurança e custos, tudo isso enquanto você constrói algo que acredita.

Caso você queira ver mais sobre o Daykeeper, você pode acessar o código aqui ou o nosso website.

Carregando publicação patrocinada...
1

É, o custo com streaming a partir de qualquer cloud tende a ficar bem elevado. Melhor avaliar um servidor local, mas nem imagino a dor de cabeça em gerenciar isso sozinho. Mas também é algo que gera um aprendizado gigantesco.

2

Já pensei em um servidor local lá no início, só pelo fato der ser muito legal ter um servidor funcionando na sua casa kkkkk

Mas a dificuldade e custo pra montar, criar, gerenciar, lidar com erros... me rendi ao cloud por enquanto

1

Cara, primeiro muda o nome da sua rede, porque esse nome está muito genérico e já existe uma porção de coisas com ele — música, cantor, páginas, sites, tudo. Isso pode causar confusão.

Segundo, usa bibliotecas locais para análise de conteúdo adulto em vídeos e imagens. Tem várias que rodam direto no navegador, são fáceis de implementar e funcionam bem com boas práticas.

No futuro, se a rede crescer, aí dá para pensar em algo mais interno e avançado.

Também é importante criar um termo de uso bem claro, explicando as penalidades para quem publicar conteúdo adulto ou envolvendo menores de idade, por exemplo.

Sua iniciativa é boa, só precisa ajustar esses pontos para ficar mais profissional e seguro.

1
1

Sobre o nome, pesquisei na época e pesquisei de novo hoje, não tem nada muito relevante de nome 'Daykeeper'. O domínio não está registrado, tem uma música de 2008 e alguns websites, como um jornal de astrologia e um site de gerenciamento de time que foi criado poucos meses atrás se não me engano

Sobre as bibliotecas locais, comecei com o Rekognition por causa da facilidade de usar com o bucket S3 e o SNS da AWS, mas to vendo outras possibilidades agora se eu for mudar o S3 para serviços da Cloudflare. Se tiver alguma recomendação, vou ouvir!

Sobre o termo de uso, como ainda estou desenvolvendo o Daykeeper, muita coisa muda do dia para a noite. Por exemplo, esse sistema de trust factor não existia até uma semana atrás, mas no futuro ainda vou criar termos de uso bem definidos

Obrigado de verdade pela ajuda! É muito bom escutar outras opiniões!

1

Eu nao iria pra nuvem pelo alto custo... É sempre uma caixa de surpresa... Iria pro bom e velho on premises... pra reduzir custos, melhor vc montar sua infra no começo. Depois q crescer, quem sabe a nuvem?

1

Nuvem acabou sendo a melhor opção pra mim por enquanto pela facilidade e escalabilidade, mas talvez um dia eu ainda monte um servidor local
É um dos grandes objetivos que eu tenho com esse projeto

1

Bacana a sua ideia, a forma como planeja fazer e todo o resto. Não tenho críticas quanto a parte da programação ou a você, por que eu mesmo já pensei em criar.

A minha crítica é em relação a mais uma rede social.

  • Por que?
  • Para o que?
  • Qual a diferença para as atuais?
  • Por que eu deveria parar de usar as atuais e passar a usar esta?
  • Já não temos redes sociais demais?

Eu parei de usar o Facebook já gem alguns anos, só uso atualmente o Instagram, mas não sou ativo.
É cansativo, mas faz sentido para algumas pessoas.
Mesmo tendo falado tudo isto, eu já pensei em criar uma rede social, talvez no futuro eu crie, mas para mim seria diferente por ser algo que eu criei, aí não seria cansativo para mim. Kkk

Tudo o que escrevi aqui é minha opinião, por favor não me levem a mal.

1

Respondi algumas dessas perguntas de forma um pouco mais abrangente lá no website do Daykeeper, mas tenho um Business Model, por enquanto privado, que responde essas perguntas com mais clareza

De forma geral e bem resumida, o Daykeeper é um calendário em formato de rede social. Com as novas gerações, conteúdos rápidos, vício em redes sociais, etc... muitas pessoas esquecem de realmente 'viver' a própria vida, ou seja, não criam memórias, não se lembram do que aconteceu no dia anterior, e tudo isso pode ser impactante.
O Daykeeper veio como uma forma de recriar o diário de papel tradicional. Utilizei métodos famosos como o Bullet Journal, Diário de Gratitude, entre outros dentro do Daykeeper e coloquei em um ambiente de uma rede social, muito mais familiar, interessante que um diário de papel.
A parte da rede social te dá um estímulo de realmente postar, sabendo que outras pessoas podem ver, te dando engajamento, etc... junto disso, você irá preservar memórias da sua vida, com vídeos, fotos, localização...

Se você quiser dar um aolhada, tenho um pequeno documento falando sobre o Daykeeper que usei para apresentar o projeto em um evento poucos meses atras

1

O maior problema creio eu seja você não considerar outros providers de serviços. A sua stack atualmente é:

MongoDB, Inc. - MongoDB
Amazon.com, Inc. - S3
Amazon.com, Inc. - Rekognition
Amazon.com, Inc. - SNS
Google LLC - Firebase

Os custos de cada provedor de serviço não reflete necessáriamente o custo do serviço em si, mas a valor praticado por aquela empresa. Antes de pensar em otimizações do seu código, pense em otimizar a sua stack considerando e optando os caminhos mais em conta. Você já considerou fazer um self hosting? usar outro provider de cloud? outro provider de S3 compatible api? outro provider de moderação de conteúdo? hostear os próprios modelos de IA de moderação de conteúdo?

Se vc não sabe por onde começar vamos a uma listinha de alguns que eu já usei:
GCP, Digital Ocean, Google Vision, Bunny.net, Backblaze B2 S3 combatible + Cloudflare DNS, Cloudflare Pages, Cloudflare S3 compatible... e por ai vai, temos infinitas opções no mercado, cabe a você identificar quais fazem mais sentido pro seu negócio

Considere tudo isso e faça uma tabela de alternativas, considerando no mínimo 3 empresas que disponibilizam cada um dos serviços consumidos pelo seu site, os preços praticados, vantagens, desvantagens, a expectativa de custo, segurança, escalabilidade etc..

Pra 16 anos vc tá indo MUITO BEM irmão, continue assim! mas com grandes poderes vc já sabe né? reforçe a segurança do seu app ao máximo e tenha uma cobertura de testes decente e bem feita pois lidar com dados sensíveis é uma grande responsabilidade 👍

1

Obrigado irmão! Me ajudou muito seu comentário

Eu estou pesquisando outras opções, principalmente os serviços da Cloudflare que o uriel falou e acho que vou seguir com eles

Sobre o Self Hosting eu não conheço muito, mas sempre achei que só seria viável com um investimento inicial bem maior e a manutenção / setup seria bem mais complicado. Sobre o provider de moderação, acabei ficando com o Rekognition pela facilidade de utiliza-lo com o S3, mas sempre achei que ele poderia ser muito "poderoso" ou muito caro pra o que quero usar (poderoso pelo fato dele ter capacidade de reconhecer rostos, etc... muito mais do que preciso).
Sobre hostear o próprio modelo de IA, admito que nunca pensei nisso, mas pode servir, vou tentar pesquisar sobre e ver se vale a pena, se tiver alguma dica vou querer saber kkkk

Sobre as 3 empresas, eu precisaria utilizar os serviços da Cloudflare e outro serviço de moderação, que pode ser o Rekognition com um bucket S3 temporário para guardar arquivos em moderação ou outro mais eficiente

Vou pesquisar mais sobre e ver o que posso fazer. Se tiver qualquer dica vou ficar muito feliz em saber! Obrigado pela ajuda!

1
1

Nunca tinha pensado em usar o serviços da Cloudflare, tinha dado uma olhada antes, mas acabei ficando com o S3 pelo Rekognition, fama, etc.

O R2 ou o cloudflare stream/images ficaria muito mais barato e teria outras vantagens também, como compressão automática, latência global, etc.. O problema seria o Rekognition para a moderação

O que posso fazer é usar o S3 como banco temporário para guardar arquivos em moderação e depois encaminha-los para o cloudflare stream/image, assim posso continuar com o Rekognition, mas não sei se seria bom

de qualquer forma obrigado pela dica! Vou pesquisar mais e acho que vou usar os serviços da cloudflare mesmo, ruim vai ser reescrever o código de novo kkkkk