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 usecolor.rewardDeep. - Write coral text with the text token (
color.accentPrimaryStrong), never the fill coral; amber text and the streak flame usecolor.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).