Documentação

CurvaDeMana Docs

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/app e src/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.ts monta as consultas de busca, decks.ts valida formatos e converte listas, collection.ts cuida do CSV, docs.ts serve 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:

  1. O Server Component lê os parâmetros da URL.
  2. Chama buildWhere e buildOrderBy de search.ts para montar a consulta.
  3. O Prisma executa a consulta no PostgreSQL.
  4. 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.