Vinyl Sticker
imageProA draggable sticker that peels up with a WebGL paper curl, tilts with drag speed, casts a lifting shadow and presses back down with a glint.
Opening soon
Pro cannot be bought yet. The page opens when payment is ready.
Preview
The preview could not load.
Live demo. The theme switches the demo itself.
Code
vinyl-sticker.tsxPro
The code is locked
Vinyl Sticker is part of Manniche UI Pro. A key unlocks the source of all 60 effects.
Opening soon€49 · Introductory price until 31 December 2026. €79 after that.
- One-off payment
- One developer
- Your key arrives by email straight away
- No VAT (§ 19 UStG)
Have a key? Get the code with the CLI or MCP.
The key lives in MANNICHE_PRO_KEY, never in your code or a URL. How to set it up
CLI
npx shadcn@latest add @manniche-pro/vinyl-stickerMCP
claude mcp add --transport http manniche-ui https://mikkelmanniche.dk/api/mcp --header "Authorization: Bearer $MANNICHE_PRO_KEY"Props
VinylStickerProps
| Prop | Type | Default | What it does |
|---|---|---|---|
src required | string | – | The picture on the sticker. Photos are cropped to fill it, like object-fit: cover. |
alt required | string | – | What the picture shows; also the sticker's accessible name unless label is set. |
width | number | 200 | Sticker width in pixels, die-cut edge included. |
height | number | 200 | Sticker height in pixels, die-cut edge included. |
defaultPosition | { x: StickerCoord; y: StickerCoord } | { x: '50%', y: '50%' } | Where the sticker starts inside its positioned parent. |
rotate | number | 0 | Resting rotation in degrees, for a hand-placed look. |
maxTilt | number | 24 | The largest tilt while dragging, in degrees (0 to 45). |
elevation | number | 44 | How far the sticker lifts off the surface while held, in pixels. |
curl | number | 0.65 | How strongly the paper curls behind your finger (0 is stiff card, 1 is soft vinyl). |
sheen | boolean | true | A glossy highlight that moves over the sticker as it tilts. |
sheenColor | string | '#fffaf0' | Colour of the highlight. |
sheenStrength | number | 0.6 | Strength of the highlight (0 to 1). |
border | number | 7 | Width of the die-cut edge round the picture in pixels; 0 removes it. |
borderColor | string | '#ffffff' | Colour of the die-cut edge. |
radius | number | 20 | Corner radius in pixels; half the shorter side makes a circle or a pill. |
label | string | – | Accessible name; defaults to alt. |
keyboardStep | number | 10 | Pixels moved per arrow-key press (four times as far with Shift). |
crossOrigin | 'anonymous' | 'use-credentials' | undefined | 'anonymous' | Passed to the image. The curl needs to read the pixels, so images from another host must send CORS headers. Set it to undefined for hosts that do not; the sticker then tilts with plain CSS instead of curling. |
onMove | (position: { x: number; y: number }) => void | – | Called after the sticker has been dropped or nudged, with its position in pixels inside the parent. |
className | string | – | – |
A11y
No accessibility notes written yet.
The notes come with the source when Pro opens.