Skip to content

Pages API

Complete API reference for managing pages in BlockForge.

Overview

Pages are the core content unit in BlockForge. Each page contains:

  • Title and metadata
  • Content (TipTap JSON format)
  • Workspace association
  • Collections and tags

List Pages

Get all pages in a workspace:

javascript
const { data, error } = await supabase
  .from('pages')
  .select('*')
  .eq('workspace_id', workspaceId)
  .order('updated_at', { ascending: false })

Filter Pages

javascript
// By collection
const { data } = await supabase
  .from('pages')
  .select('*')
  .eq('workspace_id', workspaceId)
  .contains('collections', [collectionId])

// By tag
const { data } = await supabase
  .from('pages')
  .select('*')
  .eq('workspace_id', workspaceId)
  .contains('tags', ['tag-name'])

Search Pages

javascript
const { data } = await supabase
  .from('pages')
  .select('*')
  .eq('workspace_id', workspaceId)
  .textSearch('title', 'search query')

Get Page

Get a single page by ID:

javascript
const { data, error } = await supabase
  .from('pages')
  .select('*')
  .eq('id', pageId)
  .single()

Create Page

Create a new page:

javascript
const { data, error } = await supabase
  .from('pages')
  .insert([
    {
      title: 'New Page',
      workspace_id: workspaceId,
      content: {
        type: 'doc',
        content: [
          {
            type: 'paragraph',
            content: [{ type: 'text', text: 'Hello, BlockForge!' }]
          }
        ]
      }
    }
  ])
  .select()

Update Page

Update page content or metadata:

javascript
const { data, error } = await supabase
  .from('pages')
  .update({
    title: 'Updated Title',
    content: newContent
  })
  .eq('id', pageId)

Update Content Only

javascript
const { data, error } = await supabase
  .from('pages')
  .update({
    content: newContent,
    updated_at: new Date().toISOString()
  })
  .eq('id', pageId)

Delete Page

Delete a page:

javascript
const { error } = await supabase
  .from('pages')
  .delete()
  .eq('id', pageId)

Page Schema

typescript
interface Page {
  id: string
  title: string
  workspace_id: string
  content: {
    type: 'doc'
    content: Block[]
  }
  collections?: string[]
  tags?: string[]
  created_at: string
  updated_at: string
  created_by: string
}

Realtime Updates

Subscribe to page changes:

javascript
const subscription = supabase
  .channel('pages-changes')
  .on('postgres_changes', 
    {
      event: '*',
      schema: 'public',
      table: 'pages',
      filter: `workspace_id=eq.${workspaceId}`
    },
    (payload) => {
      console.log('Page change:', payload)
    }
  )
  .subscribe()

Error Handling

javascript
const { data, error } = await supabase.from('pages').select('*')

if (error) {
  if (error.code === 'PGRST116') {
    console.log('No pages found')
  } else {
    console.error('Error:', error.message)
  }
  return
}

// Use data

Next Steps

Built with ❤️ for BlockForge