diff --git a/.tmp/dashboard-real.png b/.tmp/dashboard-real.png new file mode 100644 index 0000000..ff3c0cb Binary files /dev/null and b/.tmp/dashboard-real.png differ diff --git a/.tmp/dashboard.png b/.tmp/dashboard.png new file mode 100644 index 0000000..96a37ca Binary files /dev/null and b/.tmp/dashboard.png differ diff --git a/.tmp/job3-nocss.png b/.tmp/job3-nocss.png new file mode 100644 index 0000000..e60f638 Binary files /dev/null and b/.tmp/job3-nocss.png differ diff --git a/.tmp/jobs.png b/.tmp/jobs.png new file mode 100644 index 0000000..f14523d Binary files /dev/null and b/.tmp/jobs.png differ diff --git a/.tmp/machines.png b/.tmp/machines.png new file mode 100644 index 0000000..3c8cc50 Binary files /dev/null and b/.tmp/machines.png differ diff --git a/.tmp/settings.png b/.tmp/settings.png new file mode 100644 index 0000000..872e900 Binary files /dev/null and b/.tmp/settings.png differ diff --git a/.tmp/sshkeys.png b/.tmp/sshkeys.png new file mode 100644 index 0000000..ec614a1 Binary files /dev/null and b/.tmp/sshkeys.png differ diff --git a/.tmp/syncpairs.png b/.tmp/syncpairs.png new file mode 100644 index 0000000..cbfd3b1 Binary files /dev/null and b/.tmp/syncpairs.png differ diff --git a/web/index.html b/web/index.html index f7e9539..dec7385 100644 --- a/web/index.html +++ b/web/index.html @@ -3,6 +3,7 @@ + SyncServer diff --git a/web/src/pages/Dashboard.tsx b/web/src/pages/Dashboard.tsx index 152214b..71476f4 100644 --- a/web/src/pages/Dashboard.tsx +++ b/web/src/pages/Dashboard.tsx @@ -1,7 +1,7 @@ import { useEffect, useState } from 'react'; import { Link } from 'react-router-dom'; import { Server, Activity, HardDrive, Clock, Plus } from 'lucide-react'; -import { api, Machine, Job } from '../api/client'; +import { api, Machine, Job, SyncPair } from '../api/client'; import { Badge } from '@/components/ui/Badge'; import { Button } from '@/components/ui/Button'; import { Card, CardBody } from '@/components/ui/Card'; @@ -15,21 +15,26 @@ import { formatRelativeTime } from '@/lib/utils'; export default function Dashboard() { const [machines, setMachines] = useState([]); const [jobs, setJobs] = useState([]); + const [pairs, setPairs] = useState([]); const [loading, setLoading] = useState(true); useEffect(() => { Promise.all([ api('/api/machines'), api('/api/jobs?limit=5'), + api('/api/sync-pairs'), ]) - .then(([m, j]) => { + .then(([m, j, p]) => { setMachines(m); setJobs(j); + setPairs(p); }) .catch(() => {}) .finally(() => setLoading(false)); }, []); + const pairName = (id: number) => pairs.find(p => p.id === id)?.name ?? `Pair ${id}`; + const online = machines.filter(m => m.status.startsWith('online')).length; const todayJobs = jobs.filter(j => { if (!j.started_at) return false; @@ -152,7 +157,7 @@ export default function Dashboard() { - Pair {j.sync_pair_id} + {pairName(j.sync_pair_id)} diff --git a/web/src/pages/SyncPairs.tsx b/web/src/pages/SyncPairs.tsx index c52601e..d21f398 100644 --- a/web/src/pages/SyncPairs.tsx +++ b/web/src/pages/SyncPairs.tsx @@ -26,7 +26,7 @@ import { import { EmptyState } from '@/components/ui/EmptyState'; import { Badge } from '@/components/ui/Badge'; import { Card } from '@/components/ui/Card'; -import { Play, Trash2, Plus, GitCompare, ArrowRight, ArrowLeft } from 'lucide-react'; +import { Play, Trash2, Plus, GitCompare, ArrowRight, ArrowLeft, Pencil } from 'lucide-react'; import { toast } from 'sonner'; import { cn } from '@/lib/utils'; @@ -242,6 +242,15 @@ export default function SyncPairs() {
+