Drop the unused Logo icon variant, poll the Home runs tile at 10s

The icon variant lost its last caller when the responsive variant stopped
carrying a second cropped image. runOverviewQueryOptions now takes the
refetch interval, defaulting to the 30s the Runs screen and the dashboard
panel want; Home passes 10s so a short run does not linger on the tile.
agents.md spells the API host as api.${DOMAIN}, which is what the rest of
the docs use.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CL9zvnnvcp1mvA8o7impxk
This commit is contained in:
2026-09-06 14:24:28 +02:00
co-authored by Claude Opus 5
parent c8f14b6913
commit a3cb9cc817
4 changed files with 14 additions and 9 deletions
+1 -1
View File
@@ -20,7 +20,7 @@ local stack.
## Connecting a client ## Connecting a client
```sh ```sh
claude mcp add --transport http fluksio https://api.fluksio.com/mcp claude mcp add --transport http fluksio https://api.${DOMAIN}/mcp
``` ```
The OAuth flow does the rest: the client registers itself, you approve it in The OAuth flow does the rest: the client registers itself, you approve it in
+2 -4
View File
@@ -6,7 +6,7 @@ import logoDark from "/assets/images/fluksio-dark.svg"
import logo from "/assets/images/fluksio-light.svg" import logo from "/assets/images/fluksio-light.svg"
interface LogoProps { interface LogoProps {
variant?: "full" | "icon" | "responsive" variant?: "full" | "responsive"
className?: string className?: string
asLink?: boolean asLink?: boolean
} }
@@ -29,9 +29,7 @@ export function Logo({
className={cn( className={cn(
variant === "full" variant === "full"
? "h-6 w-auto" ? "h-6 w-auto"
: variant === "responsive" : "h-6 w-auto group-data-[collapsible=icon]:hidden",
? "h-6 w-auto group-data-[collapsible=icon]:hidden"
: "size-5 object-contain",
className, className,
)} )}
/> />
@@ -69,8 +69,9 @@ export function HealthOverview({
// Shares the list below's cache entry, for the one tile that dates them. // Shares the list below's cache entry, for the one tile that dates them.
const { data: failures } = useQuery(failuresQueryOptions(range)) const { data: failures } = useQuery(failuresQueryOptions(range))
// Shares the Runs screen's cache entry, which already counts by status in // Shares the Runs screen's cache entry, which already counts by status in
// the database rather than over a page of rows. // the database rather than over a page of rows. Polled at the rate the
const { data: runs } = useQuery(runOverviewQueryOptions()) // other tiles are, since a short run would otherwise sit here after it ends.
const { data: runs } = useQuery(runOverviewQueryOptions(10_000))
const queue = (summary?.queue ?? {}) as Record<string, number> const queue = (summary?.queue ?? {}) as Record<string, number>
const degraded = summary?.status === "degraded" const degraded = summary?.status === "degraded"
+8 -2
View File
@@ -73,10 +73,16 @@ export const runsListQueryOptions = (
queryFn: () => RunsService.readRuns(filters), queryFn: () => RunsService.readRuns(filters),
}) })
export const runOverviewQueryOptions = () => ({ /**
* Runs counted by status.
*
* A training run is measured in hours, so half a minute is close enough by
* default; a caller watching short runs land passes something shorter.
*/
export const runOverviewQueryOptions = (refetchInterval = 30_000) => ({
queryKey: runKeys.overview, queryKey: runKeys.overview,
queryFn: () => RunsService.readOverview(), queryFn: () => RunsService.readOverview(),
refetchInterval: 30_000, refetchInterval,
}) })
export const runQueryOptions = (id: string) => ({ export const runQueryOptions = (id: string) => ({