Tech stack
| Layer | Technology |
|---|---|
| Frontend | Next.js 16 + React 19 (App Router) |
| Backend | NestJS 11 |
| Database | PostgreSQL via Prisma ORM |
| Auth | Better Auth (GitHub OAuth + optional email/password) |
| AI agents | LangGraph (graph agents in TypeScript) |
| Meeting bot | Puppeteer + Deepgram (Google Meet recording) |
| Monorepo | Nx + Bun 1.3.10 workspaces |
Repository structure
Prerequisites
Before setting up Zuko, make sure you have the following installed:Node.js 22
Node.js 22
Zuko requires Node.js 22 (matches the CI environment). Earlier versions will not work.Check your version:Install via nvm:
Bun 1.3.10+
Bun 1.3.10+
Bun is used as the package manager and runtime across the monorepo.Check your version:Install Bun:
PostgreSQL
PostgreSQL
Zuko uses PostgreSQL for all data storage. Any recent version works.macOS (Homebrew):Check it’s running:
API Keys
API Keys
You will need:
- OpenAI API key — for AI chat. Get one at platform.openai.com
- GitHub OAuth credentials — for authentication. Create an OAuth App at github.com/settings/developers
- LangSmith API key — for agent tracing at smith.langchain.com
- Deepgram API key — only needed for the meeting bot
Core concepts
- Contacts, companies, deals — the three core CRM entities, modeled in the database and exposed via the backend API.
- Agentic chat — an AI chat interface where conversations can be attached to any CRM entity, keeping AI responses grounded in real customer data.
- AI agents service — a separate LangGraph service (
apps/ai-agents) that runs the agent logic and calls the backend via authenticated/api/agents/*endpoints. - Meeting bot — joins Google Meet calls, records audio, transcribes via Deepgram, and stores recordings in S3.
- Beads issue tracking — issues live in
.beads/issues.jsonland are managed with thebdCLI directly in the repo.