# Worklog — AulaLab (Estúdio de Criação de Cursos)

---
Task ID: 1
Agent: Main agent (Z.ai)
Task: Criar ferramenta proprietária de criação de cursos (estilo Articulate 360) com componentes diversos: cards (numéricos, imagens, ícones), accordion, tabs, linha do tempo, podcasts, vídeos, etc.

Work Log:
- Inicializado ambiente fullstack (Next.js 16 + TS + Tailwind 4 + shadcn/ui + Prisma/SQLite).
- Modelado banco em `prisma/schema.prisma`: modelos Course, Lesson (título, ícone, ordem) e Block (tipo, ordem, data JSON em string). Aplicado com `bun run db:push`.
- Criada biblioteca central de blocos em `src/lib/blocks/`:
  - `types.ts` (interfaces de dados dos 19 tipos), `registry.ts` (metadados, categorias e defaults), `icons.tsx` (mapa de ~70 ícones lucide + DynIcon via createElement), `richText.tsx` (mini-markdown: negrito, itálico, links, quebras).
- Temas de curso em `src/lib/theme.ts` (8 paletas: esmeralda, turquesa, laranja, âmbar, rosé, violeta, grafite, rubí) aplicados via CSS vars (--cp, --cpd, --cps, --cpt, --cg).
- Rotas de API: `/api/courses` (GET/POST), `/api/courses/[id]` (GET/PATCH/DELETE), `/api/courses/[id]/duplicate`, `/api/courses/import`, `/api/lessons` (+[id], reorder), `/api/blocks` (+[id], [id]/duplicate, reorder). Serializador compartilhado em `src/lib/server.ts`.
- Store Zustand (`src/lib/store.ts`) com autosave por debounce (fila de jobs block/lesson/course), indicador de status (salvando/salvo/erro+retry), operações otimistas (add/delete/move/duplicate/reorder de aulas e blocos), preview com retorno ao editor.
- 19 renderizadores de blocos em `src/components/blocks/` (text/media/card/interactive/extra + BlockRenderer dispatcher). Destaques: podcast com player customizado (play/pause, seek, velocidade 1x/1.5x/2x), quiz interativo com feedback e explicação, flipcards 3D, carrossel com scroll-snap, vídeo YouTube/Vimeo com conversão automática de URL, timeline vertical.
- Dashboard (`src/components/dashboard/`): estatísticas, grid de cursos com capa em gradiente do tema, diálogo de criação com seletor de tema, ações (editar, visualizar, duplicar, exportar JSON, excluir com confirmação), importação de JSON, empty state.
- Editor (`src/components/editor/`): topbar (título inline, tema, exportar, visualizar, status de save), sidebar de aulas (CRUD, ícones, reordenar), canvas WYSIWYG com fundo pontilhado (seleção, toolbar, drag & drop com zonas de drop), painel direito com paleta de blocos por categoria + formulários de propriedades para todos os tipos (form-controls com ItemsEditor genérico, IconPicker, ChipGroup).
- Player do aluno (`src/components/preview/`): índice de aulas com progresso, barra de conclusão, navegação anterior/próxima, card de conclusão do curso.
- Seed (`prisma/seed.ts`): curso demo "Onboarding — Nova Cultura Digital" com 6 aulas e 27 blocos exibindo todos os componentes.
- Correções durante QA (agent-browser + VLM): recriado `/api/courses/route.ts` perdido, erro `useMemo is not defined` no PreviewView, regras de lint do React Compiler (setState-in-effect → padrão key-remount/callbacks/estado derivado), "components during render" → DynIcon, bug de progresso que "desmarcava" a aula inicial ao navegar.
- Verificação E2E no navegador (agent-browser): dashboard, criação/edição/exclusão de curso, autosave conferido no banco, paleta + formulários, quiz (certo/errado/explicação), flipcard (rotateY confirmado via computed style), acordeão, podcast tocando de verdade (344s), carrossel, tema com persistência, mobile (sheets), exportação JSON com toast. Lint limpo, dev.log sem erros.

Stage Summary:
- App "AulaLab" entregue e funcional em `/` (Next.js 16, single-route SPA com views dashboard/editor/preview).
- 19 tipos de bloco: heading, text, image, video, podcast, callout, quote, button, divider, cards-numeric, cards-icon, cards-image, stats, accordion, tabs, timeline, quiz, flipcards, carousel.
- Persistência completa em SQLite via Prisma com autosave; duplicação/exportação/importação de cursos; 8 temas visuais.
- Curso demonstrativo semeado. Banco em `db/custom.db`.
- Screenshots de verificação em `/home/z/my-project/scripts/shot-*.png`.
