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
Jogo de gerenciamento de futebol com IA: escolha seu clube, monte a tática e conquiste a liga.
Translation pending
GamesTypeScript · CSSGitHub @anajuliaviana094-wqOnlineOwner 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 ↗Jogo web de gerenciamento de futebol: escolha um clube, monte elenco e tática, jogue a temporada rodada a rodada no campo 2D e acompanhe tabela, artilharia, cartões e lesões. Jogadores têm personalidade que influencia o jogo, a narração dos lances decisivos e os relatórios de olheiro são gerados por IA.
Tudo é fictício: ligas, clubes, cidades, estádios e jogadores são gerados por código. Escudos são SVG procedurais. Há uma blocklist de combinações de nomes famosos (
src/data/leagues.ts).
drizzle/)claude-haiku-5-5 (só no servidor)src/billing/src/
engine/ motor de partida (puro, determinístico) + testes
seed/ geração procedural de ligas, clubes e jogadores (arquétipos)
data/ ligas fictícias e pools de nomes (JSON por país)
career/ regras da carreira: calendário, rodadas, suspensões, lesões, moral, temporada
ai/ narração, olheiro, templates de fallback, limites e log de tokens
billing/ planos + provedor de pagamento (Stripe hoje; interface para trocar)
db/ schema Drizzle, conexão, migrate
app/ páginas e rotas de API
components/ UI (escudo SVG, campo 2D, centro de partida)
npm install
cp .env.example .env.local # preencha DATABASE_URL e AUTH_SECRET (mínimo)
npm run db:setup # aplica migrations + seed (8 ligas, 154 clubes, 3.850 jogadores)
npm run dev # http://localhost:3000
AUTH_SECRET: npx auth secret ou openssl rand -base64 32.
Sem ANTHROPIC_API_KEY o jogo funciona normalmente com narração/relatórios por template. Sem Stripe, a tela de planos aparece com o botão desabilitado.
| Script | O que faz |
|---|---|
npm test | testes (motor, inclusive o estatístico de 1.000 jogos; regras de carreira; calendário) |
npm run smoke | teste de ponta a ponta no banco: cria usuário/carreira, faz substituição ao vivo, joga a temporada inteira e inicia a seguinte |
npm run db:generate | gera nova migration após mudar src/db/schema.ts |
npm run db:migrate / db:seed / db:setup | migrations / seed determinístico (upsert, pode rodar de novo) |
npm run db:setup:http | o mesmo via HTTPS (driver HTTP do Neon) — use quando a porta 5432 estiver bloqueada |
npm run typecheck / lint / build | checagens |
...-pooler...?sslmode=require)..env.local, rode npm run db:setup..env.example. Defina APP_URL com a URL pública (ex.: https://seu-app.vercel.app).https://SEU_DOMINIO/api/auth/callback/google e preencha AUTH_GOOGLE_ID/AUTH_GOOGLE_SECRET. Sem eles, o botão do Google não aparece.STRIPE_PRICE_ID_PREMIUM;STRIPE_SECRET_KEY = chave sk_test_...;https://SEU_DOMINIO/api/billing/webhook com os eventos checkout.session.completed, customer.subscription.created|updated|deleted → STRIPE_WEBHOOK_SECRET;stripe listen --forward-to localhost:3000/api/billing/webhook;ANTHROPIC_API_KEY. Limites diários por usuário: AI_DAILY_NARRATION_LIMIT (padrão 40) e AI_DAILY_SCOUT_LIMIT (padrão 60).npm run dev, crie conta em /registro, entre/saia. Com Google configurado, teste o botão.npm run db:setup; confira no banco: select league_id, count(*), avg(strength) from clubs group by 1;. Rodar o seed de novo gera exatamente os mesmos dados.npm test. O teste “estatísticas realistas em 1.000 jogos” exige ~2,2–2,8 gols, ~3,4–4,6 amarelos e vermelho em 8–17% dos jogos (hoje: ≈2,44 gols, ≈3,6 amarelos, ≈12% com vermelho, 46% vitórias do mandante). Também testa determinismo, modo rápido = modo detalhado e que mudanças no meio do jogo preservam o trecho anterior.npm run smoke faz tudo isso automaticamente.ANTHROPIC_API_KEY, abra um jogador (relatório do olheiro é gerado uma vez e fica salvo) e assista a uma partida (selo “IA” na narração). Uso de tokens em ai_usage_log. Sem chave/limite estourado/erro → templates.createCareer) e carreiras premium ficam travadas se o plano cair (getCareer). Assine com o cartão 4242 4242 4242 4242; o webhook muda users.plan para premium.pg em vez de @neondatabase/serverless: o processamento da rodada precisa de transação interativa com SELECT ... FOR UPDATE (evita processar a rodada duas vezes). O pg funciona com a URL pooled do Neon na Vercel e também com Postgres local.ENGINE_VERSION..npmrc com legacy-peer-deps por conflitos de peer deps (next-auth beta / vitest) com Next 16.thinking desligado, effort: low, max_tokens baixo, timeout curto). A narração chega em segundo plano; o playback nunca espera por ela.src/career/calendar.ts, cup.ts).club_transactions (src/career/economy.ts).src/career/market.ts, transfers.ts). Entre temporadas a IA também negocia entre si.src/career/academy.ts).Narração por voz, IA ligada por padrão, contratos/rescisões, divisões inferiores para os demais países e chat entre técnicos.