Voice Studio · the mascot · 2026-08-02

Mai. A girl who
teaches you
the language.

The app-premise embodied. She is drawn only in the design tokens on the tokens page, ships static, and appears on a closed list of surfaces — possession of an asset is not permission to deploy it. Her canon is the accepted-image corpus plus its prompt manifests in product/mascot/assets/mai/; the ruling ledger is DESIGN.md §5.4c and it wins any disagreement with this page. Read it →

The copy still speaks as MaiSay, not as Mai — "MaiSay's voice", MaiSay Pro. She is a face the app wears on her surfaces, never a narrator, and never the grader. An open question is with the product team: the pitch to open the lesson-loop surfaces →

Mai — canonical

The character, and the two laws she lives by

Chibi glasses girl: big round glasses, warm smile, ink-black bob, lilac vest, white collar, peach skin — flat geometric register, solid fills, no gradients. Every pixel of her is an existing token; she never introduces a colour.

Scene backgrounds must contrast her wardrobe, solved within the surface's own pastel. Her lilac vest dissolved into a lilac panel on the door's first pass; the fix was rose — the door is a speaking claim — never a pastel reassigned for contrast's sake.

A surface that has earned her may be redesigned around her — she is layout, not a sticker — but the complete figure stays inside its semantic container, respects the content grid, and never straddles two regions.

The whole sheet — every expression in the corpus

Twenty-one gated assets, each regenerable from its prompt manifest. The presence rounds (2026-08-03/04) added ten companion poses, the last three the lofi set — desk study, phone browsing, music; unmapped expressions stay marketing-only in v1 — possessing an asset is not permission to deploy it. The register table in the mascot README rules what may be drawn next: raised-arms is marketing-only, the thumbs-up is the in-app celebration gesture of record.

idle
idle · the canonical
listening
listening · mic moment
encouraging
encouraging · wall recap
thinking
thinking · empty states
greeting
greeting · path arrival
path companion
path-companion · home/path
studying
studying · review rail
resting
resting · evening/done
calm wait
calm-wait · EXPERIMENTAL
writing
writing · note-taking
walking
walking · journey
sleepy
sleepy · late night
lofi study
lofi-study · deep focus
phone browsing
phone-browse · casual moment
listening to music
music · break time
happy win
happy-win · marketing
pointing
pointing · marketing
pointing left
pointing-left · marketing
speaking
speaking · marketing
surprised oops
surprised-oops · marketing
eyes up
eyes-up · marketing / icon

Motion — the ladder so far, playing live

All programmatic — no animator, no Rive. Tier 1 is breath + blink; tier 2 converts the canonical to pure vector shapes (pupils and brows become animatable) and gives a surface its one accent verb. Whether any of it ships is a §5.4c decision; motion never expands the surface list and never touches lesson or score surfaces.

mai-idle · tier 1

Breath + blink on the embedded canonical. The door's minimal idle.

mai-alive · tier 2

Pure shape layers — she breathes, blinks, and glances with a brow lift.

mai-thinking-idle

Thought dots along her gaze. The empty state's accent.

mai-listening-idle

Sound arcs beside the cupped hand. The mic moment's accent.

mai-speaking-loop · shippable

The cue card's speaking state — mouth cycle only, nothing else moves. 41KB.

mai-listening-loop · shippable

Breath + blink, hand-to-ear held; frame 0 is the static PNG. 73KB.

mai-goal-settle · one-shot

The goal-complete arrival: settles after the coin's moment, ends on the static frame. 67KB.

mai-studying-loop · shippable

The feedback winner as an idle: a page turns and lands (real book mechanics), one blink. 87KB.

mai-jump-win · EXPERIMENTAL

A little hop landing on the encouraging stance — the gesture of record. 66KB.

mai-calm-breath · EXPERIMENTAL

The calm wait breathing — a slow rise anchored at the flat crop edge, nothing else. Dies if it reads as worry. 75KB.

Drawn for the panel edge — static cuts, not motion

Derived from the corpus, pixel-identical above their cut. The composed-cut busts are DEPRECATED (founder, 2026-08-04): a base drawn into the artwork is a second, softer edge floating near the panel's real one, and it lines up only at the one offset it was authored for — crops live in the container (§5.4c), so a seat uses the master and lets the panel make a straight horizontal cut. Kept here as history; do not seat one. The frame pair is the speaking state's no-Lottie fallback — the diff between the two files is the mouth and nothing else.

canonical bust
canonical-bust · deprecated
listening bust
listening-bust · deprecated
speaking frame closed
frame-closed · fallback A
speaking frame open
frame-open · fallback B
cue bust
cue-bust · tight hair, −4 seat
tiny mark
mark · 24–40px chips
winking mark
mark-wink · rare delight

Where she appears — the list is the permission, and it is closed

Four surfaces, each with its one mapped expression. Each card links the built mock. Expressions not mapped here exist in the corpus and are marketing-only in v1.

Where she never appears: lesson, recording-result and score surfaces — a character beside a verdict reads as the grader's mood — and the paywall's offer row. On any money or streak surface she is never sad, disappointed, pleading, alarmed, or gesturing toward the purchase. Marketing, store and ad compositions obey this same list.

Where she comes from

There is no illustrator. Every asset is generated from the canonical by an identity-preserving edit model, gated at ~15% of a 1080×1920 frame, and promoted only with a manifest recording its prompt, seed, hashes and permitted surfaces — the corpus plus the manifests is the character sheet. The copies under src/mai/ here derive from product/mascot/assets/mai/; pipeline, playground and plan of record live in product/mascot/.