MyBazaar · brand · visual system
Four asset classes, each with one named source and one rule: check here before making anything new. The companion is ours and carries the brand; everything else is deliberately generic so it can be swapped without touching identity.
src straight into code.Vector, in poses-svg/ — 128 KB for the whole set against 1.7 MB of PNG. A rounded teal body, pale belly patch, two dot eyes, two stubby arms, no legs, floating above a translucent shadow. In the storyline the companion is MyBazaar: it assists the merchant, it is never the merchant.
poses/ remain the source of truth and hold up to about 250px; above that they show edge artefacts the vectors do not have.The vocabulary, not the output. Figures are composed from these atoms, never picked from Open Peeps' pre-assembled templates — assembling from parts means the things that get templates rejected (printed text, graphic tees, sunglasses, Rage faces) cannot occur. The selection rule: an atom may contribute only what its category names. A pose gives posture and garment; a body gives a garment. Anything carrying an extra attribute or prop is cut, because you cannot use the pose without also inheriting the attribute. Every head is 473×567 and every face 289×293, so one set of offsets works for any combination.
| Kind | viewBox | body / pose at | head group at | face, inside head |
|---|---|---|---|---|
| standing | 0 0 1179 3291 | translate(-121, 634) | translate(404, 180) | translate(159, 186) |
| sitting | 0 0 1647 2500 | translate(-81, 637) | translate(345, 180) | translate(159, 186) |
| bust | 0 0 1136 1533 | translate(147, 639) | translate(372, 180) | translate(159, 186) |
Six of the library’s thirty. The rest are unusable for a trust brand — Angry with Fang, Rage, Monster, Cyclops, Contempt, Suspicious — or too much for B2B: the heart-eyed grins and the teeth-baring smiles.
Hair, and the two head coverings. Bear and both hats are out; so are the mohawks, which fight everything near them.
Fifteen of twenty-three. Out: robot_dance-1/2/3 and polka_dots as noise, and blazer-1, blazer-2, shirt-1, shirt-2 because each has a prosthetic leg baked into the pose — you cannot use “standing in a blazer” without also deciding that person has a prosthetic.
Seven of eleven. Out: hands_back-1/2 and mid-1/2, which kneel or crouch on the floor — postures no commerce illustration needs. wheelchair is kept as a deliberate exception: it bakes a device into the pose, but it is the only disability representation the library offers and that is worth the trade.
Sixteen of thirty. Sweater and Polo and Sweater are speckled. Coffee is kept as a deliberate exception — it holds a mug rather than just a garment, but a cup humanises a testimonial bust and reads as someone mid-conversation. Tee Selena prints a word on the shirt — invented text on a brand asset is a hard fail. Thunder T-Shirt carries a lightning-bolt graphic that reads as someone else’s mark. Polka Dot Jacket, Sweater Dots, Killer, Gaming and Fur Jacket are noise.
#000000 → var(--peep-ink, #113833) and #FFFFFF → var(--peep-fill, #D7ECE8). Custom properties resolve only when the SVG is inlined — loaded through <img src>, as on this page, the fallbacks apply. That renders correctly in light mode but will not flip for dark.What the atoms make. Each is one head + one face + one pose or garment, assembled with the offsets above — nothing is drawn, and nothing comes from a pre-assembled template. Captions name the head and face so any of these can be reproduced or varied.
CeamKrier/peeps-generator) handles this with a hardcoded viewBox per pose, including special cases for Bike, CrossedLegs and WheelChair. We render the assembled figure, measure its ink bounds and fit the viewBox to them — no table of magic numbers, and nothing to update when a new pose is approved.Four rules, each arrived at by testing the alternative and watching it fail.

pine.70. This is what makes the mascot read as the bright thing in frame rather than one more figure.rx = 0.34 × width, #113833 at 0.13 opacity.Objects are icons, not illustrations — resolution-independent, token-driven, never drifting off palette. All 32 objects from the cancelled generation sheets resolve against these two libraries, which is why that approach is retired. Prefer Phosphor fill/duotone: the companion is solid shapes, so a stroke icon beside it reads as a different system.
bowl, stage truss → lamp, shelving → building-warehouse, order-slip spike → receipt, hanging signboard → signpost, wristband → ticket (which collides with the ticket stub — pick one). Fine for icons, whose job is to signify rather than depict. If a wedge becomes a lead story and its prop is on this list, that is the moment to draw a bespoke one.Marks that sit around content rather than being it. The four-point sparkle is ours — the only accent we own — traced from our own generated art. It began life baked into the jump pose and was lifted out so it can mark any moment: a first sale, a completed step, a success toast. Do not draw a second one.
| Class | Source | Licence | Obligation |
|---|---|---|---|
| Companion | 20 vector poses, ours | Owned | — |
| Cast | Open Peeps atoms (Flat Assets) | CC0 1.0 | None |
| Props | Tabler 3.46 · Phosphor 2.1.1 | MIT | Notice in repo, not on page |
| Accents — sparkle | Ours | Owned | — |
| Accents — doodles | unDraw Handcrafts | Free commercial | No bulk acquisition or redistribution |
Both were tried; both failed on what an existing library gives away free.