TutorLoom
The learning platform for companies, colleges and training institutes. Free and open source, with an Enterprise edition.
Aplicativo pessoal de estudos e resoluções de questões.
Translation pending
EducationGitHub @penafortefreitas05OnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
Repository information has not been collected yet.
No updates detected yet. GitHub releases will appear here.
The maker's introduction consists of the line above. Read the repository README for more details. Repository README ↗
Loading the full README.
Read the full README ↗SPA (Single Page Application) em Dark Mode projetada para preparação de alta performance em concursos públicos de Tecnologia da Informação (Analista de Sistemas, Engenharia de Software, Tribunais, Bacen, TCU).
#tag pesquisável./), botões de nível (I, M, A, E) e de situação (Todas, Não respondidas, Acertei, Errei, ⭐) e "Mais filtros" (matéria, banca, assunto, ano). Os botões só mexem nos campos de filtro que já existiam. Meta, dias e revisão saíram da barra lateral para não aparecerem duas vezes.--largura-barra no CSS).data/resumos-assunto.json (campos materia, assunto, ideia_central, exemplo, pegadinha; o assunto precisa ser igual ao das questões). Assunto sem texto segue direto para o exemplo. Hoje: Banco de Dados.docs/sql/u5-reportes-questao.sql.focopro/
├── index.html # Estrutura da página
├── manifest.json # Instalação PWA
├── service-worker.js # Cache só dos arquivos do site (nunca da API); abre do cache e avisa versão nova
├── vercel.json # Cabeçalhos de segurança (CSP, anti-iframe etc.)
│
├── css/
│ └── style.css # Estilos Dark Mode
│
├── js/
│ ├── app.js # Orquestrador: estado, eventos e carga inicial
│ ├── ui.js # Renderização das questões, placar e desempenho
│ ├── simulado.js # Cronômetro e correção do simulado
│ ├── storage.js # Histórico: localStorage + nuvem
│ ├── revisao.js # Regra da revisão espaçada e dos status
│ ├── supabase.js # Conexão e consultas ao Supabase (paginadas)
│ ├── auth.js # Login, cadastro e logout
│ ├── notifications.js # Toasts e modais de confirmação
│ ├── api.js # Normalização de questões (matéria, gabarito, IDs)
│ ├── laboratorio-sql.js # Laboratório SQL (carregado só ao abrir); motor em js/vendor/sqljs-1.14.2 (MIT)
│ ├── pwa.js # Menu do celular, Service Worker e botão "Instalar"
│ └── vendor/
│ └── supabase-js-2.117.3.min.js # Biblioteca do Supabase empacotada
│
├── supabase/functions/super-function/
│ └── index.ts # Edge Function da explicação com IA
│
└── icons/ # Ícones PWA
questoes só pode ser lida por usuário logado e só o admin insere/atualiza; historico_respostas só é lido, gravado e apagado pelo próprio dono.{ questaoId, respostaUsuario }; enunciado, alternativas e gabarito são lidos do banco no servidor.Content-Security-Policy-Report-Only) no vercel.json; passa a bloquear depois de um período sem violações.js/vendor/supabase-js-2.117.3.min.js é o @supabase/[email protected] empacotado num arquivo só com o esbuild. Para atualizar:
npm install @supabase/supabase-js@<versao> esbuild
echo "export { createClient } from '@supabase/supabase-js';" > entry.js
npx esbuild entry.js --bundle --format=esm --minify --platform=browser --target=es2020 --legal-comments=none --outfile=supabase-js-<versao>.min.js
Depois troque o nome do arquivo em js/supabase.js e em service-worker.js (e suba o CACHE_NAME).
O app abre do cache do aparelho. A cada publicação que muda qualquer arquivo do site, suba o número do CACHE_NAME em service-worker.js (ex.: focopro-v12 → focopro-v13). É isso que faz o celular baixar a versão nova e mostrar "Nova versão do FocoPro disponível". Sem subir o número, quem já tem o app continua na versão antiga.