Standalone Scrutiny frontend built with Next.js (App Router), React, TypeScript, Tailwind, and shadcn/ui.
Language: English | 中文
- Demo: https://alliottech.github.io/scrutiny-ui/
- Contributing:
CONTRIBUTING.md
pnpm install
pnpm devOpen http://localhost:3000.
pnpm buildStatic export output: out/ (when NEXT_OUTPUT=export).
curl -L -o scrutiny-web-frontend.tar.gz https://github.com/AlliotTech/scrutiny-ui/releases/latest/download/scrutiny-web-frontend.tar.gz
tar -xzf scrutiny-web-frontend.tar.gz -C ./data/webEnsure your web service mounts the static directory:
services:
web:
image: 'ghcr.io/analogj/scrutiny:master-web'
ports:
- '8080:8080'
volumes:
- './data/config:/opt/scrutiny/config'
- './data/web:/opt/scrutiny/web:ro' # <- mount static files here
environment:
SCRUTINY_WEB_INFLUXDB_HOST: 'influxdb'
depends_on:
influxdb:
condition: service_healthy
restart: always
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8080/api/health"]
interval: 5s
timeout: 10s
retries: 20
start_period: 10sDownload and replace the static files:
curl -L -o scrutiny-web-frontend.tar.gz https://github.com/AlliotTech/scrutiny-ui/releases/latest/download/scrutiny-web-frontend.tar.gz
tar -xzf scrutiny-web-frontend.tar.gz -C ./data/web- Device detail uses a query param for static export:
/device?wwn=...
NEXT_PUBLIC_USE_MOCKS=true|falseenable MSW mocks (dev/demo)NEXT_PUBLIC_BASE_PATH=/webbase path for/webdeploymentsNEXT_OUTPUT=exportenables static export toout/
All requests are relative to the current origin:
GET /api/summaryGET /api/summary/temp?duration_key=week|month|year|foreverGET /api/device/:wwn/details?duration_key=...POST /api/device/:wwn/archivePOST /api/device/:wwn/unarchiveDELETE /api/device/:wwnGET /api/settingsPOST /api/settingsGET /api/healthPOST /api/health/notify
pnpm test
pnpm test:ui- GitHub Pages demo uses mock data and is built from
main. - Production static bundle is built from a release tag and targets
/web.
app/(dashboard)/page.tsx
app/device/page.tsx
app/settings/page.tsx
components/ui/*
components/dashboard/*
components/device/*
components/settings/*
lib/api.ts
lib/i18n/*
lib/types.ts
lib/format.ts
- i18n is client-side only (no locale route prefixes). Language is stored in localStorage.
- If UI and backend are on different origins, configure backend CORS.


