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 →
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.
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.




















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.
Breath + blink on the embedded canonical. The door's minimal idle.
Pure shape layers — she breathes, blinks, and glances with a brow lift.
Thought dots along her gaze. The empty state's accent.
Sound arcs beside the cupped hand. The mic moment's accent.
The cue card's speaking state — mouth cycle only, nothing else moves. 41KB.
Breath + blink, hand-to-ear held; frame 0 is the static PNG. 73KB.
The goal-complete arrival: settles after the coin's moment, ends on the static frame. 67KB.
The feedback winner as an idle: a page turns and lands (real book mechanics), one blink. 87KB.
A little hop landing on the encouraging stance — the gesture of record. 66KB.
The calm wait breathing — a slow rise anchored at the flat crop edge, nothing else. Dies if it reads as worry. 75KB.
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.







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.
The greeter. 你好 is her line, in a paper bubble, on the speaking-rose scene panel.

She cups her ear beside the headline — right where the copy asks for your voice.

She celebrates the completed fact, never the limit. The offer row is character-free.

Genuine zero-result states only — never a failure. An error surface carries no vibe.
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.
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/.