The name, the mark, how it moves, and the two things the identity may not introduce.
Concept name
Mirror
Shopping that knows you.
A personal shopping assistant that knows what you own, what fits, and what you have coming up.
Mirror is the system. Your Mirror is what it knows about you. Nothing else in the product is called a mirror.
That grammar lets the app be named after the thing doing the work without breaking the standing decision that there is exactly one memory concept. In code it stays profile, as it always has.
Logo
A bar, a plane, and the bar returned
Two primitives — rectangle and line — and one operation: reflect. Solid above is the thing; outline below is the thing as the Mirror has it. Exact, and still not the same as being it.
Lockup — the entrance
Wordmark
Wordmark, label size — every masthead
Two constructions were rejected and both failed identically: a disc cut on its axis reads as a closed eye, and disc–rule–disc reads as an existing glyph, because circle-stem-circle is a crowded corner of symbol space. Rectangles have no such neighbours and hold their weight at 16px. The outline bar is inset by half a stroke so both bars share an outer edge — without it the reflection comes out larger than the thing it reflects, which is exactly the error the mark is about.
Animation
It trades. It does not spin.
A rotating mark is a spinner whatever is drawn on it, and this product replaced its spinners with named machine states on purpose. The two bars exchange solid and outline instead — the mark performing its own definition.
At rest
Allowed in exactly two places: the send button during a live model call, and the moment the app resets and starts over. Both are genuinely indeterminate waits. Every other wait in the product is a sequence of real states with names, and covering one of those with a brand animation would throw away the thing that makes them worth having. Under reduced motion the cycle stops dead.
Not the mark: MirrorPresence is the Mirror’s live state, where structure density is maturity. Two objects doing two jobs; neither stands in for the other.
Colour
No palette of its own
The mark takes currentColor, so the identity cannot introduce a colour. Photography supplies the colour; the interface stays quiet. One accent, reserved for four jobs and no others — active state, the Mirror signal, risk, and status.
- Ink--ink-900Type, the mark, the primary action
- Ink 700--ink-700Body copy
- Ink 500--ink-500Muted — labels, secondary detail
- Paper--paper-000The surface everything sits on
- Paper 100--paper-100Sunken — product grounds, the desk
- Paper 200--paper-200Borders and rules
- Signal--signal-600The one accent. Four jobs, no others
- Risk--risk-600Only when something is genuinely at risk
Brand fonts
One family, extreme scale contrast
Instrument Sans, self-hosted, width axis pinned at 100. The wordmark is set in the interface’s own display face, so the identity cannot introduce a typeface either. The editorial feel comes from scale and tracking rather than a second family competing with the photography — and the tracking tightens as the type grows.
- I’d start here.
- Good evening, Maya
- Sarah’s Wedding
- Works with your sage satin midi dress.
- Amazon · arrives tomorrow
- 62 in catalog · 23 fit your requirements
- For Sarah’s Wedding