Arquitetura
Estrutura monorepo, arvore de diretorios e fluxo de auto-wiring.
Estrutura monorepo
Todo projeto gerado pelo PlazerCLI segue uma estrutura de monorepo com dois workspaces principais:
meu-projeto/
├── apps/
│ ├── api/ # Backend
│ │ ├── src/
│ │ │ ├── config/ # Configuracoes (env, cors, etc.)
│ │ │ ├── routes/ # Rotas da API
│ │ │ ├── middlewares/ # Middlewares (Express) ou plugins (Fastify)
│ │ │ ├── database/ # Prisma service ou Mongoose connection
│ │ │ ├── auth/ # Autenticacao (se habilitada)
│ │ │ ├── rbac/ # Roles e permissoes (se habilitado)
│ │ │ ├── organizations/ # Workspaces (se habilitado)
│ │ │ ├── billing/ # Stripe Billing (se habilitado)
│ │ │ ├── common/ # Validacao, throttle, logger, swagger
│ │ │ ├── infra/ # Redis, email, storage
│ │ │ ├── queue/ # BullMQ ou RabbitMQ workers
│ │ │ ├── integrations/ # Stripe, WhatsApp, ViaCEP, etc.
│ │ │ ├── tenant/ # Multi-tenant middleware (se habilitado)
│ │ │ ├── websockets/ # Socket.IO gateway (se habilitado)
│ │ │ ├── app.ts # App principal (Express/Fastify)
│ │ │ ├── app.module.ts # Module principal (NestJS)
│ │ │ └── index.ts # Entry point
│ │ ├── prisma/ # Schema do banco (se usar Prisma)
│ │ │ └── schema.prisma
│ │ ├── .env # Variaveis de ambiente
│ │ └── package.json
│ └── web/ # Frontend
│ ├── src/
│ │ ├── app/ # Paginas (Next.js)
│ │ └── ...
│ └── package.json
├── docker-compose.yml # Infra (PostgreSQL, Redis, etc.)
├── .env.example # Template de variaveis
├── .gitignore
├── .editorconfig
├── .nvmrc
├── AGENTS.md # Liz AI agent config
├── CLAUDE.md # Claude Code config
├── README.md # Documentacao gerada
└── package.json # Root package com scripts
Scripts do root package.json
O package.json raiz contem scripts para gerenciar todo o monorepo:
{
"scripts": {
"dev": "npm run dev:api & npm run dev:web",
"dev:api": "cd apps/api && npm run dev",
"dev:web": "cd apps/web && npm run dev",
"build": "npm run build:api && npm run build:web",
"build:api": "cd apps/api && npm run build",
"build:web": "cd apps/web && npm run build"
}
}
Se voce escolheu pnpm como runtime, o projeto usa pnpm-workspace.yaml para gerenciar os workspaces nativamente.
Auto-wiring
O auto-wiring e o processo que conecta automaticamente todas as features escolhidas. Dependendo do backend:
NestJS
O arquivo app.module.ts e reescrito automaticamente com todos os modulos importados:
import { Module } from '@nestjs/common';
import { ConfigModule } from '@nestjs/config';
import { PrismaModule } from './database/prisma.module';
import { AuthModule } from './auth/auth.module';
import { RbacModule } from './rbac/rbac.module';
import { OrganizationsModule } from './organizations/organizations.module';
import { BillingModule } from './billing/billing.module';
import { ThrottleModule } from './common/throttle/throttle.module';
import { LoggerModule } from './common/logger/logger.module';
@Module({
imports: [
ConfigModule.forRoot({ isGlobal: true }),
PrismaModule,
AuthModule,
RbacModule,
OrganizationsModule,
BillingModule,
ThrottleModule,
LoggerModule,
],
controllers: [AppController],
providers: [AppService],
})
export class AppModule {}
Express
O arquivo app.ts registra automaticamente todos os routers e middlewares:
app.use('/api/auth', authRouter);
app.use('/api/auth/magic-link', magicLinkRouter);
app.use('/api/organizations', organizationsRouter);
app.use('/api/billing', billingRouter);
setupSwagger(app);
Fastify
O arquivo app.ts registra automaticamente todos os plugins:
await app.register(rateLimitPlugin);
await app.register(swaggerPlugin);
await app.register(tenantPlugin);
await app.register(authRoutes);
await app.register(billingRoutes);
Variaveis de ambiente
Cada feature adicionada injeta suas variaveis no arquivo .env automaticamente. Um projeto completo pode ter:
# Server
PORT=3001
NODE_ENV=development
CORS_ORIGIN=http://localhost:3000
# Database
DATABASE_URL=postgresql://postgres:postgres@localhost:5432/meu_projeto
# Authentication
JWT_SECRET=change-me-in-production-use-a-strong-secret
JWT_EXPIRES_IN=7d
# Google OAuth
GOOGLE_CLIENT_ID=
GOOGLE_CLIENT_SECRET=
GOOGLE_CALLBACK_URL=http://localhost:3001/api/auth/google/callback
# Stripe Billing
STRIPE_SECRET_KEY=
STRIPE_WEBHOOK_SECRET=
STRIPE_PRICE_FREE=
STRIPE_PRICE_PRO=
STRIPE_PRICE_ENTERPRISE=
# Redis
REDIS_URL=redis://localhost:6379
# Rate Limiting
RATE_LIMIT_MAX=100
RATE_LIMIT_WINDOW_MS=60000
# Logging
LOG_LEVEL=info
# Organizations
APP_URL=http://localhost:3000