TreeMap
A free, open-source disk-space visualizer. Squarified treemap, duplicate hunting, disk-full forecasting, and cleanup that only ever moves files to the Trash.
翻譯準備中
尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證正在載入完整 README。 以下為已儲存的摘錄。
O companheiro do seu modo Carreira de Atleta. Registre partidas, acompanhe estatísticas e evolução, viva a carreira em uma timeline, leia as manchetes sobre você e converse com um assistente que conhece cada jogo. O FC Career Companion faz o jogador sentir que acompanha uma carreira de futebol viva — não que preenche uma planilha. É uma mistura de modo carreira, diário esportivo, estatísticas, narrativa e um companion de IA.檢視完整 README ↗
O companheiro do seu modo Carreira de Atleta. Registre partidas, acompanhe estatísticas e evolução, viva a carreira em uma timeline, leia as manchetes sobre você e converse com um assistente que conhece cada jogo.
O FC Career Companion faz o jogador sentir que acompanha uma carreira de futebol viva — não que preenche uma planilha. É uma mistura de modo carreira, diário esportivo, estatísticas, narrativa e um companion de IA.
Status: Fase 1 — protótipo navegável de alta fidelidade. Todas as telas funcionam com dados mockados e persistência local no navegador. Backend, banco, agente de IA real e transcrição de áudio são as próximas fases (ver Roadmap).
| Painel da carreira | Estou sem ideia |
|---|---|
| Home (mobile) | Registrar partida (mobile) | Timeline (mobile) |
|---|---|---|
| Tela | Rota | O que faz |
|---|---|---|
| Início | / | Cartão do jogador (OVR, clube, temporada, valor), números da temporada, forma recente, próximo jogo, último resultado, objetivos, notícias e acontecimentos recentes |
| Painel da carreira | /carreira | KPIs (jogos, titularidades, minutos, gols, assistências, nota, cartões, V/E/D), gráficos de nota por partida, gols/assistências por mês e evolução do overall, recortes por competição e por temporada, títulos, prêmios e recordes. Alterna temporada × carreira |
| Partidas | /partidas | Próximos jogos, lista da temporada agrupada por mês, filtros por competição e resultado |
| Registrar partida | /partidas/nova | Registro rápido (steppers grandes, resultado ao vivo, validação por campo). Pré-preenchimento a partir da agenda. Tela de pós-jogo com marcos e notícia gerados |
| Registrar por voz | /partidas/nova?modo=voz | Gravar → transcrever → interpretar → prévia do que foi entendido e do que faltou → perguntas → aplicar ao formulário → confirmar. Nada é salvo sem confirmação e nada é inventado |
| Timeline | /timeline | História da carreira em capítulos por temporada: estreia, gols, transferências, convocações, lesões, títulos, prêmios, recordes, rivalidades, entrevistas |
| Notícias | /noticias | Manchetes fictícias da carreira e notícias geradas a partir das partidas |
| Assistente | /assistente | Chat com o companion (respostas simuladas, fundamentadas nos dados reais da carreira) |
| Perfil | /jogador | Ficha completa, números da carreira, histórico de clubes, títulos, prêmios e recordes |
| Nova carreira | /nova-carreira | Criador em 4 etapas (identidade, perfil em campo com seletor no campo, clube e nível, objetivo/desafio) com pré-visualização ao vivo |
| Estou sem ideia | /ideias | Sugestões de clubes, jogadores, posições, nacionalidades, desafios e inspirações históricas, cada uma levando ao criador já preenchido |
| Surpreenda-me | botão global | Gera uma carreira completa (nome, nacionalidade, idade, posição, pé, altura, clube, arquétipo, personalidade, objetivo, desafio, história e inspiração) com revelação animada |
Outras características: múltiplas carreiras com troca rápida, restauração dos dados de demonstração, navegação mobile própria (barra inferior com ação central), estados de carregamento/vazio/erro/sucesso em todas as telas, prefers-reduced-motion respeitado.
| Camada | Escolha | Por quê |
|---|---|---|
| Framework | Next.js 16 (App Router, Turbopack) + React 19 | Rotas por arquivo, server components para o shell, API routes/server actions prontas para a Fase 2 sem trocar de framework |
| Linguagem | TypeScript strict + noUncheckedIndexedAccess | Domínio rico (estatísticas, regras); erros pegos em compilação |
| Estilo | Tailwind CSS v4 com tokens em CSS (@theme) | Tokens do Design System viram utilitários; tema trocável por variáveis CSS |
| Acessibilidade de primitivas | Radix UI (Dialog, Tabs, Dropdown, Tooltip, RadioGroup) | Foco, teclado e ARIA corretos sem reinventar |
| Ícones | Lucide (ISC) | Um único estilo de traço em todo o app |
| Fontes | Fonte de sistema da Apple + Inter via @fontsource (SIL OFL) | Visual nativo em iPhone/Mac; reserva auto-hospedada no resto |
| Animação | Motion (motion/react) | Transições, springs e animações de layout declarativas em React |
| Validação | Zod | Mesmo schema valida UI, casos de uso e (futuramente) API |
| Estado (Fase 1) | Zustand + persist (localStorage) | Simples, fora do React para os casos de uso; substituível pela API na Fase 2 |
| Testes | Vitest + Testing Library, Playwright, axe-core | Unidade/integração rápidos; E2E desktop e mobile; auditoria WCAG automatizada |
| Qualidade | ESLint (flat config, limites de camada), Prettier | Mesmas regras local e CI |
Decisões detalhadas em docs/adr.
┌──────────────────────────────────────────────────────────────┐
│ app/ Rotas (server) — metadata, composição │
│ components/ Apresentação: ui/ (Design System), features │
│ state/ Store de UI (Zustand) — orquestra, não decide │
├──────────────────────────────────────────────────────────────┤
│ application/ Casos de uso puros: registerMatch, createCareer│
│ domain/ Modelos e regras: stats, milestones, schemas, │
│ geradores de ideias, notícias │
├──────────────────────────────────────────────────────────────┤
│ infrastructure/ Portas e adaptadores: IA, transcrição, │
│ extração de partida; registry (composition root)│
│ lib/ Utilidades transversais: logger, Result, format│
└──────────────────────────────────────────────────────────────┘
domain e application não importam React, Next nem componentes (garantido por ESLint).Result<novaCarreira>; a store só persiste. Trocar localStorage por API não toca regra de negócio.CareerAssistant, TranscriptionProvider e MatchExtractor são interfaces; infrastructure/registry.ts escolhe a implementação. Hoje: mock + extrator por regras.lib/logger.ts com sinks plugáveis (Sentry/OTel entram como um sink), app/error.tsx registra erros de rota.Mais em docs/architecture.md.
Pré-requisitos: Node.js 22+ e npm 10+.
git clone https://github.com/EduBertozzi/FC27.git
cd FC27
npm install
cp .env.example .env.local # opcional na Fase 1
npm run dev # http://localhost:3000
A carreira de demonstração (Rafa Monteiro, Sporting CP, 2026/27) carrega automaticamente. Dados criados ficam no localStorage do navegador; use trocar carreira → Restaurar dados de demonstração para voltar ao estado inicial.
| Comando | Descrição |
|---|---|
npm run dev | Servidor de desenvolvimento |
npm run build / npm start | Build de produção / servir o build |
npm run lint | ESLint sem tolerância a warnings |
npm run format / format:check | Prettier |
npm run typecheck | Gera tipos de rotas e roda tsc |
npm test | Testes unitários e de integração (Vitest) |
npm run test:e2e | E2E + acessibilidade (Playwright; requer npm run build antes) |
npm run validate | lint → typecheck → test → build |
node scripts/screenshot.mjs <url> <dir> <rotas...> | Capturas desktop e mobile para revisão visual |
Documentadas em .env.example. Na Fase 1 nenhuma é obrigatória.
| Variável | Uso | Fase |
|---|---|---|
NEXT_PUBLIC_LOG_LEVEL | Nível mínimo do logger (debug…error) | 1 |
AI_PROVIDER, AI_API_KEY | Provedor do agente de carreira | 8 |
TRANSCRIPTION_PROVIDER, TRANSCRIPTION_API_KEY | Provedor de transcrição | 9 |
DATABASE_URL | Banco relacional | 2 |
Segredos nunca entram no Git (.env* ignorado, exceto .env.example).
Fase 1: sem banco. A store persiste carreiras no localStorage (chave fccc:careers, versionada).
Fase 2 (planejado): banco relacional com ORM e migrations versionadas — SQLite em desenvolvimento local e PostgreSQL em produção, mesmo schema. Previsto:
npm run db:migrate — aplica migrationsnpm run db:seed — carrega a carreira de demonstração (src/data/mock-career.ts vira seed)npm run db:reset — recria o banco localOs casos de uso em src/application já recebem/devolvem entidades puras, então a troca é feita implementando um repositório.
npm test # 56 testes de unidade e integração
npm run build && npm run test:e2e # 59 cenários E2E (desktop + mobile)
registerMatch sobre a carreira demo (estatísticas, objetivos, notícia, agenda, imutabilidade), createCareer.npm run build && npm start
O app é um Next.js padrão: roda em qualquer host Node 22 ou na Vercel (recomendado — previews por PR nativos). Fluxo de ambientes previsto:
Development (local) → CI (GitHub Actions) → Preview (deploy por PR) → Production (main)
Para ativar previews/produção na Vercel: importar o repositório, definir as variáveis de ambiente por ambiente e proteger main.
.github/workflows/ci.yml roda em push e PR:
Install → Lint → Format → Type check → Tests → Build → E2E (Playwright + axe)
Qualquer falha reprova a pipeline.
src/
├── app/ # rotas (page.tsx = server component + metadata)
├── components/
│ ├── ui/ # Design System: Button, Card, Field, Dialog, Tabs…
│ ├── football/ # Escudo ilustrativo, camisa, selo de OVR, forma, campo
│ ├── charts/ # Gráficos SVG (nota, contribuições, overall, V/E/D)
│ ├── layout/ # Shell, sidebar, navegação mobile, cabeçalhos
│ └── <feature>/ # home, career, match, timeline, news, assistant, ideas…
├── domain/ # modelos, regras e schemas (sem React)
├── application/ # casos de uso puros
├── infrastructure/ # portas/adaptadores de IA e voz + registry
├── state/ # stores Zustand e seletores
├── data/ # carreira de demonstração
├── lib/ # logger, Result/AppError, format, random, cn
└── hooks/
e2e/ # Playwright
docs/ # arquitetura, design system, ADRs, screenshots
.claude/skills/ # skills de agente instaladas (UI/UX, a11y, React)
Identidade Glass — vidro fosco sobre luzes de estádio, na linguagem visual da Apple: fonte de sistema (SF Pro, com Inter de reserva), cantos generosos, branco como ação principal e a luz ambiente tingida pela cor do clube da carreira. Animações com Motion (transições de tela, entrada em cascata, números contando, indicador de aba deslizante), sempre respeitando "reduzir movimento". Documentação em docs/design-system.md e ao vivo em /design-system.
main — produção, protegida.develop — integração (opcional enquanto o time é pequeno).feat/*, fix/*, chore/* — trabalho do dia a dia, via PR com CI verde.feat:, fix:, refactor:, test:, docs:, chore:.src/data/mock-career.ts); persistência no localStorage.MockCareerAssistant — respostas por intenção, calculadas a partir dos dados reais da carreira.WebSpeechTranscriber, Web Speech API — Chrome, Edge e Safari; Firefox cai para digitação). O app não grava nem guarda áudio; o navegador pode usar o serviço de fala do fornecedor (Google no Chrome, Apple no Safari). A interpretação do texto é por regras (RuleBasedMatchExtractor, pt-BR); um extrator por IA entra na Fase 8.Projeto independente de fãs, sem afiliação com a Electronic Arts, EA Sports FC, clubes, ligas ou federações. Nenhum logo, escudo, imagem, fonte ou asset proprietário é utilizado. Nomes de clubes aparecem apenas como texto. Jogadores, veículos de imprensa e acontecimentos da carreira demo são fictícios. O nome de trabalho "FC Career Companion" deve passar por revisão de marca antes de qualquer lançamento público.
| Design System | /design-system | Catálogo vivo de tokens e componentes |