mirror of
https://github.com/Joulenap/joulenap.git
synced 2026-08-11 13:21:43 +02:00
Checked every tracked .md against the code rather than for plausibility. The API table, the metric names, the dashboard payload, the permissions cheat-sheet, every config field and SECURITY's numbers all already matched. Four things did not. ARCHITECTURE contradicted itself on the power lease: keying it on the host updated the description a few lines up but left a later paragraph still saying the lease is per device, complete with the extra sleep/wake cycle that no longer happens. Replaced with the consequence that is now true -- every device on a held machine reads busy, which is what disables the power button on its siblings. The startup catch-up was documented nowhere despite sending notifications. ARCHITECTURE's scheduler section now covers it and the heartbeat that decides what counts as downtime. frontend/README pointed at design/joulenap-remix/, which .gitignore excludes -- a path no clone has. It also filed the setup wizard under the settings panels, where it has not lived since it moved to src/wizard/, and said npm install where the lockfile wants npm ci. Two wordings tightened: the WoL interface is a dropdown now, not free text with an override; and "stores a copy needed to verify requests" read as though the API key were hashed, when it sits in config.yaml like every other secret.
1.4 KiB
1.4 KiB
Joulenap frontend
React + TypeScript + Vite SPA for Joulenap, wired to the backend REST API.
Develop
cd frontend
npm ci
npm run dev # Vite dev server on :5173, proxies /api -> http://localhost:8080
Run the backend (cd backend && joulenap or uvicorn app.main:create_app --factory)
alongside it so the proxied API is available.
Build
npm run build # type-checks (tsc --noEmit) then emits frontend/dist
The FastAPI backend serves frontend/dist as static files, so a production image just
needs the built output present. dist/ is git-ignored.
Layout
src/api/— typed client + response types for/api/*src/auth/,src/config/— auth + config React contextssrc/pages/—Login,Dashboard(+dashboard/panels),Settings(+settings/panels, incl. the device editor)src/wizard/— the two device wizards (add a PVE, add a PBS) and the PBS steps they sharesrc/shell/— header + authenticated app shellsrc/components/,src/hooks/,src/utils/— shared widgets/helperssrc/i18n/—react-i18nextsetup;en.jsonis the base language,it.jsonthe translation
i18n
English is the source language. The active language follows app.language from the
backend config (the Localization settings panel changes it). Add a key to en.json
first, then mirror it in it.json.