Created by @alanshurafa
Reviewed and merged by the Open Brain maintainer team — thank you for building the future of AI memory!
A full-featured web dashboard for your Open Brain second brain. Browse, search, capture, and manage thoughts through a modern dark-themed UI. Built with Next.js, React, TypeScript, and Tailwind CSS. Deploy to Vercel or any Node.js host.
Provides 9 pages for managing your thoughts:
| Page | Description |
|---|---|
| Dashboard | Stats overview (total thoughts, type distribution, top topics), recent activity, quick capture, workflow summary widget |
| Workflow | Kanban board for tasks and ideas with drag-and-drop status management (New → Planning → Active → Review → Done → Archived) |
| Browse | Paginated thought table with filters for type, source, and importance |
| Detail | Full thought view with inline editing, delete, linked reflections, and related connections |
| Search | Semantic (vector similarity) and full-text search with match scores and pagination |
| Add to Brain | Smart ingest with auto-routing — short text goes to single capture, long text to extraction with dry-run preview |
| Audit | Quality review for low-score thoughts with bulk delete |
| Duplicates | Semantic similarity detection with keep/delete/keep-both resolution |
| Agent Memory | Review queue, memory inspector, and recall trace debugging for OB1 Agent Memory |
| Login | API key authentication via encrypted session cookie |
- A working Open Brain setup with the REST API gateway (
open-brain-rest) deployed from integrations/open-brain-rest - Node.js 18+ installed
- A Vercel account (free tier works) or any Node.js hosting
| Credential | Where to get it | Where it goes |
|---|---|---|
NEXT_PUBLIC_API_URL |
Your Supabase project URL + /functions/v1/open-brain-rest |
.env or hosting env vars |
AGENT_MEMORY_API_URL |
Optional. Your Supabase project URL + /functions/v1/agent-memory-api |
.env or hosting env vars |
AGENT_MEMORY_WORKSPACE_ID |
Optional. Default workspace for Agent Memory governance views | .env or hosting env vars |
AGENT_MEMORY_PROJECT_ID |
Optional. Default project filter for Agent Memory governance views | .env or hosting env vars |
SESSION_SECRET |
Generate: openssl rand -hex 32 |
.env or hosting env vars |
AUTH_COOKIE_SECURE |
Optional. Force HTTPS-only auth cookies when set to true; leave unset for localhost previews |
.env or hosting env vars |
OB1_DEMO_AUTH_BYPASS |
Optional. Local walkthrough capture only; bypasses login when set to true |
local shell only |
OB1_DASHBOARD_DEMO_KEY |
Optional. Local walkthrough capture key used by the demo REST shim | local shell only |
RESTRICTED_PASSPHRASE_HASH |
Optional. Generate: echo -n "passphrase" | shasum -a 256 |
.env or hosting env vars |
# From the OB1 repo
cd dashboards/open-brain-dashboardOr copy the folder to your own project directory.
npm installcp .env.example .envEdit .env and set your values:
NEXT_PUBLIC_API_URL=https://YOUR-PROJECT-REF.supabase.co/functions/v1/open-brain-rest
# Optional if your Agent Memory function follows the standard slug:
# AGENT_MEMORY_API_URL=https://YOUR-PROJECT-REF.supabase.co/functions/v1/agent-memory-api
# AGENT_MEMORY_WORKSPACE_ID=ob1-staging
SESSION_SECRET=your-32-char-secret-here
# Optional on HTTPS hosts:
# AUTH_COOKIE_SECURE=true
npm run devOpen http://localhost:3000. You should see the login page.
Enter your Open Brain API key (the MCP_ACCESS_KEY from your Supabase Edge Function secrets). After login, the dashboard loads with your stats and recent thoughts.
npx vercel --prodOr connect the folder to Vercel via the dashboard. Set the environment variables (NEXT_PUBLIC_API_URL, SESSION_SECRET) in your Vercel project settings.
Tip
The free Vercel tier is sufficient. The dashboard makes server-side API calls to your Open Brain REST endpoint — there's no heavy compute.
If you're already on Cloudflare for the open-brain-rest gateway, you can host the dashboard on the same platform via the @opennextjs/cloudflare adapter. The older @cloudflare/next-on-pages adapter caps at Next 15.5.x and doesn't support this dashboard's Next 16.
The repo ships the two config files this needs out of the box (open-next.config.ts and wrangler.jsonc); rename the Worker in wrangler.jsonc if you want something other than ob-dashboard.
# 1. Make sure .env has NEXT_PUBLIC_API_URL set — it's read at *build*
# time and baked into the client bundle.
npx opennextjs-cloudflare build
# 2. First-time deploy creates the Worker.
npx opennextjs-cloudflare deploy
# 3. Set SESSION_SECRET as a *runtime* secret on the deployed Worker.
# (NEXT_PUBLIC_API_URL is build-time only, so no Worker secret for it.)
wrangler secret put SESSION_SECRET --name ob-dashboardThe dashboard ends up at https://ob-dashboard.<your-cf-subdomain>.workers.dev.
Tip
NEXT_PUBLIC_API_URL is build-time, SESSION_SECRET is runtime. If you change the API URL later you have to rebuild and redeploy; rotating the session secret only needs wrangler secret put.
When working correctly:
- Login page accepts your Open Brain API key and redirects to the dashboard
- Dashboard shows thought count, type distribution chart, top topics, and recent thoughts
- Browse displays a paginated table of all thoughts with working type/source/importance filters
- Search returns results with similarity scores (semantic mode) or rank scores (full-text mode)
- Add to Brain auto-routes short text (< 500 chars, single paragraph) to single capture, and long/structured text to extraction with dry-run preview
- Detail page shows full thought content with metadata, inline edit for content/type/importance, and linked reflections
- Agent Memory shows pending agent-written memories, lets you confirm/evidence-only/reject them, inspects provenance/source data, and loads recall traces by request id
The Workflow page adds a visual kanban board for managing task and idea thoughts through status stages.
- Drag-and-drop between status columns using @dnd-kit (touch-friendly with 200ms hold delay)
- Collapsible columns — click the arrow to collapse any column to a slim vertical bar (persisted in localStorage)
- Auto-adjusting widths — expanded columns share available space equally, no horizontal scrollbar
- Inline editing — tap a card to open the edit modal (status, priority, type, content)
- Priority dots — click to change priority (Critical/High/Medium/Low mapped from importance 0-100)
- Dashboard widget — summary of active workflow items on the main dashboard
- Mobile-first — responsive layout, pinch-to-zoom enabled, full-screen edit modal on small screens
New → Planning → Active → Review → Done → (Archived)
Cards auto-archive from Done after 30 days. Archived cards are hidden by default (toggle with "Show archived").
The Workflow board requires two additional columns on the thoughts table. See the workflow-status schema for the migration SQL.
The progress_task tool in the Open Brain MCP server allows AI assistants to update task status and priority conversationally:
"Move the API redesign task to active"
"Set priority on thought 42 to high"
When a new task or idea is captured, the MCP server auto-assigns status: "new".
The dashboard calls these endpoints on your Open Brain REST API:
| Endpoint | Method | Used By |
|---|---|---|
/health |
GET | Login validation |
/thoughts |
GET | Browse page (paginated, filtered) |
/thought/:id |
GET | Detail page |
/thought/:id |
PUT | Inline edit (content, type, importance) |
/thought/:id |
DELETE | Delete button |
/search |
POST | Search page (semantic + full-text) |
/stats |
GET | Dashboard stats widget |
/capture |
POST | Quick capture (single thought) |
/thought/:id/reflection |
GET | Detail page (linked reflections) |
/ingest |
POST | Smart ingest (extraction) |
/ingestion-jobs |
GET | Ingest page (job history) |
/duplicates |
GET | Duplicates page |
/thoughts?type=task |
GET | Workflow board (filtered by type) |
/thought/:id |
PUT | Workflow board (status/priority updates) |
Agent Memory pages also call these endpoints on agent-memory-api:
| Endpoint | Method | Used By |
|---|---|---|
/memories |
GET | Agent Memory list by status/scope |
/memories/review |
GET | Pending review queue |
/memories/:id |
GET | Memory inspector |
/memories/:id/review |
PATCH | Confirm, evidence-only, reject, stale, or restrict memory |
/recall-traces/:request_id |
GET | Recall trace debugger |
Note
If your Open Brain instance doesn't have all these endpoints (e.g., no smart-ingest or duplicates), those pages will show errors but the core pages (dashboard, browse, search, detail) will still work.
Important
OB1's real thoughts.id values are UUID strings. The dashboard treats thought IDs as strings end to end so detail links, workflow updates, audit deletes, and duplicate resolution work against production Supabase rows.
If you've applied the sensitivity-tiers primitive and want to control access to sensitive thoughts:
- Set
RESTRICTED_PASSPHRASE_HASHin your environment - A lock/unlock toggle appears in the sidebar
- When locked (default), restricted thoughts are filtered from all views
- Enter your passphrase to temporarily unlock restricted content for the session
If RESTRICTED_PASSPHRASE_HASH is not set, the toggle is hidden — no action needed.
The dashboard uses iron-session for encrypted HTTP-only session cookies:
- User enters their Open Brain API key once at login
- Key is validated against the
/healthendpoint - Key is stored in an encrypted session cookie (not in client-side JS or localStorage)
- All server-side API calls use the key from the session
- Sessions expire after 24 hours
No API key is stored in environment variables or exposed to the browser.
The walkthrough asset pipeline lives in docs/walkthroughs/ob1-agent-dashboard. It seeds the Dashboard, Thoughts, Workflow, Duplicates, Audit, Agent Memory, and Recall Trace surfaces with Nate B. Jones / OB1 demo data for screenshots, PDF guides, and video walkthroughs.
The dashboard has a gated local-only bypass for that capture flow:
OB1_DEMO_AUTH_BYPASS=true
OB1_DASHBOARD_DEMO_KEY=local-screenshot-key
NEXT_PUBLIC_API_URL=http://127.0.0.1:3024
AGENT_MEMORY_API_URL=http://127.0.0.1:3022Do not enable OB1_DEMO_AUTH_BYPASS in shared previews or production. It exists so repeatable screenshot and video generation can run without putting real API keys in browser automation.
- Next.js 16 (App Router)
- React 19 with TypeScript
- Tailwind CSS 4 (dark theme)
- iron-session 8 (encrypted cookies)
- @dnd-kit (drag-and-drop for workflow board)
- Zero external runtime dependencies beyond these
-
"Could not reach API" on login — Verify
NEXT_PUBLIC_API_URLis correct and your REST API gateway (open-brain-rest) is deployed. Test with:curl https://YOUR-REF.supabase.co/functions/v1/open-brain-rest/health -H "x-brain-key: YOUR_KEY". -
"SESSION_SECRET env var is required" — The app requires a 32+ character secret for cookie encryption. Generate one with
openssl rand -hex 32. -
Build fails with SWC error — This happens when
node_moduleswas installed on a different platform (e.g., Windows modules on Linux). Deletenode_modulesandpackage-lock.json, then runnpm installon your target platform. -
Search returns no results — Ensure your thoughts have embeddings. Semantic search requires the
embeddingcolumn to be populated. Run an embedding backfill if needed. -
Ingest page shows "extracting" forever — Check that the
smart-ingestEdge Function is deployed. The ingest feature depends on a separate Edge Function for document extraction.