Collective Intelligence Platform
Where groups think together and AI surfaces what matters.
Live Demo · Features · Quick Start · Self-Host · API · Contributing
Nuclave is an open-source, real-time collaborative brainstorming platform. Instead of free-form sticky notes that end in chaos, Nuclave automatically structures every contribution using AI, so your team ends with actionable decisions — not a messy whiteboard.
The problem: Research shows 50-90 unique opinions surface in traditional group sessions. Switch to anonymous digital dialogue? That number doubles to 130-190. Half of what your team thinks never gets said.
The fix: Nuclave gives everyone a voice. Type your thought, hit Enter. AI categorizes it. The group signals what matters. A live summary builds itself. The session ends with a decision document.
Just type and press Enter. No forms, no dropdowns, no pre-classification. AI auto-categorizes your contribution into one of 8 types:
| Type | What it means |
|---|---|
| Benefit | A reason to proceed |
| Risk | A reason to reconsider |
| Idea | A feature or suggestion |
| Blocker | Must resolve before proceeding |
| Checklist | A required step or criterion |
| Question | Needs investigation |
| Decision | A choice the group must make |
| Wild Card | An off-topic thought worth noting |
Tap the tag to change it if the AI got it wrong. Changes persist server-side.
- Socket.io powered — contributions appear instantly across all browsers
- No account required — share a link, your team joins immediately
- Anonymous by default — eliminates the HiPPO effect (Highest Paid Person's Opinion)
- Participant roles — Facilitator, Expert (2x vote weight), Contributor, Observer
Science-backed facilitation structure with a clickable phase stepper bar:
- Ideation — Signals hidden. Ideas flow without influence.
- Debate — Reactions revealed. Agree, challenge, or flag as critical.
- Prioritization — The most-signaled ideas rise to the top.
- Decision — Facilitator finalizes. Session ends with a decision document.
Facilitators can jump to any phase (forward or backward). Optional countdown timer per phase with auto-advance.
6 pre-built templates with custom prompts, suggested phase durations, and starter questions:
- Sprint Retrospective — What worked, what didn't, what to improve
- Product Critique — Evaluate a feature or design
- Architecture Decision Record — Choose a technical approach
- Incident Post-Mortem — Blameless analysis of what went wrong
- Feature Prioritization — Decide what to build next
- Open Brainstorm — Free-form idea generation
An AI participant that automatically challenges high-consensus ideas. When a contribution gets 2+ agrees during the debate phase, the Skeptic generates a constructive counter-point. Works without API keys using template-based responses, or uses Claude/OpenAI for richer challenges.
A continuously updating brief showing:
- Consensus zone (what the group agrees on)
- Contested items (where opinions split)
- Critical blockers
- Open questions
- Plain-language narrative summary
On mobile, accessible via a floating "Summary" button that opens a bottom sheet.
- Auto-classification — Weighted keyword scoring with sentiment analysis. AI provider fallback for richer classification.
- Semantic deduplication — pgvector cosine similarity (0.85 threshold) with Jaccard text fallback
- Pluggable providers — Anthropic Claude, OpenAI, or Ollama (fully offline)
- Contribution embeddings — Stored in PostgreSQL via pgvector for similarity search
- Markdown — Structured by contribution type with signal counts
- JSON — Full data dump
- PDF — Branded decision document with executive summary, stats, and contribution tables. Opens in browser with a "Print / Save PDF" button.
When an arena is closed, a permanent decision record is generated:
- Agreed items, contested items, blockers, open questions, next actions
- Narrative summary
- Searchable at
/decisions - Links back to original arena
All your arenas in one place at /dashboard:
- Filter by active/closed
- Shows phase, mode, contribution count, last activity
- Quick access to create new arenas
- Guest access — Anonymous tokens via localStorage, no signup needed
- OAuth — GitHub and Google login (requires client ID/secret in env)
- Session cookies — 30-day persistent sessions
- Slack — Post formatted arena summaries to any Slack channel via webhook (
POST /api/integrations/slack)
- Assign participant roles: Facilitator (1.5x), Expert (2x), Contributor (1x), Observer (0x)
- Both raw and weighted signal counts returned in API
- Transparent — unweighted counts always visible alongside weighted
# Clone the repo
git clone https://github.com/RoboIOTers/nuclave.git
cd nuclave
# Install dependencies
npm install
# Set up PostgreSQL (required)
cp .env.example .env.local
# Edit DATABASE_URL in .env.local
# Push database schema
npx drizzle-kit push
# Start development server
npm run devOpen http://localhost:3000. Create an arena, share the link.
# Pick one AI provider for summaries + Skeptic AI
AI_PROVIDER=anthropic # or "openai" or "ollama"
ANTHROPIC_API_KEY=sk-ant-xxx # if using Anthropic
OPENAI_API_KEY=sk-xxx # if using OpenAI
OLLAMA_BASE_URL=http://localhost:11434 # if using Ollama
# Embeddings (for semantic deduplication)
EMBEDDING_PROVIDER=openai # or "ollama"Without API keys, Nuclave still works. The local keyword classifier and template-based Skeptic handle everything at zero cost. API keys unlock richer summaries and AI-powered classification.
GITHUB_CLIENT_ID=xxx
GITHUB_CLIENT_SECRET=xxx
GOOGLE_CLIENT_ID=xxx
GOOGLE_CLIENT_SECRET=xxxgit clone https://github.com/RoboIOTers/nuclave.git
cd nuclave
cp .env.example .env
# Edit .env with your config
docker compose up -dThis starts:
- Nuclave app on port 3000 (with Socket.io)
- PostgreSQL 16 with pgvector extension
- Redis 7 for real-time pub/sub
npm install
npm run build
DATABASE_URL="postgres://..." npm run start:realtimeThe start:realtime script runs the custom server with Socket.io support.
| Layer | Technology | Why |
|---|---|---|
| Framework | Next.js 16 (App Router) | SSR + client interactivity |
| Language | TypeScript | Type safety across the stack |
| Styling | Tailwind CSS v4 | Custom design tokens (ink/paper/accent) |
| Real-time | Socket.io | WebSocket with polling fallback |
| Database | PostgreSQL 17 | Relational integrity, JSONB, enums |
| ORM | Drizzle (schema) + raw SQL (queries) | Type-safe schema, performant queries |
| Vectors | pgvector | Cosine similarity for deduplication |
| Cache | Redis | Pub/sub backplane for scaling |
| AI | Anthropic / OpenAI / Ollama | Pluggable — bring your own keys |
| Auth | Custom OAuth + session cookies | GitHub, Google, anonymous guests |
nuclave/
├── src/
│ ├── app/ # Next.js App Router
│ │ ├── page.tsx # Landing page
│ │ ├── dashboard/ # User's arena dashboard
│ │ ├── decisions/ # Decision log browser
│ │ ├── arena/
│ │ │ ├── create/ # Arena creation + template picker
│ │ │ └── [id]/ # Arena view (main session UI)
│ │ ├── join/[code]/ # Join via shareable link
│ │ └── api/
│ │ ├── arenas/ # CRUD, phase, export, close, signals, contributions, participants, skeptic
│ │ ├── ai/classify/ # Auto-classification endpoint
│ │ ├── auth/ # GitHub + Google OAuth, sessions
│ │ ├── dashboard/ # User's arenas
│ │ ├── decisions/ # Decision log
│ │ └── integrations/slack/ # Slack webhook
│ ├── components/arena/
│ │ ├── contribution-input.tsx # Zero-friction text input
│ │ ├── contribution-card.tsx # Card with inline editing + AI improve + signals
│ │ ├── ideas-map.tsx # Force-directed bubble visualization (d3-force)
│ │ ├── cluster-view.tsx # Grouped cards by theme/type
│ │ ├── related-knowledge.tsx # Institutional Memory banner
│ │ ├── phase-stepper.tsx # Visual 4-phase navigation bar
│ │ ├── phase-timer.tsx # Countdown + overtime counter
│ │ ├── summary-panel.tsx # Live AI summary
│ │ ├── mobile-summary-toggle.tsx # Bottom sheet for mobile
│ │ ├── arena-header.tsx # Header with export, share, end, participants
│ │ └── phase-banner.tsx # Phase explanation banner
│ ├── lib/
│ │ ├── ai/
│ │ │ ├── providers/ # Anthropic, OpenAI, Ollama
│ │ │ ├── engine.ts # Summary + Skeptic generation
│ │ │ ├── classify-local.ts # Weighted keyword classifier
│ │ │ ├── skeptic.ts # Devil's advocate (template + AI)
│ │ │ └── dedup.ts # Semantic deduplication (pgvector + Jaccard)
│ │ ├── db/ # Drizzle schema + client
│ │ ├── realtime/ # Socket.io client hook
│ │ ├── store.ts # PostgreSQL-backed data store
│ │ ├── auth.ts # OAuth + session management
│ │ ├── knowledge.ts # Institutional Memory (embedding search)
│ │ ├── tier.ts # Free/Pro/Enterprise tier limits
│ │ ├── rate-limit.ts # In-memory rate limiter
│ │ └── templates.ts # 6 arena templates
│ └── types/arena.ts # Core type definitions
├── server.ts # Custom server with Socket.io
├── docker-compose.yml # Full stack self-hosting
├── Dockerfile # Production container
├── drizzle.config.ts # Database config
└── drizzle/ # Generated migrations
| Method | Endpoint | Description |
|---|---|---|
POST |
/api/arenas |
Create a new arena |
GET |
/api/arenas |
List arenas (optional ?creator=token) |
GET |
/api/arenas/:id |
Get arena with contributions + weighted signals |
POST |
/api/arenas/:id/contributions |
Submit a contribution (auto-dedup check) |
PATCH |
/api/arenas/:id/contributions/:cid |
Change contribution type |
POST |
/api/arenas/:id/signals |
Toggle signal (auto-triggers Skeptic AI) |
POST |
/api/arenas/:id/phase |
Set phase + optional timer duration |
POST |
/api/arenas/:id/close |
Close arena + generate decision record |
POST |
/api/arenas/:id/summary |
Generate AI summary |
POST |
/api/arenas/:id/skeptic |
Manually trigger Skeptic AI |
GET |
/api/arenas/:id/export?format=md|json |
Export as Markdown or JSON |
GET |
/api/arenas/:id/export/pdf |
Export as branded PDF document |
GET/POST |
/api/arenas/:id/participants |
List/join participants with roles |
POST |
/api/ai/classify |
Auto-classify text (respects aiEnabled) |
POST |
/api/ai/improve |
AI rewrite suggestion |
GET |
/api/arenas/join/:code |
Look up arena by join code |
GET |
/api/dashboard?token=xxx |
User's arenas |
GET |
/api/decisions |
List all decision records |
GET |
/api/knowledge?q=query |
Search Institutional Memory |
GET |
/api/tier?token=xxx |
Check user's tier and limits |
POST |
/api/arenas/:id/clusters |
AI-powered thematic clustering |
GET |
/api/auth/github |
Start GitHub OAuth |
GET |
/api/auth/google |
Start Google OAuth |
GET |
/api/auth/me |
Get current user |
POST |
/api/auth/logout |
End session |
POST |
/api/integrations/slack |
Post summary to Slack webhook |
- Arena creation with structured contribution types
- Zero-friction input with AI auto-classification
- Manual type override (click tag to reclassify)
- Editable contributions with real-time sync
- AI writing suggestions ("Improve with AI")
- Real-time collaboration via Socket.io
- Phase-based sessions with visual stepper (bi-directional)
- Phase timer (continues on revisit, overtime counter in red)
- Phase timing tracked per session (planned vs actual vs overtime)
- Signal system (Agree / Important / Disagree)
- Weighted voting by participant role
- Live Summary Panel (desktop sidebar + mobile bottom sheet)
- Skeptic AI — auto-triggers during debate phase
- Semantic deduplication (pgvector + Jaccard fallback)
- Ideas Map — force-directed bubble visualization (d3-force)
- Cluster view — AI-grouped or type-grouped cards
- Export: Markdown, JSON, branded PDF with phase timing
- Decision log — permanent records from closed arenas
- Institutional Memory — surfaces related past decisions
- Arena templates (6 pre-built with phase durations)
- Dashboard — browse all your arenas
- No-account guest participation via shareable links
- OAuth authentication (GitHub + Google)
- Slack webhook integration
- PostgreSQL persistence with pgvector
- Docker Compose self-hosting
- Per-arena AI toggle (AI On / AI Off for privacy)
- Free tier limits (5 contributors, 5 arenas)
- Rate limiting on all endpoints (anti-spam)
- Stripe billing (Pro tier at $12/mo)
- Jira, Linear, Notion export integrations
- Embed mode (iframe for wikis)
- Public arena directory
- Slack bot (create arenas from Slack)
- Contribution threading
- Dark mode
- Broadcast mode (200+ participants)
- Notification system (email/push)
Nuclave is open source under the AGPL-3.0 license. Contributions are welcome.
# Fork the repo, then:
git clone https://github.com/YOUR_USERNAME/nuclave.git
cd nuclave
npm install
npm run devSee CONTRIBUTING.md for guidelines.
AGPL-3.0 — Free to use, modify, and self-host. Derivative works must remain open source.
NUCLAVE — Collective Intelligence Infrastructure
nuclave.com