Monorepo com frontend em Next.js, backend em NestJS, Drizzle ORM centralizado e tipos compartilhados.
apps/web: frontendapps/api: backendpackages/database: Drizzle ORM e client do bancopackages/types: tipos compartilhadospackages/tsconfig: bases de TypeScript
- Node.js 20 ou superior
pnpm10- Docker com
docker compose
O projeto sobe um PostgreSQL local via docker compose com esta configuracao:
- host
127.0.0.1 - porta
5434 - database
postgres - usuario
postgres - senha
root - schema
beatwave
URL padrao:
postgresql://postgres:root@127.0.0.1:5434/postgres?schema=beatwaveOs arquivos usados hoje são estes:
apps/api/.envapps/web/.envpackages/database/.env
As variáveis mais importantes são:
PORTDATABASE_URLBETTER_AUTH_SECRETBETTER_AUTH_URLURL_FRONTENDSPOTIFY_CLIENT_IDSPOTIFY_CLIENT_SECRETGOOGLE_CLIENT_IDGOOGLE_CLIENT_SECRETTWITTER_CLIENT_IDTWITTER_CLIENT_SECRETR2_ACCESS_KEY_IDR2_SECRET_ACCESS_KEYR2_BUCKETR2_ENDPOINTR2_REGION
NEXT_PUBLIC_API_LOCAL_URLNEXT_PUBLIC_API_PRODUCTION_URL
DATABASE_URL
Na raiz do projeto:
pnpm installGerar uma nova migracao a partir de alteracoes no schema:
pnpm db:generateAplicar migracoes pendentes no banco:
pnpm db:migrateSubir banco, aplicar migracoes e iniciar frontend + backend:
pnpm devO predev executa automaticamente:
docker compose up -d --waitpnpm db:migrate
URLs locais:
- frontend:
http://localhost:3000 - backend:
http://localhost:8001 - auth do backend:
http://localhost:8001/api/auth
Build do monorepo:
pnpm buildLint do monorepo:
pnpm lintTestes do monorepo:
pnpm testRodar apenas o frontend:
pnpm --filter @beatwave/web devRodar apenas o backend:
pnpm --filter @beatwave/api devAbrir Drizzle Studio:
pnpm --filter @beatwave/database studioParar o banco local:
pnpm db:stoppnpm install
pnpm devQuando houver mudanca no schema Drizzle:
pnpm db:generate
pnpm db:migrateSe quiser validar o projeto sem subir em modo de desenvolvimento:
pnpm lint
pnpm test
pnpm build