Board
A data-driven kanban board: columns scroll horizontally, each column is a drop zone, and every card carries a drag grip, an optional trailing badge, a muted two-line description, a free-form chips slot, and an optional kebab menu.
Dragging is the kit's own drag-and-drop family, so it runs on iOS, Android, and the web from one code path and stays keyboard- and screen-reader-operable: press Space on a grip to grab, the arrow keys to move between positions and columns, Space to drop, Escape to cancel. The list stays controlled: a drop reports a BoardMove (source, target, insertion index, and the new neighbor ids) through onMove, and applyBoardMove is the standard reducer to apply it. Pass defaultItems instead of items for uncontrolled use, where the board applies each move itself.
To do
2
Rotate webhook secrets
Draft the design review
Doing
1
SSO rollout
Done
1
Upgrade the CI runners
iOS
To do
2
Rotate webhook secrets
Draft the design review
Doing
1
SSO rollout
Done
1
Upgrade the CI runners
Android
To do
2
Rotate webhook secrets
Draft the design review
Doing
1
SSO rollout
Done
1
Upgrade the CI runners
Web
tsx
Default
Compact
Card menus and press
Empty column and explicit badges
Controlled
Props
Do & Don’t
Moves stay in the consumer's data
Don’t
Don't pass a controlled items and drop the move on the floor: the drag completes, announces, and then the card snaps back because nothing updated the array.
Do
To do
1
Rotate webhook secrets
Doing
1
SSO rollout
Treat items as the single source of truth: apply every onMove to your own array (applyBoardMove), and persist afterId/beforeId if your backend ranks by neighbors.