Arquitetura
Stack, camadas e o fluxo de uma requisição na plataforma.
Atualizado em 11 de junho de 2026
O CurvaDeMana é uma aplicação Next.js com App Router, servida sobre um banco PostgreSQL próprio.
Stack
- Next.js com App Router e React Server Components.
- Tailwind CSS para estilo, com tokens próprios definidos em
globals.css. - PostgreSQL como banco, acessado via Prisma com o driver adapter
pg. - Auth.js (NextAuth) para autenticação por e-mail e senha, com sessão em JWT.
- marked para renderizar o markdown de posts e desta documentação.
Camadas
A aplicação se organiza em três camadas claras:
- Páginas e componentes em
src/appesrc/components. As páginas são Server Components que leem do banco; a interatividade vive em Client Components pontuais como o deck builder e a coleção. - Bibliotecas de domínio em
src/lib. Cada arquivo concentra uma responsabilidade:search.tsmonta as consultas de busca,decks.tsvalida formatos e converte listas,collection.tscuida do CSV,docs.tsserve esta documentação. - Rotas de API em
src/app/api. Tudo que muda dados (criar deck, adicionar carta, importar) passa por uma rota que valida a sessão e os dados antes de tocar no banco.
Fluxo de uma requisição
Uma página como a busca avançada segue este caminho:
- O Server Component lê os parâmetros da URL.
- Chama
buildWhereebuildOrderBydesearch.tspara montar a consulta. - O Prisma executa a consulta no PostgreSQL.
- O resultado é renderizado no servidor e enviado pronto ao navegador.
Mutações no cliente seguem outro caminho: o componente chama uma rota de API com fetch, a rota valida e grava, e o cliente dispara router.refresh() para o servidor reenviar os dados atualizados.
Conexão com o banco
O cliente Prisma é instanciado uma única vez e reaproveitado (src/lib/prisma.ts), evitando abrir conexões a cada requisição em desenvolvimento. Após rodar prisma generate, o servidor de desenvolvimento precisa ser reiniciado para carregar o cliente novo.
Dados externos
O banco é alimentado offline pelo importador da Scryfall. Em tempo de execução, a única chamada externa é a busca de impressões alternativas de uma carta, usada na troca de arte, com cache de 24 horas.