Brand and design · Stages

Brand brief: Shuke (codename)

Stage 1: codename, promise, voice, mark, do and don't; name and domain open.

Stage 1 of the design process (botgumi ADR-0004). Closes at the brand and name gate. Filled from README.md and docs/decisions/ADR-001-product-decisions.md; the gate has not been held, so the open items below stay open.

Name

Working codename Shuke / 述刻. The final app name, branding and domain are TBD (README); everything brand-specific lives behind the token layer (../tokens.css) so the name and brand can be swapped. No name options have been drawn up or checked yet.

Name Domain Store search Notes
Shuke / 述刻 open: no domain yet (the Workers run on workers.dev, docs/deployment.md) open codename, not a decision

Open: 3 to 5 name options with their domain check and store search, for the gate.

Promise

每天十分钟,把复杂的事讲清楚 — ten minutes a day to explain complex things clearly (app.tagline in ../strings.json). A spoken-expression trainer: read a short article, retell it aloud, get feedback with one thing to change, retell it compressed, see the delta. Multilingual from day one (en and zh-Hans first, ADR-001 D13).

Voice

Not written as three words yet (open for the gate). What the copy already follows (ADR-001 D10, ../engagement.md, ../copy.md): honest numbers over praise, one change at a time ("这次只改一件事" / "Change just one thing"), no guilt copy, no fake scarcity, no countdowns, scores are never shamed (bands are amber, ink, green and violet, never red).

Mark

The gallery uses a letter mark: 述 in zh-Hans, S in en (.brand-mark in ../base.css, drawn on the ink colour). There is no mark.svg, no light and dark variants, no minimum size and no clear-space rule yet: open for the gate.

Do and don't

From ADR-001, ../tokens.md §1 and ../engagement.md. Colours are named by token, so a rule can be checked on a board.

Do

  • Spend coral on one thing a screen: the primary action (color.accentPrimary). During capture the record button, its ring and waveform are coral as well; both mean "the live action". Coral topic tiles (--color-topic-coral) are square with a glyph, so they never read as a button.
  • Keep lime for rewards only (color.reward): XP, level, achievements, the round-2 score, the done step. On light surfaces its strokes use color.rewardDeep.
  • Write coral text with the text token (color.accentPrimaryStrong), never the fill coral; amber text and the streak flame use color.statusWarning.
  • Say one honest thing, then the next step. Do: "Shorter, and the key points held." Don't: "Amazing job!" on a regression. Do: "Not yet today — 10 minutes is enough." Don't: "You'll lose your streak."
  • Make every state legible: text at 4.5 : 1 or more, large text and UI strokes at 3 : 1 (../tokens.md §1), touch targets 44 × 44 pt, Dynamic Type to the largest tested size, a VoiceOver label for every control (../ios-handoff.md). Shuke ships on iOS only (botgumi.config.ts); an Android client would add Material 3 type and touch-target rules here before it starts.
  • Write every string in en and zh-Hans, with no hard-coded language or script; length and reading-speed rules are per language.

Don't

  • No coral or lime as decoration, on bars, icons, scores or body text.
  • No accent correction, no exam scoring, no shaming of accents or disability-related speech patterns.
  • No guilt copy, fake scarcity, countdowns on the paywall or decoy pricing (../engagement.md, "Dark patterns").
  • No more than one notification a day. When several qualify, trial-ending comes first, then result-ready, then the daily or plan reminder, then streak-risk; the rest are dropped (../engagement.md, "Notifications").
  • No prices, periods or trial lengths written into copy: they come from the store (StoreKit on iOS).