M
marspanel
v0.1.0
Admin template

Built for the screen where something has gone wrong.

Every admin template draws the happy path. Dashboards are green, tables are full, nothing is mid-flight and nothing is broken. But the screen an operator actually stares at is the one with a failed instance, a workload stuck provisioning, and a quota at 92%.

marspanel ships those states as first-class. Plain HTML, CSS and JavaScript — no build step, no framework, and not one network request at runtime.

38pages
342classes
141icons & art
0dependencies
54/54contrast pass

What makes it different

Four decisions, each with a cost that is written down rather than hidden.

Broken states are drawn

A failed instance, a volume stuck detaching for an hour, a backup that died on bucket quota, an expired certificate, a cluster that is no longer N+1. Not a single Lorem ipsum.

One status vocabulary

Six states, one class. mpn-is-warn works identically on a pill, banner, timeline dot, calendar event, board card, log line and donut segment.

Zero requests

No webfont, no icon CDN, no chart library, no analytics. A console served from a single binary on an air-gapped node renders identically to one on the public internet.

Contrast is measured, not claimed

The build composites every translucent surface over its real backdrop and fails if a pair drops below WCAG AA. The first audit failed fourteen pairs; they were fixed, not excused.

Four files, in this order

The theme script sits in the head on purpose — it resolves dark or light before first paint, so there is no flash.

<link rel="stylesheet" href="dist/marspanel.min.css">
<script src="dist/marspanel-theme.js"></script>   <!-- in <head> -->

<body class="mpn-root">
  <script src="dist/sprites.js"></script>
  <div class="mpn-app">…</div>
  <script src="dist/marspanel.js"></script>
</body>

Start anywhere