A full-stack monorepo with NestJS API, Next.js web app, and Fumadocs documentation site.
| App | Framework | Port |
|---|---|---|
apps/api |
NestJS 11 | 8000 |
apps/web |
Next.js 16 + React 19 + Tailwind | 3000 |
apps/docs |
Next.js 16 + Fumadocs | 3030 |
Shared packages:
@workspace/ui— shared React component library (shadcn/ui)@workspace/eslint-config— shared ESLint config@workspace/typescript-config— shared TypeScript config@workspace/backend-config— shared NestJS config
Tooling: Turborepo · pnpm · TypeScript · ESLint · Prettier · Husky
- Node.js >= 20
- pnpm >= 10.4.1
# Install dependencies
pnpm install
# Start all apps in dev mode
pnpm devpnpm dev # Start all apps in development mode
pnpm build # Build all apps
pnpm lint # Lint all apps
pnpm format # Format all files with Prettier
pnpm format:check # Check formattingCopy .env.dev and adjust as needed:
cp .env.dev .envKey variables:
PORT_API=8000
PORT_WEB=3000
PORT_DOCS=3030
DATABASE_URL=postgresql://user:password@localhost:5432/myapp# Add a shadcn/ui component to the web app
pnpm dlx shadcn@latest add button -c apps/webComponents are placed in packages/ui/src/components and can be imported anywhere:
import { Button } from '@workspace/ui/components/button';my-app/
├── apps/
│ ├── api/ # NestJS backend
│ ├── web/ # Next.js frontend
│ └── docs/ # Fumadocs documentation
├── packages/
│ ├── ui/ # Shared component library
│ ├── eslint-config/
│ ├── typescript-config/
│ └── backend-config/
├── turbo.json
└── pnpm-workspace.yaml