PROTOTYPE — titlebox, drive health and colour presets (throwaway)
Answers wayfinder ticket Approve titlebox, health layout and colour presets on map Fenris TUI polish and hourly history. Not production code. Do not merge onto main.
Question
What concrete layout and preset contract makes Fenris feel polished while preserving monitoring clarity and accessibility?
Run
./run
# then open http://127.0.0.1:8765/prototype/titlebox-health-presets/
Or open index.html directly.
What this prototype asks the human to react to
Use the bottom control bar to switch:
- preset: Amber, Nord, High Contrast;
- status: Monitoring, Collecting, Paused, Waiting, Interrupted, Error, Stale, Unknown;
- terminal size: 80×24 baseline, 140×40 wide, or a constrained/narrow layout;
- title glyph: wolf emoji or fallback text;
- motion: normal blink or reduced motion.
Contract under test
- Title hierarchy — the only maker-credit surface is the top titlebox,
🐺 Fenris by Bongbetic; the old service-strip credit is removed. The lifespan headline stays a product data surface, not the app title. - Glyph fallback — when the wolf is unsupported, explicitly fall back to
Fenris by Bongbeticrather than rendering tofu or disturbing border width. - Drive health vs settings — vendor wear lives in Drive health beside temperature/spare/error facts. Settings stays read-only for device, baseline, retention and display preferences.
- Palette roles — themes style chrome, graph and accent colours; status semantics (green/amber/red/grey plus glyph+text) outrank the theme and are never the sole carrier.
- Display preferences — preset and reduced-motion preferences are scoped
to the unprivileged TUI user, not
/etc/fenris/fenris.confand not the observation store. Proposed persistence:${XDG_CONFIG_HOME:-~/.config}/fenris/tui.json. - Reduced motion — normal Monitoring blinks only the dot at the settled
750 ms cadence; reduced motion renders the same
● Monitoringstate steady. - Constrained terminal — below 80×24, the graph region hides and leaves a
one-line textual summary plus
graph needs ≥80×24; status, title, drive health and action/quit affordances stay visible.
Framework facts verified
Current Textual docs via Context7 library /websites/textual_textualize_io:
App.register_theme(theme)registers a theme; settingApp.themeactivates it. Textual themes generate CSS variables from base colours.$text,$text-muted,$text-disabledandcolor: autoexist to maintain text legibility against theme backgrounds.- Mouse events expose coordinates relative to the screen or widget; focusable widgets can be resolved at coordinates, and Pilot can click widgets/offsets for automated proof of keyboard+mouse paths.
Local repo lockfile still pins textual==8.2.8; this prototype is static HTML
so it deliberately does not depend on the Python environment.