> ## Documentation Index
> Fetch the complete documentation index at: https://docs.chatgrid.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Set Up Your First Project Board

> Create a board, add knowledge, search it, and ask AI a question. 5 minutes.

## What you'll do

1. Create a project board
2. Add a source node and vectorize text for search
3. Search the board
4. Ask AI a question grounded in your content

## Option A: Using Claude Code (MCP)

If you've [set up MCP](/mcp-setup), just talk naturally:

```
> Create a ChatGrid board called "Backend Project"

> Add this YouTube video to the board: https://youtube.com/watch?v=abc123

> Add these notes to the board: "We use PostgreSQL with pgvector
  for embeddings. Connection pooling via PgBouncer. See db/README
  for schema migrations."

> Add this blog post to the board: https://blog.example.com/postgres-performance-tips

> Search the board for connection pooling

> Based on the board, how should I configure PgBouncer for serverless?
```

That's it. Five prompts, and you have a board with searchable notes plus source nodes you can enrich with extracted text.

***

## Option B: Using the API

### Prerequisites

* A ChatGrid account at [chatgrid.ai](https://chatgrid.ai)
* An API key from the [ChatGrid dashboard](https://www.chatgrid.ai/dashboard)

### Create a board

```bash theme={null}
curl -X POST https://api.chatgrid.ai/v1/boards \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"name": "Backend Project"}'
```

Save `data.id` from the response as your `boardId`.

### Add a source node

```bash theme={null}
curl -X POST https://api.chatgrid.ai/v1/boards/{boardId}/nodes \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "type": "url",
    "position": {"x": 0, "y": 0},
    "data": {"url": "https://blog.example.com/postgres-performance-tips", "label": "Postgres performance tips"}
  }'
```

Save the returned `nodeId` if you want search results to link back to this source.

### Add text notes

```bash theme={null}
curl -X POST https://api.chatgrid.ai/v1/boards/{boardId}/documents/vectorize \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "content": "We use PostgreSQL with pgvector for embeddings. Connection pooling via PgBouncer. See db/README for schema migrations.",
    "metadata": {"source": "architecture-notes"}
  }'
```

### Vectorize source text

```bash theme={null}
curl -X POST https://api.chatgrid.ai/v1/boards/{boardId}/documents/vectorize \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "content": "Postgres performance notes: keep transactions short, add indexes for hot query paths, and use PgBouncer for connection pooling in serverless workloads.",
    "node_id": "{nodeId}",
    "metadata": {"source": "postgres-performance-tips"}
  }'
```

The REST API vectorizes text you provide. For URLs, videos, and PDFs, extract the relevant text first, then send that text to `/documents/vectorize`.

### Search the board

```bash theme={null}
curl -X POST https://api.chatgrid.ai/v1/boards/{boardId}/documents/search \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"query": "connection pooling", "limit": 3}'
```

### Ask AI a question

```bash theme={null}
curl -X POST https://api.chatgrid.ai/v1/boards/{boardId}/chats/{chatId}/messages \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "content": "Based on the board, how should I configure PgBouncer for serverless?",
    "stream": false
  }'
```

The AI answers using your board's content as context -- not generic knowledge.

## Next steps

<CardGroup cols={2}>
  <Card title="Team Knowledge" icon="users" href="/cookbooks/team-knowledge">
    Share a board across your team
  </Card>

  <Card title="MCP Workflow" icon="terminal" href="/cookbooks/mcp-workflow">
    Use ChatGrid in Claude Code for real debugging workflows
  </Card>
</CardGroup>
