Skip to content

Widgets

Each widget follows the same data chain:

React component
→ React Query hook
→ Next.js API route (/api/widgets/<name>)
→ external service (Docker socket, HTTP API, etc.)

Widgets never call external services directly from the browser.

Available widgets

WidgetAPI routeData source
Docker Containers/api/widgets/dockerDocker socket
Tailscale Devices/api/widgets/tailscaleTailscale local API
Uptime Kuma/api/widgets/uptime-kumaUptime Kuma REST
Portainer/api/widgets/portainerPortainer REST
Prometheus/api/widgets/prometheusnode_exporter scrape
Fail2ban/api/widgets/fail2banlog / Fail2ban socket
LiteLLM/api/widgets/litellmLiteLLM proxy API

Adding a widget

  1. Create src/components/widgets/<name>.tsx
  2. Create src/app/api/widgets/<name>/route.ts — always verify the NextAuth session
  3. Add the widget to the dashboard grid in src/app/page.tsx