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