The project is composed of two sub-projects, managed as GitHub submodules:
-
settings-dashboard
Path:./settings-dashboard/
Documentation: settings-dashboard readme -
dashboard-core
Path:./dashboard-core/
Documentation: dashboard-core readme
Install project dependencies:
pnpm installConfigure the following environment variables by referring to their respective documentation:
- Core Configuration
Path:./settings-dashboard/config/core.env.json
Documentation: core.env.json documentation
Start the development server:
pnpm startUse Docker to simulate a PCS (Personal Cloud Server) environment, which is closer to the real deployment environment.
This simulates a state just after a PCS has been created (with .env and os-init.sh executed)
Setup Steps:
-
Configure the development environment
Configuredev-envaccording todev/run/dev-env.example -
Start the Docker environment
Ensure Docker is running, then execute:.\dev\run-simple.ps1
Important Notes:
- Clean Installation: The run-simple script automatically cleans Docker volumes for fresh testing
- Yundera stack: this process will create a non-functional Yundera stack that can be ignored
- Authentication: Sign-in is delegated to Authelia via OIDC (auto-registered with
mesh-router-auth). The dashboard mints its own short-lived app JWT after a successful OIDC callback.
GET /api/health is unauthenticated and returns a small JSON snapshot from
RAM only — no shell, no SSH, no file I/O on call. It exists so the Yundera
control plane can poll each PCS roughly once a day to confirm the deployed
version and that the last self-check did not report failures.
GET /api/health{
"version": "0.1.0",
"selfCheck": {
"ok": true,
"lastRunAt": "2026-04-29T03:00:12"
},
"lastRefreshedAt": "2026-04-29T03:05:00.000Z"
}selfCheck.ok—trueon success,falseon failures,nullif no completion line has been observed yet.selfCheck.lastRunAt— host-local timestamp from the self-check log (no timezone).lastRefreshedAt— UTC timestamp of the last successful cache refresh.
The cache is owned by settings-dashboard/src/backend/server/Health/Health.ts
and refreshed every 5 minutes by tailing
/DATA/AppData/casaos/apps/yundera/log/yundera.log over SSH.
Build and publish using Dockflow:
npx dockflow build
npx dockflow publish./
├── settings-dashboard/ # Main dashboard application
│ ├── config/
│ │ ├── core.env.json
│ └── readme.md
├── dashboard-core/ # Core functionality
│ └── readme.md
└── README.md*