dashboard
Kickside dashboard — a registry-driven deployment overview. Discovers the installed navigable surfaces (view.components / ui.nav_items) and renders each as a card with the human description pulled from the entry meta and the owning module's ns.definition. No hardcoded module list; the page reflects whatever is installed.
Run
wippy run kickside/dashboardkickside/dashboard
A registry-driven deployment overview. The dashboard is the landing surface that answers "what is installed here?" without any hardcoded knowledge of the deployment — it discovers the installed navigable surfaces from the registry and renders each one as a card with its icon, name, and a human description.
What it does
GET /dashboard/overviewdiscovers the installed navigable surfaces viaregistry.find(view.componentandui.nav_itementries), pulls a human description for each from the entry meta and the owning module'sns.definition, and returns[{ id, label, description, icon, route_name }].- The
kickside-dashboardweb component fetches that list and renders a card grid. Each card is clickable and emits anavigateevent (and updates the host location) so the host can route to the surface. - The page is self-contained: it ships and serves its own built bundle, so the module needs no app code to render.
Adding or removing any module that declares a surface changes the dashboard automatically — there is no central list to edit.
Layout
src/_index.yaml registration surface (namespace kickside.dashboard)
src/overview.lua GET /dashboard/overview handler
src/discovery.lua registry discovery + description resolution (testable lib)
src/types.lua registry meta.type vocabulary + defaults
src/overview_test.lua discovery unit test (stub registry)
ui/ kickside-dashboard web component package
static/ built bundle (served by http.static)
Build
make build # cd ui && npm install && npm run build → static/index.js
make lint # wippy lint
make publish # build + wippy publish (private, --embed ui_fs)
Wiring
The consuming host wires this module via ns.dependency:
api_router(defaultapp:api) — the router/dashboard/overviewattaches to. Must enforce auth + endpoint_firewall; the handler does no auth of its own.ui_server(defaultapp:gateway) — the HTTP server the static bundle mount attaches to.
The module declares its own ui.nav_item (route_name home,
render: component, component_tag: kickside-dashboard); installing the module
adds the Dashboard surface to the nav, uninstalling removes it.