Move Gateway up in nav; render jobs and programs as cards

Reorder the sidebar so Gateway sits right under Overview. Replace the
Scheduled and Program tables with card grids matching Services: add JobCard
and ProgramCard, convert ScheduledSection to a JobCard grid, and turn the
former ProgramTable into a filterable ProgramCard grid (renamed ProgramList;
kept the search box, dropped the sortable table). Remove the now-orphaned
SortHeader component.
This commit is contained in:
2026-06-30 23:02:33 -07:00
parent bc915d23fb
commit ab10ca74fe
8 changed files with 193 additions and 298 deletions

View File

@@ -0,0 +1,42 @@
import { Link } from "react-router-dom"
import type { ProgramSummary } from "@/types"
import { BehaviorBadge } from "./BehaviorBadge"
import { StackBadge } from "./StackBadge"
import { ProgramActions } from "./ProgramActions"
interface ProgramCardProps {
program: ProgramSummary
}
export function ProgramCard({ program }: ProgramCardProps) {
return (
<div className="bg-[var(--card)] border border-[var(--border)] rounded-lg p-5">
<div className="flex items-start justify-between mb-2">
<Link
to={`/programs/${program.id}`}
className="text-base font-semibold hover:text-[var(--primary)] transition-colors"
>
{program.id}
</Link>
</div>
<div className="flex flex-wrap gap-1.5 mb-2">
<BehaviorBadge behavior={program.behavior} />
<StackBadge stack={program.stack} />
</div>
{program.description && (
<p className="text-sm text-[var(--muted)] mb-3">{program.description}</p>
)}
<ProgramActions
name={program.id}
actions={program.actions}
active={program.active}
behavior={program.behavior}
deployedAs={[...program.services, ...program.jobs]}
compact
/>
</div>
)
}