CoOp:Anything
게임을 검색해 협동 플레이 가능한 모드·단계·품질·커뮤니티 평점을 확인합니다
저장소 정보는 아직 수집하지 않았습니다.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
메이커가 쓴 소개는 위의 한 줄이 전부입니다. 더 자세한 내용은 저장소 README에서 읽을 수 있습니다. 저장소 README ↗
README 전체를 불러오는 중입니다.
README 전문 보기 ↗Plataforma web para organizar mixes de Counter-Strike 2, acompanhar o desempenho dos jogadores e construir comunidades competitivas.
Status: com o Supabase configurado, o site usa dados reais (inscrições, votações, partidas finalizadas, ELO e ranking). Sem ele, roda em modo demonstração com dados fictícios, sinalizados na interface.
docs/regras-do-mix.md — regras e lógica completa do mix.docs/especificacao-tecnica.md — especificação técnica e como o MeuMix a adapta.docs/roadmap.md — o que já foi implementado de cada regra.src/app/globals.css)src/components/uisupabase/migrationsRequisitos: Node.js 20.9+ e npm.
npm install
cp .env.example .env.local # opcional por enquanto
npm run dev
Acesse http://localhost:3000 (redireciona para /dashboard).
Outros comandos:
| Comando | O que faz |
|---|---|
npm run build | Build de produção |
npm start | Sobe o build de produção |
npm run lint | ESLint |
npm run typecheck | Verificação de tipos |
npm run format | Formata o código com Prettier |
meumix do GitHub.MEUMIX_DATA_SOURCE=demo é o padrão).O plano gratuito (Hobby) da Vercel é suficiente para o MVP.
src/
app/
(app)/ # Rotas com o shell (sidebar + topbar)
dashboard/ # Dashboard do jogador
mixes/ # Lista e detalhes ([id])
admin/ # Painel administrativo (mixes e administradores)
entrar/ # Login, cadastro e recuperação de senha
auth/callback/ # Retorno dos links enviados por e-mail
jogadores/ # Busca e perfil ([id])
rankings/ # Ranking com filtro de período e busca
estatisticas/ # Números da comunidade
clipes/ # Clipes e highlights
configuracoes/ # Conta, comunidade e integrações
loading.tsx, error.tsx
components/
brand/ # Marca "meumix"
layout/ # Sidebar, topbar, navegação mobile, busca, menu do usuário
ui/ # Componentes base reutilizáveis
stats/ mixes/ players/ # Componentes de domínio
lib/ # Regras de negócio puras (estatísticas, ELO, times, formatação)
integrations/ # Utilitários de integrações (ainda não implementadas)
services/
data-source.ts # Contrato de acesso a dados
demo/ # Implementação com dados FICTÍCIOS (isolada)
queries.ts # Consultas usadas pelas páginas
types/ # Modelo de domínio e view models
supabase/migrations/ # Schema PostgreSQL planejado
src/services/demo e a UI exibe o selo "Demo" / a faixa "Modo demonstração" sempre que dataSource.kind === "demo".services/queries.ts, que depende apenas da interface DataSource. Para o Supabase, basta criar services/supabase/ implementando a mesma interface e selecioná-la em services/index.ts.community_members).NEXT_PUBLIC_* chegam ao navegador; chaves privadas (Supabase service role, Steam Web API) nunca devem usar esse prefixo.O login usa Supabase Auth (e-mail e senha, confirmação por e-mail e recuperação de senha) em /entrar.
| Papel | Como é definido | Pode |
|---|---|---|
| Super admin | E-mail em SUPER_ADMIN_EMAILS (com e-mail confirmado) | Tudo, inclusive nomear/remover administradores |
| Administrador | profiles.role = 'admin', concedido pelo super admin | Criar e gerenciar mixes |
| Jogador | Padrão de toda conta nova | Usar a plataforma |
src/lib/auth/permissions.ts, verificadas no servidor nas Server Actions (src/app/(app)/admin/actions.ts).role pelo usuário (0002_auth.sql); só o servidor altera com a chave service role, após checar o super admin.MEUMIX_DEV_SESSION_EMAIL simula uma sessão.supabase/migrations/0001_init.sql, 0002_auth.sql, 0003_registrations.sql, 0004_votes_audit_realtime.sql, 0005_draft.sql, 0006_penalties_tiebreaker.sql, 0007_elo_matches.sql, 0008_full_name.sql, 0009_steam.sql, 0010_admin_config.sql, 0011_match_stats.sql, 0012_link_guests.sql, 0013_csrep.sql, 0014_team_suggestion.sql, 0015_badges.sql, 0016_delete_match.sql, 0017_confirm_links.sql, 0018_clips.sql, 0019_clip_media.sql, 0020_badges_seed.sql, 0021_badges_more.sql, 0022_twitch.sql, 0023_profiles_privacy.sql, 0024_account_deletion.sql, 0025_badges_auto.sql, 0026_badges_lanterna.sql, 0027_mix_skips.sql, 0028_badge_progress_detail.sql, 0029_badges_destaques.sql, 0030_player_aliases.sql, 0031_bolao_push.sql, 0032_mix_chronicles.sql, 0033_badges_bolao.sql e 0034_map_cache.sql.https://meumix.vercel.app e adicione https://meumix.vercel.app/auth/callback (e http://localhost:3000/auth/callback) em Redirect URLs.NEXT_PUBLIC_SUPABASE_URL, NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY, SUPABASE_SECRET_KEY e SUPER_ADMIN_EMAILS, e faça um novo deploy.GEMINI_API_KEY (crie em https://aistudio.google.com/apikey). Envie um print por mapa com o nome do mapa no nome do arquivo (ex.: mirage.png).CRON_SECRET na Vercel com um valor aleatório longo; o cron diário de chama , que apaga IP/navegador com mais de 6 meses.supabase/migrations/0001_init.sql e implementar services/supabase.Regras, PICK e limitações: docs/insignias.md. Testes: npm run test:badges (motor) e npm run test:rls (banco).
Modelo de permissões e ameaças, tabelas e RLS, inventário de dados pessoais, plano de testes, pendências e resposta a incidentes: docs/seguranca/.
GET /api/historico devolve os mixes finalizados em JSON (sem e-mails), com placar, mapas e estatísticas por jogador.
Parâmetros opcionais: jogador (nick ou id), de e ate (AAAA-MM-DD) e limite (1–100, padrão 20).
Exemplo: https://meumix.vercel.app/api/historico?jogador=barker&limite=5.
vercel.json/api/cron/retencaoTWITCH_CLIENT_ID e TWITCH_CLIENT_SECRET. Cada jogador informa o canal em Configurações (ou o admin, em Admin → Jogadores). O site mostra quem está ao vivo, as gravações de cada mix (a Twitch apaga as VODs após 7 dias; transforme em Destaque para guardar) e importa os clipes criados durante o mix.VAPID_PUBLIC_KEY e VAPID_PRIVATE_KEY na Vercel (a privada como Sensitive). Para os avisos por horário (inscrições abrindo, vagas, bolão fechando, lives), crie uma tarefa gratuita em cron-job.org que chama https://meumix.vercel.app/api/cron/avisos a cada 5 minutos com o cabeçalho Authorization: Bearer <CRON_SECRET>. Detalhes em docs/bolao-e-avisos.md.GEMINI_API_KEY (passo 5) a crônica de cada mix é escrita pela IA; sem ela, sai do modelo pronto. Rode 0032_mix_chronicles.sql. Detalhes em docs/cronica-do-mix.md.