- Cards use a soft outer box with an inset well; empty states match
- Smaller sidebar icon tiles; sidebar and brand block use the canvas color with faint borders
- Darker inputs in the dark well; floating panels stay opaque
- Faint purple tint on dark surfaces, menus, and logs
- Cloudflare icon for Cloudflare Tunnel
- DESIGN.md: add a portable design language part
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Build a valid compose device request (device_ids list, options mapping, blank driver)
- Map --gpus N to count and drop --gpus when GPU settings are enabled
- Validate only changed GPU values so stored legacy values keep working
- Detect NVIDIA GPUs and the container toolkit with the server details
- Show detected GPUs with a refresh button in the application GPU section
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The status and the Turn on/off button are now one field-shaped control
with the same height, border, and label style as the fields next to it,
instead of a loose pill and a large highlighted button.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Turn on used the saved time and the confirmation showed the time from
page load, so an unsaved new time was ignored. Turn on now validates
and saves the time in the field, and the confirmation refers to the
field instead of a fixed time.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Automatic security updates now have their own "Turn on" / "Turn off"
action with a confirmation, instead of a field that the Save bar
applied. The confirmation explains what can stop:
- Docker from the operating system packages (docker.io, moby-engine)
restarts on a security update, so all containers stop and start.
- Docker CE from the Docker repository is not updated: its repository
has no security origin (apt) and no security advisories (dnf).
Checked on Debian 12 (unattended-upgrade --dry-run skips docker-ce)
and CentOS Stream 9.
- Services that use an updated library can restart; a new kernel is
installed without a reboot.
The on/off state is locked, so only the confirmed action can change it.
A new maintenance window is applied to the server on Save only when the
updates are on.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The check frequency, automatic security updates, and maintenance window
are now fields of the first section, in one row, instead of two extra
boxes. The "not supported" note moved into the existing callout.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- ui.server.packages_update_requested: user, server, packages (or all),
package manager, and the activity of the update.
- ui.server.packages_update_finished: written when the remote process
finishes (also when it fails), with the result and the exit code of
the activity. The update gets a fresh type_uuid (an indexed activity
property), so the listener finds exactly this activity. The actor
comes from the request, because the listener runs in the queue.
- ui.server.reboot_requested with result started or failed.
- ui.server.auto_security_updates_updated (enabled, time, package
manager, result) and ui.server.patch_settings_updated for a changed
check frequency.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>