Marauders
The page my homelab opens to: every service in one place, with a health summary that only says what it can actually see. This is the current version, running on sample data.
A recreation, not a screenshot: the deployed theme and status script running on invented numbers, with the artwork replaced by original stand-ins, so the live site looks different. Click a hall's title to fold it. Links are switched off.
A hall, not a grid: four groups in balanced columns over candlelit artwork. Quiet cards that only gain brass edges on hover and focus.
Each hall folds from its title. In the real thing every card opens its service; in this demo the links are switched off.
About 650 lines of theme CSS and a 10 KB status script on top of the open-source Homepage dashboard. The layout, group names and configuration are mine.
A web check, Proxmox's own state and the UniFi network widget, folded into one honest badge per card.
In a container (CT104) on pmox, the Proxmox host in the homelab, next to the reverse proxy and the second Pi-hole.
What it doesstatus badges, the health line, plain-word counts
- One honest status per service. A script reads each card's own signals (the web check, the Proxmox state, the network widget) and paints one labelled badge: Healthy, Running, Paused, Offline or Unknown. It never estimates, and a service I turned off on purpose shows as Paused, not as a failure.
- A health line that goes stale on purpose. "10 connected · 1 paused · 0 need attention", with an updated-at time that turns into a warning if no fresh answer has arrived for two minutes.
- Plain words for Proxmox. "4 of 4 LXC running" instead of a bare fraction, so a stopped VM is not mistaken for a fault.
- A hall, not a grid. Four groups in three balanced columns over candlelit artwork, with quiet cards that only gain brass edges on hover and focus.
Also: the Castle
Experimental prototypeAn experimental prototype, kept here as a record of an idea I explored: four houses, four rooms, and a ⌘K search called Portkey. Custom TypeScript, no framework. It is not the current implementation; the Great Hall above is. The Castle was never shipped as the landing page and has not changed since Oct 19.
Also a recreation: invented readings, and original stand-in artwork instead of the preview's own.
Great Hall vs. Castlewhat each is, status, what is custom
| Great Hall | Castle | |
|---|---|---|
| What it is | Homepage, heavily themed, with a custom status script | A custom TypeScript front end with a Python Proxmox adapter |
| Status | The current implementation, the live landing page | An experimental prototype, not shipped |
| Last changed | Nov 7, 2026 | Oct 19, 2026 |
| What is custom | The theme (about 650 lines of CSS), the status script (about 10 KB of JavaScript), the layout, naming and configuration | The front end (about 49 KB of TypeScript), the adapter (about 6 KB of Python), the structure, copy and room design |
| Built on | Homepage, an open-source dashboard | Nothing at runtime: no framework, no dependencies |
How it evolvedtwo threads, from the record that survives
Two threads. This is the part of the record that survives on the server, file dates and named backups, so it shows what changed and when, not necessarily when each idea began. Drag through them.
A stock Homepage, first configuration
The earliest files and backups I still have show a plain Homepage install with its default config: bookmarks, Docker and Kubernetes stubs. Nothing themed yet.
The wizard theme arrives
Named backups show the first themed versions ("wizard-theme", then "great-hall"), and the first service cards for Pi-hole, Proxmox and UniFi, with a few fix-and-retry steps along the way.
The Castle begins
A separate, from-scratch front end starts the same evening: TypeScript source, an nginx container, a Python adapter for read-only Proxmox data, then the room artwork over the following hours. Versions 0.2 through 0.6 follow within a day.
Castle v0.8.0, four workspaces
The latest Castle build gives each house its own room: Engine Room, Floo Network, Pensieve and Owlery. Its own notes call it a review build, not yet shipped, and it has not changed since. It runs as a preview alongside the real landing page.
Sections renamed
A backup named "section-names" marks the day the service groups were renamed. They now read the Grand Staircase, the Restricted Section, The Burrow and the Chamber of Secrets.
ChatGPT shortcut
A shortcut joins the header; a backup was taken just before the change.
Refine, polish, tagline
A run of checkpoints: refine, polish, tagline, then a final desktop version with a written restore note. This is where the header, health summary, status badges and the current tagline land.
Latest edit to the live theme
The theme stylesheet and the status script were last edited this evening. The version in the demo above is that one.
Dates come from file timestamps and named backup folders on the server, so they are accurate to the day. There is no git history.
Credits and provenance
Open the full list
| Homepage | Open-source dashboard by gethomepage (GPL-3.0). The base of the Great Hall. Its compiled stylesheet and fonts are included in the demo; see notices. |
| Service icons | From the open dashboard-icons set; group icons from Material Design Icons. Product logos belong to their owners. |
| Hall artwork and crests | Both demos use original artwork drawn for this portfolio: a candle-lit banner, four room scenes, and crests that show what each room does (a network, a gear, a drop, a bell). The deployed projects use different artwork, which is not shown here. |
| Wizarding-world names | Used as a naming theme. This is a personal, non-commercial project and is not affiliated with or endorsed by the rights holders. |