Receba novidades do Hedhog no seu e-mail
Novos lançamentos, receitas e breaking changes — sem spam.
Estrutura de pastas
Os projetos HedHog são organizados como um monorepo Turbo. O projeto gerado começa com uma base pequena, e você o expande adicionando bibliotecas e pacotes compartilhados ao longo do tempo.
O scaffold padrão criado pelo HedHog inclui apenas:
apps/
admin/
api/
libraries/
packages/
Este repositório de desenvolvimento contém aplicações adicionais como hedhog, class, partners e training, mas essas fazem parte do próprio workspace do framework e não devem ser interpretadas como a estrutura mínima gerada para um novo projeto.
Você pode criar aplicações adicionais com qualquer linguagem de programação ou framework. Elas não precisam ficar dentro da stack do HedHog, desde que se conectem à API HTTP do HedHog ou ao servidor MCP já embutido na aplicação.
Layout central do monorepo
apps/
admin/
api/
...optional apps in the framework workspace
libraries/
core/
your-domain-library/
packages/
api/
api-prisma/
ui/
docs/
scripts/
apps
A pasta apps contém aplicações executáveis.
apps/admin: o painel administrativo em Next.js usado para gerenciar dados, usuários, permissões, configurações e fluxos de negócio personalizados.apps/api: o entrypoint NestJS que carrega os módulos de negócio definidos emlibraries/*.- Outras aplicações podem existir no repositório de desenvolvimento do HedHog, mas são exemplos opcionais ou aplicações internas do framework, não parte do scaffold base do projeto.
Use apps/* para composição e bootstrapping em tempo de execução, não para regras de negócio centrais.
libraries
A pasta libraries é o coração de um projeto HedHog.
Cada biblioteca representa uma capacidade de negócio ou domínio, por exemplo core, finance, crm, lms, ou um módulo personalizado criado para o seu projeto.
É aqui que a lógica de negócio deve morar:
- Módulos, controllers, services e DTOs do NestJS
- Permissões específicas do domínio e seeds de rotas
- Arquivos YAML do HedHog para tabelas e dados de seed
- Integração com dashboard ou admin pertencente àquele domínio
Na prática, apps/api importa as bibliotecas, mas as regras e casos de uso pertencem a libraries/*.
packages
A pasta packages contém blocos de construção técnicos reutilizáveis, compartilhados entre apps e bibliotecas.
Exemplos comuns deste repositório incluem:
packages/api: helpers de backend compartilhadospackages/api-prisma: helpers de acesso e integração com o Prismapackages/api-pagination: comportamento de paginação compartilhadopackages/next-app-provider: providers de aplicação frontend e integração de cliente compartilhadapackages/ui: primitivos e componentes de UI reutilizáveis
Use packages/* para infraestrutura transversal ou abstrações reutilizáveis que não estão atreladas a um único domínio de negócio.
Outras pastas importantes
docs/: fontes de documentação, schemas e material de referência usados pelo framework.scripts/: automação do repositório para setup, geração de código, atualizações de schema e tarefas de manutenção.apps/api/prisma/: migrations do Prisma e ativos de integração de banco de dados para a aplicação da API.storage/: armazenamento local em tempo de execução usado por partes do workspace.
Essas pastas dão suporte ao monorepo, mas não são onde você deve colocar comportamento de domínio.
Regras de responsabilidade
- Coloque a lógica de negócio em
libraries/*. - Coloque os entrypoints e o bootstrapping da aplicação em
apps/*. - Coloque o código técnico compartilhado em
packages/*. - Evite mover regras de domínio para
apps/adminouapps/apisó porque essas aplicações consomem a funcionalidade.
Exemplo: como pensar sobre uma nova funcionalidade
Se você adicionar uma nova funcionalidade de cobrança (billing):
- Crie ou estenda uma biblioteca como
libraries/finance. - Implemente controllers, services, DTOs, YAML e permissões nessa biblioteca.
- Exponha o módulo através de
apps/api. - Construa as telas de administração em
apps/adminconsumindo a API. - Extraia helpers reutilizáveis ou primitivos de UI para
packages/*apenas quando forem realmente compartilhados.
Essa separação mantém o monorepo escalável à medida que o número de módulos cresce.