📄 Documento de Execução — Card 7g: [M1.5] Portfólio Público + Evolução
🎯 1. O que foi implementado
Página pública /portfolio/[slug] (sem login)
- Qualquer pessoa acessa via URL (ex:
/portfolio/joao-silva)
- Mostra avatar, nome, curso, unidade, bio e grid de trabalhos aprovados
- Cada trabalho: imagem + título + disciplina + data + curtidas + selos (Corrigido/Museu)
- Estados: "não encontrado", "bloqueado (LGPD)", "sem trabalhos"
- Footer com link GENIOON
Bloqueio LGPD (menores de 13 anos)
- Se idade < 13 E sem
consentPublicPortfolio dos pais → portfólio bloqueado
- Apenas usuários logados da mesma filial podem ver
- Retorna
{ blocked: true, reason: 'UNDERAGE_NO_CONSENT' }
Página /aluno/galeria/evolucao (logado)
- Comparador lado a lado: 2 dropdowns para escolher trabalhos (início vs atual)
- Linha do tempo: scroll horizontal de miniaturas cronológicas
- Mostra progresso do aluno ao longo do curso
Botão "Minha Evolução" na galeria
- Link para
/aluno/galeria/evolucao no header do Mural da Turma
Procedures criadas
public.portfolio({slug}) — busca portfólio por slug (router público novo)
student.gallery.evolution({courseId?}) — timeline + agrupamento por disciplina
student.gallery.updatePortfolioBio({bio}) — atualiza bio + gera slug automático
Schema alterado
User.portfolioSlug String? @unique — slug da URL pública
User.portfolioBio String? — bio editável pelo aluno
- Slug gerado do nome (remove acentos, coloca hifens, sufixo se colidir)
Fixes técnicos
middleware.ts: adicionado /portfolio às PUBLIC_PATHS
trpc/provider.tsx: httpBatchLink usa URL absoluta no SSR (fix erro 500)
✅ Critérios de aceite
| # |
Critério |
Status |
| 1 |
Página pública /portfolio/[slug] |
✅ |
| 2 |
Grid de trabalhos aprovados |
✅ |
| 3 |
Bio editável (procedure updatePortfolioBio) |
✅ |
| 4 |
Comparador de evolução (Aula X vs Y) |
✅ |
| 5 |
Linha do tempo de trabalhos |
✅ |
| 6 |
Bloqueio LGPD menores sem consentimento |
✅ |
| 7 |
Build + deploy DEV funcional |
✅ |
📁 2. Arquivos criados/modificados
Criados
| Arquivo |
Função |
src/server/trpc/routers/public.ts |
Router público (public.portfolio) |
src/app/portfolio/[slug]/page.tsx |
Página pública do portfólio |
src/app/(dashboard)/aluno/galeria/evolucao/page.tsx |
Comparador + timeline |
src/styles/portfolio.module.css |
Estilos do portfólio |
Modificados
| Arquivo |
Mudança |
prisma/schema.prisma |
User +portfolioSlug +portfolioBio |
src/server/trpc/router.ts |
+publicRouter |
src/server/trpc/routers/student.ts |
gallery +evolution +updatePortfolioBio |
src/middleware.ts |
+/portfolio em PUBLIC_PATHS |
src/lib/trpc/provider.tsx |
httpBatchLink URL absoluta SSR |
src/app/(dashboard)/aluno/galeria/page.tsx |
+botão Minha Evolução |
🚀 3. Deploy DEV
Health 200, Portfolio 200, Galeria 307 (auth). Build OK.
🎯 4. Próximo card
Card 7h — Ranking Top 3 Artistas do Mês — pódio visual + job diário.