O que é a Máquina de Motion
Ferramenta web interna para o time de criação. Você dá um vídeo de referência (de onde ela extrai só o estilo, cor, luz, câmera, ritmo, tipografia) e o seu roteiro, e ela devolve os prompts prontos de cada cena para o Google Flow (Veo) e o Gemini Omni Flash. Por baixo, usa a API do Claude (Anthropic): a visão analisa os keyframes e monta um perfil de estilo; depois o modelo distribui o roteiro em cenas de ≤ 8s, com direção em inglês e falas em português. Tudo atrás de login.
A missão
Colocar a aplicação no ar dentro da infra da empresa, com três regras: nada exposto, acesso só com login + HTTPS, e um jeito simples de gerenciar usuários.
A arquitetura
Containerizada com Docker no servidor da empresa. O container escuta só em um IP. Ou seja, ninguém o alcança direto; o acesso passa obrigatoriamente pelo Nginx. Login embutido (senhas com bcrypt, sessão por JWT em cookie seguro), dados de usuários em volume persistente, e a chave da API só no servidor.
O susto: derrubamos o site (e levantamos em segundos)
Para ativar HTTPS, fizemos o "force HTTPS" de manual, e o site caiu inteiro (ERR_TOO_MANY_REDIRECTS). A causa era uma peça invisível: o HTTPS é terminado por um firewall na frente, que fala HTTP com o servidor. O "force HTTPS" virou loop infinito. O que salvou: backup automático + validação antes de aplicar, restauramos em segundos. Depois achamos a causa nos logs e aplicamos a correção certa (o servidor nunca redireciona para HTTPS; redirecionamentos internos são relativos).
Ajustes que fizeram funcionar de verdade
Cache teimoso → versionamento de arquivos (?v=2, ?v=3) fura qualquer cache.
"Não consegui gerar" → parser de resposta mais robusto + "heartbeat" na conexão para gerações longas não serem cortadas pelo firewall (60s agora completa).
As melhorias de produto
Modo "só motion" (sem avatar), com o roteiro virando narração em voiceover.
Salvar projeto (.txt com config, roteiro, estilo e todos os prompts).
Aviso final para colar os prompts direto no Flow com o Omni Flash.
Aprendizados
Conheça o terreno antes de mexer: o pior problema estava na rede, não no app.
Backup e validação não são burocracia: transformaram uma queda em um susto de 30s.
Itere com o uso real: os erros reais (cache, timeout, parser) revelaram o que faltava.
Se tiver curiosidade para conhecer o 1º vídeo gerado, só clicar