Chalk, iron and one violet
Updrift's grammar with Biomarkd's own colour, type and voice. DESIGN.md in the repository is the written standard; this page is the same thing, working.
Colour
Range status, results only
Always a word with the colour. Never a warning icon.
Violet has a budget
The mark, the current bar, "now" on a curve, the headline figure, the active choice, progress and links. Never a background, body text, decoration or the primary button.
Type
Three sessions this week, 49.3 tonnes moved. Bench is up 4 kg on last week's estimate, and your next bloods are due on 9 October.
Controls and the mark
A reference range with its two limits and a dot where you sit: the first thing every result shows.
Forms
Real inputs, drawn our way, so every form posts without JavaScript. Try them: the switch's thumb overshoots once, the segment slides, a chip ticks.
Motion
Motion is how the app answers you. Each piece has a still version under reduced motion, and every page is complete before any of it runs. Ideas from transitions.dev by Jakub Antalik, rebuilt in our own CSS.
Spinning figure
ExampleFor a figure that just changed: a new best, a new week. Reels decelerate onto each digit, left to right.
Stacked banners
ExampleWhat just happened, three deep. Hover or tap the stack to fan it out.
Plus button
ExampleThe one way to log anything, from any page. The actions pour out as liquid; Escape or a tap elsewhere closes it.
Saving
The everyday save barely moves; a new best, which is rare, gets a little more. Never confetti: this is health data.
A new best
ExampleA small spring and a ring that widens once. Only for bests, which come a few times a year.
Phone
What makes it feel like an app in the hand. Each still works with a mouse, a keyboard and without JavaScript.
Bottom sheet
ExampleQuick logging rises from the bottom. Drag it down or flick it to close; it resists being pulled up. Without JavaScript the link opens the full page.
Swipe to delete
Example- Weigh-in91.4 kg · 07:42
- Session17.9 t · 18:10
- Weigh-in91.1 kg · yesterday
Swipe a row left on a phone. It only deletes when your finger lifts past two fifths, and Undo brings it back.
Header that shrinks
This pageScroll this page: its big title shrinks away and "Design system" appears in the top bar. Scroll-driven, off the main thread; where a browser cannot, the title simply scrolls.
Safety and loading
Placeholder into content
Example5 results from 14 Sep. Total testosterone above range, haematocrit near the top, the rest in range.
Nothing shows for the first 150 ms; once shown, the placeholder stays 400 ms, then fades into the content.
Panels that open smoothly
ExampleWhy is it above range?
When to test
Results
Bloods
ExampleBest this block
ExampleCharts
Drawn on the server first, so the page is complete without JavaScript; then Updrift's EvilCharts load in the browser and take over, with tooltips and a left-to-right reveal.
Estimated active level
ExampleEstimated active ester, mgMarks on the baseline are doses. A model from half-lives, not a blood result.
Weekly training volume
ExampleBodyweight
ExampleUpdrift's recap format in Biomarkd's colours: one big figure, a week of bars with the best named, stat tiles, one callout and one iron button. The subject line never names a substance, dose or result.