Ruddy
One stick.
One product, four shades, and the whole page wears the one you pick. Juicy, friendly, loud.
Motion Pop and bounce. A picked shade floods the page from the swatch outward; the bag count jumps.
Styleguide · v2
Tillwork’s design system: one mark that opens like a zip, a few loud colors, one typeface across its width, and a way of moving. Every value on this page comes from one file, src/design/tokens.ts, so the site, its motion and this page can’t drift apart.
The Field: eight capsules in two interlocking combs, like rows in a tilled field, or the teeth of a zip. It looks the same after a half turn, which is why it can spin and land either way. It opens the way the 3D mark does, from the same geometry.
One bar per step of real loading (fonts, the 3D code, the first store’s image), from alternate sides, 170 ms apart. Then the finished mark flies to the header.
Loud, flat and few. Field blue is the brand; tomato is the pull, and every call to act; pollen is a highlight that only ever sits on blue. The stores bring their own colors, so Tillwork’s stay out of their way.
#fbf6ecThe page ground. Warm, never pure white #f1eadbRecessed panels and fields on milk #2934ffThe mark, the furrows, links and the big moments. Text on milk #1a22c9Field when pressed; text on pollen; the tint in every shadow #d7ff3aHighlights on field blue only. Never text on milk #ff4d2eThe pull and every call to act. Soil text on it, never milk #b3240cError text on milk, where tomato itself is too light to read #17130fText, and the dark side of the flip #5e554bSecondary text on milk rgba(41, 52, 255, 0.14)The furrows at rest, and hairlines One family, Archivo, used across its width axis: stretched wide and heavy for display, normal for reading. Type is the loudest thing on the site after the mark, and it moves.
--fontArchivo, subset and renamed. Weight 400 to 900, width 100% to 125%--wideWidth for display type and the wordmark--labelWidth for labels, buttons and navigation--textWidth for running textStores nobody else has.
Stores nobody else has.
Stores nobody else has.
I design and build Shopify stores for design-led brands, from beauty and fragrance to coffee, with a trade side for the shops that stock them.
I design and build Shopify stores for design-led brands, from beauty and fragrance to coffee, with a trade side for the shops that stock them.
I design and build Shopify stores for design-led brands, from beauty and fragrance to coffee, with a trade side for the shops that stock them.
Concept 01 of 03
A 4 px scale. Capsules are the house shape, because the mark is made of them. Shadows are tinted with field blue, never grey, and every layer has a name.
--s-14px--s-28px--s-312px--s-416px--s-524px--s-632px--s-748px--s-864px--s-996px--gutterclamp(16px, 2.8vw, 40px)--sectionclamp(96px, 14vw, 200px)--r-pillButtons, chips, the concept label: the mark’s bars--r-fieldForm fields--r-cardCards and panels--r-frameA store inside the frame--shadow-pressThe thickness of a pull button. Shrinks to 2px when pressed--shadow-liftFloating things: the concept label, a lifted card--shadow-deepA store in its frame--z-furrows0The field behind everything--z-page1Sections and stores--z-stage3The 3D mark, above the page--z-header6Header and the concept label--z-menu20The phone menu--z-loader50The loader--z-cursor60The cursorSnappy and elastic. Things are ploughed in, not faded in: they travel from the left, arrive with a small overshoot, and leave faster than they came. One big motion per screen; everything else supports it.
--ease-ploughTravel: slow to start, decisive to land. The mark, wipes--ease-snapArrivals with a small overshoot. Buttons, chips, the label--ease-outReveals: lines of type, floods--ease-liftExits: quick, and out of the way--d-quick180ms · Hovers and presses--d-base420ms · Entrances of one thing--d-slow900ms · Wipes, floods and lines of type--d-scene1400ms · A whole screen changing: the flip, the loader outrostagger-line90msBetween lines of a headingstagger-item60msBetween items in a groupstagger-bar170msBetween the mark’s barsorderleft to right, top to bottomLike a plough. Lines draw from the left; groups arrive from the topexit0.6An exit takes 60% of its entranceone at a time1One big motion per screen. Everything else supports itEvery control has a state for each thing that can happen to it, and each state moves. Hover these, press them, tab to them. The rows marked “pinned” hold a state still, for review.
A capsule with a pull. The label rolls over on hover, the pull swings, a press sinks the button into its own thickness, and on a mouse it leans toward the pointer.
Pinned states
Links in running text are always underlined. On hover the line is ploughed into furrows under the words. In navigation there’s no line until you point: Concepts · How it works.
That email address looks incomplete.
Every store wears one, the whole time it’s on screen. It says what it is: a concept, not a real brand, on a .example domain.
Concept 01 · Ruddy · not a real brand · ruddy.example
Concept 02 · Small Hours · not a real brand · smallhours.example
Concept 03 · Standing Order · not a real brand · standingorder.example
On a mouse only. A tomato dot; a ring over anything you can press; a label where something needs one; a clear glass lens over the stores. On touch screens there is no cursor, and every control answers the tap instead.
Transparent over the opening screen, a milk capsule once the page moves, out of the way while a store has the screen.
A field-blue flood from the menu button; the links rise one after another. Escape or the button closes it, and focus goes back where it was.
Nothing just appears. Sections and the things in them arrive in one of these ways, and nothing invents its own. With reduced motion, everything is simply there.
Lines rise out of their own masks, one after another.
A band of furrows sweeps across, and the next section is under it.
Click anywhere in here.
Four questions, one optional. It checks itself kindly, says exactly what’s missing, and tells you what happened. This copy is a demo: it goes through every state and sends nothing.
Each concept store has its own small design system, so the three could come from three different studios. None of them is a real brand.
Ruddy
One stick.
One product, four shades, and the whole page wears the one you pick. Juicy, friendly, loud.
Motion Pop and bounce. A picked shade floods the page from the swatch outward; the bag count jumps.
Small Hours
Night Iris
No. 3 · eau de parfum · 50 ml · iris, violet leaf, smoked vanilla
Three scents for the hours after midnight, and a discovery set. Slow, smoky, close to the skin.
Motion Slow and smoky. Long fades, light pooling behind the bottle, the juice moving when it turns.
Standing Order
No.1
Specialty coffee roasted every Monday, by the bag for kitchens and by the kilo for the cafés that pour it. Bright, graphic, morning.
Motion A standing order filling up: bags drop into the weeks and settle, prices roll over like a scale, and the store turns over like a card for cafés.
#c8102e A shade, full bleed. The page is the product#ff7a45 A shade; the one light enough for espresso type#8a2468 A shade#9a5440 A shade#fff0e4 Type and buttons on every shade#8e0a1e A deep version of each shade, for type on cream#2a0f24 The ground: the room with the lights low#f3e8f8 Type#cdb9d6 Secondary type, notes#d9b26f Prices and the one detail that catches the light#7d4bc4 Juice: violet#7c9a3f Juice: green#d0711f Juice: amber#e7bb44 The ground: yellow paper in morning sun#221a16 Type, the No. 1 bag, and the whole wholesale side when the store flips#2f6b52 The No. 2 bag#e2622b The No. 3 bag. Espresso type on it#fbefd5 Cards, and type on the dark side