-
Infrastructure repository
The service list and the dashboard's look, versioned.
-
My laptop
I open it when I start working.
-
Internal door
Only from home or the VPN, with two-factor.
-
Traefik
Uses the same list to create its public routes.
-
Service list
Each service with its domain, category and icon. The same list for Traefik and the dashboard.
-
Local-only services
Those that never go through the internet (monitoring, security, DNS…) on a separate list, so the dashboard has them without publishing them.
-
Look
Title, order, names, descriptions and hidden services, in the role's variables.
-
Background image
An image of my own of mountains at dusk, with translucent cards on top.
-
Five templates
Settings, services, widgets, bookmarks and styles. The services one groups by category on its own: a new category shows up without touching anything.
-
Configuration tag
Changing the look doesn't reinstall packages or recompile: it only deploys the templates.
-
Dated backups
Every replaced file leaves its copy alongside, to roll back in seconds.
-
Regenerate the page
Restarting wasn't enough: the static page kept the old title. The role calls the regeneration with retries.
-
Build
Homepage doesn't ship a binary: it's built with Node and Next.js, in a folder per version with a link to the active one.
- JavaScript / TypeScript
- Next.js
-
systemd service
Node.js with its systemd unit, no Docker.
- Linux (Debian, Alpine, Arch)
-
Allowed hosts
Homepage rejects any request whose name isn't on its list. Its own protection, which has to be configured.
-
The three tabs
Control, library and community, with shortcuts on all of them.
-
Syntax check
First of all, the playbook has to be valid.
-
Dry run with diff
See what would change without changing it.
-
Check in the browser
On desktop and mobile: cards, background, title, no overflow or JavaScript errors.
-
Second pass with no changes
Applying again mustn't change anything. If it does, something isn't idempotent.