Theme Starter
Provenance: UPSTREAM — the template you copy to build your own theme.
Source: github.com/konstructio/theme-starter
The starter is two things at once. Unlaunched, it's a guide that explains the theme model to visitors. Launched, it's the reference read-only operations view — every read the theme contract offers, rendered honestly, in one static frontend plus static/theme.js and nothing else.
The launched dashboard covers:
- Fleet summary — apps live/building/failed, replicas running, cores and memory in use now, and the regions apps can target
- Organization — the quota allowance meters, the plan's entitled app sizes, and the metered rates, all straight from
discover()andquota() - Environments — apps grouped by the environment they ship into, with each zone's display name, free/paid and enabled state, and resource draw as the group header
- App cards — phase, URL, custom domain and volume badges, resolved size (real cpu/memory, not just the key), replicas, branch, port, sub path, env var count, whether the app is public or internal-only, and the failure message inline when a build breaks
- App detail — CPU/memory charts with limit ceilings, network rx/tx, pods and restarts (with a restart warning when the last hour wasn't clean), the real deployment history (build number, why it ran, revision, duration), live runtime logs, and the latest build output
- Character strip — the signed-in user's cross-theme progression ledger, read-only
| Capabilities | all read operations: discover, zones, apps, metrics, quota, buildLogs, deployments, regions, character + the logs and appEvents streams |
| Vocabulary | none — contract terms as-is |
| Character | read-only display of the shared ledger |
| Launch | Platform as a Service → Themes → Theme Starter → Launch — pin it from Themes to give it its own navigation entry |
Start here when creating a theme: copy the repository, keep static/theme.js exactly as it is, replace the UI with your metaphor. If you'd rather skip hand-authoring entirely, the Forge can generate a starting point from a short description instead.