Kodan é uma plataforma de treino para leitura, diagnóstico e explicação de código em TypeScript e React. A pessoa escolhe um desafio, analisa o snippet, envia o diagnóstico e acompanha o feedback e a evolução de ELO.
O repositório é um monorepo Bun com duas aplicações locais: o produto web e a documentação Docusaurus.
- Bun 1.3 ou superior;
- PostgreSQL apenas para os fluxos integrados com dados e autenticação;
- Git.
bun installCrie seu arquivo local a partir do exemplo seguro:
cp apps/web/.env.example apps/web/.envNo PowerShell:
Copy-Item apps/web/.env.example apps/web/.envPara desenvolver apenas a interface sem PostgreSQL nem Better Auth, ative temporariamente o mock em apps/web/src/lib/mock-mode.ts; nesse caso, os dados vivem apenas na memória. Não envie apps/web/.env para o Git.
As limitações e a troca para a integração real estão documentadas em Modo mock local.
Para trabalhar com banco, autenticação ou Prisma, mantenha o mock desativado e preencha DATABASE_URL, DIRECT_URL, BETTER_AUTH_SECRET, BETTER_AUTH_URL e CORS_ORIGIN.
bun run db:pushUse terminais separados durante o desenvolvimento:
# Aplicação Kodan
bun run dev:webAbra http://localhost:3001.
# Documentação e referência de API
bun run docs:devAbra http://localhost:3002.
bun run docs:dev gera a especificação OpenAPI antes de iniciar o Docusaurus. Para trabalhar apenas na interface da documentação, sem regenerar a API, use bun run --filter docs dev.
Se uma porta já estiver em uso, finalize o processo que está usando
3001ou3002, ou reutilize o servidor que já está em execução. Evite iniciarbun run devduas vezes.
| Quero... | Leia / rode |
|---|---|
| Entender as telas e rotas | Aplicação e rotas |
| Preparar o ambiente com mais detalhes | Primeiros passos |
| Entender a separação entre apps, packages e conteúdo | Mapa de arquitetura |
| Abrir um PR | Fluxo de contribuição e CONTRIBUTING.md |
| Criar ou revisar material editorial | Guia do banco de perguntas |
| Aplicação | Comando | URL | Papel |
|---|---|---|---|
| Web | bun run dev:web |
http://localhost:3001 |
Catálogo, arena de treino, perfil e API Next.js. |
| Docs | bun run docs:dev |
http://localhost:3002 |
Docusaurus, guias para contribuidores e referência OpenAPI. |
apps/
web/ # Next.js: interface e Route Handlers HTTP
docs/ # Docusaurus e referência OpenAPI
packages/
ui/ # Primitives shadcn/ui, estilos e tokens
db/ # Prisma, schema e acesso a PostgreSQL
auth/ # Better Auth
env/ # Validação tipada de variáveis de ambiente
content/
challenges/ # Desafios já disponíveis para treino
question-bank/ # Seeds editoriais para curadoria
scripts/ # Geração OpenAPI e rotinas editoriais
Regra prática: mantenha código específico da aplicação em apps/web; extraia para packages/ui apenas o que for realmente reutilizável; use content/challenges para desafios jogáveis e content/question-bank para material editorial ainda não promovido.
| Variável | Necessária | Finalidade |
|---|---|---|
DATABASE_URL |
No modo integrado | Conexão usada pela aplicação. |
DIRECT_URL |
Para Prisma | Conexão direta para schema e migrações. |
BETTER_AUTH_SECRET |
No modo integrado | Segredo com pelo menos 32 caracteres. |
BETTER_AUTH_URL |
No modo integrado | URL da aplicação, normalmente http://localhost:3001. |
CORS_ORIGIN |
No modo integrado | Origem autorizada, normalmente a mesma URL local. |
OPENROUTER_API_KEY |
Não | Habilita feedback por IA; sem ela há fallback local. |
OPENROUTER_MODEL |
Não | Modelo de IA, com padrão openai/gpt-4o-mini. |
LEGACY_SQLITE_URL |
Não | Caminho do banco legado para migração. |
| Comando | O que faz |
|---|---|
bun run dev:web |
Inicia somente o Next.js na porta 3001. |
bun run docs:dev |
Gera OpenAPI e inicia o Docusaurus na porta 3002. |
bun run dev |
Inicia todos os workspaces. Use quando as portas estiverem livres. |
bun run docs:build |
Gera OpenAPI e cria a documentação estática. |
bun run check-types |
Verifica os tipos dos workspaces. |
bun test |
Executa os testes Bun. |
bun run doctor |
Executa o React Doctor. |
bun run db:push |
Aplica o schema Prisma no banco configurado. |
bun run db:backfill:attempts |
Mostra quantas tentativas antigas precisam da classificação de sessão. |
bun run db:backfill:attempts:apply |
Recalcula e persiste número/status das tentativas antigas. |
bun run db:studio |
Abre o Prisma Studio. |
bun run question-bank:generate |
Regenera os artefatos editoriais. |
bun run question-bank:validate |
Valida estrutura e consistência do banco de perguntas. |
Para mudanças de código:
bun run check-types
bun testPara alterações em Docs, contratos HTTP ou OpenAPI:
bun run docs:buildPara alterações React, rode também:
bun run doctorVeja o guia de contribuição para os fluxos de interface, API, dados e conteúdo.