Sobre Cinema, LLM's e Cloudflare

Sobre Cinema, LLM's e Cloudflare

Desenvolvimento
Filmle
LLM
Relato

Introdução: A ideia.

Desde que eu consigo me lembrar cinema foi algo que fez parte da minha vida. Não o cinema como um local físico, 13 anos morando no interior em uma família de baixa renda não davam muitas oportunidades para um rapaz latino americano assistir filmes em uma telona. Até meus 17 havia ido ao cinema apenas umas quatro vezes, não que isso fosse um problema. Sempre fui bem servido de cinema, das noites em claro vendo filmes no SBT, dos passeios na locadora, rebobinando fitas de VHS ou assistindo os cristalinos filmes em DVD, navegando pelo catálago da locadora do Paulo Coelho e por fim se rendendo ao domínio dos streamings e letterboxd.

No fim das contas o acesso limitado a cinema só alimentou a minha fome, quando tive acesso e telona o resultado não foi diferente: Devorei tudo.

Muitos dos meus gostos influenciaram minha entrada na programação, com o cinema não foi diferente, Whoami de 2014 é uma pedrada. Um Cyber Thriller Alemão que eu tenho medo de assistir de novo e me decepcionar, mas a saga Benjamin, um hacker recluso que se envolve numa conspiração internacional teve tanto impacto sobre meu gosto por programação quanto qualquer controlador Yaskawa.

E em algum momento eu fiz a pergunta:

Porque eu não fiz um projeto envolvendo filmes até hoje?

Não queria me comprometer de mais com algo que ocupasse o tempo que eu tenho alocado em Outros projetos mas isso não quer dizer que a coisa não precisava ser mal feita, apenas precisava ser simples.

Sendo minimalista (até demais)

O Filme.today foi pensado como o que ele é: Um experimento.

Um simples, rápido e divertido jogo em forma de desafio diário, onde com 3 emojis e algumas pistas uma pessoa precisaria adivinhar o nome de um filme.

A stack não poderia ser mais simples, o clássico HTML, CSS e Javascript que foram engolidos pelo mundo dos frameworks modernos.

O deploy precisava ser gratuito e eficiente, decidi conhecer um serviço que nunca havia usado antes, o Cloudflare Pages, que me permitiu:

  • Deploys rápidos com preview automático
  • Cache agressivo sem configuração adicional
  • Zero custo com servidor
  • Integração fácil com GitHub
  • Configuração de DNS interna

Foi a stack perfeita para um projeto viral e global com direito a seletor de línguas com e desempenho ótimo em qualquer dispositívo.

Interface do filmle.today
Nada mal para algumas horinhas de trabalho noturno

Usar ou não um backend para o projeto foi um dilema, embora os Cloudflare Workers e o KV Storage fossem opções interessantes para gerenciar os desafios diários e escalar o projeto eu aceitei muito rápido a realidade.

"Porque escalar um software com zero usuários?"

Assim fiquei no frontend only, só faltava alimentar a página com os filmes. Mas de onde pegar esses dados?

LLM's e o cinema

Scrapping estava fora de questão, isso por sí só já seria um projeto incrível (e uma mudança de escopo colossal), a api do IMDB poderia ser uma opção adequada se não fosse tão burocrática de acessar. A solução era óbvia: já existia uma base de dados com milhares de filmes e que eu poderia acessar de graça, o amado e odiado Chat-GPT, o que resolvia dois problemas para mim.

  1. Gerar dados de filmes para os desafios.
  2. Permitir que eu participasse do jogo sem saber quais filmes seriam selecionados.

A escolha dos desafios foi feita basicamente alimentando um prompt com regras simples, como:

"Dê uma sequência de emojis que represente um filme famoso, seguido de três pistas breves e enigmáticas, em português e inglês."

O resultado foi ótimo para criar enigmas criativos, e mais do que isso: eu consegui gerar um calendário inteiro de desafios diários de forma rápida, apenas ajustando alguns critérios de diversidade de gêneros e dificuldade, resultando em um ano de desafios diários.

Lidando com respostas imperfeitas

Algo que me incomodava era a frustração do jogador ao errar por pouco. Ninguém merece perder um desafio só porque escreveu "poderoso chefão" em vez de "O Poderoso Chefão". Para evitar isso, implementei um algoritmo de comparação de similaridade entre strings, baseado na distância de Levenshtein, que calcula o número mínimo de operações necessárias para transformar uma palavra em outra. Isso me permitiu aceitar respostas com pequenos erros de digitação ou variações triviais. Ajustei o limiar de tolerância para garantir um equilíbrio entre flexibilidade e precisão.

function levenshtein(a, b) {
  const matrix = Array.from({ length: b.length + 1 }, (_, i) => [i]);
  for (let i = 0; i <= a.length; i++) matrix[0][i] = i;
  for (let i = 1; i <= b.length; i++) {
    for (let j = 1; j <= a.length; j++) {
      matrix[i][j] = Math.min(
        matrix[i - 1][j - 1] + (a[j - 1] === b[i - 1] ? 0 : 1),
        matrix[i][j - 1] + 1,
        matrix[i - 1][j] + 1
      );
    }
  }
  return matrix[b.length][a.length];
}

Lidando Bots e scraping

Poucos dias depois do lançamento, o Filmle foi alvo de tentativas de ataque que iam além de simples scraping. O que os logs revelaram foram comportamentos suspeitos e coordenados com foco em explorar vulnerabilidades da infraestrutura, não apenas no jogo em si, mas no domínio e nas permissões do repositório.

Houve tentativas de:

  • Explorar tokens e credenciais em busca de acessos privilegiados
  • Forçar acessos ao painel de controle do provedor e APIs públicas da Cloudflare

Esse tipo de atividade, mesmo em um projeto pequeno e gratuito, mostra como qualquer aplicação online pode virar alvo, muitas vezes de forma oportunista, por automatização em larga escala.

No caso do Filmle, felizmente não houve vazamento nem comprometimento, mas isso reforçou a importância de:

  • Nunca expor variáveis sensíveis em projetos públicos
  • Usar autenticação forte e verificação em duas etapas no provedor
  • Monitorar acessos e comportamento incomum desde o início
  • Bloquear IP's com intenções maliciosas

Curiosamente, nunca fiz mudanças para evitar trapaças. O jogo é aberto, não tem prêmio nem ranking, confio numa política de boa fé. Mas proteger a infraestrutura e reputação do domínio virou uma necessidade, algo que a infra da Cloud Flare serviu bem.

Conclusão: Nada é para sempre

Por enquanto, o Filmle vai ficar no ar por um ano. É um experimento com prazo de validade, e tudo bem, nem todo projeto precisa durar para sempre. Foi uma boa experiência unir duas paixões antigas, cinema e tecnologia, em um só produto. Com pouco menos de 100 acessos por dia ele segue um projeto minimalista em sua essência, mas ver gente se divertindo com algo que nasceu de uma ideia despretensiosa já valeu o esforço.

Compartilhar este post