📄 Documento de Execução — Card 7f: [M1.5] Mural da Turma
| Campo |
Valor |
| Card Trello |
[7f] [M1.5] Mural da Turma |
| URL Trello |
https://trello.com/c/5nBzky7y |
| Marco |
M1.5 (Galeria Criativa & Portfólio — EAD Artes) |
| Data execução |
04/08/2026 |
| Responsável |
Wellington Santiago (via ZCode) |
| Doc anterior |
Card 7e — Upload de Trabalho + Refazer |
| Próximo card |
Card 7g — Portfólio Público + Evolução |
| Commits |
3b47cfe, 169fea3, 01adb27, 48116d9, f6f5d58 |
| Deploy DEV |
https://sistemaescolar.wellka.com.br/aluno/galeria |
🎯 1. O que foi implementado
O Mural da Turma — feed estilo Instagram onde os alunos veem trabalhos dos colegas da mesma unidade, curtem, comentam e salvam como inspiração. Esta é a tela principal da Galeria Criativa, o "coração" do M1.5.
Página /aluno/galeria com 5 abas
- Feed: posts PUBLISHED da própria unidade (apenas moderados pelo professor)
- Meus Trabalhos: posts do próprio aluno com status (PENDING/PUBLISHED/REJECTED)
- Desafios: lista de Challenge ativos da unidade
- Ranking: placeholder (será implementado no Card 7h)
- Museu: vitrine dos trabalhos destacados pela direção (isFeatured=true)
Componente PostCard (estilo Instagram)
- Avatar (iniciais do nome) + nome do autor + meta (disciplina/challenge/data)
- Imagem grande do trabalho
- Selo "Correção do Prof" dourado quando hasTeacherCorrection=true
- Badge "Museu" quando isFeatured=true
- Ações: Curtir (Heart, optimistic UI), Comentar (toggle thread), Salvar Referência (Bookmark)
- Comentários inline com input para comentar
Filtros do Feed
- Todas as Aulas — todos os posts da unidade
- Aula X (dropdown dinâmico das disciplinas do aluno) — filtrar por subjectId
- Melhores da Semana — ordenado por likeCount DESC + publishedAt nos últimos 7 dias
Procedures tRPC criadas (student.gallery)
feed({filter, subjectId?, cursor, limit}) — feed paginado com relações (student, subject, challenge, likes, savedBy)
detail({postId}) — post com comentários
toggleLike({postId}) — curtir/descurtir (incrementa/decrementa likeCount)
comment({postId, content, parentId?}) — comentar/responder (incrementa commentCount)
toggleSave({postId, note?}) — salvar/remover referência (incrementa/decrementa saveCount)
museum({cursor, limit}) — posts isFeatured=true da unidade
challenges({courseId?}) — desafios ativos da unidade
mySubjects() — disciplinas do aluno (para filtro)
Navegação
- Item "Galeria" adicionado ao top-nav do StudentShell (desktop) →
/aluno/galeria
- i18n:
student.nav.gallery adicionado nos 3 idiomas
Moderação (decisão #17)
- Feed SÓ mostra posts
status=PUBLISHED (professor aprovou)
- Posts
PENDING só aparecem na aba "Meus Trabalhos" do próprio autor
- Posts
REJECTED mostram o motivo para o autor
✅ Critérios de aceite validados
| # |
Critério |
Status |
| 1 |
Feed principal estilo Instagram (posts da unidade) |
✅ |
| 2 |
Abas (Feed/Meus Trabalhos/Desafios/Ranking/Museu) |
✅ |
| 3 |
Curtir/descurtir trabalhos (optimistic UI) |
✅ |
| 4 |
Comentar e responder comentários |
✅ |
| 5 |
Salvar como referência (bookmark) |
✅ |
| 6 |
Selo 'Correção do Prof' destacado |
✅ |
| 7 |
Filtros (Todas/Aula X/Melhores da Semana) |
✅ |
| 8 |
Museu da unidade (destaques da direção) |
✅ |
| 9 |
Galeria no menu do StudentShell |
✅ |
| 10 |
Build passa + deploy DEV funcional |
✅ |
📁 2. Arquivos criados/modificados
Criados
| Arquivo |
Função |
src/app/(dashboard)/aluno/galeria/page.tsx |
Página principal com 5 abas |
src/components/gallery/PostCard.tsx |
Card estilo Instagram (avatar, imagem, ações) |
src/styles/gallery.module.css |
Estilos completos (tabs, filtros, postCard, museu, desafios) |
Modificados
| Arquivo |
Mudança |
src/server/trpc/routers/student.ts |
+8 procedures gallery (feed, detail, toggleLike, comment, toggleSave, museum, challenges, mySubjects) + import Prisma namespace + Prisma.GalleryPostWhereInput |
src/components/layout/StudentShell.tsx |
+item "Galeria" no top-nav |
messages/{pt-BR,en-US,es-ES}.json |
+student.nav.gallery |
🔌 3. Handoff para o próximo card (7g)
Procedures disponíveis
student.gallery.feed — pronto (com paginação cursor)
student.gallery.myPosts — pronto (aba Meus Trabalhos)
student.gallery.detail — pronto (comentários + correção)
student.gallery.museum — pronto (Museu)
student.gallery.challenges — pronto (Desafios)
O que o próximo card (7g) precisa fazer
- Página pública
/portfolio/[slug] (sem auth)
- Comparador de evolução (Aula 1 vs Aula 10)
- Bloqueio LGPD (<13 sem consentimento)
- Procedure
public.portfolio({slug})
📋 4. Deploy DEV
- Build:
✓ Compiled successfully (local + VPS)
- pm2 restart: online
- Smoke test: Health 200, Galeria 307 (redirect auth), Doc 200
🎯 5. Próximo card
Card 7g — Portfólio Público + Evolução (Aula 1 vs 10) — a página pública /portfolio/[slug] + comparador de evolução + bloqueio LGPD.