← All workStar on GitHub501 / 06
Selected work 01
Moji Canvas
An emoji sticker canvas where you arrange, animate and share collages made from over 4,000 OpenMoji illustrations.
- Released
- Jan 2025
- Type
- Web app
- Stack
- React / Framer Motion / Supabase

Why
A bigger React project. A canvas full of draggable stickers is a lot of state to look after.
What it does
- Drop random stickers from 10 themes or search for one, then drag them anywhere.
- Edit each sticker’s size, tilt, animation and speed in a panel you can drag aside or collapse.
- 10 animations with canvas-wide play, pause, shuffle and speed.
- Save to your browser, download a PNG, or share a link anyone can keep editing. It works offline too.
Hardest part
Keeping it smooth with lots of stickers: animations pause above 40 and the canvas caps at 150.
What I learned
- Moving state out of props into two contexts, to learn Context properly.
- Custom hooks for keys, local storage, animation and sticker data.
- CSS keyframe animations with one speed variable, keeping dozens of loops off the JavaScript thread.
- Upgrading saved data, so old share links keep working.
- Editing without a mouse: Enter adds a sticker, arrows nudge it, Delete removes it, and modals trap and return focus.
Revisited
- Oct 2026: per-sticker editing, a searchable sticker picker, a movable editing panel and animations rewritten as CSS keyframes.