@@ -214,7 +214,7 @@ export default function HiringIntentDashboard() {
214214 ) ;
215215
216216 return (
217- < div className = "space-y-8 " >
217+ < div className = "space-y-6 " >
218218 { /* Space Selector */ }
219219 < div className = "flex items-center justify-between" >
220220 < div className = "flex items-center gap-3" >
@@ -263,32 +263,120 @@ export default function HiringIntentDashboard() {
263263 </ Card >
264264 ) }
265265
266- { /* Actions Section */ }
267- { ! isLoading && ! error && actionIntents . length > 0 && (
268- < div className = "space-y-4" >
269- < div className = "flex items-center gap-2" >
270- < h2 className = "text-xl font-semibold text-gray-900" > Actions</ h2 >
271- < Badge variant = "secondary" className = "bg-green-100 text-green-800" >
272- { actionIntents . length }
273- </ Badge >
274- </ div >
275- < div className = "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4" >
276- { actionIntents . map ( ( intent ) => renderIntentCard ( intent , false ) ) }
266+ { /* Kanban Layout */ }
267+ { ! isLoading && ! error && hiringIntents . length > 0 && (
268+ < div className = "grid grid-cols-1 lg:grid-cols-2 gap-6 h-[calc(100vh-250px)]" >
269+ { /* Left Column - Signals */ }
270+ < div className = "flex flex-col" >
271+ < div className = "flex items-center gap-2 mb-4" >
272+ < h2 className = "text-xl font-semibold text-gray-900" > Signals</ h2 >
273+ < Badge variant = "secondary" className = "bg-blue-100 text-blue-800" >
274+ { pendingIntents . length }
275+ </ Badge >
276+ </ div >
277+ < div className = "flex-1 overflow-y-auto space-y-4 pr-2" >
278+ { pendingIntents . length === 0 ? (
279+ < Card className = "border-dashed" >
280+ < CardContent className = "pt-6" >
281+ < div className = "text-center py-8" >
282+ < p className = "text-gray-500" > No pending signals</ p >
283+ < p className = "text-gray-400 text-sm mt-2" >
284+ All signals have been processed
285+ </ p >
286+ </ div >
287+ </ CardContent >
288+ </ Card >
289+ ) : (
290+ pendingIntents . map ( ( intent ) => renderIntentCard ( intent , true ) )
291+ ) }
292+ </ div >
277293 </ div >
278- </ div >
279- ) }
280294
281- { /* Orbit Signals Grid */ }
282- { ! isLoading && ! error && pendingIntents . length > 0 && (
283- < div className = "space-y-4" >
284- < div className = "flex items-center gap-2" >
285- < h2 className = "text-xl font-semibold text-gray-900" > Orbit Signals</ h2 >
286- < Badge variant = "secondary" >
287- { pendingIntents . length }
288- </ Badge >
289- </ div >
290- < div className = "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4" >
291- { pendingIntents . map ( ( intent ) => renderIntentCard ( intent , true ) ) }
295+ { /* Right Column - Actions */ }
296+ < div className = "flex flex-col" >
297+ < div className = "flex items-center gap-2 mb-4" >
298+ < h2 className = "text-xl font-semibold text-gray-900" > Actions</ h2 >
299+ < Badge variant = "secondary" className = "bg-green-100 text-green-800" >
300+ { actionIntents . length }
301+ </ Badge >
302+ </ div >
303+ < div className = "flex-1 overflow-y-auto space-y-3 pr-2" >
304+ { actionIntents . length === 0 ? (
305+ < Card className = "border-dashed" >
306+ < CardContent className = "pt-6" >
307+ < div className = "text-center py-8" >
308+ < p className = "text-gray-500" > No actions yet</ p >
309+ < p className = "text-gray-400 text-sm mt-2" >
310+ Add signals to actions to see them here
311+ </ p >
312+ </ div >
313+ </ CardContent >
314+ </ Card >
315+ ) : (
316+ actionIntents . map ( ( intent ) => (
317+ < Card key = { intent . id } className = "hover:shadow-md transition-shadow border-l-4 border-l-green-500" >
318+ < CardContent className = "pt-4" >
319+ < div className = "flex items-start gap-3" >
320+ < CheckCircle2 className = "w-5 h-5 text-green-600 mt-0.5 flex-shrink-0" />
321+ < div className = "flex-1 min-w-0" >
322+ < div className = "flex items-center gap-2 mb-2" >
323+ < h3 className = "font-semibold text-gray-900 truncate" >
324+ { intent . company_profile ?. name || "Unknown Company" }
325+ </ h3 >
326+ { intent . category && (
327+ < Badge className = { getCategoryColor ( intent . category ) } variant = "secondary" >
328+ { intent . category }
329+ </ Badge >
330+ ) }
331+ </ div >
332+
333+ { /* Potential Role */ }
334+ { intent . potential_role && (
335+ < div className = "mb-2" >
336+ < p className = "text-xs font-medium text-gray-500 mb-0.5" > Role</ p >
337+ < p className = "text-sm text-gray-700" >
338+ { typeof intent . potential_role === "string"
339+ ? intent . potential_role
340+ : JSON . stringify ( intent . potential_role ) }
341+ </ p >
342+ </ div >
343+ ) }
344+
345+ { /* Reason */ }
346+ { intent . reason && (
347+ < div className = "mb-2" >
348+ < p className = "text-xs font-medium text-gray-500 mb-0.5" > Reason</ p >
349+ < p className = "text-sm text-gray-600 line-clamp-2" > { intent . reason } </ p >
350+ </ div >
351+ ) }
352+
353+ { /* Skills */ }
354+ { intent . skill && (
355+ < div className = "mb-2" >
356+ < p className = "text-xs font-medium text-gray-500 mb-0.5" > Skills</ p >
357+ < p className = "text-sm text-gray-600 line-clamp-1" >
358+ { typeof intent . skill === "string"
359+ ? intent . skill
360+ : JSON . stringify ( intent . skill ) }
361+ </ p >
362+ </ div >
363+ ) }
364+
365+ { /* Actions metadata */ }
366+ { intent . actions && intent . actions . length > 0 && (
367+ < div className = "mt-2 pt-2 border-t border-gray-100" >
368+ < p className = "text-xs text-gray-400" >
369+ Added { formatDate ( intent . actions [ 0 ] . date_created ) }
370+ </ p >
371+ </ div >
372+ ) }
373+ </ div >
374+ </ div >
375+ </ CardContent >
376+ </ Card >
377+ ) )
378+ ) }
379+ </ div >
292380 </ div >
293381 </ div >
294382 ) }
0 commit comments