|
1 | 1 | # Design principles |
2 | 2 |
|
3 | | -- Always make features extremely user-friendly. |
4 | | -- Always apply radical transparency: make the internals of what's happening available. Hide the details from the surface |
5 | | - so the main UI is not cluttered. |
6 | | -- For longer processes: 1. show a progress indicator (an anim), 2. a progress bar and counter if we know the end state |
7 | | - (for example, how many files we're loading), and 3. a time estimate if we have a guess how long it'll take. |
8 | | -- Always keep accessibility in mind. Features should be available to people with impaired vision, hearing, and cognitive |
9 | | - disabilities. |
10 | | -- All actions longer than ~1 second should be immediately cancelable, canceling not just the UI but any background |
11 | | - processes as well, to avoid wasting the user's resources. |
12 | | -- Prefer elegant architecture over quick hacks, but don't refactor beyond what the task requires. |
13 | | -- When shortcuts are available for a feature, always display the shortcut in a tooltip or somewhere less prominent than |
14 | | - the main UI. |
15 | | -For concrete tokens and component patterns, see [design-system.md](design-system.md). |
16 | | - |
| 3 | +- Prefer an elegant architecture over quick hacks. We have time to do outstanding work, and we are in this for the long |
| 4 | + run. |
17 | 5 | - **Platform-native, not generic.** The app should look and feel as if it was specifically made for the user's OS. Never |
18 | 6 | generalize user-facing text, labels, or behavior to be "cross-platform" — instead, fork by OS. On macOS, say "Finder", |
19 | 7 | "Trash", "System Settings". On Linux, say "file manager", "Trash" (FreeDesktop spec), and use DE-specific terminology |
20 | 8 | where possible. Windows (later) gets its own native terms too. This applies to error messages, menu labels, tooltips, |
21 | 9 | and any user-visible string. Use `isMacOS()` / `cfg(target_os)` to branch — a few extra lines of platform-specific |
22 | 10 | text are always better than one watered-down generic string. |
| 11 | +- Always apply radical transparency: make the internals of what's happening available. Like, don't just put a "Syncing" |
| 12 | + spinner but write exactly what's happening. Don't overshare/overcomplicate, but the user must understand what's |
| 13 | + happening to an extent that they could explain it to someone else if asked. |
| 14 | +- Always make features extremely user-friendly. The UI should help the user accomplish their goals with minimal |
| 15 | + friction. |
| 16 | +- This is a keyboard-first app. Everything must work with the mouse, too, but we should make it easy and straightforward |
| 17 | + to use all features with the keyboard. |
| 18 | +- When shortcuts are available for a feature, always display the shortcut in a tooltip or somewhere less prominent than |
| 19 | + the main UI. |
| 20 | +- For longer processes: |
| 21 | + 1. Always run the process in the background. Blocking the UI or other actions is an absolute no-go. |
| 22 | + 2. Show some anim to communicate that the app is doing something. |
| 23 | + 3. If we know what the end state looks like and we can quantify the progress, show a progress bar and counter. |
| 24 | + 4. If we have a guess how long the operation will take, show an ETA. |
| 25 | + 5. Progress bars staying longer at 100% than at 99% or any other percentage is NOT allowed. If we're done with the |
| 26 | + part of an operation that we could quantify and displayed a progress bar for it but we have something else to do |
| 27 | + (e.g. we loaded the data and now we're making calculations on the data), then it's a new state, show another |
| 28 | + state! |
| 29 | +- All actions longer than ~1 second should be immediately cancelable, canceling not just the UI but any background |
| 30 | + processes as well, to avoid wasting the user's resources. If rolling back is an option, we should consider that too. |
| 31 | +- Always keep accessibility in mind. Features should be available to people with impaired vision, hearing, and cognitive |
| 32 | + disabilities. |
| 33 | + |
| 34 | +For concrete tokens and component patterns, see [design-system.md](design-system.md). |
0 commit comments