Skip to content
shadcn.io

shadcn.io is not affiliated with official shadcn/ui

Multi-Project Kanban Block for Vue

A portfolio swimlane board of five projects by Planning, Active and Complete, with a progress bar per row, a Sort lanes button and a switch that hides finished projects.

Framework
UI library

Preview

Preview width

Installation

Part of Pro
Pro unlocks the code and one-line install of every Pro button and text effect, plus the MCP for your AI editor.
Have Pro already? Sign in to open it.Opens here as soon as you're Pro.

Overview

Watch a whole portfolio at once with this multi-project kanban for Vue with Ark UI. A hairline frame with a plus mark on each corner holds one row per project (five of them) and three stages that share their lines: Planning, Active and Complete, with eighteen tasks. Every row head draws a thin progress bar and says "3 of 4 done", both worked out from the cards. A Native Select chooses how to order the rows (name, progress or most active work) and "Sort lanes" applies it when pressed; a Switch hides the projects that are at 100%. The rows never re-order under a drag or a move, and the status line says "Lane order: by progress. Press Sort lanes to refresh after moves". A card moves by dragging its grip, by Space, the arrow keys and Space again (Escape cancels), or from its Dropdown Menu with "Move to". The frame is ruled by Guides. On a phone the rows scroll in one named region. For a project office, a quarterly review and any portfolio with a few big efforts.

FAQ

How do I fill it with my own projects?

Edit LANES, STAGES and START. A task has an id, a title, an owner's name and a column that names its cell, such as portal|active. Progress is the tasks in the complete stage over all of a project's tasks, so the bar, the words and the header sentence are always calculated from the cards.

Why don't the rows re-order when I move a card?

A row that jumps while you are dragging into it is hard to hit, so the order only changes when you press "Sort lanes". Choosing another sort key only tells you to press it. Hiding finished projects works the same way: the rows that are hidden are the ones that were finished when you flipped the switch or pressed Sort.

How do I move a card without a mouse?

Tab to the grip at the start of a card, named "Move" with the task's title. Space or Enter picks it up, the arrow keys move it (left and right change the stage, up and down reorder and then cross into the row above or below; they swap in right-to-left languages), Space drops it and Escape puts it back. Each step is announced in the status line in the foot.

Is there a way to move without dragging?

Yes: the menu at the end of each card lists every project and stage with the current one ticked, so one click moves the card, focus lands on it in its new place and the status line says so. This is the route for a single pointer and for touch.

What stays in the demo?

Everything. The moves, the order and the hidden rows live in the component's state, nothing is saved or sent, and a reload or Reset brings back the starting board. The product, the people and the cards are made up. To keep a change, call your API from put, the one function every finished move goes through, and update the cards from the response.

How does it look on a phone?

The rows sit in one named region that scrolls both ways, so the controls above it stay put; each cell scrolls up and down inside its fixed height. Touch drags from the grip only, so the rest of a card still scrolls; the menu is the other way to move it.