Skip to content

RoboIOTers/nuclave

Repository files navigation

NUCLAVE

Collective Intelligence Platform

Where groups think together and AI surfaces what matters.

Live Demo · Features · Quick Start · Self-Host · API · Contributing

License Next.js TypeScript PostgreSQL Socket.io AI


What is Nuclave?

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.

Features

Zero-Friction Input

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.

Real-Time Collaboration

  • 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

Phase-Based Sessions with Visual Stepper

Science-backed facilitation structure with a clickable phase stepper bar:

  1. Ideation — Signals hidden. Ideas flow without influence.
  2. Debate — Reactions revealed. Agree, challenge, or flag as critical.
  3. Prioritization — The most-signaled ideas rise to the top.
  4. 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.

Arena Templates

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

Skeptic AI (Devil's Advocate)

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.

Live Summary Panel

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.

AI-Powered Intelligence

  • 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

Export

  • 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.

Decision Log

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

Dashboard

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

Authentication

  • 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

Integrations

  • Slack — Post formatted arena summaries to any Slack channel via webhook (POST /api/integrations/slack)

Weighted Voting

  • 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

Quick Start

# 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 dev

Open http://localhost:3000. Create an arena, share the link.

With AI Features (Optional)

# 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.

With OAuth (Optional)

GITHUB_CLIENT_ID=xxx
GITHUB_CLIENT_SECRET=xxx
GOOGLE_CLIENT_ID=xxx
GOOGLE_CLIENT_SECRET=xxx

Self-Hosting

Docker Compose (Recommended)

git clone https://github.com/RoboIOTers/nuclave.git
cd nuclave
cp .env.example .env
# Edit .env with your config

docker compose up -d

This starts:

  • Nuclave app on port 3000 (with Socket.io)
  • PostgreSQL 16 with pgvector extension
  • Redis 7 for real-time pub/sub

Manual Deployment

npm install
npm run build
DATABASE_URL="postgres://..." npm run start:realtime

The start:realtime script runs the custom server with Socket.io support.

Tech Stack

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

Project Structure

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

API Reference

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

Roadmap

Done

  • 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)

Planned

  • 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)

Contributing

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 dev

See CONTRIBUTING.md for guidelines.

License

AGPL-3.0 — Free to use, modify, and self-host. Derivative works must remain open source.


NUCLAVE — Collective Intelligence Infrastructure
nuclave.com

About

Collective Intelligence Platform — real-time structured brainstorming with AI auto-classification. Open source, self-hostable.

Topics

Resources

License

Contributing

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages