Capítulo 3 de 456

Project Structure

Core Idea

Referência completa das convenções de pastas e arquivos do App Router (arquivos especiais, rotas dinâmicas, route groups, slots paralelos/interceptados, metadata files) e das estratégias recomendadas para organizar o projeto.

Key Concepts

  • app/pages/public/src: pastas de topo padrão; app é o App Router, src é opcional para separar código de config.
  • Arquivos especiais de rota: page, layout, loading, error, global-error, not-found, route, template, default (cada um com papel fixo na hierarquia).
  • Rota pública: um segmento só vira acessível via URL quando contém page ou route; outros arquivos no mesmo diretório podem ser colocalizados sem virar rota.
  • Dynamic segments: [segment] (um parâmetro), [...segment] (catch-all), [[...segment]] (catch-all opcional).
  • Route groups (folder): agrupam rotas sem afetar a URL; usados para múltiplos layouts raiz ou layouts opcionais por seção.
  • Private folders _folder: prefixo de underscore tira a pasta (e subpastas) do sistema de roteamento; útil para separar lógica de UI de lógica de rota.
  • Parallel routes @slot: slots nomeados renderizados pelo layout pai (ex.: sidebar + main).
  • Intercepting routes: (.)folder, (..)folder, (..)(..)folder, (...)folder interceptam outra rota para renderizar dentro do layout atual sem mudar a URL (ex.: modais).
  • Component hierarchy: ordem de renderização por arquivo especial: layouttemplateerror (boundary) → loading (suspense) → not-found (boundary) → page ou layout aninhado.
  • Colocation: arquivos de projeto podem ficar dentro de app com segurança, só viram rota se forem page/route.

Reference Tables

PathURL pattern
app/blog/[slug]/page.tsx/blog/my-first-post
app/shop/[...slug]/page.tsx/shop/clothing, /shop/clothing/shirts
app/docs/[[...slug]]/page.tsx/docs, /docs/layouts-and-pages, ...
PatternSignificadoUso típico
@folderslot nomeadosidebar + conteúdo principal
(.)folderintercepta mesmo nívelpreview de rota irmã em modal
(..)folderintercepta nível paiabrir filho do pai como overlay
(..)(..)folderintercepta dois níveisoverlay profundamente aninhado
(...)folderintercepta a partir da raizmostrar rota arbitrária na view atual
Arquivo top-levelPapel
next.config.jsconfiguração do Next.js
instrumentation.tsOpenTelemetry e instrumentação
proxy.tsproxy de requisições
.env / .env.local / .env.production / .env.developmentvariáveis de ambiente
eslint.config.mjsconfiguração do ESLint

Anti-patterns

  • Achar que basta criar a pasta para a rota existir: sem page.js ou route.js a rota não é publicamente acessível, mesmo com subpastas criadas.
  • Colocar layout.js em toda pasta "só para garantir": layouts se aninham automaticamente pela hierarquia de pastas; layout extra sem necessidade quebra reuso.
  • Remover o layout.js raiz sem substituí-lo: ao criar múltiplos root layouts via route groups, cada grupo precisa do próprio <html>/<body>, senão a app quebra.

Key Takeaways

  1. Rota só é pública quando existe page ou route no segmento, tudo mais no diretório é colocalizável com segurança.
  2. Route groups (nome) organizam sem afetar URL e permitem múltiplos root layouts ou layouts opcionais por seção.
  3. Private folders _nome tiram pastas inteiras do roteamento, úteis para separar UI/lib do que é rota.
  4. Parallel (@slot) e intercepting ((.), (..), (...)) routes resolvem padrões de UI específicos como slots e modais sem mudar a URL.
  5. Next.js é "unopinionated" sobre organização: colocar arquivos fora de app, dentro de app na raiz, ou divididos por feature são estratégias igualmente válidas, escolha uma e seja consistente.

Connects To

  • Layouts and Pages: aplica na prática as convenções page/layout descritas aqui.
  • Linking and Navigating: rotas dinâmicas e route groups afetam como o prefetch/streaming se comporta.