Kanban Flowmain
Ready
Build #18 · 3 min agoUnlimited
Chat6 msgs
Build a drag-and-drop kanban board with project management features, sprint tracking, and real-time collaboration support.
2:14 PM
I'll build you a full Kanban board application with drag-and-drop columns, card management, sprint tracking, and a clean dashboard. Here's what I'm generating:
Files changed
src/app/page.tsx src/components/Board.tsx src/components/Column.tsx src/components/Card.tsx src/lib/store.ts +12 more files
2:14 PM
Add a sprint planning view where I can assign story points to cards and see total capacity per sprint.
2:31 PM
Added sprint planning. I created a new `/sprints` route with a capacity bar, story point input on each card, and a velocity chart showing points completed per sprint. The Board component now accepts a `sprintId` prop to filter cards.
Files changed
src/app/sprints/page.tsx src/components/SprintPlanner.tsx src/components/VelocityChart.tsx [modified] src/components/Card.tsx
2:32 PM
The card modal needs a description field with markdown support and an assignee picker.
3:05 PM
Done — the card modal now has a full markdown editor using `@uiw/react-md-editor` with preview toggle, and an assignee picker with avatar thumbnails. I also added a `members` array to the board state so you can manage team members from settings.
Files changed
[modified] src/components/CardModal.tsx src/components/MarkdownEditor.tsx src/components/AssigneePicker.tsx
3:06 PM
↵ send · ⇧↵ newline
Explorer
Board.tsx
'use client';
import React, { useState } from 'react';
import { DndContext, DragEndEvent, closestCenter } from '@dnd-kit/core';
import Column from './Column';
import { useBoardStore } from '../../../lib/store';
interface BoardProps {
sprintId?: string;
}
export default function Board({ sprintId }: BoardProps) {
const { columns, moveCard } = useBoardStore();
const handleDragEnd = (event: DragEndEvent) => {
const { active, over } = event;
if (!over || active.id === over.id) return;
moveCard(String(active.id), String(over.id));
};
const filteredColumns = sprintId
? columns.filter((col) => col.sprintId === sprintId)
: columns;
return (
<DndContext collisionDetection={closestCenter} onDragEnd={handleDragEnd}>
<div className="flex gap-4 h-full overflow-x-auto p-6">
{filteredColumns.map((column) => (
<Column key={column.id} column={column} />
))}
<button className="flex-shrink-0 w-64 h-12 rounded-xl border-2 border-dashed
border-border text-muted-foreground hover:border-primary hover:text-primary
text-sm font-medium transition-all duration-150">
+ Add column
</button>
</div>
</DndContext>
);
}localhost:3000
Kanban Flow/ Sprint 12
DashboardBoardSprintsTeam
AK
Sprint 12 Board
Filter
+ Add Card
Backlog8
To Do5
In Progress3
Review2
Done11