Persist the Board as a board-owned Seed document at a reserved, hidden path, not inside the home document and not as local UI state.
Reserved path:
/:apps/boardThen the public Board URL stays:
/:boardBut internally, it loads/saves the Board state from that reserved document.
{
"version": 1,
"query": {
"includes": [
{
"space": "site-uid",
"path": "design",
"mode": "AllDescendants"
}
],
"sort": [
{
"term": "UpdateTime",
"reverse": true
}
],
"limit": 50
},
"workflow": {
"columns": [
{
"id": "backlog",
"title": "Backlog"
},
{
"id": "ready",
"title": "Ready"
},
{
"id": "in-progress",
"title": "In Progress"
},
{
"id": "review",
"title": "Review"
},
{
"id": "done",
"title": "Done"
}
],
"cards": {
"hm://site-uid/design/example-doc": {
"columnId": "backlog",
"labels": ["UI", "Research"],
"assignees": ["account-uid-1"],
"dueDate": "2026-06-30",
"priority": "High"
},
"hm://site-uid/design/another-doc": {
"columnId": "review",
"labels": ["Docs"],
"assignees": [],
"dueDate": null,
"priority": "Medium"
}
}
}
}Key idea:
Query computes which documents appear.
Board state stores how those documents are arranged.
The Board does not store duplicate document cards.
Card overrides are keyed by document ID/path.
Why this is best:
Uses Seed’s existing document persistence, sync, publishing, identity, and permissions.
Works on desktop and web.
Does not require the home document to link to the Board.
Keeps /:board as an AppView, not a normal document page.
Avoids inventing a separate daemon database right now.
I would avoid daemon-only persistence for now because then published web Boards will not reliably work.
Recap
Persist the Board in a hidden/reserved Seed document like /.seed/board, while keeping the user-facing route as /:board. Store the query definition and workflow overrides there; compute cards dynamically from the query.
version: 1
query
includes
space: site-uid
path: design
mode: AllDescendants
sort
term: UpdateTime,
reverse: true
limit: 50
workflow
columns
id: backlog
title: Backlog
id: ready
title: Ready
id: in-progress
title: In Progress
id: review
title: Review
id: done,
title: Done
cards
hm://site-uid/design/example-doc
columnId: backlog
labels: UI, Research
assignees: account-uid-1
dueDate: 2026-06-30
priority: High
hm://site-uid/design/another-doc
columnId: review
labels: Docs
assignees:
dueDate: null
priority: Medium
Do you like what you are reading? Subscribe to receive updates.
Unsubscribe anytime