Plataforma de provas online voltada para avaliações de programação. Substitui provas em papel por um ambiente controlado no navegador, com editor de código, execução em tempo real e monitoramento de comportamento do aluno.
Escrever código em papel é inviável. Ferramentas genéricas como Google Forms não oferecem ambiente de execução. O WEProg resolve isso com um editor Monaco integrado, compilação de C no servidor e um sistema de tokens para controle de acesso — tudo sem depender de plataformas externas.
- Cadastro e login com JWT
- Dashboard com estatísticas gerais
- Criação de provas com múltiplas questões (título + descrição/exemplo opcional)
- Definição de tempo limite por prova (individual por aluno)
- Geração de tokens de acesso com apelido customizável
- Revogação de tokens
- Pausar/retomar prova (bloqueia entradas e envios)
- Visualização de submissões por prova
- Correção individual com Monaco em modo leitura + terminal executável
- Painel de comportamento do aluno com score de suspeita
- Acesso via token fornecido pelo professor
- Identificação com nome completo e turma
- Timer individual (começa quando o aluno inicia, não quando a prova é criada)
- Editor Monaco com syntax highlight para C
- Terminal com suporte a entradas linha a linha
- Envio automático ao esgotar o tempo
- Bloqueio de DevTools, F12, Ctrl+U, troca de aba, clique direito, copy/paste fora do editor
- Eventos registrados: tentativas de cópia, cola, DevTools, troca de aba, foco perdido, idle
- Score de suspeita calculado automaticamente por pesos por tipo de evento
- Badge visual no painel do professor (normal / suspeito / muito suspeito)
| Camada | Tecnologia |
|---|---|
| Backend | Node.js + Express |
| Autenticação | JWT + bcryptjs |
| Banco de dados | JSON flat files (fs) |
| Compilação | gcc via child_process |
| Editor | Monaco Editor (CDN) |
| Frontend | HTML + CSS + JS vanilla |
weprog/
├── server.js
├── package.json
├── .env
├── .env.example
├── .gitignore
├── routes/
│ ├── auth.js
│ ├── exams.js
│ ├── submissions.js
│ ├── compiler.js
│ └── behavior.js
├── controllers/
│ ├── authController.js
│ ├── examController.js
│ ├── submissionController.js
│ ├── compilerController.js
│ └── behaviorController.js
├── middleware/
│ ├── authMiddleware.js
│ └── rateLimiter.js
├── utils/
│ ├── db.js
│ ├── tokenGenerator.js
│ └── behaviorLogger.js
├── data/ ← gerado automaticamente (gitignored)
├── temp/ ← arquivos .c temporários (gitignored)
└── public/
├── index.html
├── secret/
│ └── index.html
└── assets/
├── css/
│ ├── main.css
│ ├── student.css
│ └── professor.css
└── js/
├── student.js
└── professor.js
Pré-requisitos: Node.js 18+, gcc instalado
# Instala dependências
npm install
# Copia e configura o .env
cp .env.example .env
# Inicia em modo desenvolvimento
npm run devAcesse:
- Aluno:
http://localhost:3000 - Professor:
http://localhost:3000/secret
| Variável | Descrição |
|---|---|
PORT |
Porta do servidor (padrão: 3000) |
JWT_SECRET |
Chave de assinatura dos tokens JWT |
NODE_ENV |
development ou production |
ALLOWED_ORIGIN |
Origem permitida pelo CORS em produção |
- Suba o repositório no GitHub
- Crie um novo Web Service no Render
- Configure as variáveis de ambiente no painel do Render
- Build command:
npm install - Start command:
node server.js
O gcc já está disponível no ambiente Linux do Render — nenhuma configuração extra necessária.
| Linguagem | Status |
|---|---|
| C | ✅ Disponível |
| Python | 🔜 Planejado |