Aplicação web para análise de desempenho de alunos em turmas AWS re/Start, construída em JavaScript vanilla com ES Modules, sem build step. Hospedável diretamente no GitHub Pages.
Lê arquivos CSV exportados do Canvas LMS, identifica alunos pendentes, gera mensagens personalizadas de acompanhamento e exporta resultados em CSV/Outlook.
/ busca, Esc fecha modais, D modo escuro)Refatorada em camadas com responsabilidades claras, seguindo princípios de separação de concerns. Sem build step usa ES Modules nativos do navegador.
src/
├── main.js # Entry point registry de actions e event delegation
├── state.js # Estado global centralizado
├── config.js # Configurações persistidas (localStorage)
│
├── utils/ # Utilitários puros, sem dependências de domínio
│ ├── dom.js # $, $$, byId, setHidden, delegate
│ ├── string.js # normalize, normalizarSectionKey
│ └── format.js # fixEncoding, formatBytes, getSaudacao, formatarEncerramento
│
├── core/ # Lógica de domínio pura (testável, sem DOM)
│ ├── activity.js # isKC, isLab, formatarNomeAtividade
│ ├── student.js # isContaTesteAutomatica, isAlunoIgnorado
│ ├── csv.js # validateCSV, processCSV
│ ├── status.js # getStatus + labels/ícones/cores
│ └── message.js # gerarMensagem (3 variantes)
│
├── services/ # Side-effects (clipboard, storage, exports)
│ ├── clipboard.js # Cópia + abertura do Outlook
│ ├── history.js # Histórico de uploads
│ ├── ignored.js # Gerenciamento da lista de ignorados
│ ├── encerramentos.js # Avisos de encerramento por turma
│ └── exporter.js # Exportação CSV / mensagens
│
└── ui/ # Camada de apresentação (lê/escreve no DOM)
├── toast.js # Notificações
├── theme.js # Tema claro/escuro
├── modal.js # Sistema de modais
├── progress.js # Barra de progresso
├── dropzone.js # Drag & drop
├── preview.js # Pré-visualização do CSV
├── table.js # Renderização e ordenação da tabela
├── charts.js # Gráficos Chart.js
├── settings.js # Modal de configurações
├── envio.js # Modal de envio em massa
├── area-copia.js # Área de cópia rápida
└── shortcuts.js # Atalhos de teclado
styles/
├── main.css # Entry @imports na ordem de cascata
├── base/
│ ├── variables.css # Custom properties (light + dark)
│ └── reset.css # Reset/normalize
├── layout/
│ ├── header.css
│ └── footer.css
└── components/ # Um arquivo por bloco visual
├── upload.css, table.css, modal.css, ...
└── responsive.css # Media queries
data-action todos os listeners centralizados em main.js. Zero onclick inline (incompatível com type="module" por causa do escopo).@import divisão por responsabilidade visual. Ordem garantida no main.css.ui depende de services e core; services depende de core; core é puro. Nada depende de ui.state.js fonte única de verdade, evita variáveis globais espalhadas.Ambas carregadas via CDN no index.html.
Exportação padrão do Canvas LMS contendo (no mínimo) as colunas:
Student (nome do aluno)SIS Login ID (email institucional)Section (turma ex: AWS-RESTART-BRSAO-2024-01)A aplicação detecta automaticamente:
BRASAO → BRSAO
![]() Anderson Albuquerque |
![]() Brian Richard |
© 2025–2026 — Todos os direitos reservados.