Underground 2 Revived
Play Need for Speed: Underground 2 (2004) in Chrome and Firefox with WebGPU graphics, Web Audio, up to 120 fps widescreen, controller support, free roam and Online races with friends. Fan project, not
Gamedev roadmap generator
Translation pending
GamesJavaScript · CSSGitHub @paixaoDevOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
The maker's introduction consists of the line above. Read the repository README for more details. Repository README ↗
Loading the full README.
Read the full README ↗Transforme seu Game Design Document em um roadmap de produção profissional, com tarefas de sprint, milestones e resumo para editais — tudo gerado por IA em minutos.
O Producer é uma aplicação web que lê o seu GDD (Game Design Document) e usa IA para gerar um roadmap completo de desenvolvimento de jogos. Ele entende que cada jogo é único — por isso não usa templates genéricos. Ele lê o seu documento, extrai as informações reais (personagens, mecânicas, fases, engine) e cria tarefas específicas para o seu projeto.
O resultado é uma hierarquia de três níveis:
Objetivo (Sub-área de desenvolvimento)
└── Key Result (Entrega verificável dentro da sub-área)
└── Tarefa (ação concreta de 1 a 4 horas — várias por dia)
Essa estrutura é compatível com metodologias OKR e ágeis (Scrum/Kanban).
Não é necessário instalar nada. A aplicação roda 100% no navegador.
Abra o arquivo index.html diretamente no navegador. Não é necessário servidor web — o projeto funciona via file:// ou hospedado em qualquer servidor estático (GitHub Pages, Netlify, Vercel, etc.).
Na primeira vez que abrir, você verá a tela de configuração de API. Cole sua chave do DeepSeek (começa com sk-) e clique em Entrar no Producer. A chave é salva no localStorage do navegador — ela nunca sai do seu computador.
Onde pegar a chave: platform.deepseek.com/api-keys A conta DeepSeek é gratuita para criar e vem com créditos iniciais suficientes para vários roadmaps.
Arraste e solte o arquivo do GDD na área de upload, ou clique em Escolher Arquivo. O arquivo pode ser:
Tamanho máximo: 10MB. O Producer lê até 120.000 caracteres do GDD; os títulos do documento (Heading no Word, # no Markdown, linhas em CAIXA ALTA) são usados para dividir o GDD em seções.
Clique em Analisar GDD. A IA passa por 5 fases de processamento, mostradas na barra de progresso:
| Fase | O que acontece |
|---|---|
| Normalizando GDD | A IA lê o documento e preenche um template estruturado com as informações gerais do jogo |
| Documento de features | O GDD inteiro é lido em blocos de ~12.000 caracteres. A cada bloco a IA vê o índice das features que já estão no documento e responde só com o que é novo: features novas ou complementos de features existentes (regras, números, estados, conteúdo). O código junta tudo, então nada lido antes se perde. O documento não tem versão e pode ser baixado em .md na revisão ou em Ações |
| Versões (marcos) | A IA define as 8 versões do jogo (PoC → Lançamento) a partir do documento |
| Entregas por versão | Para cada versão, a IA escolhe as features do documento que entram nela e qual parte de cada uma ([ref: F03]). Features que nenhuma versão pegou entram no Alpha automaticamente |
| Tarefas | Cada entrega é quebrada a partir da especificação completa da feature no documento em 5 a 20 tarefas de 1 a 4 horas, com critério "pronto quando". Tarefas maiores que 4h ou poucas tarefas disparam uma segunda passada que quebra as grandes |
Durante o processamento, um painel ao vivo mostra o que a IA está gerando em tempo real.
Antes de gerar o roadmap completo, a aplicação mostra como a IA interpretou o seu GDD. Você verá campos como:
Se algo estiver errado ou faltando, clique em Cancelar e melhore o GDD. Se estiver correto, clique em Gerar Roadmap.
O resultado tem quatro seções principais:
Visão Geral — resumo do projeto com contagem total de tarefas e duração.
Roadmap / Timeline — linha do tempo horizontal mostrando cada sub-área ao longo dos meses. Tem dois modos:
Marcos do Projeto — cards colapsáveis com cada milestone, seus entregáveis e critérios de aceite.
Tarefas — hierarquia completa de Objetivos > KRs > Tarefas de Sprint, com filtros por área e checkboxes para marcar progresso.
Resumo para Edital — texto gerado automaticamente para uso em editais de fomento (ProAC, BNDES, Rouanet, etc.), com resumo executivo, metodologia, necessidades de equipe e análise de riscos.
No header do roadmap há um painel Personalizar equipe. Você pode ajustar de 1 a 5 pessoas por área:
O motor de scheduling redistribui automaticamente os KRs entre os membros da equipe usando a lógica de earliest-free worker: cada KR vai para o membro mais livre da área. Quanto mais pessoas, menor o tempo total do projeto. A duração estimada é atualizada em tempo real.
Clique em Exportar para baixar o roadmap completo em JSON. O arquivo contém:
{
"metadata": { "title", "genre", "exportDate", "totalMonths", "totalObjectives", "totalTasks" },
"overview": { ... },
"milestones": [ ... ],
"editalSummary": { ... },
"objectives": [
{
"id", "title", "area", "timeline": { "startMonth", "endMonth" },
"keyResults": [
{
"id", "title", "estimatedWeeks",
"tasks": [ { "id", "title", "estimatedDays", "priority", "type" } ]
}
]
}
]
}
O JSON pode ser importado em ferramentas como Notion, Linear, Produto ou processado por scripts próprios.
Cada tarefa exportada traz também description e status (todo, doing ou done). Ao importar o JSON de volta, o status volta para a lista e para o quadro.
No painel Ações há dois botões: Exportar para Claude Code e Exportar para Codex. Cada um baixa um .zip para descompactar na raiz do repositório do jogo:
| Arquivo | Claude Code | Codex | Para quê |
|---|---|---|---|
CLAUDE.md / AGENTS.md | ✓ | ✓ | Instruções que a ferramenta lê sozinha: onde estão as tarefas e como trabalhar nelas |
ROADMAP.md | ✓ | ✓ | Roadmap legível por etapa, com o id de cada tarefa e o progresso já marcado na interface |
.producer/roadmap.json | ✓ | ✓ | Roadmap com status de cada tarefa. Importe de volta no Producer para ver o progresso no site |
.producer/producer.js | ✓ | ✓ | CLI sem dependências (Node 16+) usada pelas skills |
.claude/skills/producer-status, producer-roadmap | ✓ | Skills do Claude Code | |
.agents/skills/producer-status, producer-roadmap | ✓ | As mesmas skills para o Codex | |
.claude/commands/proxima-tarefa.md | ✓ | Comando /proxima-tarefa [id] que executa a próxima tarefa pendente |
Skills incluídas:
ROADMAP.md e .producer/roadmap.json iguais.Comandos da CLI:
| Comando | O que faz |
|---|---|
node .producer/producer.js status | Tabela com feitas, em andamento, faltam e dias restantes por etapa |
node .producer/producer.js statusline | Uma linha para a statusline: demo:68% slice:33% alpha:10% beta:4% gold:0% launch:0% |
node .producer/producer.js next 5 | Próximas tarefas da etapa atual |
node .producer/producer.js set <id> doing|done|todo | Muda o status e regenera o ROADMAP.md |
node .producer/producer.js add --kr <id> --title "..." | Cria uma tarefa nova |
node .producer/producer.js sync | Aplica as caixas marcadas à mão no ROADMAP.md |
Para a statusline do Claude Code, adicione em .claude/settings.json:
{ "statusLine": { "type": "command", "command": "node .producer/producer.js statusline" } }
Se o repositório já tiver um CLAUDE.md ou AGENTS.md, junte o conteúdo em vez de sobrescrever.
O botão Copiar texto na seção de Resumo para Edital copia o texto formatado diretamente para a área de transferência.
Se a geração for interrompida (queda de conexão, erro de API, fechar o navegador no meio), o Producer salva o progresso em cada fase. Na próxima vez que abrir, aparece a tela de Geração interrompida com o estado de cada fase. Clique em Continuar de onde parou para retomar sem repetir as fases já concluídas.
producer/
├── index.html # Interface completa (upload, loading, resultados)
├── script.js # Toda a lógica: parsing, IA, rendering, scheduling
├── aiKit.js # Roadmap, CLI e skills de status/roadmap para as IAs
├── agentExport.js # Exportação para Claude Code / Codex (CLAUDE.md/AGENTS.md, comando, .zip)
├── styles.css # CSS com variáveis, timeline, cards, filtros
├── LICENSE # MIT
└── README.md # Este arquivo
O projeto não tem dependências npm, build step ou backend. É vanilla HTML + CSS + JavaScript com duas dependências carregadas via CDN:
GDD (arquivo)
→ [Fase 0] normalizarGDD() → objeto GDD_TEMPLATE preenchido
→ [Fase 1] mdPhase1_Subareas() → Markdown com 12-22 sub-áreas
→ [Fase 2] mdPhase2_KRs() → Markdown com KRs por sub-área
→ [Fase 3] mdPhase3_Sprints() → Markdown com tarefas por KR
→ [Fase 4] mdPhase4_Milestones() → Markdown com marcos
→ [Final] mdToJSON() → JSON estruturado para a UI
A IA conversa em Markdown nas fases intermediárias (mais confiável, sem erros de escaping JSON) e só produz JSON no passo final de consolidação.
O template central que governa o que a IA extrai do GDD:
const GDD_TEMPLATE = {
titulo, genero, subgenero, plataformas, engine, perspectiva, modo,
tamanho_equipe, papeis,
sinopse, diferenciais, referencias, publico_alvo,
mecanica_principal, mecanicas_secundarias, mecanicas_unicas, progressao, economia, ia_inimigos,
contexto_mundo, protagonista, antagonista, estrutura_narrativa, tom,
estilo_visual, paleta_cores, resolucao_aspecto, personagens_principais, ambientes_principais,
estilo_musical, referencias_audio, voice_over,
duracao_estimada, numero_fases, duracao_desenvolvimento, plataforma_lancamento,
sistema_finais, formato_extra, arco_emocional
};
Cada campo alimenta fases diferentes da geração. A função gddSecoesPorArea() garante que cada área (programação, arte, design, áudio, qa) receba apenas as seções relevantes do GDD — reduzindo tokens e aumentando precisão.
Base de conhecimento com o pipeline completo de cada área, usada para enriquecer os prompts:
Base de conhecimento por gênero com objetivos típicos e exemplos de KRs e tarefas:
A função detectGameGenre() identifica o gênero pelo texto do GDD e enriquece os prompts com exemplos específicos do gênero.
O scheduleRoadmap() usa a lógica de earliest-free worker por área:
Para cada KR de um objetivo:
1. Pegar o trabalhador mais livre da área (menor freeAtWeek)
2. Atribuir o KR a ele: startWeek = freeAtWeek, endWeek = startWeek + durationWeeks
3. Avançar o freeAtWeek do trabalhador
O startMonth/endMonth do objetivo = envelope de todos os seus KRs
Isso permite simular equipes de 1 a 5 pessoas por área e ver o impacto imediato na duração do projeto.
Cada sprint tem capacidade de 10 pontos (10 dias úteis = 2 semanas). Cada tarefa vale pontos = estimatedDays (1 ou 2). A função assignSprintPoints() calcula:
kr.sprintCount = ceil(totalPoints / 10)kr.estimatedWeeks = sprintCount * 2obj._durationMonths = ceil(totalWeeks / 4.33)Em GENRE_KNOWLEDGE no script.js, adicione:
meu_genero: {
label: "Meu Gênero",
keywords: ["palavra-chave1", "palavra-chave2"],
objectives: [
"Sistema X",
"Sistema Y",
"Sistema Z"
],
okr_examples: {
"Sistema X": ["KR exemplo 1", "KR exemplo 2"]
},
sprint_examples: {
"KR exemplo 1": ["Tarefa específica A", "Tarefa específica B"]
}
}
Para capturar uma informação adicional do GDD:
Adicione o campo em GDD_TEMPLATE:
meu_campo: '', // descrição do campo
Adicione a explicação em normalizarGDD() dentro do objeto explicacoes:
meu_campo: 'descrição de como a IA deve preencher este campo',
Adicione o campo nas seções relevantes de GDD_SECOES_POR_AREA:
programming: [..., 'meu_campo'],
Opcionalmente, adicione o label amigável em GDD_FIELD_LABELS e o grupo de exibição em GDD_REVIEW_GROUPS.
Em AREA_PIPELINES, adicione uma nova fase com seus KRs típicos e exemplos de sprint:
art: {
phases: [
// ...fases existentes...
{
phase: "Minha Nova Fase",
okrs: [
"KR 1 desta fase",
"KR 2 desta fase"
],
sprint_examples: [
"Tarefa concreta de exemplo",
"Outra tarefa concreta"
]
}
]
}
Em callAIAPI(), a variável models define a ordem de tentativa:
const models = [
'deepseek-chat', // DeepSeek-V3: mais rápido
'deepseek-reasoner' // DeepSeek-R1: mais poderoso
];
Para usar outro provedor compatível com a API OpenAI, altere a URL e o array de modelos:
// Exemplo com OpenAI
const response = await fetch('https://api.openai.com/v1/chat/completions', {
headers: { 'Authorization': `Bearer ${apiKey}` },
body: JSON.stringify({ model: 'gpt-4o', messages: [...] })
});
A constante SPRINT_CAPACITY_POINTS define quantos dias úteis cabem em uma sprint:
const SPRINT_CAPACITY_POINTS = 10; // 10 dias = 2 semanas
Altere para 5 (1 semana) ou 20 (4 semanas) se a sua metodologia usar sprints de tamanho diferente.
Em AREA_COLORS:
const AREA_COLORS = {
programming: '#3b82f6', // azul
art: '#8b5cf6', // roxo
design: '#10b981', // verde
audio: '#f59e0b', // amarelo
qa: '#ef4444', // vermelho
production: '#6366f1', // índigo
};
As mesmas cores são usadas na timeline, nos cards de objetivos e nos dots do painel de equipe.
O arquivo styles.css usa variáveis CSS no :root. As principais:
:root {
--primary-color: #6366f1;
--secondary-color: #f59e0b;
--success-color: #10b981;
--danger-color: #ef4444;
--info-color: #3b82f6;
--bg-color: #0f0f23;
--card-bg: rgba(255,255,255,0.05);
--text-primary: #e2e8f0;
--text-secondary: #94a3b8;
--border-color: rgba(255,255,255,0.1);
}
mainhttps://seu-usuario.github.io/producer/Arraste a pasta do projeto para o dashboard do Netlify, ou conecte o repositório ao Vercel. Nenhuma configuração de build é necessária.
# Python 3
python -m http.server 8080
# Node.js
npx serve .
Acesse http://localhost:8080.
localStorage do seu navegador, nunca em servidor externolocalStoragelocalStorage por até 7 dias para restauração automáticaConsidere as políticas de privacidade do DeepSeek antes de processar documentos confidenciais.
"O PDF parece ser baseado em imagens (scan)" PDFs criados por scanner não têm texto extraível. Converta o PDF para DOCX usando o Word ou Google Docs, depois exporte como TXT.
"Chave de API inválida"
Verifique que a chave começa com sk- e foi copiada completamente. Acesse platform.deepseek.com para verificar o status.
"Saldo insuficiente" Adicione créditos em platform.deepseek.com/top-up. O DeepSeek-V3 é muito barato — um roadmap completo custa em média menos de U$0,10.
"Alta demanda na API — aguardando..." A API do DeepSeek tem picos de uso. O Producer faz retry automático com backoff exponencial (5s, 15s, 30s). Aguarde ou tente em horário de menor demanda.
"Geração interrompida" Use o botão Continuar de onde parou. O progresso de cada fase é salvo automaticamente.
A timeline está comprimida nos primeiros meses Isso acontece quando o GDD tem poucos detalhes de escopo (número de fases, duração de desenvolvimento). Adicione essas informações ao GDD e analise novamente.
# 1. Fork e clone
git clone https://github.com/seu-usuario/producer.git
# 2. Crie uma branch
git checkout -b feature/minha-feature
# 3. Faça as mudanças e commit
git commit -m "Adiciona: descrição da mudança"
# 4. Push e Pull Request
git push origin feature/minha-feature
Áreas que aceitam contribuições com prioridade:
GENRE_KNOWLEDGEAREA_PIPELINES com mais fases e exemplos reais| Componente | Tecnologia |
|---|---|
| Frontend | HTML5 + CSS3 + JavaScript Vanilla |
| IA | DeepSeek API (V3 deepseek-chat e R1 deepseek-reasoner) |
| Extração de PDF | pdf.js 3.11 (via CDN) |
| Extração de DOCX | Parser manual de ZIP/XML |
| Persistência | localStorage / sessionStorage |
| Ícones | Font Awesome 6 (via CDN) |
| Tipografia | Inter (Google Fonts) |
MIT — veja o arquivo LICENSE para detalhes.
Desenvolvido para a comunidade indie de desenvolvimento de jogos brasileira.