{
  "markdown": "<p align=\"center\">\n  <img src=\"public/banner.svg\" alt=\"Fut.Manager\" width=\"100%\">\n</p>\n\n# ⚽ Fut.Manager\n\n**O cockpit completo para quem administra um racha.** Mensalistas, reservas, sorteio de times equilibrado, financeiro, mural social e ranking técnico — tudo em um só lugar, pensado para ser usado no campo, pelo celular, minutos antes da bola rolar.\n\n[![License: MIT](https://img.shields.io/badge/license-MIT-10b981.svg)](LICENSE)\n[![Node.js](https://img.shields.io/badge/node-%3E%3D20-339933?logo=node.js&logoColor=white)](package.json)\n[![TypeScript](https://img.shields.io/badge/TypeScript-5.8-3178C6?logo=typescript&logoColor=white)](tsconfig.json)\n[![React](https://img.shields.io/badge/React-19-61DAFB?logo=react&logoColor=white)](package.json)\n[![Supabase](https://img.shields.io/badge/Supabase-Postgres%20%2B%20Storage-3ECF8E?logo=supabase&logoColor=white)](https://supabase.com)\n[![Deploy](https://img.shields.io/badge/deploy-Render-46E3B7?logo=render&logoColor=white)](openwiki/operations/deploy-guide.md)\n\n---\n\n## O que é isso\n\nTodo grupo de futebol society passa pelas mesmas dores: quem vai jogar, quem paga o quê, como sortear times justos, onde ficam as fotos da resenha e quem realmente é bom em campo. O **Fut.Manager** resolve tudo isso em um único aplicativo web, mobile-first, para o administrador do grupo (e para cada atleta) usar sem depender de planilha, grupo de WhatsApp lotado de enquete ou papel.\n\nNasceu como o sistema real de um grupo de futebol e evoluiu para uma plataforma completa e **white-label** — hoje roda em produção sobre Postgres (Supabase), é hospedável em qualquer lugar que rode um container Docker, e o nome exibido na interface é 100% configurável: defina a variável `APP_NAME` no seu `.env` com o nome do seu próprio grupo e ele se propaga automaticamente por toda a UI, notificações e mensagens de compartilhamento — sem tocar em nenhuma linha de código.\n\n## ✨ Funcionalidades\n\n- **Gestão de atletas** — cadastro completo, categorias (mensalista/reserva), soft delete que preserva histórico e ranking mesmo após saída do jogador.\n- **Sorteio inteligente de times** — algoritmo Monte Carlo (até 5.000 iterações) que equilibra Overall, garante presença mínima de posições defensivas/ofensivas por time e aprende afinidades históricas de duplas e trios.\n- **Confirmação de presença e fila de reservas** — deadline configurável, convocação automática de reservas por ordem de fila quando um mensalista cancela.\n- **Financeiro** — cobrança mensal automática, isenção de goleiros/reservas, controle de pagamentos e eventos sociais (churrascos, confraternizações) com regras de isenção próprias.\n- **Ranking técnico e Hall da Fama** — avaliações por atributo (defesa, passe, finalização, drible, físico...), Overall calculado, streaks por temporada, duplas/trios mais fortes.\n- **Museu do Clube** — mural social com galeria de memórias, momentos épicos, linha do tempo de rodadas e central de comunicação/avisos.\n- **Avatares de jogador com IA** — geração automática de card/retrato esportivo a partir da foto do atleta, via OpenRouter ou Gemini.\n- **Feito para o campo** — interface mobile-first de verdade: alvos de toque generosos, tabelas que viram cards no celular, menus que não quebram em tela pequena.\n- **White-label por variável de ambiente** — o nome do seu grupo (`APP_NAME`) é a única coisa que muda entre a sua instalação e a de qualquer outra pessoa que clonar este projeto. Nenhum dado pessoal ou nome de grupo fica hardcoded no código-fonte.\n\n## 🧱 Stack técnica\n\n| Camada | Tecnologia |\n|---|---|\n| Frontend | React 19 + TypeScript + Vite + Tailwind CSS |\n| Backend | Node.js + Express (processo único, serve API e frontend) |\n| Banco de dados | PostgreSQL via [Supabase](https://supabase.com) |\n| Armazenamento de mídia | Supabase Storage |\n| Autenticação | JWT próprio + bcrypt (sem dependência do Supabase Auth) |\n| Geração de avatar (IA) | [OpenRouter](https://openrouter.ai) (recomendado) ou Google Gemini |\n| Hospedagem | [Render](https://render.com) (Web Service via Docker) |\n\nArquitetura de monólito único e deliberada: o mesmo processo Express serve a API REST e o build estático do frontend, o que mantém o custo de hospedagem baixo (um serviço só) sem abrir mão de nenhuma funcionalidade.\n\n## 🚀 Começando\n\n### Pré-requisitos\n\n- Node.js 20+\n- Uma conta [Supabase](https://supabase.com) (plano free cobre o uso de um racha comum)\n- Opcional: uma chave [OpenRouter](https://openrouter.ai/keys) ou [Gemini](https://ai.google.dev) para geração de avatar com IA\n\n### Setup local\n\n```bash\ngit clone https://github.com/julianscunha/Fut.Manager.git\ncd Fut.Manager\nnpm install\ncp .env.example .env.local   # defina APP_NAME com o nome do seu grupo, credenciais do Supabase, JWT_SECRET, etc.\nnpm run dev\n```\n\nAcesse `http://localhost:3000`. Login padrão criado pelo schema inicial: `admin@racha.com` / `admin` — **troque essa senha antes de expor o sistema publicamente**.\n\n### Scripts disponíveis\n\n```bash\nnpm run dev      # servidor de desenvolvimento (tsx + Vite em middleware mode, com HMR)\nnpm run build     # build de produção (frontend via Vite + backend via esbuild)\nnpm start       # roda o build de produção\nnpm run lint      # type-check (tsc --noEmit)\nnpm run clean     # remove dist/\n```\n\n## ☁️ Deploy em produção\n\nGuia completo, passo a passo, para colocar seu próprio racha no ar (setup do Supabase, schema SQL, variáveis de ambiente, deploy no Render): **[openwiki/operations/deploy-guide.md](openwiki/operations/deploy-guide.md)**.\n\nAntes de ir ao ar, use o **[openwiki/operations/deploy-checklist.md](openwiki/operations/deploy-checklist.md)** para conferir cada etapa de segurança e funcionamento.\n\n## 📚 Documentação\n\nToda a documentação de arquitetura, decisões de produto e auditorias vive em [`openwiki/`](openwiki/):\n\n| Documento | Conteúdo |\n|---|---|\n| [Visão Geral da Arquitetura](openwiki/architecture.md) | Arquitetura do sistema (Node/Express + React + Postgres) |\n| [Hardening de Segurança](openwiki/architecture/security.md) | Correções de segurança e autenticação JWT/bcrypt |\n| [Relatório de Auditoria](openwiki/architecture/audit-report.md) | Auditoria funcional, de segurança e de UX/mobile |\n| [Guia de Deploy](openwiki/operations/deploy-guide.md) | Deploy em produção (Supabase + Render) |\n| [Checklist de Deploy](openwiki/operations/deploy-checklist.md) | Checklist de verificação pré/pós-deploy |\n| [Handoff](openwiki/operations/handoff.md) | Histórico de entregas e decisões arquiteturais |\n| [Visual System](openwiki/design/visual-system.md) | Direção de arte e identidade visual |\n| [Permissões do Sistema](openwiki/guide/permissions.md) | Roles (admin, auxiliar, jogador), matriz de capacidades e mapeamento role ↔ category |\n\nPara quem for trabalhar no código com o Claude Code, veja também o [`CLAUDE.md`](CLAUDE.md) na raiz — mapeia a arquitetura e as regras de negócio essenciais.\n\n## 🤝 Contribuindo\n\nIssues e pull requests são bem-vindos! Veja o [guia de contribuição](CONTRIBUTING.md) para setup local, convenções de código e como abrir um PR.\n\n## 📄 Licença\n\nDistribuído sob a licença [MIT](LICENSE).\n",
  "bytes": 7119,
  "sha": "d111449394c06216ebf9f14771e77bb87bc51e3e9727734fd78708c1302fa9de",
  "repo_slug": "julianscunha/fut.manager",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/okf_julianscunha_fut_manager_openwiki_index__67c1d791/readme"
}