A plataforma interativa de estudos Gabaritando é voltada para alunos do Ensino Médio e vestibulandos, com foco em questões do ENEM. Este produto foi desenvolvido como projeto final da Formação Desenvolvedor FullStack Júnior, oferecida pela +PraTI e CodificaEdu. O sistema promove progressão do aluno em questões organizadas por área de conhecimento e por níveis de dificuldade, permite a criação de flashcards para reforço dos conceitos aprendidos e oferece métricas sobre o desempenho do usuário.
Oferecer um ambiente digital inteligente de estudo, que:
- Estimula o aprendizado progressivo com base em acertos;
- Mapeia métricas de desempenho por área, competência e habilidade;
- Gera feedback imediato e relatórios de desempenho;
- Reforça o conteúdo com flashcards criados automaticamente.
A lógica pedagógica se baseia em três pilares:
- Repetição ativa: o aluno só progride ao acertar pelo meno 70% das questões.
- Autonomia guiada: o aluno controla o ritmo, mas o sistema direciona a progressão.
- Login simples com papéis de acesso:
local→ aluno (usuário principal)admin→ administrador e gestor de conteúdo
- Cada usuário possui um profile com:
- Nome, e-mail e nível atual;
- Pontos de XP acumulados;
- Métricas de desempenho (precisão, tempo médio, áreas dominantes);
- Avatar personalizável
- Cada aluno pode iniciar uma sessão que controla:
- Questões apresentadas;
- Alternativas embaralhadas;
- Tempo de resposta e número de tentativas;
- Cada resposta é registrada como uma Attempt, contendo:
- ID da questão e alternativa escolhida;
- Tempo de resposta;
- Resultado (acerto ou erro);
- Mapeamento completo da ordem apresentada.
- Questões classificadas por:
- Área (ex: Matemática e suas Tecnologias);
- Competência (ex: Resolver problemas com proporcionalidade);
- Habilidade (ex: H5 — Resolver problemas que envolvam razão e proporção);
- Cada questão possui:
- Enunciado, alternativas (A-E) e identificação da correta;
- Dificuldade (nível 1-5);
- Relacionamento com competência e habilidade.
- A pontuação (XP) é calculada com base na dificuldade da questão e no nível do aluno;
- Acertos concedem XP e podem promover aumento de nível;
- Métricas consolidadas:
- totalSessions — total de sessões realizadas;
- avgAnswerTimeMs — tempo médio de resposta;
- topArea, topSkills e topCompetencies — destaques baseados em acertos reais.
- Criados manualmente a partir de dificuldades encontradas pelo aluno;
- Contêm termo, definição e origem;
- Sistema de busca e filtro por área.
- Podem ser visualizados um por vez, para estudo em ordem aleatória ou de criação.
- Integrada ao Google Gemini, permite a realização de perguntas sobre o conteúdo sem sair da plataforma.
- Java 21
- Spring Boot 3
- Spring Security (JWT)
- JPA / Hibernate
- PostgreSQL
- Lombok
- Swagger UI
- Gemini
- React + Vite
- SASS
- Context API
- Axios
- React Router
- Docker
- GitHub Actions (CI/CD)
Endpoint /profile/full retorna um conjunto completo de informações do aluno:
- XP total e nível atual;
- Precisão geral e tempo médio de resposta;
- Áreas, competências e habilidades com melhor desempenho (baseadas em acertos);
- Quantidade de flashcards criados.
Importante:
As métricas de topArea, topSkills e topCompetencies consideram somente acertos, evitando distorções estatísticas.
Autenticação via token JWT; Enviar Authorization: Bearer nos endpoints protegidos.
enem_app
├── backend
│ ├── src/main/java/org/plataform/backend
│ │ ├── controllers
│ │ ├── entity
│ │ ├── dtos
│ │ ├── services
│ │ └── ...
│ └── resources/application.properties
│
├── db
│ ├── docker-compose.yml
│ └── init.sql
│
├── frontend
│ ├── public
│ └── src
│ ├── components
│ ├── pages
│ ├── services
│ └── ...
│
├── docker-compose.yml
└── README.md| Método | Endpoint | Descrição |
|---|---|---|
POST |
/auth/login |
Autenticação do usuário |
GET |
/profile/full |
Retorna perfil completo e métricas |
POST |
/sessions/start |
Inicia uma nova sessão de estudo |
POST |
/attempts/submit |
Registra uma tentativa de resposta |
GET |
/flashcards |
Lista flashcards do usuário |
POST |
/flashcards |
Cria novo flashcard |
User
├── id, name, email, xpPoints, level, profileImage
└── sessions (1:N)
Session
├── id, userId, levelId, presentedMapping
└── attempts (1:N)
Attempt
├── questionId, alternativeId, isCorrect, answerTimeMs, xpEarned
Question
├── id, difficulty, areaId, competencyId, skillId
└── alternatives (1:N)
- Extração de dados: As informações são obtidas a partir de arquivos PDF e CSV. Durante essa etapa, os dados são estruturados e consolidados em um CSV padronizado, com colunas e formatos consistentes.
- Carga no banco de dados: O arquivo CSV consolidado é utilizado para popular o banco de dados. Essa carga pode ser realizada manualmente.
- Persistência via JPA: O JPA (Java Persistence API) é responsável por gerenciar o mapeamento objeto-relacional, permitindo que os dados extraídos do CSV sejam convertidos em entidades Java e armazenados de forma estruturada no banco. Esse processo garante integridade e abstrai a complexidade das operações SQL.
- Consulta via API REST: Quando o sistema é consultado, a API REST realiza buscas no banco de dados, recupera as informações persistidas e as retorna no formato JSON.
- Consumo pelo Front-end: O JSON retornado é consumido pela aplicação front-end, que exibe as informações de forma acessível para o usuário final.
Para visualizar o protótipo das telas do projeto, clique aqui.
git clone
cd enem_appA pasta enem_app/ contém o arquivo docker-compose.yml responsável por subir todo o ambiente (backend, frontend e banco de dados).
Certifique-se de ter o Docker e o Docker Compose instalados em sua máquina. Em seguida, execute o comando abaixo para buildar e subir todos os containers:
docker-compose up --buildApós o build e inicialização, os serviços principais estarão disponíveis em:
- Frontend (React): http://localhost:5174
- http://localhost:8080/swagger-ui/index.html
- localhost:80/
Este projeto está abertos a melhorias, correções, sugestões e novas funcionalidades. Para contribuir, faça um fork do repositório, crie uma branch para sua contribuição e abra um PR, assim podemos analisar as contribuições. Procure seguir os padrões de código do projeto.