8.1 KiB
Windows Client Interface System
Дата: 2026-07-08
Направление
Это максимально простая Windows-утилита управления службами и их состояниями. Она не должна ощущаться как VPN-dashboard, SaaS-панель или маркетинговый клиент. Главные глаголы интерфейса:
- проверить состояние;
- установить компонент;
- удалить компонент;
- запустить службу;
- остановить службу;
- обновить/перепроверить состояние;
- добавить приложение/путь;
- применить конфигурацию только когда prerequisites готовы.
Интерфейс должен быть плотным, спокойным, системным и предсказуемым. Пользователь открывает его не для анализа статистики, а чтобы быстро понять "что сейчас установлено, что запущено, что сломано и какую одну кнопку нажать дальше".
Домен
Ключевые понятия: Windows service, installed/running/stopped/missing, install/uninstall, helper/elevation, ProxiFyre, Local sing-box, selected apps, endpoint, generated config, logs, diagnostics, readiness blockers.
Цветовой мир: темная Windows-оболочка, service console, terminal black, muted slate panels, driver/service green, warning amber, blocked red, focus/navigation blue.
Сигнатура продукта: Service Control Row - компактная строка компонента, где слева состояние службы, в центре человекочитаемый статус и путь/деталь, справа ровно одно главное действие плюс меню дополнительных действий. Эта строка должна быть повторяемым паттерном для ProxiFyre, Local sing-box и будущих компонентов.
Визуальная модель
- Основной layout: fixed header, fixed tabs, scrollable work area, adaptive log/status area.
- Основная композиция: не больше одного главного действия на компонент или экран.
- Summary должен отвечать "готово / не готово / что сделать дальше", а не показывать длинный dashboard.
- Route chain полезен, но он вторичен к service-control модели. Он должен объяснять эффект состояний служб, а не превращать приложение в карту сети.
Depth And Surfaces
Стратегия глубины: borders-only + subtle surface shifts. Без тяжелых shadows.
canvas:#101216- фон приложения.surface:#131720- обычные панели.surface-raised:#151923- service rows и важные панели.surface-control:#242a35- neutral buttons.surface-inset:#0d1016- inputs и read-only inset fields.border:#2b3342.border-strong:#343b49.focus:#3b82f6.
Радиусы: 4px для buttons, inputs, rows, panels; 999px только для pills/dots. Карточки и панели не должны становиться мягкими/крупно-скругленными.
Spacing base: 4px. Основные значения: 6, 8, 10, 12, 14, 18. Для плотной утилиты 20+ использовать редко, только между большими группами.
Typography
Шрифт: Inter/system stack как сейчас.
Плотная шкала:
- caption: 12px / 500-700 / muted;
- body: 14px / 400-500 / secondary;
- control: 14px / 700 / primary;
- section title: 16px / 700;
- screen title: 18px / 650-750;
- status title: 22px / 700 only for primary readiness state.
Иерархия должна строиться весом и цветом больше, чем размером. Letter spacing держать 0.
Компонентная база
Button
Все кнопки должны идти через общий компонент и общие variants:
primary: главное безопасное действие текущего блока. Зеленый использовать только когда действие реально применимо и готово к выполнению.neutral: refresh, open, cancel, secondary action.add: добавление процесса, EXE, папки, target. Иконка + tooltip; текстовая кнопка только когда без текста смысл неясен.danger: stop/uninstall/delete. Не смешивать с neutral.icon: квадрат 40-44px, только иконка, обязательныaria-label,titleили tooltip.
Button states обязательны: default, hover, active, focus-visible, disabled, loading.
Loading state не должен выглядеть как зависание: показывать spinner/progress label, менять текст на действие в процессе ("Проверяю", "Устанавливаю", "Останавливаю"), блокировать повторный запуск.
Service Control Row
Повторяемый компонент для служб:
- left: status dot/icon (
checking,missing,installed,running,stopped,error); - center: title + short status + optional path/details;
- right: primary action (
Установить,Запустить,Остановить,Обновить) + overflow menu; - expanded area: setup checklist, diagnostics, paths, generated config.
В строке не должно быть двух конкурирующих primary actions.
Tabs
Tabs должны быть единым компонентом:
- role tablist/tab/tabpanel;
- arrow-key navigation;
- active indicator 3px blue;
- height 46px desktop, не меньше 40px narrow;
- transition 180-240ms только
opacity+transform; - no layout shift при переключении.
Status And Logs
Status surface должен показывать человеческий текст первым, raw details вторым уровнем.
- Preview/native command errors: friendly summary in dock, raw error in details.
aria-liveобъявляет только короткий статус.- Narrow width: dock collapses into compact toast/details control.
Forms And Inputs
Inputs are inset:
- background
surface-inset; - border
border-strong; - focus ring 1px
focus; - validation appears directly below or beside the field;
- invalid state disables dependent action and explains exact accepted format.
Motion
Motion должна показывать, что интерфейс живой, но не тормозить повторяющиеся операции.
- Button press: 100-140ms,
transform: scale(0.98). - Tab switch: 180-240ms,
opacity+translateX12-24px. - Popover/menu: 150-180ms,
opacity+scale(0.97 -> 1). - Service checking/installing: subtle spinner or border trace, but not decorative glow everywhere.
- Respect
prefers-reduced-motion.
Не использовать transition: all.
Implementation Priorities
- Создать shared UI layer:
Button,IconButton,Tabs,ServiceControlRow,StatusPill,LogDock,Field,ActionMenu. - Перевести текущие кнопки на variants, чтобы "обновить", "добавить", "установить", "удалить", "применить" выглядели и вели себя стабильно.
- Ввести readiness blockers для apply actions.
- Свести все анимации к общим duration/easing tokens.
- Проверить keyboard flow и responsive snapshots после каждого крупного UI изменения.