Plataforma full-stack de quizzes para estudantes de programação com React, TypeScript, Node.js, Express, PostgreSQL, Prisma, JWT, refresh token rotacionado, Zod e Tailwind CSS.
apps/
api/ Express + Prisma + PostgreSQL
web/ React + Vite + Tailwind
packages/
shared/ Zod schemas e regras de gamificação- Node.js 22+
- Docker
- PostgreSQL local ou via
docker-compose
npm install
cp apps/api/.env.example apps/api/.env
docker compose up -d postgres
npm run db:migrate
npm run db:seedCredenciais do seed:
- Admin:
admin@codequest.dev/Admin12345! - Estudante:
student@codequest.dev/User12345!
npm run dev --workspace @codequest/api
npm run dev --workspace @codequest/webWeb: http://localhost:5173
API: http://localhost:3333
npm test- Criar conta ou entrar.
- Escolher categoria, dificuldade e quantidade de perguntas.
- Responder quiz sem receber a resposta correta antes da submissão final.
- Receber resultado, XP, nível e progresso.
- Acompanhar perfil, mapa de habilidades, missões, medalhas e ranking.
- Enviar perguntas para revisão.
- Participar da Arena, onde rating pode subir ou descer.
- Criar, editar, arquivar e excluir perguntas nunca usadas.
- Revisar perguntas pendentes.
- Aprovar com checklist obrigatório.
- Rejeitar com motivo obrigatório.
- Acompanhar dashboard, estatísticas, reports e atividade.
- Senhas com bcrypt.
- JWT access token curto.
- Refresh token persistido e rotacionado.
- Helmet, CORS configurado e rate limit em auth.
- Validação com Zod.
- XP e validação de respostas calculados apenas na API.
QuizSessionimpede submissão duplicada e valida se perguntas pertencem à sessão.- Front-end não recebe
isCorrectnem resposta correta em/quizzes/start.
- XP representa progressão pessoal e nunca diminui.
- Rating representa competição e muda apenas na Arena.
- Precisão representa desempenho.
- Medalhas representam conquistas.
- Títulos representam identidade visual no perfil e ranking.
Fórmula de nível:
level = floor(sqrt(xp / 100)) + 1Helpers em packages/shared/src/gamification.ts:
getLevelFromXPgetXPForLevelgetXPProgressToNextLevelcalculateQuizXP
POST /auth/registerPOST /auth/loginPOST /auth/refreshPOST /auth/logoutGET /auth/mePOST /quizzes/startPOST /quizzes/submitGET /quizzes/historyGET /questionsPOST /questionsGET /reviews/pendingPOST /reviews/:questionId/approvePOST /reviews/:questionId/rejectGET /profile/meGET /rankingPOST /arena/startPOST /reportsGET /admin/dashboard
O front-end usa Halo Dark Design System:
background #0A0B0Fsurface #14151Celevated #1E2029border #2A2D38primary #5B6BFFsuccess #2BE08Cwarning #F5D547info #3DD7E5danger #FF3A5C
Componentes base: Button, Card, Input, Badge e ProgressBar, com páginas de Dashboard, Quiz, Arena, Ranking, Profile, Contribute e Admin.