Development Overview
An introduction to the Nebutra-Sailor monorepo — what each app does, how the workspace is organized, and how to get started contributing.
What is Nebutra-Sailor?
Nebutra-Sailor is a Turborepo monorepo that ships a complete AI-native SaaS product as working code. It contains 7 deployable apps and 20+ shared packages, all typed end-to-end, sharing a common design system, API contract, and runtime token system.
The monorepo is the source of truth for nebutra.com, app.nebutra.com,
auth.nebutra.com, api.nebutra.com, and nebutra.com/docs.
Apps at a glance
| App | Port | Purpose | Framework |
|---|---|---|---|
apps/web | 3000 / 3001 | Authenticated SaaS dashboard | Next.js 16 (prod) + Vite optional |
apps/auth | 3101 | Login center (auth.nebutra.com) | Next.js 16 + Better Auth |
backends/gateway | 3002 | REST API — auth, RBAC, billing, AI proxy | Hono + OpenAPI (@nebutra/gateway) |
apps/landing | 3000-ish | Public marketing site (locales) | Next.js 16 + next-intl |
apps/sailor-docs | — | Public product documentation (this site) | Next.js 16 + Fumadocs |
apps/design-docs | — | Internal design system documentation | Next.js 16 + Fumadocs |
apps/storybook | 6006 | Component library playground | Storybook |
apps/studio | 3333 | Content management | Sanity Studio |
Prerequisites
Before you can run the monorepo locally you need the following tools installed on your machine.
| Tool | Minimum version | Why |
|---|---|---|
| Node.js | 22.x | Runtime for all apps and tooling |
| pnpm | 10.32+ | Workspace package manager |
| Docker | 24+ | Local PostgreSQL, Redis, and ClickHouse |
| Git | 2.40+ | Source control |
The repo uses pnpm workspaces. Running npm install or yarn install will produce incorrect results and is not supported.
Quick start
git clone https://github.com/nebutra/nebutra-sailor.git
cd nebutra-sailorpnpm installpnpm infra:upThis starts PostgreSQL 16, Redis 7, and ClickHouse 24 via Docker Compose.
Copy the example env files and fill in your secrets:
cp apps/web/.env.example apps/web/.env.local
cp apps/auth/.env.example apps/auth/.env.local # if present
cp backends/gateway/.env.example backends/gateway/.env.local
cp apps/landing/.env.example apps/landing/.env.local
# Prefer AUTH_PROVIDER=better-auth for local parity with productionpnpm db:generate # generate Prisma client
pnpm db:migrate # run all pending migrations
pnpm db:seed # seed development datapnpm dev # start all apps in parallelOr start only what you need:
pnpm dev:dashboard # web + gateway (see root package.json scripts)
pnpm dev:marketing # landing + studioFor a full walkthrough with environment variable descriptions, common issues, and port assignments, see the Local Development guide.
Key conventions
- Package manager: pnpm 10.32+ with workspaces. Always run
pnpmat the repo root. - Linter + formatter: Biome (replaces ESLint + Prettier). Run
pnpm lint:fixto auto-fix. - Type checking:
pnpm typecheckrunstsc --noEmitacross all packages via Turbo. - Testing: Vitest for unit tests, Playwright for E2E. Run
pnpm testandpnpm e2e. - Build system: Turborepo with Vercel Remote Cache. Tasks are defined in
turbo.json.
Related
How is this guide?
Last updated on