Files
allstarr/DESIGN.md
T

59 lines
3.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Allstarr WebUI Design System
## Product stance
Allstarr is a music control room. Every route must quickly answer:
1. What is happening?
2. Which library, user, source, and account are involved?
3. Is it healthy and complete?
4. What can I safely do next?
## Visual system
Use Google Material 3 as the interaction and visual grammar, adapted to Allstarr rather than copied component by component.
- Role-based `--md-sys-color-*` tokens own light and dark themes.
- Allstarr blue is the only general action accent. Provider marks and music artwork provide the wider palette.
- Tonal surfaces communicate grouping. General panels do not use decorative glass, glow, gradients, or heavy shadows.
- Use one system sans family, restrained type sizes, sentence case, and short operational copy.
- Shapes follow Material roles: 8px fields, 12px compact containers, 16px panels, 24–28px dialogs, and full pills only for buttons, badges, and navigation indicators.
- Theme defaults to the operating-system preference and offers explicit System, Light, and Dark choices.
## Shared components
- Keep the existing Svelte, Bits UI, Tailwind, shadcn-style primitives, and Lucide stack. Do not add Material Web and duplicate the control layer.
- Routes compose shared Button, Checkbox, Select, Dialog, Menu, Tabs, Badge, Progress, Skeleton, Tooltip, and table patterns. They do not restyle raw controls.
- Provider identity uses the existing provider mark and artwork components.
- Creative canvas effects require a GPL-compatible implementation or license. Canvas UI is not vendored because its Commons Clause adds distribution restrictions that conflict with this repository's GPL terms.
## Information architecture
- **Home:** current playback and listeners first; source route, scrobble delivery, health, and work follow.
- **Library:** playlists, mappings, cached files, and kept files share one task vocabulary and aligned tables.
- **Intelligence:** Overview → History → Import → Discover → Automation. Import is a top-level task, not a setting hidden inside history.
- **Integrations:** Services owns provider configuration and diagnostics. Extensions owns package lifecycle. Accounts and Routing explain their scope in plain language.
- **Activity:** outcome, actor, target, duration, and time are primary; technical payloads are progressive detail.
- **Settings:** deployment and operator controls only. User-scoped controls stay near the data they affect.
## Interaction rules
- One clear primary action per task area.
- Dense lists and tables are preferred when comparison matters; spacious guidance is used for onboarding and empty states.
- Modals protect destructive or interrupting work only. Routine configuration stays inline or in a route-level detail pane.
- Administrative Jellyfin controls appear only when the authenticated backend permission explicitly allows them. The UI never infers authorization.
- Loading uses skeletons; empty states explain the next action; errors name both the problem and recovery.
## Motion
- Use 150–250ms Material-style state transitions for selection, reveal, progress, and completion.
- No decorative page-load choreography, looping control animation, or movement that reorders content under the pointer.
- Respect reduced motion. Expensive media effects are lazy, bounded, paused off-screen, and disposable on unmount.
## Quality bar
- Core tasks work at 320px, keyboard-only, reduced-motion, light, and dark themes.
- Status is never color-only.
- Tables share gutters, row heights, alignment, and action placement.
- Shared-system changes should delete route-specific CSS over time and keep the current JS/CSS budgets green.