Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Reference-grade guide to designing beyond the screen — combining touch/visual/voice/audio/haptic modalities, conversational and LLM-agent UX, voice UI principles and error recovery, sound design, iOS/Android haptics, and TV/automotive/wearable/AR contexts.
| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-02 | ✗→✓ | ▲ Improved | 247% | 0% |
| case-09 | ✗→✓ | ▲ Improved | 194% | 0% |
| case-21 | ✗→✓ | ▲ Improved | 231% | 0% |
| case-08 | ✓→✓ | = Same ✓ | 218% | 0% |
| case-03 | ✓→✓ | = Same ✓ | 206% | 0% |
Screens are one channel. Real products speak, vibrate, chime, and listen — in cars, on wrists, across rooms, hands-free. This skill covers designing for every output and input channel a human has, and how to combine them without overwhelming the user. The governing principle: pick the modality that matches the user's context and the task's nature, then layer modalities so each does what it's best at.
Every modality has a job it does well and jobs it does badly. Design by matching, not defaulting.
| Modality | Best for | Bad at | Context fit | |---|---|---|---| | Visual | Browsing, comparison, precision, dense info, scanning, persistent reference | Hands-busy, eyes-busy, no-screen | Desk, phone-in-hand, TV | | Voice input | Fast input, hands-busy, eyes-busy, long dictation, search by name, "fire-and-forget" commands | Privacy, noisy rooms, precise editing, browsing options | Car, kitchen, accessibility, walking | | Voice/audio output | Eyes-free confirmation, short answers, ambient notification, alerts | Long lists, comparison, precise data, privacy | Car, smart speaker, screen reader | | Haptic | Confirmation, alert, texture/boundary feedback, silent notification | Conveying content, complex info | Wearable, phone-in-pocket, controller | | Touch/gesture | Direct manipulation, precision, spatial control | Eyes-free, hands-busy, distance | Phone, tablet, touchscreen kiosk |
Rule: combine modalities so each does its strength. A smart-display timer shows remaining minutes (visual: precise), confirms "Timer set" (voice: eyes-free), and chimes when done (audio: ambient). Don't make one channel do everything.
Eyes-free vs hands-free are different constraints. Driving is eyes-busy (can glance briefly, can't read). Cooking is hands-busy (can look, can't touch). Walking-with-coffee is both. Identify which the user has before choosing.
Voice has no buttons, no menus, no visual affordances. The user cannot see what they can say. This makes discoverability the central VUI problem — and it shapes every other decision.
Good dialogue obeys four maxims. Violate one and the system feels robotic or rude.
| Maxim | Means | VUI application | |---|---|---| | Quantity | Say as much as needed, no more | Don't read 10 results; offer the top one + "want more?" | | Quality | Be truthful; don't claim what you can't verify | "I'm not sure" beats a confident wrong answer | | Relevance | Stay on the user's goal | Answer the question asked, not an adjacent one | | Manner | Be brief, orderly, unambiguous | Short sentences, one idea each, no jargon |
Conversation alternates. The system speaks, then yields the floor clearly (a tone, a falling intonation, silence). Barge-in = let the user interrupt and speak over the prompt; experienced users know what to say and shouldn't be forced to wait. Always allow it. Detect end-of-speech with an endpointer; don't cut users off mid-sentence (tune the silence timeout — too short clips slow speakers, too long feels laggy).
Most voice failures aren't recognition — they're bad recovery. Three error types, each needs a distinct response:
| Error | Cause | Recovery | |---|---|---| | No-input (timeout) | User silent/unsure | Reprompt with more help: "Sorry, I didn't catch that. You can say…" | | No-match (not understood) | OOV, noise, accent | Rephrase the prompt differently; offer examples; don't repeat verbatim | | Recognition error (wrong) | Misheard | Confirm before acting; let user correct |
| Type | When | Example | |---|---|---| | Explicit | High-stakes, irreversible (payments, deletes, sends) | "Send $50 to Alex — yes or no?" | | Implicit | Low-stakes, reversible; keeps flow fast | "Okay, $50 to Alex." (echoes back, no yes/no) | | None | Trivial, easily undone | Just do it; allow "undo" |
Match confirmation cost to action cost. Explicit-confirming a volume change is annoying; implicit-confirming a wire transfer is dangerous.
A voice has a personality whether you design one or not. Define it: warm vs efficient, formal vs casual, concise vs chatty. Keep it consistent across every prompt. Choose a TTS voice that fits brand and is intelligible at speed/over noise. Tone should adapt to context — terser when the user is in a hurry or has erred repeatedly, never cute during an error. Avoid over-anthropomorphizing (don't claim feelings or imply human understanding the system lacks).
Never read a long list aloud. Working memory holds ~3–4 spoken items, not 7. Patterns:
Track conversational state: anaphora ("book it", "the second one"), carry-over slots ("…and make it recurring"), and prior turns. A system that forgets what was just said feels broken. Persist user preferences across sessions where privacy allows.
On Alexa Show / Google Nest Hub / CarPlay, voice and visual co-present. Rules:
Text chat and LLM agents are voice's sibling — turn-based, but visible. The screen affords things voice can't (scrollback, citations, edit), and latency/uncertainty become visible problems.
Do
Don't
Sound is powerful and easily abused. The default should be quiet, with sound used deliberately and always under user control.
| Do | Don't | |---|---| | Default to silence/subtle; let sound be opt-in or contextual | Ship loud sounds on by default | | Give a clear mute/volume control per sound category | Make sound un-disableable | | Keep a consistent sonic family (same instrument/timbre across earcons) | Random unrelated sounds | | Respect silent mode / Do Not Disturb / focus | Override the OS silent switch | | Use spatial audio for directionality in AR/VR/gaming (where is the alert?) | Spatialize where it adds nothing | | Use sonification to convey continuous data eyes-free (rising pitch = closer, Geiger counter, parking sensor) | Encode critical info in sound alone |
Haptic feedback is the most under-used and most over-used channel — a quiet "yes, that registered" or, done wrong, a buzzing nuisance. Restraint is everything.
UIFeedbackGenerator family| Generator | Use for | |---|---| | UIImpactFeedbackGenerator (.light / .medium / .heavy, plus .soft/.rigid) | A UI element collides/snaps — toggle flip, picker detent, drag-drop landing | | UINotificationFeedbackGenerator (.success / .warning / .error) | Outcome of an operation — payment done, form invalid, action failed | | UISelectionFeedbackGenerator | Discrete value change during a continuous pick — scrolling a wheel/slider through steps |
prepare() the generator just before use to remove latency, then fire on the exact event.CHHapticEngine) — transient/continuous events with intensity & sharpness curves.View.performHapticFeedback(HapticFeedbackConstants…) — semantic constants (CONFIRM, REJECT, LONG_PRESS, CLOCK_TICK, KEYBOARD_TAP, GESTURE_START/END). Prefer these — they respect device tuning and user settings.VibratorManager / VibrationEffect (createOneShot, createWaveform, predefined EFFECT_CLICK / EFFECT_TICK / EFFECT_HEAVY_CLICK) for custom patterns. Newer APIs support richer actuators; older devices fall back to plain vibrate.VIBRATE permission and honor the system haptic setting.| Pattern | Example | Strength | |---|---|---| | Confirm | Button/toggle activated, item added | Light impact / selection | | Alert | Error, warning, validation fail | Notification warning/error | | Boundary / detent | Slider step, scroll snap, pull-to-refresh threshold, end of list | Selection / light impact | | Texture / event | Game collision, lock/unlock, success celebration | Custom Core Haptics / waveform |
| Do | Don't | |---|---| | Pair haptic with a visual change (haptic reinforces, rarely stands alone) | Buzz on every tap/scroll/keystroke — it desensitizes and drains battery | | Map intensity to importance — heavy for errors, light for routine confirms | Use the same buzz for success and failure | | Respect the system haptics toggle and provide an in-app off switch | Override the user's "reduce haptics" / silent preference | | Keep patterns short and distinct | Long, ambiguous vibrations the user must decode |
Haptics are a genuine non-visual feedback channel — valuable for low-vision users and eyes-free use. But some users disable them (sensory sensitivity) or can't perceive them — so never make haptic the sole carrier of information. Reinforce, don't replace.
Other measured skills in the registry, with their headline benchmark lift.