Brand and design · Hi-fi screens · Hi-fi screens
Hi-fi: S20 Processing · Processing
Contract, a board per state (uploading, transcribing, assessing, failed, unreliable, long-wait, offline, loading, empty, error), tokens and strings.
Generated by
botgumi-design indexfrom../../screens.json. Edit that file, not this page.
Stage: hifi · Key: processing/processing · Data-binding map: bindings.md
Drawn in the gallery: Processing. Each board is the committed HTML in screens/, drawn on the example data in docs/api/examples/.
Contract
- uploading: Stage 1/3. Presigned PUT in flight. Leaving is safe — the file stays queued.
- transcribing: Stage 2/3. Poll GET /v1/attempts/{id} every 2 s (backoff to 5 s). ASR receives session.language as a hint.
- assessing: Stage 3/3. ETA from attempt.progress.eta_ms when present.
- failed: attempt.status = failed with a retryable error at stage assess. Retry re-runs the stage without re-upload.
- unreliable: attempt.status = unreliable (too_short; floor per language: 40 chars zh-Hans / 30 words en). No score, no XP; free re-record.
- long-wait: Poll exceeded 120 s (config.limits.poll_timeout_ms). Offer 'check later'; the result lands in Home resume.
- offline: Network lost during upload. File persisted; upload resumes automatically when reachable.
Flows: F2 Daily quest, F4 Resume after the app was killed, F6 Offline mid-upload.
Reads and calls:
GET /v1/attempts/{id} (status, progress, error, unreliable_reason, transcript.length)POST /v1/attempts/{id}/retryPOST /v1/attempts/{id}/discard
Local state:
local:uploadQueue.stateNWPathMonitor.status
Boards
One row per state. A state without boards of its own says what shows it.
| State | Board | Example data |
|---|---|---|
| uploading | zh-Hans · en | article-long.json (zh-Hans · en), article-product.json (zh-Hans · en) |
| transcribing | zh-Hans · en | article-long.json (zh-Hans · en), article-product.json (zh-Hans · en) |
| assessing | zh-Hans · en | article-long.json (zh-Hans · en), article-product.json (zh-Hans · en) |
| failed | zh-Hans · en | article-long.json (zh-Hans · en), article-product.json (zh-Hans · en) |
| unreliable | zh-Hans · en | article-long.json (zh-Hans · en), article-product.json (zh-Hans · en) |
| long-wait | zh-Hans · en | article-long.json (zh-Hans · en), article-product.json (zh-Hans · en) |
| offline | zh-Hans · en | article-long.json (zh-Hans · en), article-product.json (zh-Hans · en) |
| loading | no board of its own: From states.md (Processing): processing--uploading, processing--transcribing, processing--assessing | |
| empty | no board of its own: From states.md (Processing): — | |
| error | no board of its own: From states.md (Processing): processing--failed (retry, no re-upload) · fatal: non-retryable → generic error, the recording stays retrievable |
The boards
Each state as drawn (393 × 852), one board per locale. Open a board on its own for its spec panel.
uploading
transcribing
assessing
failed
unreliable
long-wait
offline
Tokens used
By path in ../../system/tokens.source.json.
| Token | Where |
|---|---|
color.accentPrimary |
.btn--primary |
color.accentPrimaryPressed |
.btn--primary |
color.bgCanvas |
.device, .dock, .navbar, .screen |
color.bgInverse |
.pbtn, .player, inline |
color.bgInverseRaised |
.bar, .icon-btn |
color.bgSunken |
.bar, .btn, .card--sunken, .icon-btn … |
color.bgSurface |
.btn--secondary, .card, .list |
color.lineHairline |
.btn--secondary, .list-row, .progress-hair |
color.lineStrong |
.btn--secondary, .player, .track |
color.reward |
inline |
color.statusDanger |
.c-danger, inline |
color.statusInfoSoft |
.banner--info |
color.statusSuccess |
.c-success |
color.statusWarning |
.banner--warning, inline |
color.statusWarningSoft |
.banner--warning |
color.textDisabled |
.btn |
color.textOnAccent |
.btn--primary |
color.textOnInverse |
.icon-btn, .pbtn, .player |
color.textPrimary |
.banner--info, .banner--warning, .bar, .btn--secondary … |
color.textSecondary |
.btn--ghost, .c-secondary, .state-illo |
color.textTertiary |
.c-tertiary, .list-row, .step-count |
radius.button |
.btn |
radius.card |
.card |
radius.md |
.card--md, .list |
radius.pill |
.bar |
radius.sm |
.banner |
space.gutter |
.dock, .navbar, .pad |
space.s5 |
.card |
space.s6 |
.screen |
space.safeBottom |
.dock, .dock-tall, .has-dock, .screen |
space.safeTop |
.device, .screen |
space.sizeCtaHeight |
.btn, .dock-tall, .has-dock, .screen |
space.sizeHitMin |
.btn--ghost, .icon-btn |
space.sizeNavbarHeight |
.navbar |
space.sizeTabbarHeight |
.screen |
typography.callout |
.t-callout |
typography.caption1 |
.t-caption |
typography.footnote |
.t-footnote |
typography.headline |
.t-headline |
typography.subheadline |
.t-subhead |
typography.title2 |
.t-title2 |
Strings
app.name, common.back, common.continue, common.retry, common.step_of.a11y, error.generic.title, feedback.nav, home.greeting.format, notif.daily.title, onboarding.progress.a11y, paywall.projection.score, processing.done.transcribe, processing.done.upload, processing.eta, processing.failed.body, processing.failed.code, processing.failed.rerecord, processing.failed.stage, processing.failed.title, processing.leave_ok, processing.nav.round1, processing.offline.body, processing.offline.sub, processing.offline.title, processing.offline.waiting, processing.slow.body, processing.slow.later, processing.slow.title, processing.slow.wait, processing.slow.waited, processing.stage.assess, processing.stage.transcribe, processing.stage.upload, processing.sub.assess, processing.sub.transcribe, processing.sub.upload, processing.tip.body, processing.tip.title, processing.title.assess, processing.title.transcribe, processing.title.upload, processing.unreliable.play.a11y, processing.unreliable.reason_label, processing.unreliable.sub, processing.unreliable.tip, processing.unreliable.title, record.denied.back, resume.cta, tab.home, unreliable.too_short.body, unreliable.too_short.title
Notes for the app tracks
Motion, haptics, Dynamic Type and VoiceOver: engagement.md, tokens.md §6–7 and
ios-handoff.md. Open a board with ?theme=dark&dt=1.35&binds=1 to see dark mode, the largest
tested type size and every bound element.
Tracking-plan events: no tracking plan page exists yet; ADR-001 D12 names the events.
Tokens with no group in system/tokens.source.json yet (they stay in tokens.css): --dt, --elevation-1, --font-family-numeric, --font-family-text, --font-weight-bold, --font-weight-medium, --font-weight-regular, --font-weight-semibold, --motion-duration-fast, --motion-duration-instant, --motion-duration-slow, --motion-ease-emphasized, --motion-ease-standard.