Skip to content
bahtuiv0.18.8

Animated stickers

bank20baht-stickers is a growing set of playful animated illustrations for empty states, onboarding and feature callouts. Each sticker is a flat drawing with a thick ink outline and an extruded slab side, animated on After Effects keyframe presets that are replayed the way lottie-web plays them. <baht-sticker> plays them on canvas and takes its colours from the page’s tokens: pick another banknote in the corner, or switch to dark mode, and the stickers below change with the site. Hover one to replay it.

wallet
mac-mini
thinkpad-l380
macbook-air
ipad-gen8
iphone-17
redmi-note-9s-pro
nas-2bay
power-station
studio-monitors
receipt
income
expense
coins
calculator
budget-jar
pie-chart
calendar-month
goal
over-budget
saving-streak
empty-state
export-file
scan-slip
interest
bts-card
motorbike-taxi
convenience-bag
electric-bill
phone-topup
rent
market-basket
lottery
temple-donation
fuel
shopping-box
salary
angpao
freelance
spirit-house
thai-house
wooden-window
water-jar
street-food-cart
plastic-stool
power-pole
street-sign
mailbox-thai
chedi
marigold
phuang-malai
banana-tree
bamboo
long-tail-boat
banana-leaf
thai-lantern
lotus
sun
moon
cloud
rain-cloud
storm
rainbow
star
shooting-star
rock
potted-plant
cactus
monstera
flower
tulip
tree
palm-tree
campfire
tent
confetti
music-note
media-player
paper-boat
kite
alarm-clock
books
hot-drink
lamp
key
shield
bear
laptop
router
server
rack
mini-pc
all-in-one
notebook
nas
home-router
database
firewall
smartphone
classic-phone
tablet
load-balancer
switch
core-switch
access-point
patch-panel
modem
vpn-gateway
server-cabinet
blade-chassis
storage-array
tape-library
ups
pdu
kvm
cooling
desktop-tower
monitor
printer
ip-phone
cctv
badge-reader
smart-tv
pos
iot-sensor
hsm
otp
sms
email
register
support
id-card
fingerprint
face-id
password
verified
qr-code
two-factor
piggy-bank
stock
baht-note
dollar-note
bond
gold-bar
kaprao
noodle-soup
pad-see-ew
train-ticket
tuk-tuk
cha-yen
mango-sticky-rice
certificate
ssl-certificate
remote-desktop
cursor
keyboard
terminal
tunnel
wake-on-lan
lock-screen
ai-agent
file
trash
copy-files
compare
remote-folder
photo
hard-drive
usb-drive
snip
scissors
clipboard
highlighter
eyedropper
timer
snapshots

To draw how machines talk with them (a laptop, a router, the internet, servers, packets travelling between), see the sticker graph and its builder.

Terminal window
npm i bank20baht-stickers
import 'bank20baht-stickers/all'; // defines <baht-sticker> and registers every sticker by name
<baht-sticker name="piggy-bank" enter="0.2" style="width: 160px"></baht-sticker>

For a lean bundle, import one sticker and the element:

import 'bank20baht-stickers/element';
import { registerSticker } from 'bank20baht-stickers';
import { piggyBank } from 'bank20baht-stickers/icons/piggy-bank';
registerSticker(piggyBank); // then <baht-sticker name="piggy-bank">, or set el.icon = piggyBank

The element is block-level and its canvas fills its width, so size it with CSS.

Attribute / property What it does
name A registered sticker
icon (property) An icon object; wins over name
palette (property) Fixed colours instead of the tokens
once Play once when first shown, then rest on the still frame
offset Frames ahead of the page clock, to put neighbours out of phase
enter Seconds after first shown to pop in on the bounce entrance
replay-on-hover Replay from frame 0 when the pointer enters
line Outline weight as a multiple of the sticker’s own: 0.6 thinner, 1.5 bolder
label Accessible name; the sticker’s name by default

Under reduced motion a sticker shows its still frame. One animation-frame loop drives every sticker on the page, and stickers off screen or holding still cost no paint.

Stickers never use hex colours, only palette slots. Without a palette, each slot reads a token where the element sits, so stickers follow the banknote palette and dark mode:

Slot Token Used for
main --baht-primary bodies
deep --baht-neutral the dark second colour
tint --baht-color-primary-tint pale fills
gold --baht-gold-400 coins, stars, bells
ok --baht-success checks, success
hot --baht-error hearts, alerts

Fixed palettes ship too, for places with no tokens: BAHT (฿20), PALETTES.note50, note100, note500, note1000, and the helpers brand(a, b), mono(hex) and hue(deg).

The repo has a Claude Code skill, /baht-sticker, that draws new stickers into the package:

Terminal window
/baht-sticker a receipt printing out of a slot, motion slide

Name the object and what it does; the verb picks the motion preset (a wallet tosses, a lock clasps, a coin bounces, a stamp presses). The skill draws and rigs the parts, renders contact sheets to check the motion, and runs the package’s checks before the sticker joins the set in the next release.

The runtime and motion presets are derived from fun-isometric by Kelvin Adithya (MIT).