ESP32-S3 Bench Guide
ESP32-S3 N16R8 bench guide: live pinout, lessons, simulators and the bench log.
Treine laboratorios AWS com quests tematicas, XP, badges e ranking.
Translation pending
EducationTypeScript · CSSGitHub @wallacemtOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Plataforma de preparação para certificações AWS com gamificação, modos de estudo adaptativos e pipeline de conteúdo via IA.
Translation pending
Taken from the repository README
Loading the full README.
Read the full README ↗Plataforma de preparação para certificações AWS com gamificação, modos de estudo adaptativos e pipeline de conteúdo com IA.
O AWS Lab Quest é uma aplicação web em português para preparação de certificações AWS. A experiência combina prática contínua de questões com elementos de RPG: o aluno ganha XP, sobe de nível, desbloqueia conquistas e evolui com base no próprio desempenho.
A plataforma atende diferentes ritmos de estudo, de revisões rápidas a simulados completos, com geração e manutenção contínua de conteúdo por IA.
XpWeightConfig), níveis, badges e 12 conquistas automáticas.usageHash, avaliação e regeneração contínua.Os três modos-base seguem uma progressão de formalidade. Arena e Trilhas reaproveitam a mesma mecânica de pergunta/revelação do Simulado.
| Modo | Descrição |
|---|---|
| Lab | Quests temáticas geradas por IA com contexto personalizado (ex.: música, games, esporte). |
| KC (Knowledge Check) | Bateria de questões por serviço/tópico para revisão pontual. |
| Simulado | Prova completa com timer, marcação de questões, revisão pré-envio e score final. |
| Arena | Batalhas contra bosses temáticos: cada acerto causa dano no boss. |
| Trilhas | Trilhas guiadas por tópico, com estágios e progressão por desbloqueio. |
┌─────────────────────────────────┐ ┌──────────────────────┐
│ awlq-app │ │ awlq-worker │
│ (Next.js 16) │ │ (BullMQ + Node.js) │
│ │ │ │
│ App Router ─ API Routes │ │ source-fetch │
│ Zustand ─ Framer Motion │ │ question-generation │
│ Better Auth ─ Prisma │ │ feedback-analysis │
│ Supabase Realtime │◄────│ performance-compute │
│ │ │ quality-review │
└────────────┬────────────────────┘ │ email-send │
│ └──────────┬───────────┘
▼ ▼
┌──────────────┐ ┌─────────────────────────┐
│ PostgreSQL │ │ Redis (BullMQ queues) │
└──────────────┘ └─────────────────────────┘
│
┌──────┴──────┐
│ Supabase │ ← Storage (avatars, badges) + Realtime
└─────────────┘
awlq-app: frontend, páginas, rotas de API e autenticação (operações síncronas).awlq-worker: processamento em background (operações assíncronas e mais custosas).packages/db/prisma/schema.prisma.WorkerTrigger (poll a cada 30s por trigger-poller.ts);Mecanismo central do produto para manter o banco de questões atualizado e calibrado.
StudySessionHistory (respostas do usuário)
→ feedback-analysis.worker (marca áreas fracas, correctRate < 60%)
→ question-generation.worker (prompt Gemini ponderado por ExamBlueprintDomain)
→ performance-compute.worker (correctRate, índice de discriminação)
→ quality-review.worker (IA aposenta ou reescreve questões de baixa qualidade)
→ de volta ao pool de estudo
source-fetch.worker (em paralelo): baixa Exam Guides da AWS → extrai domínios do blueprint
Cada worker possui concorrência limitada (concurrency: 1 para jobs que usam IA). Jobs são idempotentes quando possível; colisão de usageHash é o único caso aceitável de no-op silencioso.
| Camada | Tecnologia |
|---|---|
| Framework | Next.js 16 (App Router) + React 19 |
| Linguagem | TypeScript 5 |
| Estilo | Tailwind CSS 4 + Radix UI |
| Auth | Better Auth 1.5 (email/senha, sessões) |
| ORM | Prisma 7 + PostgreSQL |
| Storage & Realtime | Supabase |
| AI | Google Gemini API (@google/generative-ai) |
| Estado | Zustand 5 |
| Animações | Framer Motion 12 |
| Resend (HTTP API) |
| Camada | Tecnologia |
|---|---|
| Filas | BullMQ 5 + IORedis |
| ORM | Prisma 7 (DB compartilhado) |
| AI | Google Gemini API |
| Logs | Pino 9 |
| Runtime | Node.js 22 / Bun |
git clone https://github.com/wallacemt/aws-lab-quest.git
cd aws-lab-quest
# App
cd awlq-app && npm install
# Worker
cd ../awlq-worker && npm install
cd ..
cp .env.example awlq-app/.env
cp .env.example awlq-worker/.env
Edite os arquivos .env com base na seção Variáveis de ambiente.
docker compose up -d postgres redis
O
docker-compose.ymlda raiz orquestra todos os serviços. Para desenvolvimento local, suba apenaspostgreseredise execute app/worker fora do Docker.
cd awlq-app
npm run db:generate
npm run db:migrate
npm run db:seed
Após qualquer alteração de schema, execute
npm run prisma:generatetambém emawlq-worker/, que usa o mesmoschema.prismacom client gerado próprio.
Em terminais separados:
# Terminal 1 — App Next.js
cd awlq-app && npm run dev
# Terminal 2 — Worker BullMQ
cd awlq-worker && npm run dev
Acesse: http://localhost:3000
Crie os arquivos .env a partir de .env.example.
| Variável | Descrição |
|---|---|
DATABASE_URL | URL de conexão PostgreSQL |
REDIS_URL | URL do Redis (ex.: redis://localhost:6379) |
BETTER_AUTH_SECRET | String aleatória com pelo menos 32 caracteres |
BETTER_AUTH_URL | URL base da aplicação |
GEMINI_API_KEY | Chave da Google Generative AI |
SUPABASE_URL | URL do projeto Supabase |
SUPABASE_SERVICE_ROLE_KEY | Service role JWT do Supabase |
SUPABASE_ANON_KEY | Anon key do Supabase |
RESEND_API_KEY | Chave da API do Resend (somente servidor) |
RESEND_FROM_EMAIL | Endereço remetente verificado no Resend |
| Variável | Padrão | Descrição |
|---|---|---|
GEMINI_MODEL | gemini-2.5-flash | Modelo Gemini para geração |
POLLINATIONS_API_KEY | — | Chave para geração de imagens de badges |
ADMIN_EMAIL | — | Email do admin inicial (seed) |
ADMIN_PASSWORD | — | Senha do admin inicial (seed) |
WEAK_AREA_THRESHOLD | 0.60 | Taxa mínima de acerto para área fraca |
TRIGGER_POLL_INTERVAL_MS | 30000 | Intervalo do poller de triggers (ms) |
LOG_LEVEL | info | Nível de log do worker |
A autenticação usa Better Auth 1.5 (email/senha), com configuração em lib/auth.ts e helpers de cliente em lib/auth-client.ts.
accessStatus: pending./admin/users (ou via SystemConfig.auto_approve_users).api/admin/* usam requireAdmin(request) e validam sessão e role === "admin".Vitest (environment: "node", globals habilitado), com um vitest.config.ts por pacote.
# awlq-app
cd awlq-app
npm run test
npx vitest run src/__tests__/arena.test.ts
npx vitest run -t "nome do teste"
# awlq-worker
cd awlq-worker
npm run test
Antes de abrir PR, o mínimo exigido em CONTRIBUTING.md:
# awlq-app
npm run lint
npx tsc --noEmit
npx next build
# awlq-worker
npx tsc --noEmit
Para subir toda a stack em modo próximo de produção:
# Uma vez
docker network create rt-network
# Build + start
docker compose up -d --build
Serviços principais:
rt-awslq-app (porta 3000)rt-awslq-worker (rede rt-network)Comandos úteis:
docker compose logs -f
docker compose down
docker compose restart worker
aws-lab-quest/
├── awlq-app/ # Next.js app (frontend + API)
│ └── src/
│ ├── app/ # App Router: páginas e API routes
│ ├── components/ # Componentes reutilizáveis (ui/, layout/)
│ ├── features/ # Domínios com components/hooks/screens/services
│ ├── hooks/ # Custom hooks React
│ ├── lib/ # Singletons: auth, prisma, ai, storage, redis, levels, achievements
│ └── stores/ # Zustand stores
│
├── awlq-worker/ # Worker BullMQ (background)
│ └── src/
│ ├── workers/ # Processadores por fila (source-fetch, question-generation, ...)
│ ├── services/ # Lógica de negócio desacoplada da fila
│ ├── shared/ # Compartilhado com o app (buildUsageHash, validateQuestion, persistQuestion)
│ ├── cron/ # Jobs recorrentes (ScheduledJob)
│ └── queues/ # Filas BullMQ + tipos de payload
│
├── packages/db/prisma/ # Schema Prisma, migrations e client compartilhado
├── docs/ # Documentação técnica complementar
├── docker-compose.yml
└── .env.example
Convenção no app: src/app/ permanece fino (roteamento + data fetch no servidor) e a lógica de domínio fica em src/features/<domínio>/.
/admin/upload (tipo: Exam Guide).PDF/Markdown → Extração → Segmentação de blocos → Gemini API
→ Validação (schema, mínimo de opções) → Deduplicação (usageHash)
→ Persistência no banco
O worker também gera variantes mais difíceis de questões já respondidas para reduzir repetição em simulados futuros.
As conquistas são desbloqueadas automaticamente ao salvar histórico de Lab/KC/Simulado.
A galeria em /achievements mostra progresso, status de unlock e link público de compartilhamento.
| Documento | Descrição |
|---|---|
| achievements-system.md | Sistema de conquistas e desbloqueio |
| simulado-pdf-pipeline.md | Pipeline PDF → Questão |
| platform-upgrade-2026-03.md | Arquitetura e melhorias recentes |
| question-ingestion-refactor-2026-03.md | Refactor do worker de ingestão |
| create-lab-quest-v1.md | Como criar um Lab Quest |
| CONTRIBUTING.md | Como contribuir com o projeto |
Contribuições são bem-vindas. Consulte o guia de contribuição para reportar bugs, sugerir melhorias e enviar pull requests.