From 87044a747b47bd83249d61a45842c7f7b2eae56d Mon Sep 17 00:00:00 2001
From: soryu <soryu@soryu.co>
Date: Sun, 11 Jan 2026 05:52:14 +0000
Subject:  Contract system

---
 .../src/components/workflow/WorkflowBoard.tsx      | 54 ++++++++++++++++++++++
 1 file changed, 54 insertions(+)
 create mode 100644 makima/frontend/src/components/workflow/WorkflowBoard.tsx

(limited to 'makima/frontend/src/components/workflow/WorkflowBoard.tsx')

diff --git a/makima/frontend/src/components/workflow/WorkflowBoard.tsx b/makima/frontend/src/components/workflow/WorkflowBoard.tsx
new file mode 100644
index 0000000..af4aec7
--- /dev/null
+++ b/makima/frontend/src/components/workflow/WorkflowBoard.tsx
@@ -0,0 +1,54 @@
+import { useMemo } from "react";
+import type { ContractSummary, ContractPhase } from "../../lib/api";
+import { PhaseColumn } from "./PhaseColumn";
+
+interface WorkflowBoardProps {
+  contracts: ContractSummary[];
+  onContractClick: (contractId: string) => void;
+  onPhaseChange: (contractId: string, newPhase: ContractPhase) => void;
+}
+
+const phases: ContractPhase[] = ["research", "specify", "plan", "execute", "review"];
+
+export function WorkflowBoard({
+  contracts,
+  onContractClick,
+  onPhaseChange,
+}: WorkflowBoardProps) {
+  // Group contracts by phase
+  const contractsByPhase = useMemo(() => {
+    const grouped: Record<ContractPhase, ContractSummary[]> = {
+      research: [],
+      specify: [],
+      plan: [],
+      execute: [],
+      review: [],
+    };
+
+    for (const contract of contracts) {
+      const phase = contract.phase as ContractPhase;
+      if (grouped[phase]) {
+        grouped[phase].push(contract);
+      } else {
+        // Default to research if unknown phase
+        grouped.research.push(contract);
+      }
+    }
+
+    return grouped;
+  }, [contracts]);
+
+  return (
+    <div className="flex gap-2 h-full overflow-x-auto">
+      {phases.map((phase) => (
+        <PhaseColumn
+          key={phase}
+          phase={phase}
+          contracts={contractsByPhase[phase]}
+          onContractClick={onContractClick}
+          onDrop={onPhaseChange}
+        />
+      ))}
+    </div>
+  );
+}
-- 
cgit v1.2.3

