Skip to main content
Two tiny widgets wrap Ash’s hand-drawn illustration marks. They have no parameters — each renders a PNG asset with BoxFit.contain; size them from the outside with a SizedBox or Positioned.

ConversationBubble

Hand-drawn speech bubble marking conversation surfaces — conversation-starter cards, history day tiles, and the daily-summary header. Source: conversation_bubble.dart · asset assets/images/ConversationStarterBubble.png.
StyledListTile.conversation renders it automatically as the tile’s right-side decoration.

LetterDoodle

Hand-drawn envelope marking letter/check-in surfaces — the letter’s history card and the check-in letter detail header. Source: letter_doodle.dart · asset assets/images/Letter.png.

Why widgets for two images?

The wrappers give each mark a single, findable identity: usage is greppable (ConversationBubble vs. a raw asset path string), the asset path lives in one place, and future treatment changes (recoloring, animation) have a home. Follow the same pattern for new illustration marks.