Back to Bmad Method

Quill — Experience Spine

src/bmm-skills/2-plan-workflows/bmad-ux/assets/experience-example-mobile.md

6.8.04.9 KB
Original Source

Quill — Experience Spine

Illustrative example. Single-surface mobile (iOS + Android parity). Consumer posture, calm by default. Paired with design-example-mobile.md (Quill DESIGN.md). Demonstrates: microcopy as gating discipline, Inspiration & Anti-patterns earning its place, Responsive & Platform omitted (single-surface).

Foundation

Single-surface mobile, iOS + Android with parity. No UI system named — inherits platform conventions for navigation, system gestures, dynamic type. DESIGN.md is the visual identity reference; this spine is the experience. Dark mode is the default surface; light is a setting.

Information Architecture

SurfaceReached fromPurpose
TodayApp open (cold)Today's prompt + entry composer
LibraryTab barPast entries, searchable
Entry detailLibrary row tapRead / edit one entry
SettingsToday header gearAccount, export, theme

Bottom tab bar (Today / Library / Settings). No drawer. Modal stacks one level deep, never two.

→ Composition reference: mockups/today-cold.html, mockups/composer.html. Spine wins on conflict.

Voice and Tone

Microcopy. Brand voice and aesthetic posture live in DESIGN.md.

DoDon't
"Today's prompt.""Time to write!"
"Saved.""✓ Auto-saved successfully"
"We couldn't reach the cloud — your work is on this device.""Network error"
Short, complete sentences.Streak counters, encouragement, exclamation marks.

Component Patterns

Behavioral. Visual specs live in DESIGN.md.Components.

ComponentUseBehavioral rules
Prompt cardTodayOne per day. Tap opens composer.
ComposerToday + entry detailNo formatting toolbar in v1. Autosave on pause ≥ 600ms.
Entry rowLibrary listTap → entry detail. Long-press reserved for system text selection.
Save indicatorComposer headerCycles Editing…Saved. (≥ 800ms visible).
Settings rowSettings listTap → detail or toggle.

State Patterns

StateSurfaceTreatment
Cold openTodayShow today's prompt (cached). If no cache, Today's prompt is loading. with skeleton.
Empty libraryLibraryNo entries yet — Today's prompt is your first. Link to Today.
Search emptyLibrary searchNo matches. No suggestions.
Offline writeComposerSave locally. No banner. Sync on next foreground.
Sync errorSettings → AccountSurfaced here only. Never block writing.
FocusComposerNative cursor + keyboard. No custom focus chrome.

Interaction Primitives

  • Tap to act. Long-press reserved for system text selection.
  • Swipe-to-delete on entry rows (native pattern, confirm sheet).
  • Pull-to-refresh on Library only.
  • Banned: carousels, hero animations on open, badge counts, streaks, push-notification re-engagement.

Accessibility Floor

Behavioral. Visual contrast lives in DESIGN.md.

  • VoiceOver / TalkBack: every interactive element labeled with role + state. Save indicator announces Saved on transition.
  • Dynamic type honored through DESIGN.md typography tokens. UI must remain legible at largest setting — no truncated controls.
  • Reduce Motion: skip the save-indicator fade; show Saved. immediately.
  • Tap targets ≥ 44pt (iOS) / 48dp (Android).
  • Focus traversal follows reading order on every surface.

Inspiration & Anti-patterns

  • Lifted from Day One: the single daily entry framing — one prompt, one composer, no inbox.
  • Lifted from iA Writer: the no-toolbar composer; formatting is a settings-level decision, not a per-entry one.
  • Rejected — Streaks (Duolingo, most habit apps): streaks weaponize the user's calendar. Quill's value is showing up today, not punishing missed days.
  • Rejected — AI prompt suggestions inside the composer: the composer is for writing, not negotiating with a model. AI lives only in the daily prompt generation.

Key Flows

Flow 1 — Daily write (Mira, late evening, after work)

  1. Mira opens app.
  2. Today surface shows today's prompt (cached if offline).
  3. She taps the composer entry point.
  4. Composer opens, keyboard active.
  5. She writes; autosave fires on pause.
  6. She taps Back.
  7. Climax: Today surface shows Saved. and the entry's first line below the prompt — proof the day is captured.

Failure: cold prompt fetch fails → composer still opens with cached generic prompt; banner on Today only after Mira returns.

Flow 2 — Recall past entry (Mira, three weeks later, looking for what she wrote about her mother)

  1. Mira taps Library.
  2. Scrolls or searches.
  3. Taps entry row.
  4. Entry detail opens in read mode.
  5. She taps anywhere to enter edit mode (cursor at tap point).
  6. Edits autosave.
  7. Climax: Saved. visible in entry header — the older self and the present self are in continuous conversation.

Empty state: no entries → message routes back to Today.