Files
Nukumizu/frontend/README.md
T
NanamiAdmin cc4aebde6a
Build / ubuntu-latest (push) Canceled after 16s
Build / windows-latest (push) Canceled after 24s
feat(build): integrate frontend build into backend binary and update scripts
2026-09-22 22:57:08 +08:00

3.4 KiB

Nukumizu Console

Web console for the Nukumizu backend — a remote-server monitor and alert bot. Built with Vue 3 + Vite, no UI framework; styling is hand-rolled on CSS custom properties with a light/dark theme.

Features

  • Sign in / first-run admin — login, or create the very first admin while the database is still empty (the backend rejects further registrations once any user exists).
  • Nodes (overview) — live server cards from the backend status/info APIs: online state, CPU / RAM / disk load, plus the per-node status notify switch persisted to bot_node_config.json. Searchable, auto-refreshes.
  • Bot trust — manage QQ (NapCat) and Telegram admins & trusted groups in bot_user_config.json: add / remove members and toggle each member's status notify, startup notify, and command replies.
  • Settings — structured forms for the global config.json (system, debug, Komari dashboard, controller methods, message templates, storage paths). Each card saves only its own section.
  • System logs — live WebSocket log stream (/api/system/getLogs) with severity filter chips, search, pause/resume and export.

Development

npm install
npm run dev        # http://localhost:5173

The dev server proxies /api (and the log websocket) to the backend. By default it targets http://127.0.0.1:8080; override with:

# Windows PowerShell
$env:NUKUMIZU_API = "http://192.168.20.4:8080"; npm run dev

Production build:

npm run build      # outputs ../web/dist
npm run preview

Vite writes to ../web/dist rather than frontend/dist (see build.outDir in vite.config.js) because the Go backend embeds that directory into the binary — go:embed cannot reach outside the package it sits in, so the output has to live under web/. The repo's build-* scripts run this build for you and compile the backend afterwards; npm run build alone does not change what an already-built binary serves.

API contract notes

  • Auth uses two headers on every request: X-Token (from login) and X-Timestamp — a Unix timestamp in seconds (not milliseconds) with a ±30 min tolerance (skipped when system.debugMode is on).
  • Token & user are kept in localStorage. On a 401 the session is cleared and you are returned to the login page.
  • The panel talks to /api/server/getStatus, /api/server/getInfo, /api/settings/get, /api/settings/set and /api/user/login|register. All management endpoints require an admin token.
  • /api/settings/set is a deep merge: sending a JSON null for a key removes it (used when deleting a trusted member).

Project structure

frontend/
├── index.html
├── vite.config.js
└── src/
    ├── main.js / App.vue
    ├── router/            # routes + auth guard
    ├── api/index.js       # authApi, serverApi, settingsApi
    ├── utils/             # auth, http client, theme, toasts, formatting
    ├── styles/            # theme.css (tokens) + ui.css (primitives)
    ├── components/        # TopBar, SideBar, Modal, Toggle, TagsEditor, HeadersEditor
    └── views/             # Login, Layout, Overview, Trusted, Settings, Logs

Caveats

  • The backend's /api/system/getLogs websocket is currently unauthenticated — anyone who can reach the port can read logs. Consider gating it in a future backend change.
  • Registering more than one user is intentionally impossible; the backend only accepts the very first registration.