Projetos No ar · movietq.com

MovieTQ

Um jogo de filmes multiplayer em tempo real. Quatro modos ativos, cinco idiomas de jogo e um perfil só que acompanha você em todos eles.

Bomb-It demo
Alex0 pts
name a movie withFdifficulty 1
Maya0 pts

Bomb-It · demo

Modos de jogo

Corrida

Trailer Quiz

Um trecho de trailer é reproduzido para todos na sala no mesmo instante. O primeiro a digitar o título correto vence a rodada.

  • O host define o gênero, o número de rodadas, a dificuldade (1–10) e o idioma da sala; o cronômetro da rodada dura de 10 a 60 segundos.
  • Uma sala pode ser jogada em inglês, português, espanhol, francês ou italiano — os títulos aparecem e são validados naquele idioma, e os acentos são opcionais: “criança” e “crianca” valem igual.
  • Um palpite incorreto que compartilha o mesmo gênero da resposta ainda concede alguns pontos de consolação sem quebrar seu combo.
  • Se um trailer estiver quebrado ou bloqueado na região, os jogadores relatam e o servidor insere um backup instantaneamente, reiniciando o cronômetro para que ninguém perca pontos.
Sobrevivência

Bomb-It

Um modo de sobrevivência contra o tempo: nomeie um filme que se encaixe no tema antes que o tempo acabe. Se o tempo esgotar, você perde uma vida.

  • A dica é uma combinação de letras — uma letra na dificuldade mínima, duas ou três conforme a dificuldade aumenta.
  • Uma resposta correta passa a vez para o próximo jogador; o tempo acompanha quem está na vez.
  • Nomes de franquias valem como resposta, e o combo construído ao longo dos turnos conta para as conquistas.
  • Erre ou trave e você perde uma vida. Perca todas as vidas e você estará fora; o último sobrevivente vence.
Desafio diário

Daily

Um filme escondido por dia, o mesmo para todos os jogadores do mundo. Cada palpite é avaliado coluna a coluna até alguém acertar.

  • Cada palpite gera uma linha de comparação — gêneros, direção e ano — colorida conforme a proximidade, com uma seta apontando para uma resposta mais nova ou mais antiga.
  • Uma pista em emoji aparece no início e outra é liberada a cada erro, até cinco; cada filme que você chutou também mostra quantos outros jogadores tentaram o mesmo naquele dia.
  • Ao acertar, você recebe sua posição na ordem do dia, a resposta e uma grade sem spoilers para compartilhar. Um filme novo entra à meia-noite no horário do leste dos EUA, e convidados podem jogar sem conta.
Arena

Pet Feast

Uma arena de snake jogada com o seu pet: cresça comendo, segure a linha e sobreviva mais que todo mundo no tabuleiro.

  • Jogue sozinho, contra bots ou em uma sala de até seis jogadores; o host define a dificuldade e o limite de participantes.
  • A cobra que morre deixa o corpo no tabuleiro como blocos intransponíveis, e quem morreu continua assistindo até sobrar uma só.
  • As partidas alimentam o ranking histórico Top Feasters. No celular, você controla deslizando o dedo pelo tabuleiro ou usando o direcional abaixo dele.
Em desenvolvimento

Mais modos

Novas formas de jogar estão no roadmap, incluindo um modo baseado em votação. O Pet Battle, o duelo de cartas dos pets, está em reformulação e aparece como “em breve” enquanto isso.

  • A estrutura do modo é compartilhada, permitindo que novos conjuntos de regras utilizem as mesmas salas, pontuações e progressão.
  • O roadmap é público dentro do jogo, e bugs relatados e ideias aceitas são pagos em Pipocas.
Round 1 / 40:08
trailer playing
the movie wasNosferatu+18
You0
Maya0
T
Theo0

Funcionalidades

Salas e acesso

  • Lobbies públicos
  • Salas privadas com senha
  • Filtros de gênero e dificuldade (1–10)
  • Cinco idiomas de jogo
  • Sessões de convidado com um clique

Os hosts customizam o gênero, a quantidade de rodadas, a dificuldade e o idioma em que a sala é jogada — inglês, português, espanhol, francês ou italiano. Um convidado entra com um clique e joga imediatamente, mas não pode acessar o perfil ou inventário até se registrar.

Social

  • Galeria de amigos com presença
  • Mensagens diretas
  • Chat e emotes na sala
  • Classificação global e Calçada da Fama

A página de amigos é uma galeria de cartões de perfil — avatar, presença, nível, estatísticas de carreira e conquistas recentes — ordenada por quem está online primeiro, e dá para entrar direto na sala aberta de um amigo. As mensagens diretas controlam mensagens não lidas, você pode silenciar ou bloquear usuários abusivos e o chat do jogo aparece como balões sobre as cartas dos jogadores.

Progressão

  • XP, níveis e conquistas
  • Pipoca (moeda do jogo)
  • Guarda-roupa — avatares, títulos, fundos, emotes, efeitos
  • Um pet que acompanha você em todos os modos
  • Um calendário de presente diário

O XP equivale à sua pontuação na partida e subir de nível concede Pipocas. O sistema de conquistas lê os dados do fim da partida e concede títulos, cosméticos e moedas automaticamente. Um pet sobe de nível nos jogos de pet, precisa ser alimentado e cuidado, tem um baú diário e pode ser transformado ou recolorido em criaturas mais raras — e fica ao seu lado nas salas, nas partidas e no perfil.

Contas e assinatura

  • Login por e-mail, Discord ou Google
  • Assinaturas em três níveis
  • Pacotes de Pipoca e presentes
  • Nenhuma vantagem na pontuação

A assinatura dá cosméticos e um ritmo maior de ganho — multiplicadores de Pipoca e XP —, nunca poder: assinantes e não assinantes pontuam igual, então a classificação não é pay-to-win. As compras passam pela Stripe, cada benefício é concedido uma única vez e é revogado quando a assinatura termina.

Classificação e perfis

Recreated from the in-game leaderboard — real cards, live ranking and stats. Click the card to open the profile.

Cailus avatarLVL 1

Cailus

ADMIN

Check my website for more projects and to support me :)

gabrieldabbah.com
Level Progress50%
50 XPNext Lvl
Unlocked Achievements5 Unlocked
Perfect RoundFirst GameRookieNewbieFirst Friend
58.000+filmes em jogo
4modos de jogo ativos
5idiomas de jogo
1desenvolvedor

Um desenvolvedor. Toda a stack.

Frontend, backend, banco de dados, pagamentos, segurança e deploy — tudo construído e publicado sozinho.

Construído com

  • React
  • TypeScript
  • Vite
  • Tailwind CSS
  • react-youtube
  • Node.js
  • Express
  • WebSocket
  • Supabase
  • PostgreSQL
  • Stripe
  • JWT
  • bcrypt
  • node-cron
  • Cloudflare
  • Render

Engenharia

Salas com autoridade no servidor

A lógica do jogo roda no servidor, não no navegador. Uma sala avança pelos próprios estados no servidor e empurra cada mudança para todo mundo de uma vez — assim ninguém consegue trapacear alterando a tela e todos assistem ao mesmo ponto do trailer.

Cada sala é mantida em memória e avançada por uma máquina de estados LOBBYSTARTINGIN_ROUNDBETWEEN_ROUNDSFINISHED sob um relógio do servidor, com isolamento por partida para que uma sala com problema não trave as demais. Os clientes são apenas para renderização: eles se alinham à transmissão em vez de decidir qualquer coisa, impedindo que um cliente adulterado altere o resultado; e a resposta da rodada não faz parte do payload até a revelação.

Empurrado, não consultado

O seu navegador não fica perguntando ao servidor se aconteceu alguma coisa. Cada jogador mantém um canal aberto e é o servidor que fala por ele, então uma rodada nova, o palpite de um rival, uma linha de chat ou um tomate atirado em você chegam no instante em que acontecem. Se esse canal não puder ser aberto, o jogo volta discretamente a consultar em intervalos e a partida continua.

O estado ao vivo é entregue por push do servidor com Server-Sent Events — um GET autenticado em streaming por cliente, carregando um retrato completo do estado público a cada mudança, tanto no Trailer Quiz quanto no Bomb-It. O stream também serve de batimento de presença, então um socket fechado envelhece aquele jogador em vez de deixar um fantasma na sala. O Trailer Quiz mantém uma consulta em intervalos do mesmo estado como fallback automático para um navegador que não consiga segurar o stream, e os dois caminhos compartilham um único serializador, de modo que nunca podem discordar.

Pipeline de middleware segregado

Toda requisição passa por uma sequência organizada de validações antes de qualquer handler rodar, isolando as responsabilidades e barrando um acesso inválido logo no primeiro portão em vez de lá dentro da lógica do jogo.

Cada requisição percorre uma única cadeia de middleware ordenada que cobre transporte e cookies, verificações de origem cruzada e CSRF, limites de requisição por rota, validação de schemas com sanitização contra prototype-pollution e XSS, e autenticação — tudo isso antes de um handler de rota ver a requisição. Cada responsabilidade é isolada e testável de forma independente, a ordenação é estrutural e fixada por testes em vez de deixada à convenção, e o que falha em um portão é rejeitado naquele portão.

Catálogo de filmes pré-carregado

Os trailers em vídeo não ficam salvos no servidor — o que é carregado em memória na inicialização são as informações dos filmes e os links do YouTube. Durante o jogo, o vídeo roda direto do YouTube no navegador do jogador, de forma que o servidor não gasta banda de vídeo e o jogo nunca trava esperando dados externos. A dificuldade apenas define a profundidade da busca na lista de filmes ordenados por fama.

Metadados de cerca de 58.000 filmes (títulos, infos e ids de trailers do YouTube) são lidos de um JSONL para a memória na inicialização e ordenados por fama, sem armazenamento de vídeo no servidor. A seleção por gênero filtra a base e a dificuldade delimita a busca (do top 100 no nível 1 até a base inteira no nível 10) antes de um sorteio aleatório sem repetição. O trailer é reproduzido via player do YouTube no cliente, eliminando chamadas a serviços externos em partida.

Cinco idiomas, um catálogo

Uma sala pode ser jogada em cinco idiomas, e o filme é validado pelo título oficial no idioma escolhido. Em vez de manter cinco cópias do catálogo em memória ao mesmo tempo, o jogo monta o índice de um idioma na primeira vez que alguém joga nele. Os acentos são opcionais nos dois sentidos, então “criança” e “crianca” são a mesma resposta.

As linhas do catálogo carregam um mapa opcional com o título oficial de cada filme nos outros idiomas, e o idioma da sala define em qual conjunto de títulos a rodada é jogada e validada. Os pools por idioma e seus índices exatos e de apelidos são montados sob demanda no primeiro uso porque a RAM é a restrição limitante — cerca de +11 MB para os dados e +14 MB por idioma ativo. A validação normaliza acentos em NFD nos dois sentidos, então um acento nunca decide uma resposta correta.

Um desafio diário sem nada para espiar

Todo jogador do mundo recebe o mesmo filme por dia, e ele é escolhido pela própria data em vez de sorteado — assim o dia é reproduzível e respostas recentes são puladas. Nada sobre a resposta chega ao navegador antes de você acertar: as cores de cada linha de comparação são calculadas no servidor a partir do palpite enviado.

A resposta do dia é derivada da própria data em vez de sorteada, pulando o que foi usado recentemente — então todo jogador do mundo recebe o mesmo filme e o dia é reproduzível sem guardar em lugar nenhum um calendário que alguém pudesse ler adiantado. A linha do desafio guarda um retrato do título, ano, direção e gêneros do filme, então um dia anterior continua sendo revelado corretamente mesmo depois de o pool mudar. As linhas de comparação são recalculadas no servidor a cada leitura: o cliente nunca as fornece, e os atributos da resposta ficam fora do payload até a vitória. Os contadores compartilhados são operações atômicas no banco, então a posição de acerto que o jogador vê é o valor que o incremento devolveu, e não uma corrida de leitura e escrita.

Uma simulação, três consumidores

A arena de snake pareceria travada se cada tecla precisasse atravessar a rede e voltar — e ela não faz isso. As partidas sozinho e contra bots rodam inteiras no navegador; em uma sala multiplayer, a sua cobra vira no instante em que você aperta a tecla, enquanto o servidor segue como juiz dos demais. As partidas contra bots são reexecutadas no servidor depois, com o mesmo código, de forma que um jogo que parece local continua sendo pontuado com honestidade.

Um único módulo de arena determinístico é avançado por três consumidores — o tick do servidor, a previsão da própria cobra no cliente e a reexecução da partida contra bots no servidor —, de modo que eles não podem divergir. O multiplayer trafega por um WebSocket autorizado uma única vez no momento da conexão e que não carrega credencial nenhuma a cada mensagem, e cada tick é serializado uma vez por sala em vez de uma vez por cliente. O cliente prevê a própria cobra desfazendo e reaplicando as entradas ainda não confirmadas e interpola as demais; uma fila de entradas por cobra, cuja legalidade é conferida contra a cauda da fila, garante que nenhuma tecla seja descartada em silêncio. Nada que o cliente relata vale para a pontuação: a partida contra bots roda local pela sensação e depois o servidor a reexecuta pelo mesmo módulo antes de contar.

Trailers resilientes

Se um trailer estiver fora do ar ou bloqueado para a região de alguém, o jogo não trava. O reporte de um jogador (ou a troca feita pelo host) substitui o vídeo por um reserva na hora e reinicia o tempo, garantindo que ninguém perca pontos por vídeos quebrados.

Um reporte ou uma troca do host é validado contra a rodada ativa que ele afirma ser, antes de qualquer coisa mudar — então a troca não pode ser acionada de fora daquela rodada. Um trailer reserva é extraído do catálogo em memória, a sala atualiza para ele, o tempo reinicia e os palpites já feitos são limpos para não acumular no novo vídeo.

Identidade ao longo da cadeia de proxies

A API fica atrás de mais de um salto, e cada um deles se apresentaria como o autor da chamada. A identidade de quem chamou é carregada através desses saltos em uma forma que a borda atesta e a aplicação verifica, de modo que ela não pode simplesmente ser afirmada por quem está chamando — limites e banimentos agem sobre o requisitante real, e a garantia se sustenta sem que a aplicação precise confiar em um valor encaminhado pelo que ele diz ser.

Autorização imposta no servidor

O servidor é o único guardião das regras. Ele trata todas as requisições como não confiáveis: valida cada informação, verifica as origens e pode cancelar uma sessão na mesma hora. Silenciamentos, banimentos e logs de auditoria rodam no topo do sistema.

A autorização é imposta inteiramente no servidor, em vez de delegada à camada de dados, então toda consulta que a aplicação emite é tratada como uma fronteira de segurança e nenhuma afirmação do cliente sobre quem ele é vale por si. As sessões trafegam em cookies que os scripts da própria página não conseguem ler, e cada requisição reconfere se a sessão continua válida — então revogar uma vale já na requisição seguinte, e não quando ela fosse expirar.

Manutenção agendada

Tarefas em segundo plano mantêm o servidor limpo e organizado por conta própria — por exemplo, limpando dados de sessões de convidados expiradas para não acumular lixo no banco.

Rotinas agendadas no servidor executam a manutenção fora do fluxo de requisições — expirando sessões de convidados depois que a janela delas passa e mantendo o estado em memória enxuto — sem intervenção manual e sem efeito na latência das requisições.

Painel administrativo com permissões por papel

Por trás do jogo, há um console de operações interno onde a equipe de confiança administra o serviço no ar: acompanhar atividade e custo, moderar jogadores, resolver denúncias de jogadores e de trailers, agendar tarefas em segundo plano e acionar chaves globais quando algo precisa parar. O console se remodela conforme o cargo — um moderador recebe uma visão focada em denúncias e auditoria, e não o conjunto completo de controles — e cada ação fica registrada.

Um console restrito por papel cuja superfície é decidida no servidor a partir do cargo, de modo que a visão de um moderador se resolve em um subconjunto real, e não em ferramentas administrativas escondidas em uma marcação que o cliente poderia ler. Chaves globais de execução permitem degradar o serviço deliberadamente — fechar novos cadastros, pausar a criação de partidas, tirar um subsistema do ar — e são aplicadas na camada de requisição, não apenas na interface. Ações operacionais adiadas entram em fila fora do fluxo de requisição, as evidências de moderação são reunidas ao lado de cada caso para que a decisão seja tomada em um lugar só, e cada ação operacional é gravada em um log de auditoria exportável.

Social

MovieTQ is a social game too — identity, friends, rivalry, and live in-room expression. The two panels below are real and interactive — try them.

Emoteclick Maya →
You
Lobby chattype & send →
You
0/50

Profiles & cosmetics

Every player is a recognizable identity — a portrait, a level, an equipped title, a background and a bio that follow them across every screen.

AvatarsTitlesBackgroundsBiosRarity tiers

Friends & DMs

Send and accept requests, see who’s online, and chat one-to-one in lightweight popups — friends become collectible player cards, not address-book rows.

RequestsFriend cards1:1 chatOnline statusUnread badges

Global leaderboard

Ranked by level with the top three highlighted gold/silver/bronze; your own row stays pinned even when you're off the visible page. Tap a row to open the profile.

Ranked by levelTop 3 highlightedYour rank pinnedClick to inspect

Store & inventory

Earn Popcorn from matches and level-ups, then spend it on cosmetics. Rarity drives both price and prestige; equip anything you own straight from the inventory.

Popcorn currencyAvatarsBackgroundsTitlesSound FXRarity pricing

Achievements

Proof-of-play with progress bars and rarity badges. Unlocks grant titles, cosmetics and Popcorn — and surface as the trophy strip on your profile.

Progress barsRarity badgesGrants rewardsTrophy strip

Safety & staff

Calm, visible safety tools live next to the person they affect, with separate staff controls and an official Mod Team roster so players know who represents the game.

ReportBlockMuteBanMod Team roster
Jogar grátismovietq.com — grátis para jogar

Tem um projeto dos sonhos?

Fale-me sobre sua ideia e eu lhe enviarei um orçamento.