Skip to content
Component installs need the registry setup
VegaStack Design

board-01

A board page — a ListToolbar over Board, with lanes named by their count, a paged Backlog, linked cards with menus, and No matches.

Last updated

Tasks

Drag a card, or press Space on a focused card to move it with the keyboard.

Backlog
Audit onboarding copy
Growth
MKManoj KumarDue in 4dMedium
Retry queue for webhooks
Platform
PSPriya ShahDue Nov 11High
Export billing CSV
Billing
ALAna LopezDue Nov 14
In progress
Agent run timeline
Agents
MKManoj KumarDue todayUrgent
Sidebar keyboard order
Design system
ALAna LopezOverdue 1dHigh
In review
Token contrast gate
Design system
PSPriya ShahDue in 2d
Shipped
Workspace invites
Growth
ALAna LopezOverdue 6d

What it is

A board page — a PageHeader over a ListToolbar and Board, with lanes named by their count, a paged Backlog, cards that link to each task with their own menu, and a No matches state. It is a block: you pull it once with shadcn add, and then you own it — nothing re-pulls it and no integrity hash tracks your edits, unlike the components it composes.

BoardView in components/ holds the filters and the board; the page is the server-safe frame around it.

Install

npx shadcn@latest add @vegastack/board-01
Registry setup required
Run this command only after configuring the Base UI shadcn project, the @vegastack registry namespace, and the Cloudflare Access service-token headers in Install from the VegaStack registry.

This installs the block's own files plus the components it composes: app-shell, avatar, board, button, data-table-parts, empty, filter-row, list-toolbar, page-header.

Preview

Tasks

Drag a card, or press Space on a focused card to move it with the keyboard.

Backlog
Audit onboarding copy
Growth
MKManoj KumarDue in 4dMedium
Retry queue for webhooks
Platform
PSPriya ShahDue Nov 11High
Export billing CSV
Billing
ALAna LopezDue Nov 14
In progress
Agent run timeline
Agents
MKManoj KumarDue todayUrgent
Sidebar keyboard order
Design system
ALAna LopezOverdue 1dHigh
In review
Token contrast gate
Design system
PSPriya ShahDue in 2d
Shipped
Workspace invites
Growth
ALAna LopezOverdue 6d

Anatomy

  • AppShellPage size="full" › PageHeader h1 "Tasks" with its "New task" action.
  • ListToolbar — the search and the Filter tool; its FilterRow holds an Assignee ListFacet and "Clear" while anything is filtered.
  • Board — each lane is a region named with its count ("Backlog, 6 tasks", via countLabel). The Backlog is paged: its count is the server's total and loadMore fetches the rest. Each card is a link to its task (getItemHref), named for moves (getItemLabel), with its own Edit / Archive items above Move in one ⋯ menu (getItemActions). An empty lane says so ("No tasks", or "No matching tasks" while filtering).
  • No matches — when the filters hide every card, the board gives way to an Empty with "Clear filters".

Filters and moves

The filters narrow what each lane shows; a move always lands in the full lane, which is why onMove updates the unfiltered columns. Space on a focused card lifts it into keyboard move mode; Enter follows its link.

Files

FileRegistry typeTarget
board-01/components/board-view.tsxregistry:componentapp/board-01/components/board-view.tsx
board-01/page.tsxregistry:pageapp/board-01/page.tsx

Do / Don't

Do
Name each lane with its total, page long lanes, and link cards to their records.
Don't
Add a view switch nothing reads, or put buttons inside a card.

On this page