ESP32-S3 Bench Guide
ESP32-S3 N16R8 bench guide: live pinout, lessons, simulators and the bench log.
翻譯準備中
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證Plataforma de preparação para certificações AWS com gamificação, modos de estudo adaptativos e pipeline de conteúdo via IA.
翻譯準備中
取自儲存庫 README
正在載入完整 README。
檢視完整 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.