Nodebase is a workflow automation platform built as a monorepo. It lets users create and manage workflows, credentials, and executions through a modern React application.
- Overview
- Tech Stack
- Monorepo Structure
- Getting Started
- Environment Variables
- Available Scripts
- Database
- Production Build
- Demo
This repository is organized with Turborepo + pnpm workspaces and currently contains:
- apps/front-end: Main web application (TanStack Start + React).
- packages/typescript-config: Shared TypeScript configuration package.
Core product areas include:
- Workflow management
- Credential management
- Execution history
- Authentication and protected routes
- Subscription and billing integration
- Turborepo for task orchestration
- pnpm workspaces for package management
- TypeScript
- Biome + Prettier
- React 19
- TanStack Start + TanStack Router
- TanStack Query
- Tailwind CSS v4
- Radix UI components
- PostgreSQL
- Drizzle ORM + drizzle-kit
- Better Auth
- Pusher (realtime)
- Trigger.dev (background jobs)
- Sentry (monitoring)
- Polar (subscriptions/billing)
Integrated through ai and provider SDKs:
- OpenAI
- Anthropic
- xAI
- DeepSeek
.
├─ apps/
│ └─ front-end/ # Main app
│ ├─ src/
│ ├─ drizzle/
│ └─ package.json
├─ packages/
│ └─ typescript-config/ # Shared TS config
├─ docker-compose.yml # Local PostgreSQL
├─ turbo.json # Turborepo pipeline
└─ pnpm-workspace.yaml # Workspace packages
- Node.js
>= 18 - pnpm
9.x - Docker (optional but recommended for local PostgreSQL)
git clone <YOUR_REPOSITORY_URL>
cd nodebasepnpm installCreate a .env file in the repository root (same level as turbo.json).
At minimum, configure the required values used by the app:
DATABASE_URL=
POLAR_PRODUCT_ID=
PUSHER_APP_ID=
PUSHER_KEY=
PUSHER_SECRET=
PUSHER_CLUSTER=Optional values (depending on enabled features):
BETTER_AUTH_URL=
BETTER_AUTH_SECRET=
POLAR_ACCESS_TOKEN=
POLAR_SUCCESS_URL=
POLAR_SERVER=sandbox
NGROK_URL=
ENCRYPTION_KEY=
GOOGLE_GENERATIVE_AI_API_KEY=
OPENAI_API_KEY=
ANTHROPIC_API_KEY=
XAI_API_KEY=
DEEPSEEK_API_KEY=
VITE_BETTER_AUTH_URL=
VITE_NGROK_URL=
VITE_PUSHER_KEY=
VITE_PUSHER_CLUSTER=docker compose up -dpnpm --filter front-end db:migrateOptional (seed sample data):
pnpm --filter front-end db:seedFrom the monorepo root:
pnpm devThe front-end app runs on:
http://localhost:3000
The app loads environment variables from the root .env file using:
apps/front-endscript:pnpm env:load ...- Internal env validation via
src/utils/env.ts
If startup fails, verify all required keys above are present and valid.
pnpm dev # Run all dev tasks via Turbo
pnpm build # Build all packages/apps
pnpm lint # Lint/check via Turbo
pnpm check-types # Type-check via Turbo
pnpm format # Prettier formattingpnpm --filter front-end dev
pnpm --filter front-end build
pnpm --filter front-end test
pnpm --filter front-end db:generate
pnpm --filter front-end db:migrate
pnpm --filter front-end db:push
pnpm --filter front-end db:seed
pnpm --filter front-end db:studioLocal PostgreSQL service is defined in docker-compose.yml:
- Host:
localhost - Port:
5432 - User:
postgres - Password:
docker - Database:
nodebase
Use these values to compose your local DATABASE_URL, for example:
DATABASE_URL=postgres://postgres:docker@localhost:5432/nodebaseBuild the monorepo:
pnpm buildBuild only front-end:
pnpm --filter front-end buildPreview the built app:
pnpm --filter front-end previewAdd your demo assets here: