A neubrutalist canvas editor that slaps. Drop a photo, stick text + stickers + shapes, slap it down, export PNG. Built for memers, thumbnail-makers, and anyone who wants to post something loud.
T/R/C/B/X/A to add text / rect / circle / speech bubble / star / arrowHard-inverse of the tactile-console aesthetic. White paper base, 2–3px black strokes, offset solid shadows (4px 4px 0 #000 — no blur), saturated color blocks (hot pink, acid yellow, cobalt, mint, tangerine, lilac), chunky Archivo Black headlines, Caveat handwritten accents, bouncy spring animations.
Every panel is a peeled-off sticker. Every button pushes into its own shadow on press. Decorative scribbles drift gently in the background.
| Action | Keys |
|---|---|
| Add text | T |
| Add rectangle / circle | R / C |
| Add speech bubble / star / arrow | B / X / A |
| Delete selected | Backspace / Delete |
| Nudge 1 px · nudge 10 px | ↑ ↓ ← → · Shift + ↑ ↓ ← → |
| Undo · redo | ⌘Z · ⌘⇧Z or ⌘Y |
| Duplicate · select all | ⌘D · ⌘A |
| Bring forward · send backward | ] · [ |
| Bring to front · send to back | Shift + ] · Shift + [ |
| Deselect | Escape |
| Edit text layer | Double-click |
| Hold uniform scale · center-anchor resize | Shift · Alt |
| Bypass snap | Alt while dragging |
Drag in empty canvas for marquee selection. Shift-click to add/remove from selection.
Layer[]), no framework lock-in. src/lib/state/scene.svelte.tssrc/lib/geom/transform.tssrc/lib/geom/snap.tssrc/lib/state/history.svelte.tsuse:draggable with pointer capture, axis lock, and modifier-key forwarding. src/lib/actions/draggable.ts