Fundação: cadastro, login, nova análise, upload, fila
- O que olhar
- telas 01–11 da galeria
- Entregue em
- 21/10/2026
- Observações do Wellington
- nenhuma ainda
Esta página não é o aplicativo. Ela mostra o andamento do DNAPLAY. A demonstração interativa ainda não está online: o sistema roda por enquanto só no computador de desenvolvimento, porque ainda não existe servidor nem banco na nuvem (pendência B2 abaixo). Quando existir, aparece aqui um botão “Abrir demonstração”.
Cada etapa passa por: implementar → corrigir falhas → testar → Wellington aprova.
repositório, arquitetura, banco, autenticação, design system, layout, dashboard, fluxo de nova análise, upload, armazenamento privado, fila
Pronta quando: usuário cria conta, envia dois vídeos, análise fica enfileirada e ingestão real roda
eventos, timestamps, análise independente A/B, comparação contextual, evidências, relatórios estruturados
Pronta quando: validado com partidas reais
campo 3D, cenas, roteiro, narração, legendas, MP4, player
Pronta quando: vídeo íntegro e sincronizado
chat, histórico, biblioteca, comparação entre análises
Pronta quando: coach responde com links para evidências
planos, pagamentos, créditos, admin, limites, monitoramento, carga, produção
Pronta quando: produção estável
apps/web/src/server/storage/index.ts nunca tinha sido versionado: a regra storage/ do .gitignore ignorava também o código-fonte. Corrigido para /storage/ (só a raiz) e o arquivo entrou no repositório. Conferido com um clone limpo: npm ci + npm run build + typecheck + testes passam.test_versions_available exigia FFmpeg 8 exato (versão do Windows de dev); passou a exigir só versão detectável.FedericoCarboni/setup-ffmpeg@v3) porque o apt-get update do runner travou mais de 10 min; limite de 20 min por job.DNAPLAY_Ferramentas_Servicos_Assinaturas.pdf (versão de 21/10 18h) movido para docs/referencias/ (tinha entrado por engano na raiz no commit 0ea4035).docs/ARCHITECTURE.md (D14–D29): Gemini (AI Studio → Vertex AI), Claude Sonnet 5.5 para diagnóstico/coach, RF-DETR + ByteTrack + OpenCV (sem YOLO por licença AGPL), Roboflow, ElevenLabs v3, Remotion + Three.js, Cloudflare R2, Hetzner CCX33, Vercel Pro, Stripe + eNotas, Resend, Sentry, Better Stack, PostHog, Turnstile, 1Password. Nenhuma vira código agora..env.example com as variáveis previstas (marcadas "ainda não usado pelo código"); docs/KNOWN_LIMITATIONS.md com fornecedores decididos em B3/B6/B8 e novo bloqueio B9 (chave da API do Claude); docs/DEPLOYMENT.md com Vercel Pro, Hetzner e R2 como alvo.docs/APROVACOES.md: ciclo implementar → corrigir → testar → Wellington aprova; etapa E1 (Fundação) entra como aguardando aprovação.scripts/acompanhamento.mjs (Node puro, sem dependências): lê aprovações, roadmap, este log, bloqueios B1–B8, telas e git log; escreve apps/acompanhamento/dist/ (index.html, styles.css, logo.svg, screenshots/). Sem JavaScript no cliente. Página diz explicitamente que não é o aplicativo e que a demonstração ainda não está online.apps/web/src/components/brand/Emblem.tsx.npm run acompanhamento:build e npm run acompanhamento:dev (gera e serve em http://127.0.0.1:4321 com servidor HTTP mínimo embutido, sem dependência nova).minmax(0, 1fr)); corrigido e conferido sem rolagem lateral em 390 px.dnaplay-acompanhamento criado pela API REST (success=True, dnaplay-acompanhamento.pages.dev); primeira publicação manual com wrangler pages deploy → 16 arquivos enviados, "Deployment complete".CLOUDFLARE_API_TOKEN (lido do arquivo, valor nunca exibido) e CLOUDFLARE_ACCOUNT_ID gravados no GitHub com gh secret set..github/workflows/acompanhamento.yml: a cada push na main gera e publica; falha com mensagem clara se faltar segredo ou se o index.html sair vazio..github/workflows/ci.yml: Ubuntu; Node 24 (npm ci, build, typecheck, testes, gerador) e Python 3.12 + FFmpeg (pytest, ruff, mypy).docs/DEPLOYMENT.md e README.md com o endereço, a conta, onde fica o token (só o caminho) e o comando manual.688455c — redefinição de senha: fora de desenvolvimento nenhum token é emitido nem logado (sem provedor de e-mail, B8); o usuário recebe aviso para falar com o suporte. Em dev o link continua no console, marcado "SOMENTE DEV".0ea4035 — upload: teto de tamanho por parte (lê content-length e recusa parte acima do limite); login: conta bloqueada ou inativa recebe a mesma resposta genérica e a senha é processada mesmo assim (não revela estado da conta pelo tempo de resposta); /api/health público responde só { ok }, detalhes só para admin logado ou com o token interno (comparação em tempo constante); erros internos da fila viram mensagens neutras para o usuário e o detalhe fica só no log do servidor.0ea4035 incluiu por engano o PDF DNAPLAY_Ferramentas_Servicos_Assinaturas.pdf na raiz (tratado no bloco seguinte).packages/db: migrations 0001_init (31 tabelas, planos sem preço), 0002_rls_supabase (RLS + políticas auth.uid() só quando o schema auth existir), 0003_rls_lockdown (RLS em todas as tabelas restantes; sem política permissiva ⇒ só o papel de serviço acessa; leitura de catálogos para autenticados). Cliente único (pg em produção; PGlite em dev, marcado), migrate idempotente, repositórios com filtro obrigatório por user_id, pg-boss sobre adaptador (funciona no PGlite).packages/contracts: tipos TS gerados dos JSON Schemas do Python (fonte única).apps/web (Next.js 16, Cache Components, Tailwind 4): design system com os 7 tokens do kit, Sora/Inter, emblema e logotipo em SVG provisório; cadastro/login/recuperação de senha (Argon2id, sessão em banco, cookie httpOnly, bloqueio após 5 falhas); proxy.ts com verificação otimista; dashboard; histórico; nova análise em 5 passos (referência por link do YouTube via oEmbed público ou arquivo; upload retomável em partes de 8 MB com verificação de tipo real por magic bytes; objetivos; contexto; revisão); página de processamento com etapas reais (polling a cada 3 s); minha conta (perfil, sessões ativas); assinatura (planos sem preço, aviso de cobrança desligada); treinos (vazio honesto); /api/health.instrumentation.ts): job de ingestão chama o serviço Python, grava video_metadata/video_segments, marca vídeo validated; quando as duas ingestões terminam, enfileira a análise, que para em blocked com motivo B1.connection() antes de ler sessão (erro de pré-renderização do Next 16); PGlite cria o diretório pai; adaptador do pg-boss devolve as linhas de todas as instruções; layout de "Minha conta"; status do vídeo atualizado pelo polling; dados locais movidos para ~/.dnaplay/ (dentro do repositório, cada escrita do PGlite disparava o watcher do Next e a página recarregava em loop).DNAPLAY_Contas_Assinaturas_Custos.pdf (apareceu na pasta durante o bloco) movido para docs/referencias/ e resumido em docs/KNOWN_LIMITATIONS.md; nada nele contradiz a arquitetura (R2 = S3-compatível; Resend; Sentry; pagamento Stripe/MP/Asaas; preços são decisão do dono).services/analysis)contracts/): IngestionResult, VideoAnalysis, MatchingResult, Diagnosis/VerifiedDiagnosis, RecommendationSet, LessonPlan, RenderedReport, ValidationReport. Validações de integridade: fato observado exige evidência; correspondência abaixo da similaridade mínima é rejeitada; recomendação sem evidência só pode ser hipótese; cena 3D exige dados estruturados; campos desconhecidos são erro.taxonomy.py): 37 categorias em 4 grupos, cada uma com definição, exemplo, critério de evidência e se é observável diretamente.ingestion/): ffprobe (metadados), cortes de cena (select=gt(scene,…)), trechos estáticos (freezedetect), segmentação gameplay/estático/transição, amostragem base 1 fps e densa 8 fps em CPU, orçamento de quadros. Segurança: -protocol_whitelist file, contêiner validado contra lista, -t limita decodificação ao teto, timeouts viram erro de domínio.VideoAnalysisProvider; GeminiProvider bloqueia antes de qualquer chamada sem GEMINI_API_KEY (e falha explicitamente mesmo com chave: integração pendente de validação com vídeos reais); NullProvider só para testes.matching/context.py): similaridade por zona, posse, adversários, pressão, opções, espaço, fase; cobertura reduz confiança; nunca compara pelo minuto; nunca força par./v1/health, /v1/ingest, /v1/analyze → 503 com código provider_not_configured).packages/contracts/schemas (10 arquivos).git init -b main em D:\workspace\DNAPLAY.DNAPLAY_Kit_Imagens_Separadas/ para design/brand-kit/ (31 arquivos). Inspeção visual de 01, 02, 03, 22, 23 para vetorização do logo..gitignore (segredos, node, python, mídia, PGlite) e .env.example documentado.Capturas reais do sistema rodando. Toque numa tela para ver em tamanho grande.
O que só o dono pode providenciar e o que acontece enquanto não chega.
Lista atualizada em 22/10/2026.
Para que serve: o "cérebro" que assiste aos vídeos e descreve as jogadas
Enquanto não vem: nenhuma análise de IA roda; a análise para após a ingestão com status blocked e motivo visível
Para que serve: banco de dados e armazenamento de vídeos na nuvem
Enquanto não vem: tudo roda só no computador local (PGlite + disco), marcado como ambiente de desenvolvimento
Para que serve: cobrar assinaturas
Enquanto não vem: assinatura só com plano gratuito/demonstrativo; interface pronta, cobrança desligada
Para que serve: validar se a análise funciona de verdade
Enquanto não vem: só há vídeo sintético (gerado pelo FFmpeg) para testar a entrada de vídeo; nada de IA pode ser validado
Para que serve: interface e vídeo final com a marca exata
Enquanto não vem: usamos um SVG recriado a partir do kit, marcado como provisório
Para que serve: narrar a aula
Enquanto não vem: aula sairá com legendas e sem voz
Para que serve: cobrar
Enquanto não vem: planos sem preço até aprovação
Para que serve: enviar link de recuperação de senha e notificações
Enquanto não vem: em dev o link de redefinição aparece no console do servidor; fora de dev a redefinição fica desligada (nenhum token é gerado) até existir provedor
Para que serve: comparação, diagnóstico, verificação, roteiro e coach (Claude Sonnet 5.5)
Enquanto não vem: as etapas de raciocínio da análise não rodam; ficam bloqueadas como as do Gemini
docs/APROVACOES.md.51b4ff522/10/2026ci(security): fixar ações de terceiros por commit (wrangler-action recebe o token da Cloudflare)70c9b9f22/10/2026docs(log): bloco 6 — CI, arquivo fora do repositório e decisões do dono7c7769022/10/2026docs: decisões de ferramentas e serviços do dono (D14–D29), variáveis previstas e bloqueio B9974391922/10/2026ci: FFmpeg por binário pronto e limite de 20 min por job54119bc22/10/2026test(analysis): não exigir FFmpeg 8 exato (CI Linux usa a versão do apt)370256f22/10/2026fix(web): versionar apps/web/src/server/storage (estava ignorado por regra 'storage/' solta no .gitignore)249926922/10/2026docs: acompanhamento no ar, deploy, log dos blocos 4 e 57009c7c22/10/2026ci: typecheck, build e testes (Node 24) + pytest, ruff e mypy (Python 3.12 + FFmpeg) em Linux346ae8e22/10/2026ci(acompanhamento): publicar no Cloudflare Pages a cada push na main6ebbcc122/10/2026feat(acompanhamento): gerador da página estática de acompanhamento e etapas para aprovação0ea403521/10/2026fix(security): teto de tamanho por parte no upload, login sem revelar bloqueio, /api/health público só com ok, erros internos não chegam ao usuário688455c21/10/2026fix(auth): não emitir nem logar token de redefinição fora de desenvolvimento (sem provedor de e-mail)34322da21/10/2026feat(web): aplicação Next.js da Fase 1 — auth, nova análise, upload retomável, fila e ingestão ponta a ponta0786b8f21/10/2026feat(db,contracts): banco (migrations, PGlite dev, repositórios), fila pg-boss e tipos TS dos contratos3c0037921/10/2026fix(analysis): endurecer entrada do ffmpeg (protocolo/contêiner permitidos, teto de decodificação, timeouts)3fa50b021/10/2026chore: ignorar egg-infoe57d9a221/10/2026feat(analysis): serviço Python com contratos, taxonomia EA FC, ingestão FFmpeg e matching contextual5c34a3921/10/2026chore: fundação do repositório, documentação base e kit de marca