Board (Kanban)
The Board tab is the primary execution surface in TruePPM. It presents the project’s tasks as cards in a Kanban layout and stays in sync with the Schedule view via WebSocket — moving a card here updates the task’s status everywhere.
Board layout
Section titled “Board layout”The board has two zones:
- Backlog —
BACKLOGcards live in a dedicated surface beside the working columns, not as a column of their own. Backlog is intake — undated, unrefined, not-yet-committed work — so it stays phase-agnostic and visible while you work the active board. Three layout variants are available from the toolbar’s segmented control: Rail (left-side band, the default), Drawer, and Queue. - Working columns — the committed-work columns, rendered as phase swimlanes (one lane per phase in the WBS). Columns are configurable per project — labels, visibility, WIP limits, and accent colors — and default to:
| Column | Status value | Meaning | Default WIP limit |
|---|---|---|---|
| To Do | NOT_STARTED | Committed; work has not begun | — |
| In Progress | IN_PROGRESS | Work is active | 5 |
| Review | REVIEW | Work complete; awaiting review / sign-off | 3 |
| Done | COMPLETE | Done | — |
Dragging a card from the backlog into a working column commits it (status changes to the column’s status). Dragging a To Do card back to the backlog opens a confirmation dialog — demoting committed work is a deliberate decision. Cards that are In Progress or beyond cannot be demoted to the backlog.
The legacy ON_HOLD status is kept for data compatibility with pre-0.1 projects but does not appear as a column; on the board it is treated like Backlog for drag guards.
Board cards
Section titled “Board cards”Each card shows:
- Task name and task reference —
ENG-2026-8, using the Project code from Settings → General as the prefix. Without a code it readsT-8. The reference is formatted server-side, so the web app, the mobile app, a PDF export, and an MCP client all show the same string. - Assignee avatars (up to three, with +N overflow)
- Readiness chip —
idea/estimated/ready/baselined, shown only when the board holds more than one readiness value (see Readiness states) - Risk badge — count of linked active risks, colored by max severity
- Blocked indicator — shown when any predecessor is not yet
COMPLETE - Sprint chip — when the task is committed to a sprint
- Progress ring — % complete, fills as work progresses
- CPI badge — cost performance index when cost data is available (board batch 4)
Card health signal
Section titled “Card health signal”0.4 will consolidate a card’s stacked delivery chips — float, dwell, SPI, CPI, cost — into a single worst-offender badge that surfaces the one highest-severity signal at a glance. The severity order is derived from objective delivery state, never from PM priority rank:
- Blocked (⛔) — a predecessor is not yet complete, with the dependency count
- Stale (⚡) — past the column’s aging threshold and stalled; escalates when it passes twice the limit
- Critical path / late (⚑) — on the critical path or running on negative float
- Behind (📉) — behind schedule (SPI) or over budget (CPI) when EVM mode is on
An on-track card shows no badge. Every badge carries a glyph and a label (never color alone), so the signal reads without relying on hue.
The badge is expandable, not lossy — the full chip set is one interaction away. At comfortable density (the default), hover, focus, or tap the badge to reveal the complete health chips and baseline-variance panel; the tap target meets the 44px minimum and the disclosure is keyboard- and screen-reader-operable (press Esc to collapse). At detailed density the full chip set stays inline with no badge; at compact density only the badge shows.
Custom fields on cards
Section titled “Custom fields on cards”A project’s custom fields — the Text, Number, Date, Single-select, Multi-select, Person, and Checkbox fields you define in Project Settings → Workflow → Fields — can show their value directly on the board card, so you can scan a task’s metadata without opening the drawer.
This is opt-in per field. A field’s value appears on cards only after someone with the Scheduler role or higher flips its Show on card switch in Project Settings → Workflow → Fields. Every field is off by default, so the card stays scannable until you deliberately add to it.
How values render
Section titled “How values render”Values render as compact, type-aware marks that reuse the card’s existing chip vocabulary:
- Single-select / Multi-select — a colored option chip. The option’s color is always paired with its label, never color alone.
- Checkbox — a neutral ✓ mark. A checked box is not a health signal, so it never reads as green.
- Text / Number / Date — a
Label: valuepair, so the datum is self-describing without a legend. - Person — an avatar initials pill, grouped after the task’s assignees and named by its field, so it is never mistaken for an assignee.
Custom-field marks are the lowest-priority content on the card. They render after every existing element and never displace the health badge or the story-point pill — a custom field can’t push a delivery signal off the row. When space is contested, they are the first content to collapse into overflow. Unset values render nothing — no placeholder, no empty chip, no reserved space.
Per density
Section titled “Per density”How many marks show inline depends on the card density you are viewing:
| Density | What shows |
|---|---|
| Comfortable (the default) | Up to 3 marks inline, plus a +N more button that opens a tap-to-peek list of the rest |
| Compact / mobile | A single ⊕N button on the card bar; tap it to peek every value |
| Detailed | All flagged values, inline |
Hiding custom fields on your board
Section titled “Hiding custom fields on your board”A per-user board switch, Show custom fields on cards (in the board’s settings panel, on by default), hides the whole class from your own view in one click. It is a view preference: turning it off changes only what you see and leaves every field’s Show on card setting untouched, so muting the cards on your board never changes them for the rest of the team.
Moving cards
Section titled “Moving cards”Drag a card to a new column to change its status. The status change is optimistic: the card moves immediately, and the API call fires in the background. If the API call fails, the card snaps back with a toast.
Keyboard alternative: every card’s ··· overflow menu includes a Move to… item with a submenu. Arrow keys navigate the submenu; Enter commits. An aria-live region announces the move.
Moving cards offline
Section titled “Moving cards offline”The board keeps working with no signal. If you change a card’s status while offline — by drag, the Move to… menu, or the keyboard — the card moves immediately and the change is saved to a durable on-device queue that survives a page reload. Each queued card shows a Pending badge so you can see at a glance what has not yet reached the server.
When you reconnect, the queued moves are sent automatically and the Pending badges clear. Moves apply last-write-wins per card: only the most recent status you set for a card is sent. If a card changed on the server while you were offline, your queued move is reverted to the server’s latest state and a toast explains what happened, rather than silently overwriting someone else’s change.
The board also renders from its last successful fetch when you reopen it offline, so you can review the current state without a connection. Offline support currently covers card status changes and flagging a task blocked — creating tasks, editing card details, and reordering phases still require a connection.
Toolbar
Section titled “Toolbar”The board toolbar (top of the board) groups its controls into these clusters:
- Search — a card search box (see below) that leads the toolbar
- Primary chips — Group, Sort, and Density popovers (card density, plus a separate backlog-card density)
- Zoom — a Small / Normal / Large stepper that scales the board surface (see below)
- Filters — a ⚑ Filters button that opens the facet panel (see below); the button carries a badge with the count of active filters
- Quiet toggles — My tasks (only tasks assigned to you), At-risk, and Cost
- Layout segmented control — Rail · Drawer · Queue backlog layout variants
- More⋯ overflow — collapse/expand all lanes, WIP limit chips, column Tints, EVM mode, the Columns configuration panel, and Export PDF (see below)
Search
Section titled “Search”The toolbar’s search box finds cards by title and description across the project. Press / anywhere on the board to focus it (typing in a form never steals focus to search).
- As you type, matching cards stay lit and the rest dim, so the card you want stands out in place — the board never reflows or hides cards.
- A chip shows the match count; clear the search with the × button or Esc.
- The query is reflected in the URL as
?q=…, so a searched board is a shareable link. - Search respects your project role: results never include cards from projects you are not a member of, and the search response carries no cost or other role-gated fields.
Matching is a case-insensitive substring (searching foundation finds “Foundation pour”). Title matches rank above description-only matches. Comment search will arrive with threaded comments.
Filters
Section titled “Filters”The ⚑ Filters button opens a facet panel that narrows the board to the cards you care about. Press f anywhere on the board to open it (typing in a form never opens the panel). It offers four facet groups:
- Assignee — pick one or more people, plus an explicit Unassigned option for cards nobody owns yet.
- Priority — High, Medium, Low, or Unranked, bucketed from each card’s priority rank.
- Due — Overdue or This week, derived from the card’s finish date. Only scheduled cards (a committed start date, or a card pulled into a sprint) are eligible — an uncommitted backlog idea never counts as “due”.
- Label — pick one or more of the project’s labels. The facet lists the labels actually present on this board’s cards, so it never offers a label that would match nothing.
Facets combine as you would expect: a card must match every group you have narrowed, and any of the values you picked within a group. Selecting Alice and Bob under Assignee plus High under Priority shows Alice’s and Bob’s high-priority cards.
- Cards that don’t match dim to the background and drop out of keyboard and screen-reader navigation, so faceting never strands focus on a hidden card — the board never reflows.
- The Filters button shows a badge with the number of active facet values, and an active-filter bar below the toolbar lists each one as a removable chip so the lens is always visible. Remove a chip, or press Clear all, to widen the board again.
- If nothing matches, a No cards match these filters banner replaces the board with a one-click Clear filters action.
- The active facets are reflected in the URL (
?fa=…&fp=…&fd=…&fl=…), so a filtered board is a shareable link, and your selection is also remembered per project in this browser. - Saving the current board as a named view captures the active facets — including the Label facet — along with sort and display settings; loading that view restores them, so a saved view carries its filter state rather than leaving it stranded in the URL or this browser’s storage.
Filters compose with the My tasks and At-risk quiet toggles — those remain independent one-tap lenses alongside the facet panel.
The Zoom stepper (Small / Normal / Large) scales the board surface only — the phase-column width and the gaps between columns and cards — so you can fit more of a dense board on screen or spread it out for a presentation. Unlike browser zoom (Cmd/Ctrl ±), it leaves the sidebar, top bar, and tabs at their native size.
- Use the − / + buttons, or focus the control and press the arrow keys.
- Your choice is remembered per browser and survives a refresh.
- Zoom is an independent axis from Density: Density controls per-card padding; zoom controls how much of the board fits on screen. The control is hidden on phones, where the mobile layout governs sizing.
Export to PDF
Section titled “Export to PDF”Export PDF in the More⋯ overflow will produce a boardroom-clean PDF of the board for a deck or a client who has no portal access — no screenshots, no copy-paste. The export is a faithful, static projection of what you currently see:
- Swimlanes and columns mirror the on-screen layout: one block per phase, the same status columns.
- Cards carry their title, assignee initials, due date, and key chips (critical-path marker, blocked, story points, milestone).
- A footer stamps the project name, the generation timestamp, the exporting user, and the active filter / sprint context, so the artifact is self-describing.
The export honors your current view — the selected sprint scope and any active filters (My tasks, At-risk, Tech debt, search) carry through, because the PDF renders the same filtered card set the live board draws. Tall boards paginate automatically. The whole document is generated in your browser — nothing is uploaded, so anyone who can view the board can export it. The action is hidden on phones; export from a desktop.
Readiness states
Section titled “Readiness states”Readiness is computed server-side from the task’s data, resolved in this order (highest specificity first):
| State | Condition |
|---|---|
baselined | Task is in the active baseline (always wins) |
idea | No assignee and still in BACKLOG (unrefined, uncommitted) |
ready | Has an assignee + at least one predecessor link |
estimated | Has an assignee without predecessors, or was promoted out of BACKLOG without an assignee (committed but unowned) |
idea only applies while the task is in the backlog: once a card moves to any working column, a commitment decision has been made, so it reads as estimated even with no assignee.
The readiness chip drives the card’s left accent bar color (overridden by isCritical → red).
Readiness is a comparative signal, so the chip is hidden when every card on the board
shares the same state — the steady state of any project past planning is “everything is
baselined”, and a chip that is true of all of it tells you nothing while costing a line on
every card. The chip returns the moment two states are in play. The left accent bar still
carries readiness either way, and the state is always in the card’s detail view.
WIP overload
Section titled “WIP overload”When a column exceeds its configured WIP limit, the column header turns amber and a warning badge appears. See WIP Overload for details.
Sprint integration
Section titled “Sprint integration”When a sprint is active, committed tasks appear in the To Do → In Progress → Review → Done columns as normal. Sprint-committed tasks are never shown in the Unscheduled gutter on the Schedule view, regardless of whether they have a planned start date.
Sprint view
Section titled “Sprint view”By default the board shows every committed task in the project. A scope switcher in the toolbar (next to the saved-views dropdown) will let you focus the phase columns on a single sprint:
- Project — the default; all committed tasks.
- A sprint — only tasks committed to the selected sprint. The dropdown lists active, planned, and completed sprints (viewing a closed sprint’s board is a legitimate retrospective read).
The selection persists in a ?sprint= URL parameter, so a sprint-scoped board is a shareable link. The backlog rail is unaffected — it stays the intake source you drag from. While viewing an active or planned sprint, dragging a card from the backlog (or another phase) into a phase column assigns it to that sprint — for an active sprint it enters the team’s scope-injection review as a pending item. A completed-sprint view is read-only for assignment.
Board cadence
Section titled “Board cadence”Agile and hybrid projects can run their board on one of two cadences, set in Project → Settings → Workflow & fields → Board cadence (Scheduler+):
- Sprint-based (the default) — the board carries the full sprint chrome: the active-sprint panel, burndown, and sprint header.
- Continuous flow (Kanban) — a continuous-flow board with no sprint cadence. The sprint panel, burndown, and sprint header are hidden, and the board leans on the always-present Flow analytics panel (cycle time, throughput, cumulative flow) instead. That panel also carries a throughput forecast: a Monte-Carlo estimate over recent weekly throughput that headlines a P80 “finish in ~N weeks — by <date>” answer for the remaining backlog, so a Kanban team gets a forward delivery date without sprints or velocity. Cards still move through the same working columns.
Switching cadence is non-destructive — an in-flight sprint is preserved, not deleted, so switching back to sprint-based brings it back verbatim. Waterfall projects don’t use sprints, so cadence doesn’t apply to them.
Aging cards
Section titled “Aging cards”Each working column can carry an aging threshold in days, configured per column in Workflow & fields (Scheduler+). When a card sits in its column longer than that threshold it gets a calm “aging” badge showing its dwell time — a quiet nudge that work is stalling.
Every card with a recorded column-entry time carries a dwell line reading
4d in this column · 60% done (or Moved here today on the day it lands). The progress
clause is omitted at 0% and at 100% — a card in Done saying “100% done” adds nothing. The signal is board-local: it’s visible to everyone on the board but is never rolled up into a program or portfolio metric. Leave a column’s threshold blank to use the built-in default for that status.
Mobile
Section titled “Mobile”On viewports below 768px the board reflows into a horizontal snap-scroll layout: each status column becomes a full-width page (scroll-snap-align: start), and swiping settles cleanly column-to-column. The phase swimlanes collapse on a phone — each column shows a flat list of its cards across every phase, so the narrow screen carries the status axis without nesting.
A dot-strip above the board names every column with its task count and a health dot, and acts as the map: the active column’s bar fills solid, and tapping any segment jumps to that column. Card anatomy, WIP limits, and the critical / blocked treatment are unchanged from desktop — only the layout reflows. The mobile FAB creates a task in the first visible column.
Permissions
Section titled “Permissions”| Action | Minimum role |
|---|---|
| View the board | Viewer |
| Move cards, update status | Member |
| Create tasks from the board | Member |