Layout
One focused chapter from the Thorbis interface research. 18 rules. Read the research index for every chapter and focused study.
Layout
- Align optically, not geometrically. When a button has text and an icon, give the icon a hair less padding so the lockup looks centered. Fix the SVG, not the layout, when a shape leans. Inline marks, @handles, swatches, code, sit on the same baseline as the sentence. Same size. Same color as the words. A quiet wash, not a button dropped into the line. Jakub Krehel .
- Deliberate alignment. Every element aligns with something intentionally, a grid, baseline, edge, or optical center. No accidental positioning. Shared edges are how the eye scans.
- Group with space, not lines. Negative space first, background shapes second, separator lines last. The gap between groups is at least 2× the gap within a group.
- Balance contrast in lockups. When text & icons sit side by side, adjust weight, size, spacing, or color so they don’t clash. A 1.5px icon stroke sits with regular text; 2px sits with semibold.
- Work dominates chrome. Navigation supports orientation. The customer’s work, schedule, records, conversations, and money receive visual priority. The sidebar recedes; the work sheet leads.
The sheet is the work. Chrome recedes. - Chrome keeps one measure. Header, nav, and sign-off sit on the document measure, 65–75ch. Only the work may go wider: a mirror, a board, a feed. The location bar does not jump when the record does. Linear keeps the inverted L still while the sheet changes. Cap the measure.
- Density belongs to the work. Linear is dense where comparison matters, lists, boards, schedules. Steve Schoger and Adam Wathan : start with too much space on Showcase; remove it until the workbench fits one more useful row. You don’t have to fill the screen with chrome. You do have to fill it with the job. Refactoring UI (opens in a new tab).Morning board
Tab in. Arrows move. Enter opens. - Responsive coverage. Verify on mobile, laptop, & ultra-wide. Responsive design recomposes; it does not merely shrink desktop. For ultra-wide, zoom out to 50% to simulate.
- Respect safe areas. Account for notches & insets with safe-area variables (opens in a new tab). Content bleeds; controls float inside the margins.
- No excessive scrollbars. Only render useful scrollbars. Fix overflow instead of hiding it. Test with macOS “Show scroll bars: Always”.
- Let the browser size things. Prefer flex/grid/intrinsic layout over measuring in JS. Avoid layout thrash.
- Logical properties, not physical. Use
margin-inline-start,padding-inline-end,text-align: start. Reserve left/right for genuinely physical geometry. - Reserve the space. Images, maps, video, and avatars set
aspect-ratioso nearby work does not jump while they load. A skeleton matches the hole. A missing ratio is layout shift, and layout shift on a dispatch board is a lost row. D-019. From the UI Skills playbook (opens in a new tab). - Peek the next item. A horizontal list that scrolls shows 16–32px of the next card. If the last visible item is flush, it reads as the end. Photos on a job, invoices in a strip, a day of stops: leave a sliver. D-019.
- Fade a list that continues. Where a pane scrolls and the edge would look like a hard clip, fade it with
mask-image. The fade is how you say there is more. Do not use a divider, a chevron, or a drop shadow as that signal. - Overlay is a mix, not a blur. Collect payment, assign a tech, a menu: the board behind them is a solid mix, one step dimmer. Not
backdrop-filter. Blur is expensive and it is costume. Frost on the site header is chrome, not an overlay. A popover grows from the control that opened it. A menu fades; it does not fly off the screen. D-021. - Two rimmed controls keep 12px. Field to commit is 12px. Two chips, a well and a mark, a pair of bordered buttons: 12px between them. Tighter reads as one control. Looser is a new group.
- A full-width commit stays in the sheet. Arrive, Save invoice, Collect: if they go full width they sit in the sheet’s pad, not flush to the phone edge. Edge-to-edge is the sheet, not the button.
I built this for the dispatcher at 7 a.m., the tech in a crawlspace, and the owner closing the books. Quiet chrome. Precise work. I’m still learning. These are the notes.
Applied bookmark research
Reviewed 2026-09-06. These examples reinforce the existing owners; they do not introduce another visual style or claim the product behavior is implemented. Read the 26-source review and access limits.
Make the task easier, not the screen busier
A feature can look complete while the dispatcher still has to reconstruct context or wait for unrelated content.
Start from one person, interruption, and completed task. Keep the current job and its next action usable while optional evidence arrives. Treat the real constraint as part of the brief, not something polished away afterward.
Thorbis example. For assigning a tech, show the job, relevant availability, and the consequence of the assignment. Do not make the dispatcher traverse a marketing-style sequence or a new shell to finish a routine task.
Verify. Walk through the task with representative long and missing records. Check that the essential action remains understandable when optional content is slow or unavailable. Record the result rather than claiming a performance improvement without measurement.
Do not import. No additional shell, feature hero, framework migration, or new dependency. Keep the approved surface role.
Open the product skill · Evidence: Design Engineer Principles; How we think about design; Component Architecture for React Server Components
Preserve the place as the collection grows
Large customer, property, and inspiration collections become expensive to navigate when every inspection loses the current place.
Treat filters, selected records, scroll, and Back behavior as part of the task. Loading a child or optional panel should not reset the whole collection. A saved reference includes enough context to be useful when revisited.
Thorbis example. Open a property from a filtered customer list and return to the same filter and position. On the inspiration wall, reserve the media footprint and retain source credit even when the preview is unavailable.
Verify. Try refresh, Back and Forward, a direct record link, an empty result, a failed preview, and a long collection. Check that late data does not overwrite a draft or move the action under the pointer.
Do not import. No unbounded eager media, private information in shareable URLs, or a local-only storage promise borrowed from Copper.
Open the ecosystem skill · Evidence: 7 Principles of Rich Web Applications; Component Architecture for React Server Components; Philosophy; Copper